CN112817538A - 数据处理的方法、装置、设备和存储介质 - Google Patents
数据处理的方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN112817538A CN112817538A CN202110197239.2A CN202110197239A CN112817538A CN 112817538 A CN112817538 A CN 112817538A CN 202110197239 A CN202110197239 A CN 202110197239A CN 112817538 A CN112817538 A CN 112817538A
- Authority
- CN
- China
- Prior art keywords
- node
- data entity
- processed
- bitmap
- level
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0635—Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种数据处理的方法、装置、设备和存储介质,方法包括:获取待处理数据实体的二进制形式的标识码;将标识码拆分为M等份,得到M个目标分片;根据M个目标分片的十进制数值,确定出多叉树中待处理数据实体的存储路径;待处理数据实体的存储路径包括多个不同层级的节点和相邻层级节点间的指向关系;指向关系中较低层级节点的位置均由较高层级节点的位图中第A+1个二进制位确定,A是较高层级节点所属层级对应的目标分片的十进制数值;基于存储路径中最低层级节点对待处理数据实体执行处理指令。本方案中,每一个节点间指向关系只需要通过高层级节点的位图中相应位置的一个二进制位就可以表示,显著的减小了多叉树所占用的存储空间。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种数据处理的方法、装置、设备和存储介质。
背景技术
现有技术中,为了支持网络上大量数据的存储和快速查询,服务器一般采用如下的方式存储多个数据实体(数据实体相当于一组相关的数据的集合,如网络游戏中一个用户的账号,角色,持有的道具等基本数据就构成一个数据实体):
每一数据实体均具有一个唯一的标识码(Identity document,ID),可以将该标识码拆分为多个分片,每一个分片对应于预先构建的多叉树中的一个层级。多叉树中每一个非叶节点(没有子节点的节点称为叶节点,有子节点的节点称为非叶节点)均保存有一个分片的取值范围内对应的每个十进制数值,每一个数值对应的指向位于下一层级的一个子节点。由此,利用一个数据实体的标识码的各个分片的十进制数值可以在多叉树中确定出一条唯一的节点路径,而数据实体就可以存储在该节点路径末端的节点,即最低层级的节点中。
例如,若每个分片包含8个bit,则分片所对应的十进制数值可以包括0至255,表示一个指向关系就需要一个一字节大小的数值,相应的,每个非叶节点为了表示自身和下一层级节点之间的指向关系,就需要保存0至255范围内的每个十进制数值,而每个十进制数值均占用一个字节,因此每个非叶节点都需要占用256字节的存储空间来存储上述十进制数值,使得整个多叉树所占用的存储空间较大。
发明内容
针对上述现有技术存在的问题,本发明提供一种数据处理的方法、装置、设备和存储介质,以减小采用多叉树存储数据时占用的存储空间。
本申请第一方面提供一种数据处理的方法,包括:
获取处理指令,其中,所述处理指令包括待处理数据实体的标识码;所述待处理数据实体的标识码为二进制形式;
将所述待处理数据实体的标识码拆分为M等份,得到M个目标分片;其中,每一个所述目标分片均对应于多叉树中的一个层级;M为预设的正整数;
根据所述M个目标分片的十进制数值,在所述多叉树中确定出所述待处理数据实体的存储路径;其中,所述待处理数据实体的存储路径包括多个属于所述多叉树不同层级的节点和每两个相邻层级节点间的指向关系;每一个所述指向关系中较低层级节点的位置均由较高层级节点的位图中第A+1个二进制位确定,A是所述较高层级节点所属层级对应的目标分片的十进制数值;所述多叉树中每一层级的节点的位图均包含顺序排列的多个二进制位;
基于所述待处理数据实体的存储路径中最低层级节点,对所述待处理数据实体执行所述处理指令。
可选的,所述根据所述M个目标分片的十进制数值,在所述多叉树中确定出所述待处理数据实体的存储路径,包括:
将所述多叉树的根节点确定为当前节点,并读取所述当前节点的位图;
若所述当前节点所属层级对应的目标分片不是所述M个目标分片中的最后一个,根据所述当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到所述当前节点的位图中第B+1个二进制位所指向的节点;其中,所述下一层级指代所述当前节点所属层级的下一层级;B是所述当前节点所属层级对应的目标分片的十进制数值;
将本次查找得到的节点确定为当前节点,返回执行所述读取所述当前节点的位图步骤;
若所述当前节点所属层级对应的目标分片是所述M个目标分片中的最后一个,根据所述当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到所述当前节点的位图中第B+1个二进制位所指向的节点;
将所述根节点、查找得到的每一个节点以及节点间的指向关系所构成的节点路径,确定为所述待处理数据实体的存储路径。
可选的,所述根据所述M个目标分片的十进制数值,在所述多叉树中确定出所述待处理数据实体的存储路径,包括:
将所述多叉树的根节点确定为当前节点,并读取所述当前节点的位图;
若所述当前节点的位图中第B+1个二进制位的管辖数据量等于零,根据所述当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到所述当前节点的位图中第B+1个二进制位所指向的节点;其中,B是所述当前节点所属层级对应的所述目标分片的十进制数值,所述多叉树的一个节点的位图中的某个二进制位的管辖数据量,是指以本二进制位所指向的节点为根节点的子多叉树所存数据实体的物理地址的个数;数据实体的物理地址,是指本数据实体在存储介质的存储地址;所述下一层级指代所述当前节点所属层级的下一层级;
将所述根节点、查找得到的节点以及节点间的指向关系构成的节点路径,确定为所述待处理数据实体的存储路径;
若所述当前节点的位图中第B+1个二进制位的管辖数据量大于零,根据所述当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到所述当前节点的位图中第B+1个二进制位所指向的节点;
将所述当前节点的位图中第B+1个二进制位所指向的下一层级节点,确定为当前节点,返回执行所述读取所述当前节点的位图步骤。
可选的,所述将所述根节点、查找得到的每一个节点以及节点间的指向关系所构成的节点路径,确定为所述待处理数据实体的存储路径之后,还包括:
若执行完一次确定当前节点操作后的当前节点存储有数据实体的物理地址,获得所述当前节点所对应的数据实体的M个分片;其中,所述当前节点所对应的数据实体的M个分片由所述当前节点所对应的数据实体的标识码按M等份拆分得到;数据实体的物理地址,是指本数据实体在存储介质的存储地址;
根据所述当前节点的位图中第C+1个二进制位对应的指向关系,在下一层级的节点中查找得到所述当前节点的位图中第C+1个二进制位所指向的节点;其中,C是所述当前节点所对应的数据实体的M个分片中,与所述当前节点所属层级对应的分片的十进制数值;
将所述当前节点所存物理地址,转存至所述当前节点的位图中第C+1个二进制位所指向的节点。
可选的,所述基于所述待处理数据实体的存储路径中最低层级节点,对所述待处理数据实体执行所述处理指令,包括:
若所述处理指令包括存储所述待处理数据实体,将所述待处理数据实体的物理地址存储至所述待处理数据实体的存储路径中最低层级节点;其中,所述待处理数据实体的物理地址,是指所述待处理数据实体在存储介质的存储地址;所述处理指令携带有所述待处理数据实体的物理地址;
若所述处理指令包括读取所述待处理数据实体,从所述待处理数据实体的存储路径中最低层级节点读取所述待处理数据实体的物理地址,并基于所述待处理数据实体的物理地址读取所述待处理数据实体。
本申请第二方面提供一种数据处理的装置,包括:
获取单元,用于获取处理指令,其中,所述处理指令包括待处理数据实体的标识码;所述待处理数据实体的标识码为二进制形式;
拆分单元,用于将所述待处理数据实体的标识码拆分为M等份,得到M个目标分片;其中,每一个所述目标分片均对应于多叉树中的一个层级;M为预设的正整数;
确定单元,用于根据所述M个目标分片的十进制数值,在所述多叉树中确定出所述待处理数据实体的存储路径;其中,所述待处理数据实体的存储路径包括多个属于所述多叉树的不同层级的节点和每两个相邻层级节点间的指向关系;每一个所述指向关系中较低层级节点的位置均由较高层级节点的位图中第A+1个二进制位确定,A是所述较高层级节点所属层级对应的目标分片的十进制数值;所述多叉树中每一层级的节点的位图均包含顺序排列的多个二进制位;
执行单元,用于基于所述待处理数据实体的存储路径中最低层级节点,对所述待处理数据实体执行所述处理指令。
可选的,所述确定单元根据所述M个目标分片的十进制数值,在所述多叉树中确定出所述待处理数据实体的存储路径时,具体用于:
将所述多叉树的根节点确定为当前节点,并读取所述当前节点的位图;
若所述当前节点的位图中第B+1个二进制位的管辖数据量等于零,根据所述当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到所述当前节点的位图中第B+1个二进制位所指向的节点;其中,所述多叉树的一个节点的位图中的某个二进制位的管辖数据量,是指以本二进制位所指向的节点为根节点的子多叉树所存储的数据实体的个数;B是所述当前节点所属层级对应的所述目标分片的十进制数值;所述下一层级指代所述当前节点所属层级的下一层级;
将所述根节点、查找得到的节点以及节点间的指向关系构成的节点路径,确定为所述待处理数据实体的存储路径;
若所述当前节点的位图中第B+1个二进制位的管辖数据量大于零,根据所述当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到所述当前节点的位图中第B+1个二进制位所指向的节点;
将所述当前节点的位图中第B+1个二进制位所指向的下一层级节点,确定为当前节点,返回执行所述读取所述当前节点的位图步骤。
可选的,所述执行单元基于所述待处理数据实体的存储路径中最低层级节点,对所述待处理数据实体执行所述处理指令时,具体用于:
若所述处理指令包括存储所述待处理数据实体,将所述待处理数据实体的物理地址存储至所述待处理数据实体的存储路径中最低层级节点;其中,所述待处理数据实体的物理地址,是指所述待处理数据实体在存储介质的存储地址;所述处理指令携带有所述待处理数据实体的物理地址;
若所述处理指令包括读取所述待处理数据实体,从所述待处理数据实体的存储路径中最低层级节点读取所述待处理数据实体的物理地址,并基于所述待处理数据实体的物理地址读取所述待处理数据实体。
本申请第三方面提供一种计算机存储介质,用于存储计算机程序,所述计算机程序被执行时,具体用于实现本申请第一方面任意一项所提供的数据处理的方法。
本申请第四方面提供一种电子设备,包括存储器和处理器;
其中,所述存储器用于存储计算机程序;
所述处理器用于执行所述计算机程序,具体用于实现如本申请第一方面任意一项所提供的数据处理的方法。
本申请提供一种数据处理的方法、装置、设备和存储介质,方法包括,获取处理指令,其中,处理指令包括待处理数据实体的标识码;待处理数据实体的标识码为二进制形式;将待处理数据实体的标识码拆分为M等份,得到M个目标分片;其中,每一个目标分片均对应于多叉树中的一个层级;M为预设的正整数;根据M个目标分片的十进制数值,在多叉树中确定出待处理数据实体的存储路径;其中,待处理数据实体的存储路径包括多个属于多叉树的不同层级的节点和每两个相邻层级节点间的指向关系;每一个指向关系中较低层级节点的位置均由较高层级节点的位图中第A+1个二进制位确定,A是较高层级节点所属层级对应的目标分片的十进制数值;多叉树中每一层级的节点的位图均包含顺序排列的多个二进制位;基于待处理数据实体的存储路径中最低层级节点,对待处理数据实体执行处理指令。本方案中,每一个节点间指向关系只需要通过高层级节点的位图中相应位置的一个二进制位就可以表示,因此高层级节点只需要保存多个二进制为即可表示自身和下一层级节点的指向关系,显著的减小了多叉树所占用的存储空间。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种数据处理的方法的流程图;
图2为本申请实施例提供的一种确定待处理数据实体的存储路径的方法流程图;
图3为本申请实施例提供的另一种确定待处理数据实体的存储路径的方法流程图;
图4为本申请实施例提供的一种多叉树的结构示意图;
图5为本申请实施例提供的另一种多叉树的结构示意图;
图6为本申请实施例提供的数据处理的方法所适用的系统的架构示意图;
图7为本申请实施例提供的一种数据处理的装置的结构示意图;
图8为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请所提供的数据处理方法,其关键在于,为用于存储数据的多叉树的每一个节点设置一个位图,采用本节点的位图中的各个二进制位来表示本节点和各个子节点之间的指向关系。也就是说,本申请中,多叉树的每一个节点都可以存储有一个位图。对于多叉树中的任意一个节点,该节点的位图,可以理解为用于表征本节点和本节点的子节点之间的指向关系的一个包含N个二进制位(bit)的二进制序列,形如00101010……001100,其中每个bit的值可以根据实际情况设定为0或1。
本节点的位图的长度N,可以由多叉树中,本节点最多可连接的子节点的数量决定,而在本申请中,一个节点最多可连接的子节点的数量一般与分片对应十进制数值的取值范围一致,例如,包含8个二进制位的分片对应十进制数值为0至255,即可以取到256个数值,故一个节点最多可连接的子节点数量为256,这种情况下,每个节点的位图,就是一个包含256bit的二进制序列。
在多叉树中,每个节点会保存有自身所连接的各个子节点的指针(即指向关系),因此,对于任一节点,可以将本节点所保存的各个子节点的指针,和位图中的各个二进制位建立对应关系,这样就可以通过本节点的位图找到某一个子节点的指针,进而查找到相应子节点。
本申请实施例提供一种数据处理的方法,请参考图1,该方法可以包括如下步骤:
S101、获取处理指令。
其中,处理指令包括待处理数据实体的标识码;待处理数据实体的标识码为二进制形式。
上述处理指令,可以是从已存储的多个数据实体中,查找得到待处理数据实体的查询指令,也可以是将待处理数据实体予以保存的存储指令。
数据实体的标识码用于唯一地标识出每一个数据实体,也就是说,一个数据实体的标识码与每一个其他数据实体的标识码均不相同。
标识码的长度可以根据预计会产生的数据实体的数量来确定,例如,标识码可以是一个长度为64的二进制序列,也就是一个包含64个二进制位(或者说64bit)的二进制数。
S102、将待处理数据实体的标识码拆分为M等份,得到M个目标分片。
其中,每一个目标分片均对应于多叉树中的一个层级;M为预设的正整数。
拆分的份数M决定了多叉树最多包含的层级的数量,而多叉树包含的层级的数量,又决定了每一个确定待处理数据实体的存储路径时所要执行的查找操作的次数,进而决定了向多叉树存储数据或者从多叉树查找数据的效率。因此在实际使用时,可以根据对于存储效率和查找效率的要求,设定M的数值。
以前述64位的标识码为例,M可以设定为8,也就是说,在步骤S102中,可以将一个64位的标识码拆分为8等份,由此得到8个目标分片,显然,每一个目标分片可以看作是一个包含8个二进制位的二进制数,而8位的二进制数所对应的十进制数值的范围,是0至255。
S103、根据M个目标分片的十进制数值,在多叉树中确定出待处理数据实体的存储路径。
待处理数据实体的存储路径,也可以记为目标存储路径。
其中,待处理数据实体的存储路径包括多个属于多叉树的不同层级的节点和每两个相邻层级节点间的指向关系;每一个指向关系中较低层级节点的位置均由较高层级节点的位图中第A+1个二进制位确定,A是较高层级节点所属层级对应的目标分片的十进制数值;多叉树中每一层级的节点的位图均包含顺序排列的多个二进制位。
也就是说,在多叉树的每一层,均有一个属于待处理数据实体的存储路径的节点,并且属于存储路径的节点中,每两个相邻层级的节点之间具有特定的指向关系,该指向关系由其中较高层级对应的目标分片决定。
结合步骤S102中的例子,若将标识码拆分为8等份,则多叉树最多可以包括9个层级,其中以根节点所在的层级为第一层级,根节点的子节点所在层级为第二层级,第二层级的节点的子节点所在层级为第三层级,以此类推,拆分得到的8个目标分片中,第一个分片(由左往右排序,位于标识码最左侧的目标分片为第一个目标分片)对应于第一层级,第二个目标分片对应于第二层级,第三个目标分片对应于第三层级,以此类推,第八个目标分片(即最后一个目标分片)对应于第八层级,而第九层级则不对应目标分片。
可以理解的,对于第一至第八层级的每一个节点,本节点都可以连接有多个子节点,相应的,为了能从本节点查找到各个子节点,本节点会存储有本节点到每一个子节点的指向关系,也就是每一个子节点的指针。
而步骤S103所述的确定目标存储路径,实质就是,从多叉树的第一层级开始,利用第一个目标分片的十进制数值和根节点的位图,在根节点的多个指向关系中确定出属于目标存储路径的指向关系,进而在第二层级中找到属于目标存储路径的第二层级节点,再利用第二个目标分片的十进制数值和属于目标存储路径的第二层级节点的位图,在属于目标存储路径的第二层级节点的多个指向关系中找到属于目标存储路径的由第二层级节点指向第三层级节点的指向关系,进而找到属于目标存储路径的第三节点,以此类推,直至满足一定的结束条件时,结束该过程,输出目标存储路径。
可以看出,对于任意两个具有不同标识码的数据实体,这两个数据实体对应的M个分片中必然有至少一个分片不相同,而不同的分片对应于不同的指向关系,不同的指向关系在下一层级中指向中的节点也不相同,因此,只要确保每一个数据实体都具有一个唯一的标识码,就可以保证多叉树中每一个数据实体均具有唯一的存储路径。
S104、基于待处理数据实体的存储路径中最低层级节点,对待处理数据实体执行处理指令。
以前述8层的多叉树为例,确定出的目标存储路径按层级由高到低可以用如下形式表示:
根节点→节点2→节点3→节点4→节点5→节点6→节点7→节点8→节点9。相应的,步骤S104中就可以基于上述目标存储路径中的节点9,对待处理数据实体执行处理指令。
需要说明的是,一般将多叉树用于数据的存储和查询时,由于数据实体的数据量较大,一般不会直接将数据实体保存在多叉树的节点中,而是将数据实体直接存储在特定的存储介质,如大容量的硬盘中,然后将数据实体在该存储介质中的存储,也就是数据实体的物理地址存储在多叉树的节点中,同理,基于多叉树查询数据,实质是从多叉树中查找得到数据实体的物理地址,然后基于该物理地址从上述存储介质中读取数据实体。
如前文所述,处理指令可以是存储指令,也可以是查询指令,相应的,步骤S104的具体执行过程可以是:
若处理指令包括存储待处理数据实体,即处理指令属于存储指令,将待处理数据实体的物理地址存储至待处理数据实体的存储路径中最低层级节点。
其中,待处理数据实体的物理地址,是指待处理数据实体在存储介质的存储地址;处理指令携带有待处理数据实体的物理地址;
若处理指令包括读取待处理数据实体,即处理指令属于读取指令,从待处理数据实体的存储路径中最低层级节点读取待处理数据实体的物理地址,并基于待处理数据实体的物理地址读取待处理数据实体。
可选的,若处理指令包括读取待处理数据实体,而确定出待处理数据实体的存储路径后,发现存储路径中最低层级节点并未存储待处理数据实体的物理地址,则输出读取失败提示信息。
以运营网络游戏的服务器为例,假设游戏中每一个账号的相关信息(包括但不限于账号,密码,昵称,持有道具,游戏角色等)构成该账号的一个数据实体,那么,当用户在游戏中新建一个账号,或者由于用户在游戏中的行为,导致其账号的相关信息发生了变更时,服务器就需要将新建账号的相关信息,或者将变更后的相关信息作为一个待处理数据实体保存在上述存储介质中,同时在多叉树的相应节点中存储该数据实体的物理地址。
另一方面,假设一个已创建账号的用户在某一时刻登陆了自己的账号,则服务器就需要用这个账号对应的标识码,从多叉树中查找得到这个账号对应的数据实体的物理地址,然后用该物理地址从上述存储介质中读取得到该账号的相关信息,以便基于上述相关信息为该账号提供游戏服务。
和现有技术相比,本方案只需要利用节点的位图中特定位置的二进制位,就可以表示数据实体的某一分片所对应的指向关系,由此,多叉树的各个节点只需要存储若干个二进制位构成的位图,就可以表示本节点所存储的各个指向关系,而不需要在针对每一个指向关系保存一个占用空间较大的十进制数值。从而显著缩小了整个多叉树所占用的存储空间。
结合背景技术中所提供的例子,假设每一个分片包含8bit,则这个分片对应的十进制数值的范围可以是0至255,相应的,现有的多叉树方案就需要占用256个字节来存储0至255范围内的每个整数,其中每个整数占用一字节,而在本方案中,节点只需要保存一个256bit的位图即可,其中第1bit表示分片对应的十进制数值0,第2bit表示分片对应的十进制数值1……第7bit表示表示分片对应的十进制数值6,以此类推,在应用多叉树存储或查询数据实体时,只需要按相应层级的分片所对应的十进制数值在位图中找到对应的二进制位,就可以确定出该分片对应的指向关系,进而确定出数据实体的存储路径。
可以看出,在上述例子中,每一个多叉树的节点为了表示各个指向关系而占用的存储空间,从原本的256个字节,变更为256bit,缩小至原本的八分之一。
利用位图中的二进制位表示指向关系的方式如下:
多叉树中,一个节点最多连接的子节点的数量可以由本节点所在层级对应的分片决定,若本节点所属层级对应的分片包含8bit,对应的十进制数值在0至255范围内,也就是共计256个数值,那么本节点最多连接的子节点的数量就等于256,相应的,本节点最多存储的指向子节点的指针的数量也是256,与位图中包含的256bit一致。
因此,可以在本节点中建立一个用于存储256个指针的指针数组,在数组中各个指针顺序排列,由此,就可以在位图中的二进制位和指针数组中相同顺序的指针之间建立起对应关系,如位图中的第一位对应数组的第一个指针,第二位对应数组的第二个指针,以此类推。
进一步的,在应用多叉树存储数据时,若所存数据较少,则本节点所连接的子节点的数量可能少于256个,相应的,指针数组中的部分指针就属于空指针,即下一层级中不存在被该指针指向的节点。针对这一情况,可以通过位图中二进制位的值来表征对应的指针是否为空指针。例如,若数组中第20个指针为空指针,将位图中和第20个指针对应的第20个二进制设置为0,以表示下一层级中不存在该二进制位对应的指针所指向的节点,若数组中第20个指针不是空指针,而是指向下一层级的某个节点,将位图中和第20个指针对应的第20个二进制位设置为1。
可选的,基于上述设置,若处理指令包括读取待处理数据实体,当在某一节点的位图中确定出目标分片的十进制数值所对应位置的二进制位为0,在可以直接输出读取失败提示信息,而不需要继续向下一层级查找,从而提高处理指令的处理效率。
请参考图2,前述实施例的步骤S103,即确定待处理数据实体的存储路径的一种可选的实现方法可以包括如下步骤:
S201、将多叉树的根节点确定为当前节点。
S202、读取当前节点的位图。
S203、判断当前节点所属层级对应的目标分片是否为最后一个目标分片。
若当前节点所属层级对应的目标分片不是最后一个目标分片,执行步骤S204,若当前节点所属层级对应的目标分片是最后一个目标分片,执行步骤S206。
例如,若待处理数据实体的标识码被拆分为8个目标分片,则步骤S203相当于判断当前节点所属层级对应的目标分片是否为第8个目标分片。
S204、根据当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到当前节点的位图中第B+1个二进制位所指向的节点。
其中,下一层级指代当前节点所属层级的下一层级;B是当前节点所属层级对应的目标分片的十进制数值。
结合前述例子,假设当前节点所属层级为多叉树的第三层级,那么对应的目标分片就是由待处理数据实体的标识码拆分得到的第三个目标分片,设第三个目标分片对应的十进制数值为27,则步骤S204,就是,在当前节点的位图中确定出第28个bit,进而在当前节点所保存的指针中找到和位图中第28个bit对应的指针,最后在下一层级中找到第28个bit对应的指针所指向的节点,也就是步骤S204所述的当前节点的位图中第B+1个二进制位所指向的节点。
S205、将本次查找得到的节点确定为当前节点。
步骤S205执行结束后,返回执行读取当前节点的位图步骤,即返回执行步骤S202。
S206、根据当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到当前节点的位图中第B+1个二进制位所指向的节点。
步骤S206的执行过程和步骤S204一致,不再详述。
S207、将根节点、查找得到的每一个节点以及节点间的指向关系所构成的节点路径,确定为待处理数据实体的存储路径。
需要说明的是,上述实施例中步骤S204和步骤S206,以及下一实施例中,涉及在下一层级查找节点的步骤,实质上包括了如下流程:
若在下一层级中,不存在被当前节点的位图中第B+1个二进制位所指向的节点,则在下一层级创建一个节点,将当前节点的位图中第B+1个二进制位所对应的指针,指向创建的这个节点,并将创建的这个节点确定为本次查找得到的节点,若在下一层级中存在被当前节点的位图中第B+1个二进制位所指向的节点,则正常执行前述步骤S204中所述的查找动作,从而获得本次查找得到的节点。
请参考图3,前述实施例的步骤S103,即确定待处理数据实体的存储路径的另一种可选的实现方法可以包括如下步骤:
S301、将多叉树的根节点确定为当前节点。
S302、读取当前节点的位图。
S303、判断当前节点的位图中第B+1个二进制位的管辖数据量是否大于零。
若当前节点的位图中第B+1个二进制位的管辖数据量大于零,则执行步骤S304,若当前节点的位图中第B+1个二进制位的管辖数据量等于零。也就是不大于零,则执行步骤S306。
其中,多叉树的一个节点的位图中的某个二进制位的管辖数据量,是指以本二进制位所指向的节点为根节点的子多叉树所存数据实体的物理地址的个数;数据实体的物理地址,是指本数据实体在存储介质的存储地址;B是当前节点所属层级对应的目标分片的十进制数值;下一层级指代当前节点所属层级的下一层级。
对于多叉树中的任意一个节点X,设定,若一个节点Y是节点X的子节点,则节点Y属于节点X的后代节点,若一个节点Y的父节点是节点X的后代节点,则这个节点Y也是节点X的后代节点。
基于上述设定,以节点X为根节点的子多叉树,可以理解为,由节点X和节点X的每一个后代节点(如果有后代节点的话)组成的树状结构。
综上所述,当前节点的位图中第B+1个二进制位的管辖数据量,实质就是,被当前节点的位图中第B+1个二进制位指向的节点,以及这个被指向节点的所有后代节点中存储的物理地址的个数。
特别的,若下一层级中尚不存在被当前节点的位图中第B+1个二进制位所指向的节点,则当前节点的位图中第B+1个二进制位的管辖数据量等于零。
S304、根据当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到当前节点的位图中第B+1个二进制位所指向的节点。
S305、将当前节点的位图中第B+1个二进制位所指向的下一层级节点,确定为当前节点。
执行完步骤S305后,返回执行读取当前节点的位图步骤,也就是返回执行步骤S302,直至执行完一次确定当前节点操作后的当前节点的位图中第B+1个二进制位的管辖数据量等于零。
S306、根据当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到当前节点的位图中第B+1个二进制位所指向的节点。
S307、将根节点、查找得到的节点以及节点间的指向关系构成的节点路径,确定为待处理数据实体的存储路径。
S308、判断当前节点是否存储有数据实体的物理地址。
若当前节点存储有数据实体的物理地址,则执行步骤S309,若当前节点未存储有数据实体的物理地址,则结束本次确定待处理数据实体的存储路径的流程,输出待处理数据实体的存储路径。
S309、获得当前节点所对应的数据实体的M个分片。
其中,当前节点所对应的数据实体的M个分片由当前节点所对应的数据实体的标识码按M等份拆分得到;数据实体的物理地址,是指本数据实体在存储介质的存储地址。
其中,当前节点所对应的数据实体,是指,当前节点所存储的物理地址对应的数据实体。例如,若步骤S308中确定出当前节点存储有数据实体A的物理地址,则步骤S309,就是获得数据实体A的M个分片,具体来说,也就是读取数据实体A的标识码,然后将数据实体A的标识码拆分为M等份,得到数据实体A的M个分片。
S310、根据当前节点的位图中第C+1个二进制位对应的指向关系,在下一层级的节点中查找得到当前节点的位图中第C+1个二进制位所指向的节点。
其中,C是当前节点所对应的数据实体的M个分片中,与当前节点所属层级对应的分片的十进制数值。
例如,若当前节点位于多叉树的第三层级,则步骤S310,就是,获得当前节点对应的数据实体的第三个分片,然后在当前节点的位图中找到第三个分片对应的十进制数值位置的二进制位,也就是第C+1个二进制位,进而在下一层级的节点中查找到第C+1个二进制位所指向的节点。
S311、将当前节点所存物理地址,转存至当前节点的位图中第C+1个二进制位所指向的节点。
步骤S311具体可以包括:
一方面,将当前节点目前存储的数据实体物理地址存储在当前节点的位图中第C+1个二进制位所指向的节点,另一方面,从当前节点删除目前存储的数据实体物理地址。
下面,结合具体的例子说明应用本申请提供的数据处理方法进行数据存储的过程,数据读取的过程和数据存储的过程基本一致,均需要确定待处理数据实体的存储路径,区别在于存储时是将物理地址存入相应节点,而读取时是从相应节点读取物理地址,因此应用于数据读取的过程可以参考下述数据存储的过程,不再详述。
第一,当依据图2所示的实施例的流程确定待处理数据实体的存储路径时,数据存储的过程可以是:
将待处理数据实体记为实体A,实体A的标识码包括64bit,将其拆分为8等份,得到的每个目标分片包含8bit,假设第一个至第八个目标分片对应的十进制数值依次是10,12,21,16,18,25,40和45。
请参考图4,首先将多叉树的根节点确定为当前节点,读取根节点的位图,根节点位于多叉树的第一层级,因此从根节点的位图中查找得到第一层级对应的第一个目标分片所对应的二进制位,也就是根节点的位图中第11个二进制位,进而根据第11个二进制位对应的指向关系(即指针)在和根节点连接的第二层级节点中,查找得到第11个二进制位所指向的节点。
将第二层级中查找到的节点记为节点2,读取节点2的位图后,由于第二层级所对应的,第二个目标分片,其十进制数值为12,因此在节点2的位图中查找到第13个二进制位,然后按第13个二进制位对应的指向关系,在位于第三层级的节点2的多个子节点中,查找得到第13个二进制所指向的节点,记为节点3。
在节点3中,利用所属的第三层级所对应的第三个目标分片的十进制数值,从节点3的位图中找到第22个二进制位,进而通过对应的指向关系,在位于第四层级的节点3的多个子节点中找到第22个二进制位所指向的节点,记为节点4。
以此类推,最终可以根据节点7的位图中第41(第七个目标分片对应的十进制数值加1)个二进制位,查找得到第41个二进制位所指向的节点8,然后,根据节点8的位图中第46(第八个目标分片对应的十进制数值加1)个二进制位,查找得到第46个二进制位所指向的第九层级的节点,记为节点9。
至此,由根节点和查找得到的节点2至节点9,以及相邻层级之间由目标分片对应的二进制位所确定的指向关系构成的这一节点路径,就是本次存储过程中确定出的实体A的存储路径,其中,节点9就是该存储路径中最低层级的节点。
确定出上述存储路径之后,就可以将实体A保存在存储介质中,然后将实体A在存储介质中的存储地址,即实体A的物理地址(记为地址A)写入上述节点9。
从上述存储过程可以看出,每一个数据实体的存储路径,均由该数据实体的所有分片的十进制数值确定,而每一个数据实体的标识码都是唯一的,因此,上述存储过程可以确保每一个数据实体均具有唯一的存储路径,当有多个数据实体需要存储时,由于先后存入的数据实体的存储路径不冲突,后存入的数据实体不会对先存入的数据实体造成影响,相对的就不需要对先存入的数据实体进行调整,因此在有多个数据需要存储时,采用图2所示的方法确定存储路径,可以提高存储效率。
第二,当依据图3所示的实施例的流程确定待处理数据实体的存储路径时,数据存储的过程可以是:
假设有3个待处理数据实体,分别记为实体A,B和C,对应的物理地址分别是地址A,地址B和地址C,标识码均为64bit,每个标识码均拆分为8个目标分片。
其中,实体A的8个目标分片所对应的十进制数值依次是10,12,21,16,18,25,40和45。
实体B的8个目标分片所对应的十进制数值依次是10,16,32,19,19,25,40和45。
实体C的8个目标分片对应的十进制数值依次是10,16,35,70,100,121,40和45。
请参考图5,假设首先存储的是实体A。
获得实体A的各个目标分片后,参考图3所示的方法,首先将根节点(即图5所示的节点1)确定为当前节点,然后查找出当前节点的位图中对应位置的二进制为,也就是第11个二进制位,并判断根节点的第11个二进制位的管辖数据量是否为零。
假设此时根节点的位图中第11个二进制位的管辖数据量为零,于是将根节点,根节点的位图中第11个二进制位所指向的节点2,以及两者间的指向关系构成的节点路径,确定为实体A的存储路径,进而将地址A写入节点2。
存入实体A之后,经过一段时间发现需要存储实体B,于是再次将节点1确定为当前节点,读取其位图,并找到节点1的位图中第11个二进制位(见上文,实体B和实体A的第一个目标分片的十进制数值相同,均为10)。
此时,节点1的位图中第11个二进制位所指向节点为节点2,而以节点2为根节点的子多叉树(包括节点2本身)存储有地址A,因而这一子多叉树存储的物理地址数量大于0,即节点1的位图中第11个二进制位的管辖数据量大于零。
因此,将查找到的节点2确定为当前节点,继续读取节点2的位图,并找到节点2的位图中第17(实体B的第二个目标分片的十进制数值加1)个二进制位。
参考图5中存储实体B的结构示意图,在判断出第17个二进制位的管辖数据量等于零之后,基于节点2的位图中第17个二进制位,在第三层级中可以找到第17个二进制位所指向的节点3-2,然后将节点1→节点2→节点3-2这一节点路径,确定为实体B的存储路径,将地址B写入该路径最低层级的节点,即节点3-2中。
另一方面,在确定实体B的存储路径时,最后一次确定的当前节点为节点2,确定出实体B的存储路径后,发现当前节点,即节点2存储有实体A的物理地址。
于是,参考上述图3所示的方法中的步骤S309至S311,在实体A的多个分片中,获得节点2所属层级,即第二层级对应的第二个分片,基于其十进制数值12,在节点2的位图中找到第13个二进制位,进而在第三层级中找到第13个二进制位所指向的节点3-1,然后将节点2存储的地址A,转存至节点3-1中。
又经过一段时间后,发现需要存储实体C,首先在根节点的位图中找到第11个二进制位,发现根节点位图的第11个二进制位的管辖数据量大于0(此时以节点2为根节点的子多叉树已存储地址A和地址B)。
于是将第11个二进制位所指向的节点2确定为当前节点,查找节点2的位图中第17个二进制位,由于此时第17个二进制位所指向的节点3-2存储有地址B,因而判断出节点2的位图中第16个二进制位的管辖数据量也大于零。
继续查找到节点3-2,在节点3-2的位图中找到第36(实体C的第三个分片的十进制数值加1)个二进制位,并判断出节点3-2的位图中第36个二进制位的管辖数据量等于零,于是,查找得到节点3-2的位图中第36个二进制位所指向的第四层级的节点,也就是节点4-2,将节点1→节点2→节点3-2→节点4-2构成的节点路径,确定为实体C的存储路径,在该存储路径的最低层级节点,即节点4-2中写入地址C。
同时,在确定出实体C的存储路径后,最后一次确定的当前节点为节点3-2,而节点3-2存储有实体B的物理地址,即地址B。
于是,基于上述图3所示的方法中的步骤S309至S311,获得实体B的第三个分片的十进制数值32,根据该十进制数值在节点3-2的位图中找到第33个二进制,并通过位图中第33个二进制位在第四层级中找到第33个二进制位所指向的节点4-1,将原本节点3-2中存储的地址B,转存至节点4-1中。
通过上述存储过程可以看出,若需要存储的数据实体的数量较少,则按图3所示的方法确定存储路径,可以减少确定存储路径时所要执行的查找操作的次数,例如,存储实体A时,只需要执行一次查找,即在节点1的位图中查找第11个二进制位,并基于此找到第二层级的节点2,存储实体B时,只需要执行两次查找,即基于节点1的位图的第11个二进制位找到节点2,基于节点2的位图的第17个二进制位找到节点3-2。
因此,当需要存储的数据实体较少时,采用如图3所示的方法确定存储路径,可以提高存储数据实体,以及后续查找数据实体的效率。
另一方面,结合图5可以看出,当数据实体较少时,采用如图3所示的方法确定的存储路径较短,即一个数据实体的存储路径所包含的节点数量较少,因此数据实体较少的情况下,在存储数据时采用如图3所示的方法确定存储路径,还可以减少多叉树中节点的数量,进一步减少多叉树所占用的存储空间。
本申请任一实施例所提供的数据处理的方法,可以适用于如图6所示的系统,请参考图6,该系统包括服务器和与服务器连接的若干个客户端,服务器具体设置有处理器和独立的存储介质(存储器,如大容量的硬盘),处理器本身配置有小容量的内存,本申请实施例中涉及的多叉树可以存储在内存中,而各个数据实体则保存在存储介质中,处理器用于执行本申请任一实施例所提供的数据处理方法。
在具体应用中,客户端通过和用户交互而产生处理指令,然后将处理指令发送至服务器。
若客户端和用户交互后,产生了新的待处理数据实体,那么客户端可以向服务器发送存储待处理数据实体的处理指令,该处理指令携带有待处理数据实体,服务器的处理器收到处理指令后,一方面在存储介质中确定一个物理地址,然后将待处理数据实体保存在该物理地址上,也就是向存储介质写入待处理数据实体,另一方面,处理器访问内存中的多叉树,利用这个待处理数据实体的标识码执行前述实施例提供的数据处理的方法,在多叉树中确定出待处理数据实体的存储路径,然后将待处理数据实体的物理地址,保存在存储路径最底层的节点中,也就是将物理地址写入多叉树。
若客户端和用户交互后,需要读取某个待处理数据实体,客户端可以向服务器发送读取待处理数据实体的处理指令,该处理指令携带有待处理数据实体的标识码,服务器的处理器收到该处理指令后,可以访问内存中的多叉树,利用待处理数据实体的标识码执行前述实施例的方法,确定出存储路径,进而在存储路径最底层的节点中读取出待处理数据实体的物理地址,也就是从多叉树查找物理地址,然后根据这一物理地址,从存储介质读取待处理数据实体,并将待处理数据实体反馈给客户端。
基于本申请任一实施例所提供的数据处理的方法,本申请实施例还提供一种数据处理的装置,请参考图7,该装置可以包括如下单元:
获取单元701,用于获取处理指令。
其中,处理指令包括待处理数据实体的标识码;待处理数据实体的标识码为二进制形式。
拆分单元702,用于将待处理数据实体的标识码拆分为M等份,得到M个目标分片。
其中,每一个目标分片均对应于多叉树中的一个层级;M为预设的正整数。
确定单元703,用于根据M个目标分片的十进制数值,在多叉树中确定出待处理数据实体的存储路径。
其中,待处理数据实体的存储路径包括多个属于多叉树的不同层级的节点和每两个相邻层级节点间的指向关系;每一个指向关系中较低层级节点的位置均由较高层级节点的位图中第A+1个二进制位确定,A是较高层级节点所属层级对应的目标分片的十进制数值;多叉树中每一层级的节点的位图均包含顺序排列的多个二进制位。
执行单元704,用于基于待处理数据实体的存储路径中最低层级节点,对待处理数据实体执行处理指令。
可选的,确定单元703根据M个目标分片的十进制数值,在多叉树中确定出待处理数据实体的存储路径时,具体用于:
将多叉树的根节点确定为当前节点,并读取当前节点的位图;
若当前节点所属层级对应的目标分片不是M个目标分片中的最后一个,根据当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到当前节点的位图中第B+1个二进制位所指向的节点;其中,下一层级指代当前节点所属层级的下一层级;B是当前节点所属层级对应的目标分片的十进制数值;
将本次查找得到的节点确定为当前节点,返回执行读取当前节点的位图步骤;
若当前节点所属层级对应的目标分片是M个目标分片中的最后一个,根据当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到当前节点的位图中第B+1个二进制位所指向的节点;
将根节点、查找得到的每一个节点以及节点间的指向关系所构成的节点路径,确定为待处理数据实体的存储路径。
可选的,确定单元703根据M个目标分片的十进制数值,在多叉树中确定出待处理数据实体的存储路径时,具体用于:
将多叉树的根节点确定为当前节点,并读取当前节点的位图;
若当前节点的位图中第B+1个二进制位的管辖数据量等于零,根据当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到当前节点的位图中第B+1个二进制位所指向的节点;其中,多叉树的一个节点的位图中的某个二进制位的管辖数据量,是指以本二进制位所指向的节点为根节点的子多叉树所存储的数据实体的个数;B是当前节点所属层级对应的目标分片的十进制数值;下一层级指代当前节点所属层级的下一层级;
将根节点、查找得到的节点以及节点间的指向关系构成的节点路径,确定为待处理数据实体的存储路径;
若当前节点的位图中第B+1个二进制位的管辖数据量大于零,根据当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到当前节点的位图中第B+1个二进制位所指向的节点;
将当前节点的位图中第B+1个二进制位所指向的下一层级节点,确定为当前节点,返回执行读取当前节点的位图步骤。
可选的,确定单元703将根节点、查找得到的每一个节点以及节点间的指向关系所构成的节点路径,确定为待处理数据实体的存储路径之后,还用于:
若执行完一次确定当前节点操作后的当前节点存储有数据实体的物理地址,获得当前节点所对应的数据实体的M个分片;其中,当前节点所对应的数据实体的M个分片由当前节点所对应的数据实体的标识码按M等份拆分得到;数据实体的物理地址,是指本数据实体在存储介质的存储地址;
根据当前节点的位图中第C+1个二进制位对应的指向关系,在下一层级的节点中查找得到当前节点的位图中第C+1个二进制位所指向的节点;其中,C是当前节点所对应的数据实体的M个分片中,与当前节点所属层级对应的分片的十进制数值;
将当前节点所存物理地址,转存至当前节点的位图中第C+1个二进制位所指向的节点。
可选的,执行单元704基于待处理数据实体的存储路径中最低层级节点,对待处理数据实体执行处理指令时,具体用于:
若处理指令包括存储待处理数据实体,将待处理数据实体的物理地址存储至待处理数据实体的存储路径中最低层级节点;其中,待处理数据实体的物理地址,是指待处理数据实体在存储介质的存储地址;处理指令携带有待处理数据实体的物理地址;
若处理指令包括读取待处理数据实体,从待处理数据实体的存储路径中最低层级节点读取待处理数据实体的物理地址,并基于待处理数据实体的物理地址读取待处理数据实体。
本实施例所提供的数据处理装置,其具体工作原理可以参考本申请任一实施例所提供的数据处理的方法中的相关步骤,此处不再详述。
本申请提供一种数据处理的装置,其中,获取单元701获取处理指令,其中,处理指令包括待处理数据实体的标识码;待处理数据实体的标识码为二进制形式;拆分单元702将待处理数据实体的标识码拆分为M等份,得到M个目标分片;其中,每一个目标分片均对应于多叉树中的一个层级;M为预设的正整数;确定单元703根据M个目标分片的十进制数值,在多叉树中确定出待处理数据实体的存储路径;其中,待处理数据实体的存储路径包括多个属于多叉树的不同层级的节点和每两个相邻层级节点间的指向关系;每一个指向关系中较低层级节点的位置均由较高层级节点的位图中第A+1个二进制位确定,A是较高层级节点所属层级对应的目标分片的十进制数值;多叉树中每一层级的节点的位图均包含顺序排列的多个二进制位;执行单元704基于待处理数据实体的存储路径中最低层级节点,对待处理数据实体执行处理指令。本方案中,每一个节点间指向关系只需要通过高层级节点的位图中相应位置的一个二进制位就可以表示,因此高层级节点只需要保存多个二进制为即可表示自身和下一层级节点的指向关系,显著的减小了多叉树所占用的存储空间。
本申请实施例还提供一种计算机存储介质,用于存储计算机程序,该计算机程序被执行时,具体用于实现本申请任一实施例所提供的数据处理的方法。
本申请实施例还提供一种电子设备,如图8所示,包括存储器801和处理器802。
其中,存储器801用于存储计算机程序。
处理器802用于执行上述计算机程序,具体用于实现本申请任一实施例所提供的数据处理的方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述任一方面实施例中提供的数据处理的方法。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
需要注意,本发明中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种数据处理的方法,其特征在于,包括:
获取处理指令,其中,所述处理指令包括待处理数据实体的标识码;所述待处理数据实体的标识码为二进制形式;
将所述待处理数据实体的标识码拆分为M等份,得到M个目标分片;其中,每一个所述目标分片均对应于多叉树中的一个层级;M为预设的正整数;
根据所述M个目标分片的十进制数值,在所述多叉树中确定出所述待处理数据实体的存储路径;其中,所述待处理数据实体的存储路径包括多个属于所述多叉树不同层级的节点和每两个相邻层级节点间的指向关系;每一个所述指向关系中较低层级节点的位置均由较高层级节点的位图中第A+1个二进制位确定,A是所述较高层级节点所属层级对应的目标分片的十进制数值;所述多叉树中每一层级的节点的位图均包含顺序排列的多个二进制位;
基于所述待处理数据实体的存储路径中最低层级节点,对所述待处理数据实体执行所述处理指令。
2.根据权利要求1所述的方法,其特征在于,所述根据所述M个目标分片的十进制数值,在所述多叉树中确定出所述待处理数据实体的存储路径,包括:
将所述多叉树的根节点确定为当前节点,并读取所述当前节点的位图;
若所述当前节点所属层级对应的目标分片不是所述M个目标分片中的最后一个,根据所述当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到所述当前节点的位图中第B+1个二进制位所指向的节点;其中,所述下一层级指代所述当前节点所属层级的下一层级;B是所述当前节点所属层级对应的目标分片的十进制数值;
将本次查找得到的节点确定为当前节点,返回执行所述读取所述当前节点的位图步骤;
若所述当前节点所属层级对应的目标分片是所述M个目标分片中的最后一个,根据所述当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到所述当前节点的位图中第B+1个二进制位所指向的节点;
将所述根节点、查找得到的每一个节点以及节点间的指向关系所构成的节点路径,确定为所述待处理数据实体的存储路径。
3.根据权利要求1所述的方法,其特征在于,所述根据所述M个目标分片的十进制数值,在所述多叉树中确定出所述待处理数据实体的存储路径,包括:
将所述多叉树的根节点确定为当前节点,并读取所述当前节点的位图;
若所述当前节点的位图中第B+1个二进制位的管辖数据量等于零,根据所述当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到所述当前节点的位图中第B+1个二进制位所指向的节点;其中,B是所述当前节点所属层级对应的所述目标分片的十进制数值,所述多叉树的一个节点的位图中的某个二进制位的管辖数据量,是指以本二进制位所指向的节点为根节点的子多叉树所存数据实体的物理地址的个数;数据实体的物理地址,是指本数据实体在存储介质的存储地址;所述下一层级指代所述当前节点所属层级的下一层级;
将所述根节点、查找得到的节点以及节点间的指向关系构成的节点路径,确定为所述待处理数据实体的存储路径;
若所述当前节点的位图中第B+1个二进制位的管辖数据量大于零,根据所述当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到所述当前节点的位图中第B+1个二进制位所指向的节点;
将所述当前节点的位图中第B+1个二进制位所指向的下一层级节点,确定为当前节点,返回执行所述读取所述当前节点的位图步骤。
4.根据权利要求3所述的方法,其特征在于,所述将所述根节点、查找得到的每一个节点以及节点间的指向关系所构成的节点路径,确定为所述待处理数据实体的存储路径之后,还包括:
若执行完一次确定当前节点操作后的当前节点存储有数据实体的物理地址,获得所述当前节点所对应的数据实体的M个分片;其中,所述当前节点所对应的数据实体的M个分片由所述当前节点所对应的数据实体的标识码按M等份拆分得到;数据实体的物理地址,是指本数据实体在存储介质的存储地址;
根据所述当前节点的位图中第C+1个二进制位对应的指向关系,在下一层级的节点中查找得到所述当前节点的位图中第C+1个二进制位所指向的节点;其中,C是所述当前节点所对应的数据实体的M个分片中,与所述当前节点所属层级对应的分片的十进制数值;
将所述当前节点所存物理地址,转存至所述当前节点的位图中第C+1个二进制位所指向的节点。
5.根据权利要求1至4任意一项所述的方法,其特征在于,所述基于所述待处理数据实体的存储路径中最低层级节点,对所述待处理数据实体执行所述处理指令,包括:
若所述处理指令包括存储所述待处理数据实体,将所述待处理数据实体的物理地址存储至所述待处理数据实体的存储路径中最低层级节点;其中,所述待处理数据实体的物理地址,是指所述待处理数据实体在存储介质的存储地址;所述处理指令携带有所述待处理数据实体的物理地址;
若所述处理指令包括读取所述待处理数据实体,从所述待处理数据实体的存储路径中最低层级节点读取所述待处理数据实体的物理地址,并基于所述待处理数据实体的物理地址读取所述待处理数据实体。
6.一种数据处理的装置,其特征在于,包括:
获取单元,用于获取处理指令,其中,所述处理指令包括待处理数据实体的标识码;所述待处理数据实体的标识码为二进制形式;
拆分单元,用于将所述待处理数据实体的标识码拆分为M等份,得到M个目标分片;其中,每一个所述目标分片均对应于多叉树中的一个层级;M为预设的正整数;
确定单元,用于根据所述M个目标分片的十进制数值,在所述多叉树中确定出所述待处理数据实体的存储路径;其中,所述待处理数据实体的存储路径包括多个属于所述多叉树的不同层级的节点和每两个相邻层级节点间的指向关系;每一个所述指向关系中较低层级节点的位置均由较高层级节点的位图中第A+1个二进制位确定,A是所述较高层级节点所属层级对应的目标分片的十进制数值;所述多叉树中每一层级的节点的位图均包含顺序排列的多个二进制位;
执行单元,用于基于所述待处理数据实体的存储路径中最低层级节点,对所述待处理数据实体执行所述处理指令。
7.根据权利要求6所述的装置,其特征在于,所述确定单元根据所述M个目标分片的十进制数值,在所述多叉树中确定出所述待处理数据实体的存储路径时,具体用于:
将所述多叉树的根节点确定为当前节点,并读取所述当前节点的位图;
若所述当前节点的位图中第B+1个二进制位的管辖数据量等于零,根据所述当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到所述当前节点的位图中第B+1个二进制位所指向的节点;其中,所述多叉树的一个节点的位图中的某个二进制位的管辖数据量,是指以本二进制位所指向的节点为根节点的子多叉树所存储的数据实体的个数;B是所述当前节点所属层级对应的所述目标分片的十进制数值;所述下一层级指代所述当前节点所属层级的下一层级;
将所述根节点、查找得到的节点以及节点间的指向关系构成的节点路径,确定为所述待处理数据实体的存储路径;
若所述当前节点的位图中第B+1个二进制位的管辖数据量大于零,根据所述当前节点的位图中第B+1个二进制位对应的指向关系,在下一层级的节点中查找得到所述当前节点的位图中第B+1个二进制位所指向的节点;
将所述当前节点的位图中第B+1个二进制位所指向的下一层级节点,确定为当前节点,返回执行所述读取所述当前节点的位图步骤。
8.根据权利要求6或7所述的装置,其特征在于,所述执行单元基于所述待处理数据实体的存储路径中最低层级节点,对所述待处理数据实体执行所述处理指令时,具体用于:
若所述处理指令包括存储所述待处理数据实体,将所述待处理数据实体的物理地址存储至所述待处理数据实体的存储路径中最低层级节点;其中,所述待处理数据实体的物理地址,是指所述待处理数据实体在存储介质的存储地址;所述处理指令携带有所述待处理数据实体的物理地址;
若所述处理指令包括读取所述待处理数据实体,从所述待处理数据实体的存储路径中最低层级节点读取所述待处理数据实体的物理地址,并基于所述待处理数据实体的物理地址读取所述待处理数据实体。
9.一种计算机存储介质,其特征在于,用于存储计算机程序,所述计算机程序被执行时,具体用于实现如权利要求1至5任意一项所述的数据处理的方法。
10.一种电子设备,其特征在于,包括存储器和处理器;
其中,所述存储器用于存储计算机程序;
所述处理器用于执行所述计算机程序,具体用于实现如权利要求1至5任意一项所述的数据处理的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110197239.2A CN112817538B (zh) | 2021-02-22 | 2021-02-22 | 数据处理的方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110197239.2A CN112817538B (zh) | 2021-02-22 | 2021-02-22 | 数据处理的方法、装置、设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112817538A true CN112817538A (zh) | 2021-05-18 |
CN112817538B CN112817538B (zh) | 2022-08-30 |
Family
ID=75864640
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110197239.2A Active CN112817538B (zh) | 2021-02-22 | 2021-02-22 | 数据处理的方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112817538B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113656400A (zh) * | 2021-07-08 | 2021-11-16 | 上海二三四五网络科技有限公司 | 一种特征数据的编码方法及装置 |
CN116088771A (zh) * | 2023-04-06 | 2023-05-09 | 国网浙江省电力有限公司营销服务中心 | 基于能源互联网的工单数据多层次存储方法及系统 |
CN117236236A (zh) * | 2023-11-10 | 2023-12-15 | 杭州行芯科技有限公司 | 一种芯片设计数据管理方法、装置、电子设备及存储介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1664790A (zh) * | 2004-02-26 | 2005-09-07 | 伊姆西公司 | 增加数据存储容量的方法和装置 |
CN101944067A (zh) * | 2009-04-30 | 2011-01-12 | 国际商业机器公司 | 存储数据的方法和存储器系统 |
CN103780491A (zh) * | 2012-10-23 | 2014-05-07 | 上海博达数据通信有限公司 | 一种实现IPv6快速路由查找的方法 |
US20150199383A1 (en) * | 2014-01-16 | 2015-07-16 | Nokia Corporation | Systems and Methods for Indexing and Retrieving Images |
CN105550332A (zh) * | 2015-12-21 | 2016-05-04 | 河海大学 | 一种基于双层索引结构的起源图查询方法 |
CN106021466A (zh) * | 2016-05-17 | 2016-10-12 | 浙江大华技术股份有限公司 | 一种存储数据的方法及装置 |
CN110297924A (zh) * | 2019-06-26 | 2019-10-01 | 深圳飞马机器人科技有限公司 | 点云数据的处理及渲染方法、装置、设备及存储介质 |
CN110413611A (zh) * | 2019-06-24 | 2019-11-05 | 腾讯科技(深圳)有限公司 | 数据存储、查询方法及装置 |
CN110958324A (zh) * | 2019-12-12 | 2020-04-03 | 上海优扬新媒信息技术有限公司 | 一种区块链网络的数据处理方法及装置 |
CN111247802A (zh) * | 2019-01-10 | 2020-06-05 | 深圳市大疆创新科技有限公司 | 用于三维数据点集处理的方法和设备 |
-
2021
- 2021-02-22 CN CN202110197239.2A patent/CN112817538B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1664790A (zh) * | 2004-02-26 | 2005-09-07 | 伊姆西公司 | 增加数据存储容量的方法和装置 |
CN101944067A (zh) * | 2009-04-30 | 2011-01-12 | 国际商业机器公司 | 存储数据的方法和存储器系统 |
CN103780491A (zh) * | 2012-10-23 | 2014-05-07 | 上海博达数据通信有限公司 | 一种实现IPv6快速路由查找的方法 |
US20150199383A1 (en) * | 2014-01-16 | 2015-07-16 | Nokia Corporation | Systems and Methods for Indexing and Retrieving Images |
CN105550332A (zh) * | 2015-12-21 | 2016-05-04 | 河海大学 | 一种基于双层索引结构的起源图查询方法 |
CN106021466A (zh) * | 2016-05-17 | 2016-10-12 | 浙江大华技术股份有限公司 | 一种存储数据的方法及装置 |
CN111247802A (zh) * | 2019-01-10 | 2020-06-05 | 深圳市大疆创新科技有限公司 | 用于三维数据点集处理的方法和设备 |
CN110413611A (zh) * | 2019-06-24 | 2019-11-05 | 腾讯科技(深圳)有限公司 | 数据存储、查询方法及装置 |
CN110297924A (zh) * | 2019-06-26 | 2019-10-01 | 深圳飞马机器人科技有限公司 | 点云数据的处理及渲染方法、装置、设备及存储介质 |
CN110958324A (zh) * | 2019-12-12 | 2020-04-03 | 上海优扬新媒信息技术有限公司 | 一种区块链网络的数据处理方法及装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113656400A (zh) * | 2021-07-08 | 2021-11-16 | 上海二三四五网络科技有限公司 | 一种特征数据的编码方法及装置 |
CN113656400B (zh) * | 2021-07-08 | 2024-02-27 | 上海二三四五网络科技有限公司 | 一种特征数据的编码方法及装置 |
CN116088771A (zh) * | 2023-04-06 | 2023-05-09 | 国网浙江省电力有限公司营销服务中心 | 基于能源互联网的工单数据多层次存储方法及系统 |
CN117236236A (zh) * | 2023-11-10 | 2023-12-15 | 杭州行芯科技有限公司 | 一种芯片设计数据管理方法、装置、电子设备及存储介质 |
CN117236236B (zh) * | 2023-11-10 | 2024-04-16 | 杭州行芯科技有限公司 | 一种芯片设计数据管理方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112817538B (zh) | 2022-08-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112817538B (zh) | 数据处理的方法、装置、设备和存储介质 | |
CN108255958B (zh) | 数据查询方法、装置和存储介质 | |
JP5996088B2 (ja) | 暗号ハッシュ・データベース | |
US8996611B2 (en) | Parallel serialization of request processing | |
CN106294190B (zh) | 一种存储空间管理方法及装置 | |
CN108205577B (zh) | 一种数组构建、数组查询的方法、装置及电子设备 | |
CN106874348B (zh) | 文件存储和索引方法、装置及读取文件的方法 | |
JP2003114816A (ja) | コンピュータメモリにインデックスを記憶するデータ構造 | |
US10802923B2 (en) | Method and apparatus for incremental backup based on file paths and a prefix tree | |
CN112860592B (zh) | 基于链表的数据缓存方法、装置、电子设备和存储介质 | |
CN109377383A (zh) | 产品数据同步方法、装置、计算机设备及存储介质 | |
CN115964002B (zh) | 一种电能表终端档案管理方法、装置、设备及介质 | |
CN109951541A (zh) | 一种流水号生成方法及服务器 | |
CN112148217B (zh) | 全闪存储系统的重删元数据的缓存方法、装置及介质 | |
CN109460406B (zh) | 一种数据处理方法及装置 | |
CN116578746A (zh) | 对象去重方法及装置 | |
TW583542B (en) | NUMA page selection using coloring | |
CN101158955A (zh) | 一种中文词库的构造方法 | |
KR20160113167A (ko) | 최적화된 데이터 콘덴서 및 방법 | |
CN108376054B (zh) | 一种对标识数据进行索引的处理方法及装置 | |
CN111026762A (zh) | 红黑树索引生成方法、装置、电子设备及存储介质 | |
CN110781101A (zh) | 一种一对多映射关系的存储方法、装置、电子设备及介质 | |
CN116049180A (zh) | 面向Paas平台的租户数据处理方法及装置 | |
CN113132241B (zh) | Acl模板动态配置方法及装置 | |
CN111858590B (zh) | 一种存储系统元数据组织方法、系统、终端及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40048354 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |