CN103970795A - 一种数据处理方法、装置及系统 - Google Patents
一种数据处理方法、装置及系统 Download PDFInfo
- Publication number
- CN103970795A CN103970795A CN201310043254.7A CN201310043254A CN103970795A CN 103970795 A CN103970795 A CN 103970795A CN 201310043254 A CN201310043254 A CN 201310043254A CN 103970795 A CN103970795 A CN 103970795A
- Authority
- CN
- China
- Prior art keywords
- node
- chained list
- back end
- data
- data value
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据处理方法、装置及系统,所述方法通过预先对大数量数据以差值压缩存储的方式存储至数据节点链表中,并对数据节点链表使用跳表形式(多层数据节点链表)进行存储,由此在进行某一数据节点查询时,只需由跳表最顶层的数据节点链表开始查询,无需现有技术中对数据节点链表中的节点进行逐一对比查询,从而在降低内存存储空间的同时,使得算法复杂度降低,提高数据存储性能及数据查询效率。
Description
技术领域
本申请涉及数据存储及查询技术领域,特别涉及一种数据处理方法、装置及系统。
背景技术
随着计算科学与信息化工程的发展,对于某一服务器来说,待处理的数据呈指数增长,数据量达到或超过了TP、PB级别。而随着数据量的增加,对服务器的存储能力要求越来越高,同时,对数据查询的性能相对下降。
目前,亟需一种数据处理方案解决大数据量的存储及查询问题。
发明内容
本申请所要解决的技术问题是提供一种数据处理方法、装置及系统,用以解决现有技术中无法解决大数据量的存储及查询的技术问题。
本申请提供了一种数据处理方法,应用于预设的数据存储单元,所述数据存储单元包括至少两个节点链表,第一节点链表中的各个数据节点依据其实际数据值以预设排序规则链接,所述顶层节点链表包括表头数据节点和至少一个中间数据节点,且每个所述数据节点的数据内容为其实际数据值与其前一个非空数据节点的实际数据值的差值,以预设节点选定规则在所述顶层节点链表中选取部分中间数据节点,将选取的部分中间数据节点与所述表头数据节点组成第二节点链表,且所述第二节点链表中各个数据节点之间的链接顺序与其在所述第一节点链表中的顺序一致,依据第二节点链表的组成规则获取其他节点链表及顶层节点链表,所述方法包括:
接收数据查询请求,所述数据查询请求包括待查询数据节点的数据值标识;
在所述顶层节点链表中查询是否含有与所述数据值标识相对应的数据节点,如果是,返回所述顶层节点链表中查询到的数据节点,结束当前数据处理,否则,确定所述顶层节点链表中的第一目标数据节点,所述数据值标识对应的数据值介于所述第一目标数据节点的实际数据值与其所在所述顶层节点链表中下一个数据节点的实际数据值之间;
在所述顶层节点链表的下一层节点链表中所述第一目标数据节点的后续数据节点中,查询是否含有与所述数据值标识相对应的数据节点,如果是,返回当前节点链表中查询到的数据节点,结束当前数据处理,否则,确定所述当前节点链表中的第二目标数据节点,所述数据值标识对应的数据值介于所述第二目标数据节点的实际数据值与其所在所述当前节点链表中下一个数据节点的实际数据值之间,继续在所述当前节点链表的下一层节点链表中所述第二目标数据节点的后续数据节点中,查询是否含有与所述数据值标识相对应的数据节点,直到在所述数据存储单元中查询到与所述数据值标识相对应的数据节点,结束当前数据处理。
上述方法,优选的,所述预设排序规则为由小到大或由大到小的排序规则;
所述第一节点链表中的各个数据节点依据其实际数据值以预设排序规则链接包括:
将所述第一节点链表中的各个数据节点以由小到大或由大到小的排序规则排序;
其中,所述第一节点链表中,每个所述数据节点存储其下一个非空数据节点的地址信息。
上述方法,优选的,所述每个所述数据节点的数据内容为其实际数据值与其前一个非空数据节点的实际数据值的差值包括:
所述第一节点链表中,每个所述数据节点存储其实际数据值与其前一个非空数据节点的实际数据值的差值,所述差值作为其所属数据节点的数据内容。
本申请还提供了一种数据处理装置,应用于数据存储单元,所述数据存储单元包括至少两个节点链表,第一节点链表中的各个数据节点依据其实际数据值以预设排序规则链接,所述顶层节点链表包括表头数据节点和至少一个中间数据节点,且每个所述数据节点的数据内容为其实际数据值与其前一个非空数据节点的实际数据值的差值,以预设节点选定规则在所述顶层节点链表中选取部分中间数据节点,将选取的部分中间数据节点与所述表头数据节点组成第二节点链表,且所述第二节点链表中各个数据节点之间的链接顺序与其在所述第一节点链表中的顺序一致,依据第二节点链表的组成规则获取其他节点链表及顶层节点链表,所述装置包括:
请求接收单元,用于接收数据查询请求,所述数据查询请求包括待查询数据节点的数据值标识;
第一查询单元,用于在所述顶层节点链表中查询是否含有与所述数据值标识相对应的数据节点,如果是,返回所述顶层节点链表中查询到的数据节点,结束当前数据处理,否则,确定所述顶层节点链表中的第一目标数据节点,触发第二查询单元,所述数据值标识对应的数据值介于所述第一目标数据节点的实际数据值与其所在所述顶层节点链表中下一个数据节点的实际数据值之间;
所述第二查询单元,用于在所述顶层节点链表的下一层节点链表中所述第一目标数据节点的后续数据节点中,查询是否含有与所述数据值标识相对应的数据节点,如果是,返回当前节点链表中查询到的数据节点,结束当前数据处理,否则,确定所述当前节点链表中的第二目标数据节点,触发第三查询单元,所述数据值标识对应的数据值介于所述第二目标数据节点的实际数据值与其所在所述当前节点链表中下一个数据节点的实际数据值之间;
所述第三查询单元,用于继续在所述当前节点链表的下一层节点链表中所述第二目标数据节点的后续数据节点中,查询是否含有与所述数据值标识相对应的数据节点,直到在所述数据存储单元中查询到与所述数据值标识相对应的数据节点,结束当前数据处理。
上述装置,优选的,所述预设排序规则为由小到大或由大到小的排序规则。
上述装置,优选的:
所述第一节点链表中的各个数据节点以由小到大或由大到小的排序规则排列;
其中,所述第一节点链表中,每个所述数据节点存储有其下一个非空数据节点的地址信息。
上述装置,优选的,所述第一节点链表中,每个所述数据节点存储其实际数据值与其前一个非空数据节点的实际数据值的差值,所述差值作为其所属数据节点的数据内容。
本申请还提供了一种数据处理系统,包括数据存储单元及如上述任意一项所述的数据处理装置,其中:
所述数据存储单元包括至少两个节点链表,第一节点链表中的各个数据节点依据其实际数据值以预设排序规则链接,所述顶层节点链表包括表头数据节点和至少一个中间数据节点,且每个所述数据节点的数据内容为其实际数据值与其前一个非空数据节点的实际数据值的差值,以预设节点选定规则在所述顶层节点链表中选取部分中间数据节点,将选取的部分中间数据节点与所述表头数据节点组成第二节点链表,且所述第二节点链表中各个数据节点之间的链接顺序与其在所述第一节点链表中的顺序一致,依据第二节点链表的组成规则获取其他节点链表及顶层节点链表。
由上述方案可知,本申请提供的一种数据处理方法、装置及系统,通过预先对大数量数据以差值压缩存储的方式存储至数据节点链表中,并对数据节点链表使用跳表形式(多层数据节点链表)进行存储,由此在进行某一数据节点查询时,只需由跳表最顶层的数据节点链表开始查询,无需现有技术中对数据节点链表中的节点进行逐一对比查询,从而在降低内存存储空间的同时,使得算法复杂度降低,提高数据存储性能及数据查询效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请提供的一种数据处理方法实施例一的流程图;
图2为本申请实施例一中数据存储单元的结构示意图;
图3为本申请实施例一中数据存储单元的另一示例图;
图4为本申请实施例一的应用示例图;
图5为本申请实施例一的另一应用示例图;
图6为本申请实施例一的又一应用示例图;
图7为本申请提供的一种数据处理装置实施例二的结构示意图;
图8为本申请实施例二的应用示例图;
图9为本申请提供的一种数据处理系统实施例三的结构式示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参考图1,其示出了本申请提供的一种数据处理方法实施例一的流程图,所述方法应用于预设的数据存储单元,所述数据存储单元包括至少两个节点链表,第一节点链表中的各个数据节点依据其实际数据值以预设排序规则链接,所述顶层节点链表包括表头数据节点和至少一个中间数据节点,且每个所述数据节点的数据内容为其实际数据值与其前一个非空数据节点的实际数据值的差值,以预设节点选定规则在所述顶层节点链表中选取部分中间数据节点,将选取的部分中间数据节点与所述表头数据节点组成第二节点链表,且所述第二节点链表中各个数据节点之间的链接顺序与其在所述第一节点链表中的顺序一致,依据第二节点链表的组成规则获取其他节点链表及顶层节点链表,所述方法包括:
步骤101:接收数据查询请求,所述数据查询请求包括待查询数据节点的数据值标识。
需要说明的是,所述数据存储单元包括数据存储服务器等数据存储装置。
其中,若所述数据存储单元包括两个节点链表,那么所述第二节点链表即为所述顶层节点链表,上述数据存储单元中无需依据第二节点链表的组成规则获取其他节点链表。
例如,所述数据存储单元的数据节点存储结构如图2所示,图2中,所述数据存储单元包括三个节点链表,所述第一节点链表包括除表头数据节点之外的7个数据节点,所述7个数据节点中每个数据节点依据其实际数据值以预设的排序规则(图2中为数值升序排列)链接,图中每个数据节点中“/”之前的数值为实际存储的数据内容,“/”之后的数值为其数据内容对应的实际数据值。
由上述数据存储单元中的数据节点的数据内容可知,本申请实施例采用数据压缩方案进行存储。以数字类型为例:整形数字以int格式进行存储,随着数字值的增大,每个数字所占用的Byte字节的个数也逐渐增多,由此,本申请实施例在将待存储数据存储入数据节点时,将本数据节点的实际数据值(数字值)与其前一个数据节点的实际数据值的差值作为本数据节点的数据内容进行存储,若本数据节点的前一个数据节点为空即本数据节点为节点链表中的第一个数据节点,那么本数据节点的数据内容即为本数据节点的实际数据值。比如,需要存储如下整数:16386、16387、16388及16389,若依据现有技术中的存储方案,那么在内存或磁盘存储空间中所需要的空间为:[(1)000,0010][(1)000,0000][(0)000,0001]、[(1)000,0011][(1)000,0000][(0)000,0001]、[(1)000,0100][(1)000,0000][(0)000,0001]、[(1)000,0101][(1)000,0000][(0)000,0001],即需要12个Byte字节;而采用本申请实施例提供的数据存储方案,那么需要的空间为:[(1)000,0010][(1)000,0000][(0)000,0001]、[(0)000,0001]、[(0)000,0001]、[(0)000,0001],只需6个Byte字节。
再以字符串类型为例:当前需要存储的字符串为:term,termagancy,termagant,terminal,若依据现有技术中的存储方案,那么在内存或磁盘存储空间中所需要的空间为:[VInt=4][t][e][r][m]、[VInt=10][t][e][r][m][a][g][a][n][c][y]、[VInt=9][t][e][r][m][a][g][a][n][t],[VInt=8][t][e][r][m][i][n][a][l],即需要35个Byte字节;而采用本申请实施例提供的数据存储方案,那么在内存或磁盘存储空间中所需要的空间为:[VInt=4][t][e][r][m],[VInt=4(offset)][VInt=6][a][g][a][n][c][y],[VInt=8(offset)][VInt=1][t],[VInt=4(offset)][VInt=4][i][n][a][l],共需要22个Byte字节。由上述可知,本申请实施例提供的数据存储方案,不仅明显节省了存储空间,而且在后续需要对数据节点进行查询等数据操作时,运算所涉及的系统内存消耗也明显降低,在一定程度上提高了查询等操作的性能。
图2中,所述第二节点链表中包括除表头数据节点之外的3个数据节点,所述第二节点链表中的数据节点均由第一节点链表中选取,且所述第二节点链表中各个数据节点之间的链接顺序与其在所述第一节点链表中的顺序一致,以此类推,所述第三节点链表即为顶层节点链表中的2个数据节点均有第二节点链表中选取,且所述顶层节点链表中各个数据节点之间的链接顺序与其在所述第二节点链表中的顺序一致。
需要说明的是,上述多层链表存储方案还可以理解为跳跃表存储方案,下述为对跳跃表属性进行描述:
可以使用SKIPLIST算法(基于有序链表,字符串依据字典顺序排列);跳跃表具有间隔性,即上层链表是由下层链表每隔预定元素数跳跃选取生成;跳跃表具有层次性,每一层的链表每隔预定元素数构成上一层链表;链表中,每个节点存储了指向下一节点的指针及指向其下层链表中相对应的数据节点的指针。
步骤102:在所述顶层节点链表中查询是否含有与所述数据值标识相对应的数据节点,如果是,执行步骤103,否则,执行步骤104;
步骤103:返回所述顶层节点链表中查询到的数据节点,结束当前数据处理;
步骤104:确定所述顶层节点链表中的第一目标数据节点,所述数据值标识对应的数据值介于所述第一目标数据节点的实际数据值与其所在所述顶层节点链表中下一个数据节点的实际数据值之间。
步骤105在所述顶层节点链表的下一层节点链表中所述第一目标数据节点的后续数据节点中,查询是否含有与所述数据值标识相对应的数据节点,如果是,执行步骤106,否则,执行所述步骤107;
步骤106:返回当前节点链表中查询到的数据节点,结束当前数据处理;
步骤107:确定当前节点链表中的第二目标数据节点,所述数据值标识对应的数据值介于所述第二目标数据节点的实际数据值与其所在所述当前节点链表中下一个数据节点的实际数据值之间;
步骤108:继续在所述当前节点链表的下一层节点链表中所述第二目标数据节点的后续数据节点中,查询是否含有与所述数据值标识相对应的数据节点,直到在所述数据存储单元中查询到与所述数据值标识相对应的数据节点,结束当前数据处理。
应用本申请实施例在如图3所示的数据存储单元中,查询元素“32/117”(32为数据内容,117为实际数据值),在如图3所示的数据存储单元中,包括三个节点链表:第一节点链表、第二节点链表和顶层节点链表,在各个节点链表中,“-1”为表头数据节点,表示INT_MIN链表的最小值,“1”为各个节点链表的表尾数据节点,表示INT_MAX链表的最大值。在查找元素“117”时,在顶层节点链表中逐一查询与元素“32/117”相对应的数据节点,结果为否定,那么确定元素“32/117”介于的数据节点对中的前一个数据节点,即数据节点“5/37”与数据节点“1”对中的前一个数据节点“5/37”(第一目标数据节点),由数据节点“5/37”指向第二节点链表中对应的数据节点“5/37”,并在所述第二节点链表中所述数据节点“5/37”的后续数据节点中,查询是否含有与元素“32/117”对应的数据节点,结果仍为否定,那么确定所述第二节点链表中的第二目标数据节点“34/71”,并在第一节点链表中数据节点“34/71”的后续节点中查询是否含有与元素“32/117”相对应的数据节点,结果为肯定,由此返回所述第一节点链表中数据节点“32/117”,结束当前数据查询。
需要说明的是,上述图3中为数据存储单元中包括三个节点链表的示例,若数据存储单元中包括四个或以上的节点链表时,对数据节点的查询方案与上述一致,在此不再举例说明。
而本申请实施例中具体的查询算法可以通过以下代码实现(C代码):
需要说明的是,若所述数据存储单元中只含有两个节点链表:第一节点链表和顶层节点链表,那么在本申请实施例,所述步骤105中会在所述顶层节点链表的下一层节点链表即第一节点链表中查询到与所述数据值标识相对应的数据节点,此时无需执行后续步骤107及步骤108。
优选的,本申请实施例提供的数据处理方法还包括:
在所述数据存储单元中插入新元素。
上述在本申请实施例提供的数据存储单元中插入一个新的元素时,可以通过以下方式实现:
首先确定该新元素所要占据的层数K(可以由用户进行设定,还可以随机获取,如采用丢硬币的方式);
再在第一节点链表、第二节点链表…第K节点链表中分别插入所述新元素。
如图4所示,新元素的实际数据值为119,K为2,在第一节点链表和第二节点链表中插入新元素对应的数据节点“2/119”。
在实际应用中,上述插入新元素的实施方案中,若所述层数K大于当前数据存储单元中所包含的节点链表层数,还需要新建一个节点链表代替当前顶层节点链表,之后插入新元素的过程与上述一致。
如图5所示,新元素的实际数据值为119,K为4,此时,在当前顶层节点链表的上部新建一个节点链表作为新的顶层节点链表,此时,所述数据存储单元包括第一节点链表、第二节点链表、第三节点链表和顶层节点链表,此时在第一节点链表、第二节点链表、第三节点链表和顶层节点链表分别插入新元素对应的数据节点“2/119”。
需要说明的是,上述K值的获取具有随机性,可以通过以下算法获取(C代码):
上述算法实现,相当与做一次丢硬币的实验,如果遇到正面,继续丢,遇到反面,则停止,用实验中丢硬币的次数K作为元素占有的层数。显然随机变量K满足参数为p=1/2的几何分布,K的期望值E[K]=1/p=2,就是说,各个元素的层数,期望值是2层。
优选的,本申请实施例提供的数据处理方法还包括:
在所述数据存储单元中删除目标元素。
其中,上述删除目标元素可以通过标准的delete from list方法删除该目标元素对应的数据节点。
如图6所示,在包含有三个节点链表的数据存储单元中,删除元素“34/71”,在第一节点链表删除“34/71”对应的数据节点,修改该节点的前一个数据节点“5/37”指向节点“34/71”的指针指向节点“14/85”,在第二节点链表中删除“34/71”对应的数据节点,修改该节点的前一个数据节点“5/37”指向节点“34/71”的指针指向节点“1”。
由上述方案可知,本申请提供的一种数据处理方法实施例一,通过预先对大数量数据以差值压缩存储的方式存储至数据节点链表中,并对数据节点链表使用跳表形式(多层数据节点链表)进行存储,由此在进行某一数据节点查询时,只需由跳表最顶层的数据节点链表开始查询,无需现有技术中对数据节点链表中的节点进行逐一对比查询,从而在降低内存存储空间的同时,使得算法复杂度降低,提高数据存储性能及数据查询效率。
优选的,上述实施例中,所述预设排序规则为由小到大或由大到小的排序规则;
其中,所述第一节点链表中的各个数据节点依据其实际数据值以预设排序规则链接包括:
将所述第一节点链表中的各个数据节点以由小到大或由大到小的排序规则排序;
其中,所述第一节点链表中,每个所述数据节点存储其下一个非空数据节点的地址信息。
需要说明的是,所述每个所述数据节点的数据内容为其实际数据值与其前一个非空数据节点的实际数据值的差值包括:
所述第一节点链表中,每个所述数据节点存储其实际数据值与其前一个非空数据节点的实际数据值的差值,所述差值作为其所属数据节点的数据内容。
参考图7,其示出了本申请提供的一种数据处理装置实施例二的结构示意图,所述装置数据存储单元,所述数据存储单元包括至少两个节点链表,第一节点链表中的各个数据节点依据其实际数据值以预设排序规则链接,所述顶层节点链表包括表头数据节点和至少一个中间数据节点,且每个所述数据节点的数据内容为其实际数据值与其前一个非空数据节点的实际数据值的差值,以预设节点选定规则在所述顶层节点链表中选取部分中间数据节点,将选取的部分中间数据节点与所述表头数据节点组成第二节点链表,且所述第二节点链表中各个数据节点之间的链接顺序与其在所述第一节点链表中的顺序一致,依据第二节点链表的组成规则获取其他节点链表及顶层节点链表,所述装置包括:
请求接收单元701,用于接收数据查询请求,所述数据查询请求包括待查询数据节点的数据值标识。
需要说明的是,所述数据存储单元包括数据存储服务器等数据存储装置。
其中,若所述数据存储单元包括两个节点链表,那么所述第二节点链表即为所述顶层节点链表,上述数据存储单元中无需依据第二节点链表的组成规则获取其他节点链表。
例如,所述数据存储单元的数据节点存储结构如图2所示,图2中,所述数据存储单元包括三个节点链表,所述第一节点链表包括除表头数据节点之外的12个数据节点,所述12个数据节点中每个数据节点依据其实际数据值以预设的排序规则(图2中为数值升序排列)链接,图中每个数据节点中“/”之前的数值为实际存储的数据内容,“/”之后的数值为其数据内容对应的实际数据值。
由上述数据存储单元中的数据节点的数据内容可知,本申请实施例采用数据压缩方案进行存储。以数字类型为例:整形数字以int格式进行存储,随着数字值的增大,每个数字所占用的Byte字节的个数也逐渐增多,由此,本申请实施例在将待存储数据存储入数据节点时,将本数据节点的实际数据值(数字值)与其前一个数据节点的实际数据值的差值作为本数据节点的数据内容进行存储,若本数据节点的前一个数据节点为空即本数据节点为节点链表中的第一个数据节点,那么本数据节点的数据内容即为本数据节点的实际数据值。比如,需要存储如下整数:16386、16387、16388及16389,若依据现有技术中的存储方案,那么在内存或磁盘存储空间中所需要的空间为:[(1)000,0010][(1)000,0000][(0)000,0001]、[(1)000,0011][(1)000,0000][(0)000,0001]、[(1)000,0100][(1)000,0000][(0)000,0001]、[(1)000,0101][(1)000,0000][(0)000,0001],即需要12个Byte字节;而采用本申请实施例提供的数据存储方案,那么需要的空间为:[(1)000,0010][(1)000,0000][(0)000,0001]、[(0)000,0001]、[(0)000,0001]、[(0)000,0001],只需6个Byte字节。
再以字符串类型为例:当前需要存储的字符串为:term,termagancy,termagant,terminal,若依据现有技术中的存储方案,那么在内存或磁盘存储空间中所需要的空间为:[VInt=4][t][e][r][m]、[VInt=10][t][e][r][m][a][g][a][n][c][y]、[VInt=9][t][e][r][m][a][g][a][n][t],[VInt=8][t][e][r][m][i][n][a][l],即需要35个Byte字节;而采用本申请实施例提供的数据存储方案,那么在内存或磁盘存储空间中所需要的空间为:[VInt=4][t][e][r][m],[VInt=4(offset)][VInt=6][a][g][a][n][c][y],[VInt=8(offset)][VInt=1][t],[VInt=4(offset)][VInt=4][i][n][a][l],共需要22个Byte字节。由上述可知,本申请实施例提供的数据存储方案,不仅明显节省了存储空间,而且在后续需要对数据节点进行查询等数据操作时,运算所涉及的系统内存消耗也明显降低,在一定程度上提高了查询等操作的性能。
图2中,所述第二节点链表中包括除表头数据节点之外的4个数据节点,所述第二节点链表中的数据节点均由第一节点链表中选取,且所述第二节点链表中各个数据节点之间的链接顺序与其在所述第一节点链表中的顺序一致,以此类推,所述第三节点链表即为顶层节点链表中的2个数据节点均有第二节点链表中选取,且所述顶层节点链表中各个数据节点之间的链接顺序与其在所述第二节点链表中的顺序一致。
需要说明的是,上述多层链表存储方案还可以理解为跳跃表存储方案,下述为对跳跃表属性进行描述:
可以使用SKIPLIST算法(基于有序链表,字符串依据字典顺序排列);跳跃表具有间隔性,即上层链表是由下层链表每隔预定元素数跳跃选取生成;跳跃表具有层次性,每一层的链表每隔预定元素数构成上一层链表;链表中,每个节点存储了指向下一节点的指针及指向其下层链表中相对应的数据节点的指针。
第一查询单元702,用于在所述顶层节点链表中查询是否含有与所述数据值标识相对应的数据节点,如果是,返回所述顶层节点链表中查询到的数据节点,结束当前数据处理,否则,确定所述顶层节点链表中的第一目标数据节点,触发第二查询单元703,所述数据值标识对应的数据值介于所述第一目标数据节点的实际数据值与其所在所述顶层节点链表中下一个数据节点的实际数据值之间。
所述第二查询单元703,用于在所述顶层节点链表的下一层节点链表中所述第一目标数据节点的后续数据节点中,查询是否含有与所述数据值标识相对应的数据节点,如果是,返回当前节点链表中查询到的数据节点,结束当前数据处理,否则,确定所述当前节点链表中的第二目标数据节点,触发第三查询单元704,所述数据值标识对应的数据值介于所述第二目标数据节点的实际数据值与其所在所述当前节点链表中下一个数据节点的实际数据值之间。
所述第三查询单元704,用于继续在所述当前节点链表的下一层节点链表中所述第二目标数据节点的后续数据节点中,查询是否含有与所述数据值标识相对应的数据节点,直到在所述数据存储单元中查询到与所述数据值标识相对应的数据节点,结束当前数据处理。
需要说明的是,若所述数据存储单元中只含有两个节点链表:第一节点链表和顶层节点链表,那么在本申请实施例,所述数据处理装置的第二查询单元703会在所述顶层节点链表的下一层节点链表即第一节点链表中查询到与所述数据值标识相对应的数据节点,此时所述第三查询单元703无需被启动,或者在本申请实施例的数据处理装置中不设置所述第三查询单元703。
例如,图8为本申请实施例中的数据存储单元,该数据存储单元包括三个节点链表:第一节点链表、第二节点链表和顶层节点链表,各个节点链表中的各个数据节点中“/”之前的数据值为实际存储空间中的数据值,(数据节点的数据内容),“/”之后的数据为其所属数据节点的实际数据值,在查询数据值标识为“8/15”的数据节点时,首先在顶层节点链表中查询,由此确定第一目标数据节点“1/1”,在第二节点链表中数据节点“1/1”的后续节点中查询是否有与“8/15”相对应的数据节点,结果为肯定,由此,返回查询到的数据节点。若查询数据值标识为“5/20”的数据节点时,首先在顶层节点链表中查询,由此确定第一目标数据节点“1/1”,在第二节点链表中数据节点“1/1”的后续节点中查询是否有与“5/20”相对应的数据节点,结果为否定,确定第二目标数据节点“8/15”,在第一节点链表中数据节点“8/15”的后续节点中查询是否有与“5/20”相对应的数据节点,结果为肯定,由此,返回查询到的数据节点。
由上述方案可知,本申请提供的一种数据处理装置实施例二,通过预先对大数量数据以差值压缩存储的方式存储至数据节点链表中,并对数据节点链表使用跳表形式(多层数据节点链表)进行存储,由此在进行某一数据节点查询时,只需由跳表最顶层的数据节点链表开始查询,无需现有技术中对数据节点链表中的节点进行逐一对比查询,从而在降低内存存储空间的同时,使得算法复杂度降低,提高数据存储性能及数据查询效率。
优选的,上述装置实施例还包括:
元素插入单元,用于在所述数据存储单元中插入新元素。
需要说明的是,上述元素插入单元可以通过以下方式实现:
首先确定该新元素所要占据的层数K(可以由用户进行设定,还可以随机获取,如采用丢硬币的方式);
再在第一节点链表、第二节点链表…第K节点链表中分别插入所述新元素。
如图4所示,新元素的实际数据值为119,K为2,在第一节点链表和第二节点链表中插入新元素对应的数据节点“2/119”。
在实际应用中,上述插入新元素的实施方案中,若所述层数K大于当前数据存储单元中所包含的节点链表层数,还需要新建一个节点链表代替当前顶层节点链表,之后插入新元素的过程与上述一致。
如图5所示,新元素的实际数据值为119,K为4,此时,在当前顶层节点链表的上部新建一个节点链表作为新的顶层节点链表,此时,所述数据存储单元包括第一节点链表、第二节点链表、第三节点链表和顶层节点链表,此时在第一节点链表、第二节点链表、第三节点链表和顶层节点链表分别插入新元素对应的数据节点“2/119”。
优选的,上述装置实施例还包括:
元素删除单元,用于在所述数据存储单元中删除目标元素。
其中,上述删除目标元素可以通过标准的delete from list方案删除该目标元素对应的数据节点。
如图6所示,在包含有三个节点链表的数据存储单元中,删除元素“34/71”,在第一节点链表删除“34/71”对应的数据节点,修改该节点的前一个数据节点“5/37”指向节点“34/71”的指针指向节点“14/85”,在第二节点链表中删除“34/71”对应的数据节点,修改该节点的前一个数据节点“5/37”指向节点“34/71”的指针指向节点“1”。
优选的,上述装置实施例中,所述预设排序规则为由小到大或由大到小的排序规则
优选的,上述装置实施例中,所述第一节点链表中的各个数据节点以由小到大或由大到小的排序规则排列;
其中,所述第一节点链表中,每个所述数据节点存储有其下一个非空数据节点的地址信息。
优选的,上述装置实施例中,所述第一节点链表中,每个所述数据节点存储其实际数据值与其前一个非空数据节点的实际数据值的差值,所述差值作为其所属数据节点的数据内容。
参考图9,其示出了本申请提供的一种数据处理系统实施例三的结构示意图,所述系统包括数据存储单元901及如上述装置实施例中所述的数据处理装置902,其中:
所述数据存储单元901包括至少两个节点链表,第一节点链表中的各个数据节点依据其实际数据值以预设排序规则链接,所述顶层节点链表包括表头数据节点和至少一个中间数据节点,且每个所述数据节点的数据内容为其实际数据值与其前一个非空数据节点的实际数据值的差值,以预设节点选定规则在所述顶层节点链表中选取部分中间数据节点,将选取的部分中间数据节点与所述表头数据节点组成第二节点链表,且所述第二节点链表中各个数据节点之间的链接顺序与其在所述第一节点链表中的顺序一致,依据第二节点链表的组成规则获取其他节点链表及顶层节点链表。
需要说明的是,所述数据处理装置902与上述本申请实施例二中所述的数据处理装置一致,在此不再详细描述。
本申请系统实施例的应用示例可以参考如图8所示的实例。
要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明所提供的一种数据处理方法、装置及系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (8)
1.一种数据处理方法,其特征在于,应用于预设的数据存储单元,所述数据存储单元包括至少两个节点链表,第一节点链表中的各个数据节点依据其实际数据值以预设排序规则链接,所述顶层节点链表包括表头数据节点和至少一个中间数据节点,且每个所述数据节点的数据内容为其实际数据值与其前一个非空数据节点的实际数据值的差值,以预设节点选定规则在所述顶层节点链表中选取部分中间数据节点,将选取的部分中间数据节点与所述表头数据节点组成第二节点链表,且所述第二节点链表中各个数据节点之间的链接顺序与其在所述第一节点链表中的顺序一致,依据第二节点链表的组成规则获取其他节点链表及顶层节点链表,所述方法包括:
接收数据查询请求,所述数据查询请求包括待查询数据节点的数据值标识;
在所述顶层节点链表中查询是否含有与所述数据值标识相对应的数据节点,如果是,返回所述顶层节点链表中查询到的数据节点,结束当前数据处理,否则,确定所述顶层节点链表中的第一目标数据节点,所述数据值标识对应的数据值介于所述第一目标数据节点的实际数据值与其所在所述顶层节点链表中下一个数据节点的实际数据值之间;
在所述顶层节点链表的下一层节点链表中所述第一目标数据节点的后续数据节点中,查询是否含有与所述数据值标识相对应的数据节点,如果是,返回当前节点链表中查询到的数据节点,结束当前数据处理,否则,确定所述当前节点链表中的第二目标数据节点,所述数据值标识对应的数据值介于所述第二目标数据节点的实际数据值与其所在所述当前节点链表中下一个数据节点的实际数据值之间,继续在所述当前节点链表的下一层节点链表中所述第二目标数据节点的后续数据节点中,查询是否含有与所述数据值标识相对应的数据节点,直到在所述数据存储单元中查询到与所述数据值标识相对应的数据节点,结束当前数据处理。
2.根据权利要求1所述的方法,其特征在于,所述预设排序规则为由小到大或由大到小的排序规则;
所述第一节点链表中的各个数据节点依据其实际数据值以预设排序规则链接包括:
将所述第一节点链表中的各个数据节点以由小到大或由大到小的排序规则排序;
其中,所述第一节点链表中,每个所述数据节点存储其下一个非空数据节点的地址信息。
3.根据权利要求1所述的方法,其特征在于,所述每个所述数据节点的数据内容为其实际数据值与其前一个非空数据节点的实际数据值的差值包括:
所述第一节点链表中,每个所述数据节点存储其实际数据值与其前一个非空数据节点的实际数据值的差值,所述差值作为其所属数据节点的数据内容。
4.一种数据处理装置,其特征在于,应用于数据存储单元,所述数据存储单元包括至少两个节点链表,第一节点链表中的各个数据节点依据其实际数据值以预设排序规则链接,所述顶层节点链表包括表头数据节点和至少一个中间数据节点,且每个所述数据节点的数据内容为其实际数据值与其前一个非空数据节点的实际数据值的差值,以预设节点选定规则在所述顶层节点链表中选取部分中间数据节点,将选取的部分中间数据节点与所述表头数据节点组成第二节点链表,且所述第二节点链表中各个数据节点之间的链接顺序与其在所述第一节点链表中的顺序一致,依据第二节点链表的组成规则获取其他节点链表及顶层节点链表,所述装置包括:
请求接收单元,用于接收数据查询请求,所述数据查询请求包括待查询数据节点的数据值标识;
第一查询单元,用于在所述顶层节点链表中查询是否含有与所述数据值标识相对应的数据节点,如果是,返回所述顶层节点链表中查询到的数据节点,结束当前数据处理,否则,确定所述顶层节点链表中的第一目标数据节点,触发第二查询单元,所述数据值标识对应的数据值介于所述第一目标数据节点的实际数据值与其所在所述顶层节点链表中下一个数据节点的实际数据值之间;
所述第二查询单元,用于在所述顶层节点链表的下一层节点链表中所述第一目标数据节点的后续数据节点中,查询是否含有与所述数据值标识相对应的数据节点,如果是,返回当前节点链表中查询到的数据节点,结束当前数据处理,否则,确定所述当前节点链表中的第二目标数据节点,触发第三查询单元,所述数据值标识对应的数据值介于所述第二目标数据节点的实际数据值与其所在所述当前节点链表中下一个数据节点的实际数据值之间;
所述第三查询单元,用于继续在所述当前节点链表的下一层节点链表中所述第二目标数据节点的后续数据节点中,查询是否含有与所述数据值标识相对应的数据节点,直到在所述数据存储单元中查询到与所述数据值标识相对应的数据节点,结束当前数据处理。
5.根据权利要求4所述的装置,其特征在于,所述预设排序规则为由小到大或由大到小的排序规则。
6.根据权利要求4所述的装置,其特征在于:
所述第一节点链表中的各个数据节点以由小到大或由大到小的排序规则排列;
其中,所述第一节点链表中,每个所述数据节点存储有其下一个非空数据节点的地址信息。
7.根据权利要求4所述的装置,其特征在于,所述第一节点链表中,每个所述数据节点存储其实际数据值与其前一个非空数据节点的实际数据值的差值,所述差值作为其所属数据节点的数据内容。
8.一种数据处理系统,其特征在于,包括数据存储单元及如权利要求4至7任意一项所述的数据处理装置,其中:
所述数据存储单元包括至少两个节点链表,第一节点链表中的各个数据节点依据其实际数据值以预设排序规则链接,所述顶层节点链表包括表头数据节点和至少一个中间数据节点,且每个所述数据节点的数据内容为其实际数据值与其前一个非空数据节点的实际数据值的差值,以预设节点选定规则在所述顶层节点链表中选取部分中间数据节点,将选取的部分中间数据节点与所述表头数据节点组成第二节点链表,且所述第二节点链表中各个数据节点之间的链接顺序与其在所述第一节点链表中的顺序一致,依据第二节点链表的组成规则获取其他节点链表及顶层节点链表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310043254.7A CN103970795A (zh) | 2013-01-31 | 2013-01-31 | 一种数据处理方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310043254.7A CN103970795A (zh) | 2013-01-31 | 2013-01-31 | 一种数据处理方法、装置及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103970795A true CN103970795A (zh) | 2014-08-06 |
Family
ID=51240307
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310043254.7A Pending CN103970795A (zh) | 2013-01-31 | 2013-01-31 | 一种数据处理方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103970795A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106095788A (zh) * | 2016-05-27 | 2016-11-09 | 杭州华三通信技术有限公司 | 一种数据存储方法及装置 |
CN106649790A (zh) * | 2016-12-28 | 2017-05-10 | 华中科技大学 | 一种多层链接分离的skiplist构造方法及系统 |
CN106815326A (zh) * | 2016-12-28 | 2017-06-09 | 中国民航信息网络股份有限公司 | 一种检测无主键数据表一致性的系统及方法 |
CN109684504A (zh) * | 2018-12-14 | 2019-04-26 | 北京奇艺世纪科技有限公司 | 数据处理方法、装置及电子设备 |
CN113065964A (zh) * | 2021-04-13 | 2021-07-02 | 上证所信息网络有限公司 | 一种采用可变步长跳表的数据存储系统及方法 |
CN113468080A (zh) * | 2021-06-10 | 2021-10-01 | 山东英信计算机技术有限公司 | 一种全闪元数据的缓存方法、系统及相关装置 |
CN115495225A (zh) * | 2022-11-21 | 2022-12-20 | 福瑞泰克智能系统有限公司 | 数据的处理方法和装置、存储介质及电子装置 |
-
2013
- 2013-01-31 CN CN201310043254.7A patent/CN103970795A/zh active Pending
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106095788A (zh) * | 2016-05-27 | 2016-11-09 | 杭州华三通信技术有限公司 | 一种数据存储方法及装置 |
CN106649790A (zh) * | 2016-12-28 | 2017-05-10 | 华中科技大学 | 一种多层链接分离的skiplist构造方法及系统 |
CN106815326A (zh) * | 2016-12-28 | 2017-06-09 | 中国民航信息网络股份有限公司 | 一种检测无主键数据表一致性的系统及方法 |
CN109684504A (zh) * | 2018-12-14 | 2019-04-26 | 北京奇艺世纪科技有限公司 | 数据处理方法、装置及电子设备 |
CN113065964A (zh) * | 2021-04-13 | 2021-07-02 | 上证所信息网络有限公司 | 一种采用可变步长跳表的数据存储系统及方法 |
CN113065964B (zh) * | 2021-04-13 | 2024-05-03 | 上证所信息网络有限公司 | 一种采用可变步长跳表的数据存储系统及方法 |
CN113468080A (zh) * | 2021-06-10 | 2021-10-01 | 山东英信计算机技术有限公司 | 一种全闪元数据的缓存方法、系统及相关装置 |
CN113468080B (zh) * | 2021-06-10 | 2024-02-09 | 山东英信计算机技术有限公司 | 一种全闪元数据的缓存方法、系统及相关装置 |
CN115495225A (zh) * | 2022-11-21 | 2022-12-20 | 福瑞泰克智能系统有限公司 | 数据的处理方法和装置、存储介质及电子装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103970795A (zh) | 一种数据处理方法、装置及系统 | |
CN101673307B (zh) | 空间数据索引方法及系统 | |
KR101467589B1 (ko) | 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체 | |
CN109416694A (zh) | 包括资源有效索引的键值存储系统 | |
US20160055191A1 (en) | Executing constant time relational queries against structured and semi-structured data | |
CN106021266A (zh) | 支持动态更新的快速多层索引 | |
CN103714013B (zh) | 一种文件系统的存储空间的配置方法及装置 | |
CN113961514B (zh) | 数据查询方法及装置 | |
CN110168532B (zh) | 数据更新方法和存储装置 | |
CN106570113B (zh) | 一种海量矢量切片数据云存储方法及系统 | |
CN106326475A (zh) | 一种高效的静态哈希表实现方法及系统 | |
CN107783988A (zh) | 一种目录树的加锁方法及设备 | |
CN104636349A (zh) | 一种索引数据压缩以及索引数据搜索的方法和设备 | |
CN104021223B (zh) | 一种集群数据库测点的访问方法及装置 | |
CN102609490A (zh) | 一种面向列存储dwms的b+树索引方法 | |
CN106326387A (zh) | 一种分布式数据存储架构及数据存储方法和数据查询方法 | |
CN106599091A (zh) | 基于键值存储的rdf图结构存储和索引方法 | |
CN104573571A (zh) | 一种智能卡安全文件系统的生成方法 | |
CN106383826A (zh) | 数据库查询方法和装置 | |
WO2021016050A1 (en) | Multi-record index structure for key-value stores | |
CN113468080B (zh) | 一种全闪元数据的缓存方法、系统及相关装置 | |
CN106294189A (zh) | 内存碎片整理方法及装置 | |
CN115964002A (zh) | 一种电能表终端档案管理方法、装置、设备及介质 | |
CN103902693A (zh) | 一种读优化的内存数据库t树索引结构的方法 | |
CN106934033A (zh) | 一种弯板机器人数据索引方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140806 |