一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据处理方法及装置与流程

2021-12-01 01:37:00 来源:中国专利 TAG:


1.本技术涉及数据存储技术,尤其涉及一种数据处理方法、装置、设备、计算机可读存储介质及计算机程序产品。


背景技术:

2.随着互联网的大规模普及和应用,数据量的t级增长让传统的数据存储以及查询方法已不能再满足对这样大规模的数据存储以及实时查询需求。例如目前对于圈定的视频点击或图文浏览数据,按照各种维度聚合分析已经达到亿级别的数据量。
3.相关数据存储或数据查询技术,通常适用于特定数据的存储,如长度固定、类型固定的数据等,如此,限制了数据存储或查询业务的应用场景,同时在存储或查询数据量达到t级甚至亿级时,内存占用大,查询效率低。


技术实现要素:

4.本技术实施例提供一种数据处理方法、装置、设备、计算机可读存储介质及计算机程序产品,能够提高数据处理的响应速度,且能够存储不同属性的属性数据,实现模式自由的数据存储方式。
5.本技术实施例的技术方案是这样实现的:本技术实施例提供一种数据处理方法,包括:获取目标对象的待存储数据,所述待存储数据包括针对目标数据项目的至少一种属性的属性数据;确定所述目标对象对应的目标数据节点;其中,所述目标数据节点包括至少一个用于存储不同数据项目的位置指示数据的数据块,每个所述数据块对应一种属性;存储各所述属性数据至目标存储区域,并确定各所述属性数据在所述目标存储区域中的存储位置;基于各所述属性数据在所述目标存储区域中的存储位置,将各所述属性数据的存储位置对应的位置指示数据,写入所述目标数据节点中相应的数据块。
6.本技术实施例提供一种数据处理装置,包括:获取模块,用于获取目标对象的待存储数据,所述待存储数据包括针对目标数据项目的至少一种属性的属性数据;确定模块,用于确定对应所述目标对象的目标数据节点;其中,所述目标数据节点包括至少一个用于存储不同数据项目的位置指示数据的数据块,每个所述数据块对应一种属性;存储模块,用于存储各所述属性数据至目标存储区域,并确定各所述属性数据在所述目标存储区域中的存储位置;写入模块,用于基于各所述属性数据在所述目标存储区域中的存储位置,将各所
述属性数据的存储位置对应的位置指示数据,写入所述目标数据节点中相应的数据块。
7.上述方案中,所述确定模块,还用于获取所述目标对象的对象标识,并获取数据节点组中各数据节点的位置与对象标识之间的映射关系;根据所述目标对象的对象标识及所述映射关系,确定相应数据节点在所述数据节点组中的目标位置;将所述数据节点组中与所述目标位置相对应的数据节点,作为所述目标对象对应目标数据节点。
8.上述方案中,所述确定模块,还用于当所述目标数据节点中包括第一元数据块,且所述第一元数据块存储有其它对象对应的其它对象标识时,创建用于存储所述目标对象的对象标识的第二元数据块、以及所述第二元数据块关联的数据块;连接所述第二元数据块与所述第一元数据块。
9.相应的,上述方案中,所述写入模块,还用于将各所述属性数据的存储位置对应的位置指示信息写入所述第二元数据块关联的数据块。
10.上述方案中,所述写入模块,还用于获取各所述属性数据对应的属性值;将各所述属性数据对应的属性值,分别与相应数据块中各数据项目的属性值进行比较,得到比较结果;基于所述比较结果,将各所述属性数据的存储位置对应的位置指示信息至所述目标数据节点中相应的数据块。
11.上述方案中,所述写入模块,还用于获取所述数据块对应位置指示信息的容量阈值;当所述数据块中填充的位置指示信息的数量达到所述容量阈值时,分别构建对应各所述数据块的第一数据块副本以及第二数据块副本;针对各所述数据块,将所述数据块中存储的多条位置指示信息划分成第一部分及第二部分,并存储所述第一部分至所述第一数据块副本,存储所述第二部分至所述第二数据块副本;针对各所述属性数据,从相应数据块的第一数据块副本和第二数据块副本确定目标数据块;将各所述属性数据的存储位置对应的位置指示信息写入相应的所述目标数据块。
12.上述方案中,所述写入模块,还用于当所述多条位置指示信息构成依据属性值大小排序的位置指示信息序列时,从所述位置指示信息序列中第一个位置指示信息开始,依次进行位置指示信息选取,直至选取的位置指示信息的数量为目标数量,并将选取的位置指示信息作为所述第一部分,将未选取的位置指示信息作为所述第二部分。
13.上述方案中,所述写入模块,还用于当所述第一数据块副本及所述第二数据块副本中的位置指示信息,依据相应数据项目的属性值排序存储时,获取所述属性数据对应的属性值;将所述属性数据对应的属性值和所述第一数据块副本中的最大属性值进行比较,得到第一比较结果,并将所述属性数据对应的属性值和所述第二数据块副本中的最小属性值进行比较,得到第二比较结果;根据所述第一比较结果及所述第二比较结果,从第一数据块副本和第二数据块副
本中确定目标数据块。
14.上述方案中,所述目标数据节点归属于包括多个数据节点的数据节点组,所述数据节点组包括至少两个子节点组,每个所述子节点组对应一个处理线程所述写入模块,所述写入模块,还用于确定所述目标数据节点归属的目标子节点组,以及所述目标子节点组对应的目标处理线程;通过所述目标处理线程,将各所述属性数据的存储位置对应的位置指示信息,写入至所述目标数据节点中相应的数据块。
15.上述方案中,所述数据处理装置,还可以包括查询模块,所述查询模块用于响应于第一对象对应目标属性的数据查询请求,创建与所述第一对象相对应的数据查询线程;通过所述数据查询线程,确定数据节点组中对应所述第一对象的第一数据节点,以及所述第一数据节点中对应所述目标属性的数据块;读取对应所述目标属性的数据块中存储的第一数据项目,以及相应的排序;返回读取的第一数据项目及相应的排序,以基于所述排序展示所述第一数据项目。
16.上述方案中,所述数据处理装置,还可以包括删除模块,所述删除模块用于响应于第二对象针对第二数据项目的数据删除指令,确定数据节点组中对应所述第二对象的第二数据节点;确定所述第二数据节点的各数据块中存储的所述第二数据项目的位置指示信息;根据确定的位置指示信息,删除所述第二数据项目对应的属性数据,并删除所述第二数据节点的各数据块中存储的所述第二数据项目的位置指示信息。
17.本技术实施例提供一种电子设备,包括:存储器,用于存储可执行指令;处理器,用于执行所述存储器中存储的可执行指令时,实现本技术实施例提供的数据处理方法。
18.本技术实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本技术实施例提供的数据处理方法。
19.本技术实施例提供一种计算机程序产品,包括计算机程序或指令,计算机程序或指令被处理器执行时,实现本技术实施例提供的数据处理方法。
20.本技术实施例具有以下有益效果:本技术实施例通过构建包括多个数据节点,且每个数据节点包括多个数据块的数据节点组,存储目标对象的待存储数据的位置指示信息,如此,能够及时响应数据存储操作,提高数据存储操作的效率;同时,由于待存储数据包括至少一种属性的属性数据,如此,能够存储各种不同属性的属性数据,实现模式自由的数据存储方式。
附图说明
21.图1是本技术实施例提供的数据处理系统的架构示意图;图2是本技术实施例提供的电子设备的结构示意图;图3是本技术实施例提供的数据处理方法的流程示意图;图4a是本技术实例提供的目标对象的待存储数据示意图;
图4b是本技术实施例提供的待存储数据的属性数据示意图;图5是本技术实施例提供的数据的存储结构示意图;图6a是本技术实施例提供的元数据块对应的数据结构示意图;图6b是本技术实施例提供的数据块对应的数据结构示意图;图7是本技术实施例提供的目标数据节点的确定方法流程图;图8是本技术实施例提供的目标对象的元数据块查找方式流程图;图9是本技术实施例提供的目标对象对应的目标数据节点示意图;图10是本技术实施例提供的位置指示信息填充流程图;图11是本技术实施例提供的数据块的填充过程流程图;图12是本技术实施例提供的数据块副本示意图;图13是本技术实施例提供的数据块副本构建流程示意图;图14是本技术实施例提供的数据查询处理流程示意图;图15是本技术实施例提供的数据删除处理流程图;图16是本技术实施例提供的标记位设置示意图;图17是本技术实施例提供的通用业务场景中数据存储结构示意图。
具体实施方式
22.为了使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术作进一步地详细描述,所描述的实施例不应视为对本技术的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本技术保护的范围。
23.在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
24.如果申请文件中出现“第一/第二”的类似描述则增加以下的说明,在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本技术实施例能够以除了在这里图示或描述的以外的顺序实施。
25.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本技术实施例的目的,不是旨在限制本技术。
26.对本技术实施例进行进一步详细说明之前,对本技术实施例中涉及的名词和术语进行说明,本技术实施例中涉及的名词和术语适用于如下的解释。
27.1)哈希桶:实际上,哈希桶是解决哈希表冲突的一种方法。哈希表中同一个位置可能存有多个元素,为应对哈希冲突问题,将哈希表中的每个位置表示一个哈希桶。关键码通过哈希算法被哈希到相同的孔,在发生冲突的孔设置一个链表,这个孔下面的链表就跟个桶一样盛着元素。
28.2)键

列表(klist,key list):存储的数据是键

值(kv,key value)类型,但是值是一个列表,并且需要在存储的时候基于值中的某个关键属性或标签进行排序。在klist存储里的list中每个元素会包含多个标签,可以采用tag表示,其中有一个tag是用来写入的
时候控制排序的,这个叫主键属性或标签,记作主键tag。
29.相关键

值或键

列表技术中,往往要求存储的数据是定长的,且数据类型是固定的,无法应用于各种数据类型,限制了数据处理方法的业务使用场景,另外相关技术多是采用单线程加锁的方式实现数据存储的,在数据存储性能上无法发挥系统的性能极限。另外,也存在基于kv的实现,将数据存储以及数据计算分离,但是这种技术在数据读写时均需要进行多级索引操作,容易引起读写扩散,输入输出操作频繁,时延长,及时响应效果差的问题。
30.基于此,本技术实施例提供一种数据处理方法、装置、设备和计算机可读存储介质,能够提高数据处理的响应速度,且能够存储不同属性的属性数据,实现模式自由的数据存储方式。
31.下面说明本技术实施例提供的数据处理设备的示例性应用,本技术实施例提供的设备可以实施为笔记本电脑,平板电脑,台式计算机,机顶盒,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)、智能手表、智能家电、车载终端等各种类型的用户终端,也可以实施为服务器。下面,将说明设备实施为服务器时示例性应用。
32.参见图1,图1是本技术实施例提供的数据处理系统的架构示意图,为实现支撑一个数据处理应用,在数据处理系统100中,终端(示例性示出了终端400

1和终端400

2)通过网络300连接服务器200,网络300可以是广域网或者局域网,又或者是二者的组合。
33.在一些实施例中,服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(cdn,content delivery network)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端400可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、智能家电、车载终端等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本技术实施例中不做限制。
34.终端400用于发送针对目标数据项目的数据处理请求至服务器200。
35.服务器200用于响应于目标对象针对目标数据项目的数据处理请求,获取目标对象的待存储数据,待存储数据包括针对目标数据项目的至少一种属性的属性数据;在用于存储位置指示信息的数据节点组中,确定对应目标对象的目标数据节点;其中,目标数据节点包括至少一个数据块,每个数据块对应一种属性,用于存储不同数据项目的位置指示信息;存储各属性数据至目标存储区域,并确定各属性数据所处目标存储区域中的位置;基于各属性数据所处目标存储区域中的位置,分别填充各属性数据的位置指示信息至目标数据节点中相应的数据块。
36.在一些实施例中,终端部署有针对目标数据项目的客户端(示例性示出了客户端410

1和客户端410

2),在实际实施时,客户端可以是视频播放客户端、音乐播放客户端等,目标对象基于针对目标数据项目的客户端向服务器发送数据处理请求,服务器获取目标对象的待存储数据,待存储数据包括针对目标数据项目的至少一种属性的属性数据;确定对应目标对象的目标数据节点;其中,目标数据节点包括至少一个数据块,每个数据块对应一种属性,用于存储不同数据项目的位置指示信息;存储各属性数据至目标存储区域,并确定
各属性数据所处目标存储区域中的位置;基于各属性数据所处目标存储区域中的位置,分别填充各属性数据的位置指示信息至目标数据节点中相应的数据块。
37.本技术实施例提供的数据处理方法还可以应用于云技术、人工智能、智慧交通、辅助驾驶等各种场景。以云技术场景为例,云服务器接收来自云网络中终端设备发送的针对目标数据项目的数据处理请求,云服务器获取目标对象的待存储数据的各属性数据,将各属性数据存储至云存储器,并获取属性数据在云存储器对应的存储位置,并将各属性数据的存储位置对应的位置指示信息,写入至目标数据节点中相应的数据块。
38.接下来对本技术实施例提供的用于实施上述数据处理方法的电子设备进行说明,参见图2,图2是本技术实施例提供的电子设备的结构示意图,在实际应用中,电子设备500可以实施为图1中的服务器,以电子设备为图1所示的服务器200为例,对实施本技术实施例的数据处理方法的电子设备进行说明。图2所示的电子设备500包括:至少一个处理器510、存储器550、至少一个网络接口520和用户接口530。电子设备500中的各个组件通过总线系统540耦合在一起。可理解,总线系统540用于实现这些组件之间的连接通信。总线系统540除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统540。
39.处理器510可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(dsp,digital signal processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
40.用户接口530包括使得能够呈现媒体内容的一个或多个输出装置531,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口530还包括一个或多个输入装置532,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
41.存储器550可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器550可选地包括在物理位置上远离处理器510的一个或多个存储设备。
42.存储器550包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(rom,read only memory),易失性存储器可以是随机存取存储器(ram,random access memory)。本技术实施例描述的存储器550旨在包括任意适合类型的存储器。
43.在一些实施例中,存储器550能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
44.操作系统551,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;网络通信模块552,用于经由一个或多个(有线或无线)网络接口520到达其他计算设备,示例性的网络接口520包括:蓝牙、无线相容性认证(wifi)、和通用串行总线(usb,universal serial bus)等;呈现模块553,用于经由一个或多个与用户接口530相关联的输出装置531(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户
接口);输入处理模块554,用于对一个或多个来自一个或多个输入装置532之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
45.在一些实施例中,本技术实施例提供的数据处理装置可以采用软件方式实现,图2示出了存储在存储器550中的数据处理装置555,其可以是程序和插件等形式的软件,包括以下软件模块:获取模块5551、确定模块5552、存储模块5553、写入模块5554,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
46.在另一些实施例中,本技术实施例提供的数据处理装置可以采用硬件方式实现,作为示例,本技术实施例提供的数据处理装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本技术实施例提供的数据的处理方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(asic,application specific integrated circuit)、dsp、可编程逻辑器件(pld,programmable logic device)、复杂可编程逻辑器件(cpld,complex programmable logic device)、现场可编程门阵列(fpga,field

programmable gate array)或其他电子元件。
47.接下来说明本技术实施例提供的数据处理方法。在一些实施例中,本技术实施例提供的数据处理可以由终端或服务器单独实施,或者由终端及服务器协同实施。以服务器实施为例,参见图3,图3是本技术实施例提供的数据处理方法的流程示意图,将结合图3示出的步骤进行说明。
48.在步骤101中,服务器获取目标对象的待存储数据,待存储数据包括针对目标数据项目的至少一种属性的属性数据。
49.在一些实施例中,目标数据项目可以是针对具体应用场景实现具体应用的应用程序,目标对象可以是指针对具体应用场景的客户端产生的用户数据,待存储数据一般是指用户在具体场景的应用程序的客户端操作产生的数据。
50.在实际实施时,以用户观看视频播放客户端的视频信息为例,这里的目标数据项目可以理解成视频播放客户端,目标对象为通过视频播放客户端观看视频的用户,待存储数据可以是用户通过视频客户端观看视频时产生的至少一条历史数据记录(可以理解为用户的观看历史记录,即每个用户都有对应的观看历史记录)。其中,单条观看历史记录对应的属性数据可以包括观看时间,视频时长,视频热度值,总播放量,视频作者等级,视频质量等属性。
51.示例性地,以用户观看视频播放客户端的视频信息为例,待存储数据为用户的观看历史,参见图4a,图4a是本技术实例提供的目标对象的待存储数据示意图,用户标识(用户id)9988765代表的用户通过视频播放客户端观看的视频列表,包括视频编号(视频id,记作vid)edft3324、hhjki6783、hju980、sdf2345、hju9830等对应的视频信息,这些视频编号对应的视频信息是用户标识9988765对应的目标对象对应的待存储数据。
52.参见图4b,图4b是本技术实施例提供的待存储数据的属性数据示意图,视频编号为edft3324被图4a中的用户id为9988765的用户观看时记录下来的属性数据,其中有观看时间,视频时长,视频热度值,总播放量,视频作者等级,视频质量等属性值。
53.需要说明的是,上述示例中,用户的观看历史就是一个典型的klist存储场景,即
存储的数据是key

value(kv)类型,但是value是一个列表,并且需要在存储的时候基于value中的某个属性进行排序。承接上例,每个用户uid(可以理解成key),都对应有一个观看历史的列表即kv中的value是一个列表(list)。
54.在实际实施时,为了保存各klist场景对应的数据,可以设计用于存储klist场景对应的数据的存储结构,参见图5,图5是本技术实施例提供的数据的存储结构示意图,图中所示存储结构包括数据节点组(编号1)、各数据节点组的节点号所关联的数据节点(编号2)、各数据节点对应的多个数据块(编号3)。
55.对数据节点组进行说明,在一些实施例中,服务器预先初始化一个包含n个元素(节点)的内存区域,n是大于0的整数。并把目标对象的对象标识(key值)通过映射关系f转化成一个0至n

1的整数,确定对应的内存区域的位置。需要说明的是,这里预先初始化的内存区域的大小是固定的。
56.在实际实施时,可以将包含n个元素的内存区域看作是一个哈希桶,如图5中编号1,哈希桶包含n个元素,根据实际情况设置相应哈希算法h,将目标对象的对象标识(uid)输入至哈希算法h,输出整数结果r,其中,0≤r≤n

1,即r=h(uid)。
57.示例性地,图5所示,编号2中示出的对象标识1、对象标识2以及对象标识3都是通过哈希算法h,映射到编号1示出的哈希桶的0号位置。
58.结合图5继续对数据节点进行说明,数据节点通过映射关系得到的,在实际实施时,通过哈希算法,将对象标识映射为0

n之间的整数时,往往会产生冲突(哈希冲突)。图5所示,编号2中示出的对象标识1、对象标识2以及对象标识3通过哈希算法h,均映射到编号1示出的哈希桶的0号位置,为了解决这种冲突问题,常常把哈希桶中的每个位置元素做成一个链表,如此,哈希桶中任意一个位置都可以通过链表的形式链接多个对象标识。其中,任意一个数据节点可链接多个元数据块(也可称子数据节点,如图5中编号2示出的3个元数据块),元数据块对应的数据结构中至少包括目标对象的对象标识、目标对象的待存储数据的记录总条数、以及至少一个存储位置指示信息的数据块。
59.在实际实施时,可以根据实际情况,以及使用的程序开发语言,设置数据结构中各变量的类型。
60.示例性地,参见图6a,图6a是本技术实施例提供的元数据块对应的数据结构示意图,图中使用c语言将元数据块定义为一个结构体类型(struct)的数据结构datanode,结构体中至少包括一个字符类型的对象标识(uid)、整数类型的记录总条数(allcount)以及一个指向第一个数据块的指针类型(datablock* data)。
61.对数据块进行说明,在一些实施例中,每个元数据块中的数据指针指向用于存储位置指示信息的第一个数据块。参见图6b,图6b是本技术实施例提供的数据块对应的数据结构示意图,图中示出的数据结构至少包括以下变量:已用数量(表示当前数据块已存储的位置指示信息的数量)、标记位、主键属性的属性最大值、主键属性的属性最小值、至少一个待存储数据对应的位置指示信息。需要说明的是,各数据块的容量阈值是相同的,且标记位的长度不小于数据块的容量阈值。另外,主键属性是目标对象的待存储数据包括的至少一种属性,主键属性的属性值是可以进行排序的,即主键属性的属性值存在大小关系、或者属性值存在时间先后关系等,并且待存储数据可以根据主键属性的属性值进行排序。
62.在实际实施时,可以根据实际情况,以及实际使用的程序开发语言,设置数据块对
应的数据结构中各变量的类型,并从待存储数据包括的至少一个属性中选取合适的主键属性。
63.示例性地,参见图6b,图中使用c语言将数据块(datablock)定义为一个结构体类型(struct)的数据结构datablock,datablock结构体中至少包括一个数值类型的已用数量(usedcount)、数组类型的标记位(usedbitmap)、数值类型的主键属性的属性最大值(tag_max)、数值类型的主键属性的属性最小值(tag_min)、指针数组类型的待存储数据对应的位置指示信息(dataitem*),并设置指针数组的大小为64,由此可知数据块的容量阈值是64,同时也表明数据块能够存储的位置指示信息的数量为64以及指向下一个数据块的指针类型(datablock* data)。
64.在步骤102中,确定目标对象对应的目标数据节点,其中,目标数据节点包括至少一个数据块,每个数据块对应一种属性,用于存储不同数据项目的位置指示信息。
65.在一些实施例中,用于存储位置指示信息的数据节点组是固定大小的存储空间,避免了动态内存的分配与释放,同时预分配的节点,在实际使用过程中,能够达到比较高的利用率。当数据节点组包含n个元素(数据节点)时,可以将单个目标对象的对象标识映射到数据节点组的n个元素的任意一个元素。
66.在一些实施例中,参见图7,图7是本技术实施例提供的目标数据节点的确定方法流程图,图3示出的步骤102可以通过步骤1021至步骤1023实现,将结合各步骤进行说明。
67.步骤1021,服务器获取目标对象的对象标识,并获取数据节点组中各数据节点的位置与对象标识之间的映射关系。
68.在实际实施时,数据节点组可以是服务器内存中固定大小的存储空间,服务器在接收到数据处理请求(此处是数据存储请求)时,启动用于处理数据存储的线程(写线程),解析数据处理请求中携带的目标对象的对象标识,并获取服务器预设设置的映射关系,这里的映射关系可以将目标对象的对象标识映射到数据节点组包含的任意元素。
69.示例性地,数据节点组包含n个元素,直接将每个元素的值记录为数字{0,1,2,
……
,n},则可以通过相关技术中的哈希算法,直接将对象标识映射成{0,1,2,
……
,n}中任意一个数字,其中哈希算法的设置可以根据实际情况从相关技术中进行选择,本技术实施例不对哈希算法的具体形式做限制。
70.步骤1022,根据目标对象的对象标识及映射关系,确定相应数据节点在数据节点组中的目标位置。
71.示例性地,包含1000个元素的数据节点组(哈希桶),位置指示信息从0至999顺序分布,目标对象a的对象标识,通过预设映射关系(哈希算法),得到位置指示信息14,说明目标对象a在数据节点组中的位置指示信息为14。
72.步骤1023,将数据节点组中与目标位置相对应的数据节点,作为目标对象对应的目标数据节点。
73.承接上例,将数据节点组中位置指示信息为14的目标位置相对应的数据节点作为目标对象a的目标数据节点。
74.在步骤103中,存储各属性数据至目标存储区域,并确定各属性数据所处目标存储区域中的位置。
75.在实际实施时,服务器的写线程,在服务器的物理存储区域中存储待存储数据的
属性数据,并确定目标存储区域对应的实际内存地址。
76.需要说明的是,此时在目标存储区域存储的数据是将待存储数据的属性数据经过序列化操作后得到的序列化数据。
77.在实际实施时,对待存储数据的属性数据进行序列化操作,可以采用相关技术中的二进制数据传输协议对数据进行序列化,本技术实施例不对二进制数据传输协议做限制。
78.在步骤104中,基于各属性数据在目标存储区域中的存储位置,将各属性数据的存储位置对应的位置指示信息写入目标数据节点中相应的数据块。
79.在一些实施例中,根据属性数据在目标存储区域中的存储位置,设置与该存储位置对应的位置指示信息,并将各属性数据的存储位置对应的位置指示信息写入至目标数据节点中相应的数据块。
80.在实际实施时,目标存储区域可以是在内存存储空间中的实际存储地址,设置指向各属性数据实际存储地址的地址指针,将各地址指针作为各属性数据对应的位置指示信息,并用各地址指针填充目标数据节点中的数据块。参见图6b,是将地址指针作为数据块的数据结构中的item指针填充至数据块中。也就是说,在实际应用中,数据块中存储的item信息可以是item指针,item指针指向用于存储待存储数据的实际存储地址,即在数据块中执行插入、删除操作时,实际上是针对item指针的插入、删除操作,不是直接操作待存储数据,如此,可以实现快速的增删,提高处理效率。
81.对目标数据块的选择进行说明,在一些实施例中,在确定目标数据节点之后,由于同一个数据节点,可能会包含多个元数据块,在确定待存储数据的所在的元数据块时,首先是获取与目标数据节点相关联的所有元数据块,并获取各元数据块中存储的对象标识,将目标对象的对象标识与各元数据块的对象标识进行匹配,匹配一致时,说明目标数据节点关联的元数据块中,存在目标对象对应的元数据块,匹配不一致时,说明目标数据节点关联的元数据块中,不存在目标对象对应的元数据块。若目标数据节点关联的元数据块中不存在目标对象对应的元数据块,可以创建新的元数据块,并采用链式存储方式将新的元数据块与已有元数据块进行连接。参见图8,图8是本技术实施例提供的目标对象的元数据块查找方式流程图,结合图8示出的步骤进行说明。
82.步骤201,当目标数据节点中包括第一元数据块,第一元数据块存储有其它对象对应的其它对象标识时,创建用于存储目标对象的对象标识的第二元数据块、以及第二元数据块关联的数据块。
83.示例性地,参见图9,图9是本技术实施例提供的目标对象对应的目标数据节点示意图,如图中编号a所示,此时位置指示信息为14对应的数据节点后暂无链接的元数据块(也可以称为子数据节点),则新增一个元数据块,并将新增的元数据块链接在目标数据节点14上。如图中编号b所示,此时目标数据节点14已经存在链接的至少一个元数据块(图中编号b

1所示的2个元数据块),且存在与目标对象a匹配的元数据块(图中编号b
‑1‑
1),则将编号b
‑1‑
1对应的元数据块作为目标对象a的目标元数据块。如图中编号c所示,此时目标数据节点14存在链接的至少一个元数据块(图中编号c

1所示的2个元数据块),但不存在与目标对象a匹配的元数据块,则需要创建新的元数据块(图中编号c
‑1‑
2所示)作为目标对象a的目标元数据块,并将编号c
‑1‑
2所示的元数据块链接在编号c
‑1‑
1所示的元数据块后。
84.步骤202,采用链式存储方式,连接第二元数据块与第一元数据块。
85.在实际实施时,将多个元数据块采用链式存储的方式连接在一起,如此,数据节点组中各数据节点(位置)都可以链接多个元数据块,能够有效解决位置碰撞问题。其中,在对各元数据块进行链式存储时,各元数据可以包括一个指向前一个数据块的前向指针(front指针)以及一个指向下一个数据块的后向指针(next指针),如此,各元数据块可以首尾相连,形成元数据块对应的链,实现链式存储。需要说明的是,当元数据块是当前链的最后一个(尾部)元数据块时,next指针可以为空(null),当元数据块是当前链的第一个(首部)元数据块时,front指针可以指向数据节点的位置信息。
86.示例性地,参见图5中的编号2所示的3个元数据块都链接到数据节点组中位置为0的数据节点。其中对象标识1(id1)所在的元数据块为数据节点(0)对应的元数据块链上的第一个元数据块,其对应的front指针指向数据节点(0),next指针指向对象标识2(id2)所在的元数据块;对象标识2(id2)所在的元数据块是元数据块链上的中间元数据块,其对应的front指针指向对象标识1(id1)所在的元数据块,next指针指向对象标识3(id3)所在的元数据块;对象标识3(id3)所在的元数据块为元数据块链上的最后一个元数据块,其对应的front指针指向对象标识2(id2)所在的元数据块,next指针为空指针(null)。
87.在确定各属性数据所处所述目标存储区域中的位置后,需要执行步骤203进行位置指示信息的填充操作。
88.步骤203,将各属性数据的位置信息对应的位置指示信息写入第二元数据块关联的数据块。
89.在一些实施例中,填充各属性数据的位置指示信息至数据块时,由于数据块中的位置指示信息存储是有顺序关系的,因而,在进行位置指示信息填充时,需要根据待填充的属性数据与数据块中已填充的位置指示信息对应的属性值进行比较,然后基于比较结果,将待填充的属性数据对应的位置指示信息填充至数据块中。参见图10,图10是本技术实施例提供的位置指示信息填充流程图,结合图10示出的步骤进行说明。
90.步骤1041,获取各属性数据对应的属性值。
91.在实际实施时,数据块中存储的各位置指示信息是按照主键属性的属性值的顺序关系进行存储的,即各数据块包含的是一个位置指示信息序列,位置指示信息的排序方式是由主键属性的属性值决定的。
92.示例性地,以用户u在视频播放客户端的观看历史记录为例,参见图4b,观看历史记录包含多个属性的属性值,当以观看时间作为主键属性时,确定该条观看历史记录对应的位置指示信息的数据块d,数据块d中存储的针对用户u对应的观看历史记录的位置指示信息是可以按照观看时间的时长降序存储或按照观看时间的时长升序存储。
93.步骤1042,将各属性数据对应的属性值,分别与相应数据块中各数据项目的属性值进行比较,得到比较结果。
94.在一些实施例中,进行数据存储(数据写操作)时,是从元数据块对应的第一数据块依次存储的,由于数据块的容量是固定的,在一个数据块存储的位置指示信息达到容量阈值时,创建新的数据块继续写入。当待存储数据对应的元数据块是新增的元数据块,会同时创建该新元数据块对应的第一个数据块,并将待存储数据对应的位置指示信息写入第一个数据块,并实时更新元数据块变量信息:总数(allcount=1),以及数据块中的变量信息:
已用数量(usedcount=1)、主键属性最大值(tag_max=当前待存储数据的主键属性的属性值)、主键属性最小值(tag_min=当前待存储数据的主键属性的属性值)。
95.在一些实施例中,当待存储数据对应的数据块是已经存在的数据块且数据块未满(位置指示信息的数量未达到数据块的容量阈值)时,根据主键属性的属性值的顺序关系,使用相关插入排序算法(如直接插入排序算法、冒泡排序算法等),将待存储数据的位置指示信息存储至数据块,且实时更新元数据块变量信息:allcount,以及数据块中的变量信息:usedcount、tag_max,tag_min。
96.步骤1043,基于比较结果,将各属性数据的存储位置对应的位置指示信息,写入目标数据节点中相应的数据块。
97.在一些实施例中,当目标数据节点中相应的数据块已满时,通过构建当前数据块对应的数据块副本的方式,在数据块副本中填充待存储数据对应的位置存储信息。参见图11,图11是本技术实施例提供的数据块的填充过程流程图,结合图11示出的步骤进行说明。
98.步骤301,服务器获取数据块对应位置指示信息的容量阈值。
99.在实际实施时,服务器中用于写操作的线程,获取预先设置的数据块的容量阈值,各数据块的容量阈值是相同的,并获取数据块中已用数量(usedcount)。
100.步骤302,当数据块中填充的位置指示信息的数量达到容量阈值时,分别构建对应各数据块的第一数据块副本以及第二数据块副本。
101.在实际实施时,当数据块的已用数量与数据块的容量阈值相等时,说明数据块已满,此时需要创建数据块的两个数据结构完全相同的数据块副本(第一数据块副本以及第二数据块副本)。
102.示例性地,参见图12,图12是本技术实施例提供的数据块副本示意图,图中编号1所示的数据块(原数据块)已满,在有数据存储需求时,新建编号1对应的数据块的两个数据块副本,编号1

1所示的数据块副本以及编号1

2所示的数据块副本。两块数据块副本与原数据块的数据结构完全相同,如原数据开的容量为64时,则数据块副本的容量也是64。
103.步骤303,针对各数据块,将数据块中存储的多条位置指示信息划分成第一部分及第二部分,并存储第一部分至第一数据块副本,存储第二部分至第二数据块副本。
104.在一些实施例中,可以通过以下方式实现将数据块中的位置存储指示信息写入数据块副本:当多条位置指示信息构成依据属性值大小排序的位置指示信息序列时,从位置指示信息序列中第一个位置指示信息开始,依次进行位置指示信息选取,直至选取的位置指示信息的数量为目标数量,并将选取的位置指示信息作为第一部分,将未选取的位置指示信息作为第二部分。
105.在实际实施时,获取原数据块中的位置指示信息组成的位置指示信息序列,当位置指示信息序列升序(或降序)排序时,从位置指示信息序列中第一个位置指示信息开始,将位置指示信息对应的主键属性的属性值小于(或大于)待存储数据对应的主键属性的属性值时,将原数据块中位置指示信息复制到第一数据块副本,位置指示信息序列中剩余的位置指示信息复制到第二数据块副本,并实时更新各数据块副本中的usedcount、tag_max,tag_min等变量信息。
106.示例性地,假设原数据块中对应的位置指示信息序列包含的位置指示信息为64个,按照升序排序时,位置指示信息序列中存在23个位置指示信息对应的主键属性的属性
值小于待存储数据中主键属性的属性值,则将这23个位置指示信息写入第一数据块副本,并更新usedcount(23)、tag_min(位置指示信息序列中第1个位置指示信息对应的主键属性的属性值)、tag_max(位置指示信息序列中第23个位置指示信息对应的主键属性的属性值)。并将剩余的41个位置指示信息写入第二数据块副本,并更新usedcount(41)、tag_min(位置指示信息序列中第24个位置指示信息对应的主键属性的属性值)、tag_max(位置指示信息序列中第64个位置指示信息对应的主键属性的属性值)。
107.步骤304,针对各属性数据,选择相应数据块的第一数据块副本或第二数据块副本作为目标数据块。
108.在一些实施例中,参见图13,图13是本技术实施例提供的数据块副本构建流程示意图,图11示出的步骤304可以通过步骤3041至步骤3044实现,将结合各步骤进行说明。
109.步骤3041,当第一数据块副本及第二数据块副本中的位置指示信息,依据相应数据项目的属性值排序存储时,获取属性数据对应的属性值。
110.步骤3042,将属性数据对应的属性值和第一数据块副本中的最大属性值进行比较,得到第一比较结果,步骤3043,将属性数据对应的属性值分别和第二数据块副本中的最小属性值进行比较,得到第二比较结果。
111.步骤3044,根第一比较结果及第二比较结果,从第一数据块副本和第二数据块副本中确定目标数据块。
112.示例性地,以用户对象在视频播放客户端的观看历史记录为例,主键属性为观看时间,存在一条观看历史记录v的观看时间t1是2021

09

15 06:12:11,此时数据块副本1中存储的最接近t1观看时间t2是2021

09

12 23:10:10,数据块副本2中存储的最接近t1观看时间t3是2021

09

15 10:08:24。通过计算得到的比较结果1为t1

t2,比较结果2为t3

t1,由此,可以确定更接近t1的观看时间是t3,因此,可以将观看历史记录v对应的位置指示信息存入数据块副本2中,即将数据块副本2作为观看历史记录v的目标数据块。
113.步骤305,将各属性数据的存储位置对应的位置指示信息写入相应的目标数据块。
114.这里,将各属性数据的存储位置对应的位置指示信息写入上述步骤304确定的目标数据块中。
115.在一些实施例中,对于多条待存储数据的写入操作时,为了加快数据写入的效率,可以对数据节点组包括的多个子节点组各分配一个处理线程,并采用多线程并行执行的方式执行写入操作。具体可以通过以下方式实现:服务器确定目标数据节点归属的目标子节点组、以及目标子节点组对应的目标处理线程;通过目标处理线程,将各属性数据的存储位置对应的位置指示信息,写入至目标数据节点中相应的数据块。
116.在实际实施时,数据节点组所包括的多个子节点组,是对数据节点组中的数据节点进行分组得到的。其中,对多个数据节点进行分组的方式可以是从数据节点组中随机选取一定数量的数据节点组成一个子节点组,也可以是按顺序对数据节点进行分组,还可以是其他分组方式,但所有的分组方式要保证各子节点组中不包含相同的数据节点。需要说明的是,能够对数据节点进行分组的原因在于数据节点所归属的数据节点组的大小是固定的。然后为每个子节点组分配一个处理线程,各处理线程独立处理各自对应的子节点组,即各处理线程相互独立,互不影响。在对待存储数据进行存储时,可以先获取待存储数据所对应的目标节点所归属的目标子节点组、以及目标子节点组对应的目标处理线程,然后通过
所述目标处理线程,将待存储数据对应的属性数据写入相应的数据块。
117.示例性地,假设数据节点组a包含100个数据节点,各数据节点对应的位置信息从0

99,可以按照每次随机选取20个数据节点的划分方式,将数据节点组a划分成5组,也按照位置信息{0

19、20

39、40

59、60

79、80

99}划分成5组,为5组子节点组各分配一个处理线程,可记作{thread1、thread2、thread3、thread4、thread5}。假设按顺序划分,每组20个数据节点得到5个子节点组{组1、组2、组3、组4、组5},待存储数据d对应的目标节点的位置是18,则对应的目标节点组时组1,对应的目标处理线程是thread1,则通过thread1,将带存储数据d的属性数据写入目标节点中相应的数据块。通过上述对数据节点进行分组,得到多个子节点组,然后为每个子节点组分配一个处理线程,能够实现多线程并行处理数据读写的方式,提高数据读写效率,同时,由于各个处理线程相互独立,不存在对共享资源的争抢情况,也就不需要通过加锁的方式实现对共享资源的使用,因此,在数据处理过程中可以实现多线程的无锁读写。
118.通过上述步骤101至步骤104实现的数据存储方式,能够有效减少各线程在执行存储操作时锁的开销,同时能够有效降低对内存空间的频繁申请,提高数据存储效率。
119.在实际应用中,基于上述存储的数据,会存在相应的数据查询和数据删除的业务需求,其中数据查询又可以分为普通查询、分页查询等不同的查询方式,数据删除也可以包括实时删除、延迟删除(或称标记删除)。
120.对数据查询相关的业务需求进行说明,当服务器接收到针对属性数据的数据查询请求时,服务器中负责查询操作的线程会执行相应的查询操作。参见图14,图14是本技术实施例提供的数据查询处理流程示意图,结合图14示出的步骤,对数据的查询操作进行说明。
121.步骤401,服务器响应于第一对象对应目标属性的数据查询请求,创建与第一对象相对应的数据查询线程。
122.步骤402,通过数据查询线程,确定数据节点组中对应第一对象的第一数据节点,以及第一数据节点中对应目标属性的数据块。
123.步骤403,读取对应目标属性的数据块中存储的第一数据项目,以及相应的排序。
124.步骤404,返回读取的第一数据项目及相应的排序,以基于排序展示第一数据项目。
125.在一些实施例中,当数据的查询请求是普通查询请求时,可以首先根据各数据块中主键属性的属性最大值(tag_max)以及主键属性的属性最小值(tag_min),确定待查询数据对应的目标数据块,然后按照相关查找算法(如二分查找算法等)从目标数据块中获取待查询数据。当数据的查询请求是分页查询请求时,可以根据各数据块中已用总数(allcount)、主键属性的属性最大值(tag_max)以及主键属性的属性最小值(tag_min)实现数据的分页查询。
126.通过上述步骤401至步骤404提供的数据查询方式,能够有效避免查询过程的多级索引查找,减少查询的时延,提高查询效率。
127.对数据删除相关的业务需求进行说明,在一些实施例中,当服务器接收到用户对象针对数据项目的数据删除指令时,服务器中负责删除操作的线程执行对待删除数据的删除操作。参见图15,图15是本技术实施例提供的数据删除处理流程图,结合图15示出的步骤进行说明。
128.步骤501,响应于第二对象针对第二数据项目的数据删除指令,确定数据节点组中对应第二对象的第二数据节点。
129.这里,服务器接收到用户对象针对数据项目的数据删除指令,得到数据节点组中对应用户对象的目标数据节点。
130.步骤502,确定第二数据节点的各数据块中存储的第二数据项目的位置指示信息。
131.这里,可以根据步骤401至步骤402查询得到待删除数据对应的位置指示信息。
132.步骤503,根据确定的位置指示信息,删除第二数据项目对应的属性数据,并删除第二数据节点的各数据块中存储的第二数据项目的位置指示信息。
133.根据确定的待删除数据的位置指示信息,删除数据块中对应的位置指示信息,目标存储区域中存储的序列化的属性数据。
134.在一些实施例中,可以根据不同删除方式,对选定的待删除数据执行删除操作时,删除方式可以包括实时删除以及标记删除。当选定的删除方式为实时删除时,直接从第二目标数据块中,删除待删除数据对应的位置指示信息,并释放位置指示信息对应的目标存储区域。
135.在一些实施例中,当选定的删除方式是标记删除时,具体的标记删除操作流程,可以通过以下方式实现:删除线程在第二目标数据块中,确定待删除数据对应的位置指示信息所对应的标记位;修改标记位的标记状态为已标记;当第二目标数据块中标记状态为已标记的标记位的数量高于标记阈值时,从第二目标数据块中,删除标记状态为已标记的标记位所对应的位置指示信息,并释放位置指示信息对应的存储区域。
136.在实际实施时,数据块中的标记位可以设置成一个大小固定的数组,数组中包含s(s≥1)个元素,每个元素可以设置不同的信息,用于标记不同的状态。
137.示例性地,参见图16,图16是本技术实施例提供的标记位设置示意图,可以设置一个包含8个元素的整型数组作为标记位,并使用数值0和1进行标记(图中编号1所示),0用于表示未标记,1用于表示已标记,在数据块初始化时,可以将标记位全部设置为0(图中编号1

1所示),或者部分标记为0,部分标记为1(图中编号1

2所示)。也可以设置一个包含8个元素的布尔类型的数组作为标记位,并使用布尔值f(f=false)和t(t=true)进行标记,参见图中编号2所示的标记位的标记信息,false用于表示未标记,true用于表示已标记。在数据块初始化时,可以将标记位全部设置为f(图中编号2

1所示),或者部分标记为f,部分标记为t(图中编号2

2所示)。当标记位用于表征数据的删除状态时,可以使用0表示未删除,使用1表示已删除的,当最后数据块中标记位标记为已删除的元素数量大于预设的标记阈值时,执行真正的删除操作,即删除数据块中的位置指示信息,同时删除目标存储区域中存储的序列化数据,释放相应的目标存储区域。
138.通过上述步骤501至步骤503提供的数据删除方式,能够有效减少各线程在执行删除操作时锁的开销,同时能够有效降低删除过程中对内存空间的频繁释放,提高数据删除效率。
139.本技术实施例能够支持多线程的高并发的读写操作,同时针对待存储数据的属性类型上没有限制,可以兼容属性数据的各种不同的数据类型。同时采用序列化的数据协议将属性数据存储至实际存储区域,可以达到编解码几乎零开销高性能地计算和取值。另外,采用链式连接的各元数据块以及各数据块,能够满足数据的各种查询场景;并且针对存储
数据的增删操作,可以有效避免锁的开销,并且在数据处理时,能够使内存的频繁释放与频繁申请保持平衡。
140.下面,将说明本技术实施例在一个实际的应用场景中的示例性应用。
141.相关基于键值(kv,key

value)类型数据的存储技术,可以满足value的列表数目不多的场景下的存储需求,但是在value中数据大小为百万甚至千万的时候,内存占用会非常大,并且针对这些数据的排序和计算效率会非常低。另外,相关基于键

列表(klist,key

list)类型存储技术,如相关键值数据存储技术中要求每个list中的数据需要是定长的,并且只能是数字类型的(类型固定),这样的要求限制了键值数据存储技术的业务使用场景,因为对于非数字型的tag(string类型),甚至多值(array类型)的主键tag就无法应用,另外相关键值数据存储技术大多是单线程的写设计,在写的性能上,会有比较大的限制,无法发挥系统的性能极限。此外,也有基于kv的实现技术,但是这些技术往往需要将klist拆解成二级甚至三级索引,然后在计算层对三级索引进行分批读取kv数据,再进行内存计算,这样的操作每次计算会引发多次kv存储引擎的访问,读写扩散以及读写频繁,并且计算时延会比较大(几百毫秒甚至秒级别),在时延敏感的场景下无法达到业务的要求。
142.在实际应用中,存在以下业务应用场景,以用户在视频播放客户端的观看历史记录为例,每个用户标识(uid),都对应有一个观看历史的列表,这个视频观看历史列表是按照观看时间进行排序的。
143.参见图4a,图中记录的是用户id(uid=0088765)代表的用户通过视频播放客户端所观看视频编号列表。其中,视频编号可记作vid,视频编号列表中至少包括edft3324、hhjki6783、hju980、sdf2345、
……
、hju9830等。一个视频编号vid,代表用户id的观看历史视频。其中每个用户观看的视频的属性tag有多个字段,参见图4b,图中所列就是视频编号为edft3324的视频被用户id为9988765的用户观看时记录下来的,其中,观看历史记录中包括观看时间,视频时长,视频热度值,总播放量,视频作者等级,视频质量等属性值。通常情况下可以以用户观看视频发生的时间(观看时间)作为主键tag,对每个用户观看的所有视频采用链式的方式进行存储,这样就组成了用户的观看历史记录。
144.在实际实施时,针对上述用户的观看历史记录,存在多种业务使用场景,实际业务场景可以是用户对观看历史的翻阅(即对观看历史列表中的视频按照默认顺序进行翻页提取)、对观看历史记录中的视频按照某个关键属性tag进行排序(如按照总播放量)后翻页展现、对视频时长大于半小时(1800s)并且视频作者等级大于4的视频按照视频热度从大到小进行排序展现,上述都是对用户观看历史记录进行数据读取的业务场景。
145.而针对用户观看历史记录写入的场景可以包括针对用户观看历史记录的增删操作。其中,增加操作就是用户最新又观看了一个视频,需要加入到对应观看历史记录中。删除操作就是用户需要删除观看历史记录中的某个视频。另外还可以包括一键清空播放历史的业务场景,即一次性清除用户对应的所有观看历史记录。
146.针对上面的各种业务读写场景,本技术实施例提供一种针对klist数据的数据处理方法,能够便于实现内存数据的高效计算,且使得数据在存储上能实现数据格式自由定制,并且在类结构化查询语言(sql,structured query language)的计算上能非常高效,需要说明的是,类sql计算是基于某些tag进行过滤和按照某个维度进行排序。
147.参见图17,图17是本技术实施例提供的通用业务场景中数据存储结构示意图,结
合图17对本技术实例提供的数据处理方法进行详细说明。
148.首先,在一些实施例中,针对待存储的数据,服务器会预先创建至少一个包含预设数量的元素的哈希桶(图中编号3所示的数据节点组),用于存储后续的klist数据。这里,预设数量可以设置为与内存实际存储能力以及服务器计算和读写能力呈正相关的数,即一个尽量大的整数,预设数量可记作n,n为大于0的整数。可以理解的是,本技术实施例中哈希桶的大小是固定的,不是动态变化的。这相对于哈希表而言避免了动态内存的分配与释放,同时预分配的节点,在使用过程中,能够达到比较高的利用率,只要还存在空闲节点,就能继续在相应未满的哈希桶中继续存储数据。
149.其次,承接上例,当写入一个用户id(uid)的观看历史vid的时候,会通过非加密型哈希函数对uid进行哈希操作,然后获得该用户id在哈希桶中分配到的位置。如果没有,则创建一个数据节点(使用hashnode表示),存储该用户的key(此处可以是uid),all count设置为1,图中编号4所示的创建完成的数据节点对应的数据结构。然后新建的数据节点的data指针指向一个datablock(图中编号5中各datablock对应的数据结构),这个datablock中只有一个元素,就是该用户最近看的视频vid对应的属性,为了计算的通用性和无协议约束,可以在存储vid的tag与对应的tag value时,使用序列化操作的协议对传输数据进行序列化操作,本技术实施例不对相关协议做限制。
150.再次,在实际实施时,可以为每个datablock(图中5编号5

1所示的数据块结构)一次性分配包含64个item的指针空间,也就是说一个datablock最多存储64个vid对应的数据,这64个vid会按照主键属性tag(tag=观看时间)的顺序关系进行排序,如此,在读线程(图中编号2示出的多个读线程)进行数据读取(或查询)操作时,能够实现快速查找和定位。另外,在每个datablock结构体中还存储了该datablock的主键tag对应的最大值和最小值,如此,能够实现快速翻页(快速实现分页查询)。同时,设置一个64位的标记位变量(bitmap)标记datablock中所包括的64个item指针是否有数据。这里,需要说明的是,datablock的数据结构中可以不使用item指针而是直接存储真实的数据,且每个datablock的大小可以根据实际情况设定。
151.另外,当多个用户id(uid)碰撞到同一个哈希桶时,可以使用链式哈希的方式将这些关键码key(可以是uid)链接起来。另外,当用户需要对观看历史记录进行一键清空操作时,可以直接将该uid对应的链式数据回收。
152.同时,由于哈希桶在创建的时候,哈希桶的数目是预先设定且大小固定的,如哈希桶的数目取1000000,那么在实际操作中,为了加快线程读写效率,可以对哈希桶进行虚拟分桶,得到多个子桶,每个子桶中可以包含多个位置信息。并为每个子桶分配一个线程,用于处理与子桶相关的数据读写操作;在实际实施时,子桶的划分方式可以是根据uid进行哈希的结果取模n,就得到了对应桶的位置,每个读写线程分别负责针对哈希桶的不同区间的读写操作,即将不同区间可以看作哈希桶的各子桶,如此,能够有效提升存储引擎的读写效率和基于它的计算速度。
153.最后,在实际实施时,当写线程(图中编号1示出的各个写线程)向数据块datablock中写入数据item时,可以是在数据块中写入一个item指针,该item指针用于指向待存储数据在实际存储区域中的存储地址。在数据块中执行插入、删除操作时,实际上是针对item指针的插入、删除操作,不是直接操作待存储数据,如此可以实现快速的增删。另外,
由于对哈希桶进行虚拟分桶所得到的各子桶之间没有重叠,那么各子桶对应的各线程是相互独立、并行执行的,即多线程并行执行完成各自的读写操作。由于各线程是并行执行的,不存在对共享资源的争抢情况,也就不需要通过加锁的方式实现对共享资源的使用,因此,在数据处理过程中可以实现多线程的无锁读写从而使得块内的插入写变得非常高效。而对于数据块中存储容量已经达到容量阈值时(即数据块已满),当再次需要继续向数据块中插入一条新的item时,参见图12,可以分配2个新的datablock,并采用链式连接的方式将两个新的datablock链接起来,然后将原数据块中存储的item指针分成两份,分别复制到新分配的2个datablock中。需要说明的是,这里复制的信息只是item指针,并不是实际的主键tag数据,能够保证高效存储。
154.此外,在实际实施时,对于数据的删除操作,可以有两种不同的删除方式,一种是实时删除,一种是标记删除。其中,标记删除是指通过修改datablock中bitmap的值,确定datablock的填充率是否达到预先设定的填充率阈值,当datablock的item指针填充率低于预先设定的填充阈值(如50%)时,才对数据执行真正的删除和回收。
155.需要说明的是,在实际实施时,datablock的数据结构,可以不使用item指针而是直接存储真实的数据,且每个数据块的大小可以根据实际情况设定。
156.本技术实施例能够支持多线程的读写,高并发访问计算,同时在存储的tag属性类型上没有限制,可以支持多值,单值,类型上支持字符串、整型,浮点型等,同时采用序列化的数据协议,能达到编解码几乎零开销高性能地计算和取值。此外,链式的datablock存储使得查找某个list value和翻页数据能得到很好的支持,并且在数据的增删上有非常精巧的设计,避免了锁的开销,并且在计算与内存频繁释放与申请上有很好的平衡。
157.下面继续说明本技术实施例提供的数据处理装置555的实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器540的数据处理装置555中的软件模块可以包括:获取模块5551,用于获取目标对象的待存储数据,所述待存储数据包括针对目标数据项目的至少一种属性的属性数据;确定模块5552,用于确定所述目标对象对应的目标数据节点;其中,所述目标数据节点包括至少一个用于存储不同数据项目的位置指示数据的数据块,每个所述数据块对应一种属性;存储模块5553,用于存储各所述属性数据至目标存储区域,并确定各所述属性数据在所述目标存储区域中的存储位置;写入模块5554,用于基于各所述属性数据在所述目标存储区域中的存储位置,将各所述属性数据的存储位置对应的位置指示数据写入所述目标数据节点中相应的数据块。
158.在一些实施例中,所述确定模块,还用于获取所述目标对象的对象标识,并获取所述数据节点组中各数据节点的位置与对象标识之间的映射关系;根据所述目标对象的对象标识及所述映射关系,确定相应数据节点在所述数据节点组中的目标位置;将所述数据节点组中与所述目标位置相对应的数据节点,作为对应所述目标对象的目标数据节点。
159.在一些实施例中,所述确定模块,还用于当所述目标数据节点中包括第一元数据块,且所述第一元数据块存储有其它对象对应的其它对象标识时,创建用于存储所述目标对象的对象标识的第二元数据块、以及所述第二元数据块关联的数据块;连接所述第二元
数据块与所述第一元数据块。
160.相应的,在一些实施例中,所述写入模块,还用于将各所述属性数据的存储位置对应的位置指示信息写入所述第二元数据块关联的数据块。
161.在一些实施例中,所述写入模块,还用于获取各所述属性数据对应的属性值;将各所述属性数据对应的属性值,分别与相应数据块中各数据项目的属性值进行比较,得到比较结果;基于所述比较结果,将各所述属性数据的存储位置对应的位置指示信息至所述目标数据节点中相应的数据块。
162.在一些实施例中,所述写入模块,还用于获取所述数据块对应位置指示信息的容量阈值;当所述数据块中填充的位置指示信息的数量达到所述容量阈值时,分别构建对应各所述数据块的第一数据块副本以及第二数据块副本;针对各所述数据块,将所述数据块中存储的多条位置指示信息划分成第一部分及第二部分,并存储所述第一部分至所述第一数据块副本,存储所述第二部分至所述第二数据块副本;针对各所述属性数据,从相应数据块的第一数据块副本和第二数据块副本中确定目标数据块;将各所述属性数据的存储位置对应的位置指示信息写入相应的所述目标数据块。
163.在一些实施例中,所述写入模块,还用于当所述多条位置指示信息构成依据属性值大小排序的位置指示信息序列时,从所述位置指示信息序列中第一个位置指示信息开始,依次进行位置指示信息选取,直至选取的位置指示信息的数量为目标数量,并将选取的位置指示信息作为所述第一部分,将未选取的位置指示信息作为所述第二部分。
164.在一些实施例中,所述写入模块,还用于当所述第一数据块副本及所述第二数据块副本中的位置指示信息,依据相应数据项目的属性值排序存储时,获取所述属性数据对应的属性值;将所述属性数据对应的属性值和所述第一数据块副本中的最大属性值进行比较,得到第一比较结果,并将所述属性数据对应的属性值分别和所述第二数据块副本中的最小属性值进行比较,得到第二比较结果;根据所述第一比较结果及所述第二比较结果,从第一数据块副本和第二数据块副本中确定目标数据块。
165.在一些实施例中,所述目标数据节点归属于包括多个数据节点的数据节点组,所述数据节点组包括至少两个子节点组,每个所述子节点组对应一个处理线程所述写入模块,所述写入模块,还用于确定所述目标数据节点归属的目标子节点组,以及所述目标子节点组对应的目标处理线程;通过所述目标处理线程,将各所述属性数据的存储位置对应的位置指示信息,写入至所述目标数据节点中相应的数据块。
166.在一些实施例中,所述数据处理装置,还可以包括查询模块,所述查询模块用于响应于第一对象对应目标属性的数据查询请求,创建与所述第一对象相对应的数据查询线程;通过所述数据查询线程,确定数据节点组中对应所述第一对象的第一数据节点,以及所述第一数据节点中对应所述目标属性的数据块;读取对应所述目标属性的数据块中存储的第一数据项目,以及相应的排序;返回读取的第一数据项目及相应的排序,以基于所述排序展示所述第一数据项目。
167.在一些实施例中,所述数据处理装置,还可以包括删除模块,所述删除模块用于响应于第二对象针对第二数据项目的数据删除指令,确定数据节点组中对应所述第二对象的第二数据节点;确定所述第二数据节点的各数据块中存储的所述第二数据项目的位置指示信息;根据确定的位置指示信息,删除所述第二数据项目对应的属性数据,并删除所述第二
数据节点的各数据块中存储的所述第二数据项目的位置指示信息。
168.本技术实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本技术实施例上述的数据处理方法。
169.本技术实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本技术实施例提供的数据处理方法,例如,如图3示出的数据处理方法。
170.在一些实施例中,计算机可读存储介质可以是fram、rom、prom、eprom、eeprom、闪存、磁表面存储器、光盘、或cd

rom等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
171.在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
172.作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(html,hyper text markup language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
173.作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
174.综上所述,本技术实施例能够支持多线程的高并发的读写操作,同时针对待存储数据的属性类型上没有限制,可以兼容属性数据的各种不同那个数据类型。同时采用序列化的数据协议将属性数据存储至实际存储区域,可以达到编解码几乎零开销高性能地计算和取值。另外,采用链式连接的各元数据块以及各数据块,能够满足数据的各种查询场景;并且针对存储数据的增删操作,可以有效避免锁的开销,并且在数据处理时,能够使内存的频繁释放与频繁申请保持平衡。
175.以上所述,仅为本技术的实施例而已,并非用于限定本技术的保护范围。凡在本技术的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本技术的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献