CN109460406B - 一种数据处理方法及装置 - Google Patents
一种数据处理方法及装置 Download PDFInfo
- Publication number
- CN109460406B CN109460406B CN201811198259.6A CN201811198259A CN109460406B CN 109460406 B CN109460406 B CN 109460406B CN 201811198259 A CN201811198259 A CN 201811198259A CN 109460406 B CN109460406 B CN 109460406B
- Authority
- CN
- China
- Prior art keywords
- value
- block
- data
- key
- index
- 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.)
- Active
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 11
- 238000012545 processing Methods 0.000 claims abstract description 28
- 230000015654 memory Effects 0.000 claims description 32
- 238000000034 method Methods 0.000 claims description 29
- 238000012986 modification Methods 0.000 claims description 16
- 230000004048 modification Effects 0.000 claims description 16
- 238000013500 data storage Methods 0.000 claims description 15
- 238000012217 deletion Methods 0.000 claims description 10
- 230000037430 deletion Effects 0.000 claims description 10
- 238000004590 computer program Methods 0.000 description 18
- 238000010586 diagram Methods 0.000 description 18
- 238000003780 insertion Methods 0.000 description 6
- 230000037431 insertion Effects 0.000 description 6
- 230000001360 synchronised effect Effects 0.000 description 6
- 238000001514 detection method Methods 0.000 description 3
- 239000000284 extract Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000002243 precursor Substances 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据处理方法,所述方法包括:接收针对键‑值数据的存储请求;基于所述存储请求,提取所述键‑值数据中的键值和数据值;将所述键值的哈希值和所述数据值分别以数据块的形式进行存储,且单个键值块与单个数据值块的存储长度相同,且所述哈希值的长度小于等于所述键值块和/或所述数据值块可存储数据的长度。本发明还提供一种数据处理装置。
Description
技术领域
本发明涉及数据处理技术,尤其涉及一种数据的处理方法及装置。
背景技术
小型的嵌入式设备,对内存(ram)空间及数据存储(rom)空间要求比较苛刻,这就有两点要求:
1、用于数据操作的可执行文件应尽量小;
2、用于存储数据的文件应尽量小;另外考虑到易用性,用于数据存储的文件数量应该尽量少,最理想情况,只用单文件实现数据的存储。
现有技术方案,采用按行存储的形式存储键-值对(K-V,Key-Value)数据,即:每行按一定格式存储一对k-v值。
现有技术存在的问题在于:在进行数据修改时,若修改键-值数据中的键值(K1),且新的K1数据比旧的K1数据长,则需要将旧的K1数据后面的所有数据整体后移,否则新***的K1数据将覆盖其他键值数据;而在进行数据删除时,若删除了尾行的其他行的数据,则文件中会存在数据空洞,造成存储文件的浪费,为了不浪费文件的存储空间,需要把空洞后面的所有数据整体前移动;而在进行数据查找时,只能针对数据进行逐行查找,导致数据查找时间长、复杂度较高、查找效率低。
发明内容
为解决上述技术问题,本发明实施例提供了一种数据的处理方法及装置。
本发明实施例的技术方案是这样实现的:
根据本发明实施例中的一方面,提供一种数据处理方法,所述方法包括:
接收针对键-值数据的存储请求;
基于所述存储请求,提取所述键-值数据中的键值和数据值;
将所述键值的哈希值和所述数据值分别以数据块的形式进行存储,且单个键值块与单个数据值块的存储长度相同,且所述哈希值的长度小于等于所述键值块和/或所述数据值块可存储数据的长度。
上述方案中,所述方法还包括:
当所述数据值的存储长度大于单个数据块的存储长度时,将所述数据值以多个数据块的形式进行存储;其中,用于存储所述数据值的所述多个数据块之间通过块的索引值进行关联。
上述方案中,所述方法还包括:
每个键值块的索引关联以形成一颗平衡二叉树结构;
当***新的键-值数据时,所述平衡二叉树结构中左节点的哈希值小于等于根节点的哈希值和右节点的哈希值,且所述根节点的哈希值小于等于所述右节点的哈希值,以保持所述平衡二叉树结构的有序性;任意一个根的左子树和右子树的高度差值小于等于2,以保持所述平衡二叉树结构的平衡性。
上述方案中,所述方法还包括:
基于所述键值块中的块头索引值,查找与所述键值块对应的数据值块,其中所述块头索引值用于存储所述数据值块的块链索引值;
和/或,基于所述数据值块中关联的块的索引值,查找与所述数据值块对应的前驱块或后继块的块索引值。
上述方案中,所述方法还包括:
在存储所述键-值数据的块链表中检测空块状态;
当所述空块状态表征所述块链表中无空块时,将所述键值的数据和所述数据值的数据分别以数据块的形式存储于所述块链表的预设存储位置;
或者,当所述空块状态表征所述块链表中有空块时,将所述键值的数据和所述数据值的数据分别以数据块的形式存储于所述空块所在位置。
上述方案中,所述方法还包括:
接收针对键-值数据的修改请求;
基于所述修改请求,确定待修改的键值块的块索引值;
基于所述块索引值对应的目标键值块中的块头索引,确定与所述目标键值块对应的目标数据值块;
修改所述目标数据值块中的数据值数据。
上述方案中,所述方法还包括:
将所述目标数据值块对应的数据存储长度与待修改的数据值的数据存储长度进行比较;
当比较结果表征所述目标数据值块对应的数据值存储长度小于所述待修改的数据值的存储长度时,在以所述目标数据值块为块头的块链后面增加新的数据值块;
当比较结果表征所述目标数据值块对应的数据值存储长度大于所述待修改的数据值的存储长度时,释放所述目标数据值块对应的数据值所占的块空间。
上述方案中,所述方法还包括:
接收针对键-值数据的删除请求;
基于所述删除请求,确定待删除的键值块所对应的块索引值;
基于所述块索引值对应的目标键值块中块头索引值,确定与所述目标键值块对应的目标数据值块;
删除所述目标数据值块中存储的数据值以及所述目标键值块中存储的键值,以释放所述键值和对应的数据值所占用的块空间。
根据本发明实施例中的另一方面,提供一种数据处理装置,所述装置包括:
接收单元,用于接收针对键-值数据的存储请求;
提取单元,用于基于所述存储请求,提取所述键-值数据中的键值和所述键值对应的数据值;
存储单元,用于将所述键值的哈希值和所述数据值分别以数据块的形式进行存储,且单个键值块与单个数据值块的存储长度相同,且所述哈希值的长度小于等于所述键值块和/或所述数据值块可存储数据的长度。
根据本发明实施例中的第三方面,提供一种数据处理装置,所述装置包括:存储器、处理器以及存储在存储器被处理器运动的可执行程序,其特征在于,所述处理器运行所述可执行程序时执行上述数据处理方法中任一项所述的方法的步骤。
本发明实施例的技术方案中,提供一种数据处理方法及装置,通过接收针对键-值数据的存储请求;基于所述存储请求,提取所述键-值数据中的键值数据和数据值;将所述键值的哈希值和所述数据值分别以数据块的形式进行存储,且单个键值块与单个数据值块的存储长度相同,且所述哈希值的长度小于等于所述这键值块和/或所述数据值块可存储数据的长度。本申请通过将键-值对数据按照数据块的形式进行存储,且每个数据块的长度相同,如此,能够提高数据的查找效率。
附图说明
图1为本发明实施例中数据处理方法的流程示意图;
图2为本发明实施例中数据处理装置的结构组成示意图一;
图3为本发明实施例中数据处理装置的结构组成示意图二;
图4为本发明实施例中键值块的AVL树的结构示意图;
图5为本发明实施例中数据值块的文件结构示意图;
图6为本发明实施例中键-值对(K-V)数据的***示意图一;
图7为本发明实施例中键-值对(K-V)数据的***示意图二;
图8为本发明实施例中键-值对(K-V)数据的***示意图三;
图9为本发明实施例中键-值对(K-V)数据的修改示意图;
图10为本发明实施例中键-值对(K-V)数据的删除示意图。
具体实施方式
下面结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
图1为本发明实施例中数据处理方法的流程示意图;如图1所示,所述方法包括:
步骤101,接收针对键-值数据的存储请求;
本发明实施例中,该方法主要应用于具有处理键-值数据的电子设备,该电子设备可以是台式电脑、服务器等终端。其中,该键-值数据是指键-值对,是编程语言对数学概念中映射的实现。键(key)用作元素的索引,值(value)则表示所存储和读取的数据。
步骤102,基于所述存储请求,提取所述键-值数据中的键值和数据值;
本发明实施例中,当电子设备接收到针对键-值数据的存储请求时,响应该存储请求,并基于该存储请求,分别提取该存储请求对应的键-值对中的键(key)数据和值(value)数据。
步骤103,将所述键值的哈希值和所述数据值分别以数据块的形式进行存储,且单个键值块与单个数据值块的存储长度相同,且所述哈希值的长度小于等于所述键值块和/或所述数据值块可存储数据的长度。
本发明实施例中,当电子设备提取到待存储的键(key)数据和值(value)数据后,分别将键(key)数据和值(value)数据按数据块的形式进行存储,并且单个键值块与单个数据值块的存储长度相同和/或一致。
具体地,将键(key)数据和值(value)数据按数据块的形式进行存储的文件结构如表1所示。
block0 | block1 | block2 | block3 | block4 |
block5 | block6 | block7 | block8 | block9 |
表1
表1中,每个block表示一个块,且每个块的存储长度相同,也就是说,单个键值块与单个数据值块的存储长度相同,同一个存储文件中块的索引值通常从“0”开始,表示为“block0”。
本发明实施例中,电子设备按数据块的形式存储键(key)数据时,可以不直接存储键(key)数据,而是通过哈希算法对键(key)数据进行数据转换,得到键(key)数据的Hash值,然后,存储键(key)数据的Hash值。这里,Hash算法又称为散列算法,就是指将输入的任意长度的键(key)数据,通过散列算法变换成固定长度的输出。如此,能够很直观地检测出数据在传输时发生的错误。
具体键值块的存储结构可以如表2所示:
Type(0) |
Left-child |
Right-child |
Data-head |
Hash(key) |
表2
表2中,Type代表该块存储的内容为键值;Hash(key)用于存储键的Hash值;Left-child用于存储左子树键值块的索引;Right-child用于存储右子树键值块的索引;Data-head用于存储数据值块链表的头块索引。若Left-child或Right-child中存储的索引值为0xFFFFFFFF,则表示当前键值块中无左子树或右子树。可见,所有键值块的键值索引构成一颗二叉树结构。
当***新的键-值数据时,为了让该二叉树呈(AVL,Adelson-Velskii andLandis)树,必须保持两点特性:1)有序性;2)平衡性;
其中,有序性是指:保持所有根节点Hash值大于左节点Hash值,且小于右节点Hash值;平衡性是指:任意一个根的左子树和右子树的高度不能相差超过2。
也就是说,在新增键值对或删除键值对时,即键(k)块数量有变化的时候,需要保持AVL树的有序性与平衡性。
由于本发明实施例中键值块为一个有序的二叉树结构,因此,在增加键值对数据时,可以通过散列算法(Hash)先对输入的键(k)数据变换为固定长度的输出,该输出就是散列值,也叫Hash值。然后,根据Hash值确定待存储的键值块在AVL树结构中的位置;然后,基于确定出的位置将待存储的键值块的Hash值分别与待存储的键值块相邻的第一键值块的第一哈希值以及第二键值块的第二哈希值进行比较,得到比较结果;当比较结果表征待存储的键值块的哈希值大于该第一哈希值且小于该第二哈希值时,将待存储的键值块的块索引值确定为AVL树结构中树根的索引值;将该第一键值块的块索引值确定为AVL树结构中左子树的索引值;将该第二键值块的块索引值确定为AVL树结构中右子树的索引值。由于AVL树总是保持平衡的,不会由于数据查询而改变AVL树的结构,因此,将键值块以树形结构存储,能够提高数据查询效率。
这里,电子设备在存储键(key)数据的Hash值时,该Hash值的长度可以小于或等于单个键值块和/或单个数据值块的可存储数据的长度。
图4为本发明实施例中键值块的AVL树的结构示意图,如图4所示:以block0、block1、block2、block3四个块为示例,其中,block0为根块,其Hash值为BXXXXXX;block1为左子树块,其Hash值为AXXXXXX,block2为右子树块,其Hash值为CXXXXXX,并且,AXXXXXX<BXXXXXX<CXXXXXX,即根块的Hash值大于左子树块Hash值且小于右子树块Hash值;block3为数据值块,block0的数据值块块头索引为block3。
具体数据值块的存储结构可以如表3所示:
Type(1) |
Prev-index |
Next-index |
Data-type |
Data |
表3
表3中,Type代表该块存储的内容为数据;Prev-index用于存储该数据值块的前驱块的索引;Next-index用于存储该数据值块的后继块的索引,若Prev-index或Next-index的索引值为0xFFFFFFFF,则表示该数据值块当前无前驱块或后继块;Data-type用于表示该数据值块数据的权限类型(只读,可读写等);Data用于代表该数据值块实际存储的数据。由于单个数据值块的存储长度是固定的,因此,当待存储的数据值的存储长度大于单个数据值块的存储长度时,可以将待存储的数据值以多个数据值块的形式进行存储,且各个数据值块之间可以通过块的索引值进行关联,即各个块之间可以通过Prev-index和Next-index串成块链。
图5为本发明实施例中数据值块的文件结构示意图,如图5所示:以block0、block1、block2、block3四个块为例,其中,block0是block1的前驱块;block1是block0的后继块,且是block2的前驱块;block2是block1的后继块,且是block3的前驱块;block3是block2的后继块,0xFFFFFFFF表示当前无前驱块或后继块。
本发明实施例中,虽然每个块中存储的内容不同,但是每个块的存储长度相同,且每个块的类型还可以通过块操作程序进行互相转换。
本发明实施例中,当需要查找数据值块时,电子设备还可以基于键值块中的块头索引值,查找与该键值块对应的数据值块,其中该块头索引值用于存储数据值块的块链索引值。而当待要查找的数据值长度大于单个块的存储长度时,电子设备还可以基于该数据值块中关联的块的索引值,查找与该数据值块对应的前驱块或后继块的块索引值。如此,能够提高数据值块的查找效率。
下面,对本发明实施例的详细工作流程进行说明:
首先,初始化一个存储文件,并生成固定的文件头(如表4所示)。
表4
表4中,block0、block1为生成的文件头,其中block0的Next-index将用于指向键值块的树根,block1作为空块链的块头结点。
当***键-值对(K-V)数据时,电子设备还可以在存储键-值数据的块链表中检测空块状态;当空块状态表征块链表中无空块时,可以将待***的K-V数据中的K数据和V数据分别以数据块的形式存储于块链表的预设存储位置;或者,当空块状态表征块链表中有空块时,可以直接将待***的K-V数据中的K数据和V数据分别以数据块的形式存储于该空块所在位置。
图6为本发明实施例中键-值对(K-V)数据的***示意图一,如图6所示,设置***的K为“key”,V为“value”,设“key”的Hash值为“0287014A”,当检测到当前空块链上无空块时,则在生成的存储文件中新增加若干个用于存储K-V数据的块,并将新增加的块附加在存储文件中块链的后面。
图7为本发明实施例中键-值对(K-V)数据的***示意图二,如图7所示,当继续增加K-V数据时,可以继续设***的k为“key1”,v为“value1”,设“key1”的Hash值为0402017B,当检测到当前空块链上无空块,则在存储文件中再新分配若干个用于存储K-V数据的块,并将新增加的块附加在存储文件中块链的后面。
图7中,由于Hash(key1)大于Hash(key),所以key1的键块应该放到key键块的右子树。
图8为本发明实施例中键-值对(K-V)数据的***示意图三,如图8所示,当继续增加K-V数据时,可以继续设***的k为“key2”,v为“value2”,设“key2”的Hash值为0403017C,当检测结果表示当前空块链上无空块时,则在存储文件中再增加若干个用于存储K-V数据的块,并将新增加的块附加在存储文件的后面。
图8中,由于Hash(key2)大于Hash(key1),Hash(key1)大于Hash(key),所以key1的键块应该被调整为二叉树中的树根,key为二叉树中的左子树,key2为二叉树中的右子树,如此,才能保持AVL数的排序性与平衡性。
本发明实施例中,电子设备还可以接收针对键-值数据的修改请求,响应于该修改请求,并基于该修改请求,确定待修改的键值块的块索引值;然后,再基于该块索引值对应的目标键值块中的块头索引,确定与该目标键值块对应的目标数据值块;最后,修改该目标数据值块中的数据值数据。
图9为本发明实施例中键-值对(K-V)数据的修改示意图,如图9所示,若此时修改key的value为value_new,则首先可以计算key的Hash值,得到0287014A,再通过block0指向的键块树进行查找,当查找到key对应的键块索引为block2时,然后再修改block2所指向的值块block3。
这里,电子设备在查找到key对应的键块后,还可以将key对应的键块作为目标数据值块,将该目标数据值块对应的数据存储长度与待修改的数据值的数据存储长度进行比较;当比较结果表征该目标数据值块对应的数据值存储长度小于待修改的数据值的存储长度时,可以在以该目标数据值块为块头的块链后面增加新的数据值块;或者,当比较结果表征该目标数据值块对应的数据值存储长度大于待修改的数据值的存储长度时,可以释放该目标数据值块对应的数据值所占的块空间。
如图9所示,如果以block3为块头的值链可容纳的值的存储长度比value_new的存储长度小,则在存储文件中增加新的用于存储V数据的值块,并把新的值块追加到以block3为块头的块链后;如果值链可容纳的值的存储长度比value_new的存储长度大于若干个值块的长度,则可以释放多余值块到空块链。
本发明实施例中,电子设备还可以接收针对键-值数据的删除请求;响应于该删除请求,并基于该删除请求,确定待删除的键值块所对应的块索引值;然后,基于该块索引值对应的目标键值块中块头索引值,确定与该目标键值块对应的目标数据值块;最后,删除该目标数据值块中存储的数据值以及该目标键值块中存储的键值,以释放该键值和对应的数据值所占用的块空间。
图10为本发明实施例中键-值对(K-V)数据的删除示意图,如图10所示,若需要删除的键值为key的键值对,则首先找到key对应的键块索引block2,然后找到block2指向的值链头block3,然后释放值块链上所有的块到空块链上,释放键块到空块链上,最后重新调整AVL树中的树节点。
图10中,以block1为块头的空块链上,新增了两个空块,分别是block2和block3。
通过本发明实施例中,将K-V数据按照数据块的形式存储,并通过AVL树对所有K数据值块进行管理,使得在***数据、修改数据、删除数据时,提高了数据的查找效率。
图2为本发明实施例中数据处理装置的结构组成示意图一,如图2所示,所述装置包括:
接收单元201,用于接收针对键-值数据的存储请求;
提取单元202,用于基于所述存储请求,提取所述键-值数据中的键值和所述键值对应的数据值;
存储单元203,用于将所述键值的哈希值和所述数据值分别以数据块的形式进行存储,且单个键值块与单个数据值块的存储长度相同,且所述哈希值的长度小于等于所述键值块和/或所述数据值块可存储数据的长度。
本发明实施例中,所述存储单元203,还用于当所述数据值的存储长度大于单个数据块的存储长度时,将所述数据值以多个数据块的形式进行存储;其中,用于存储所述数据值的所述多个数据块之间通过块的索引值进行关联。
本发明实施例中,每个键值块的索引关联以形成一颗平衡二叉树结构;
当***新的键-值数据时,所述平衡二叉树结构中左节点的哈希值小于等于根节点的哈希值和右节点的哈希值,且所述根节点的哈希值小于等于所述右节点的哈希值,以保持所述平衡二叉树结构的有序性;任意一个根的左子树和右子树的高度差值小于等于2,以保持所述平衡二叉树结构的平衡性。
本发明实施例中,所述装置还包括:查找单元204;
所述查找单元204,用于基于所述键值块中的块头索引值,查找与所述键值块对应的数据值块,其中所述块头索引值用于存储所述数据值块的块链索引值;和/或,基于所述数据值块中关联的块的索引值,查找与所述数据值块对应的前驱块或后继块的块索引值。
本发明实施例中,所述装置还包括:检测单元205;
所述检测单元205,用于在存储所述键-值数据的块链表中检测空块状态;
所述存储单元203,具体用于当所述空块状态表征所述块链表中无空块时,将所述键值的数据和所述数据值的数据分别以数据块的形式存储于所述块链表的预设存储位置;或者,当所述空块状态表征所述块链表中有空块时,将所述键值的数据和所述数据值的数据分别以数据块的形式存储于所述空块所在位置。
本发明实施例中,所述装置还包括:确定单元206和修改单元207;
所述接收单元201,还用于接收针对键-值数据的修改请求;
所述确定单元206,还用于基于所述修改请求,确定待修改的键值块的块索引值;以及用于基于所述块索引值对应的目标键值块中的块头索引,确定与所述目标键值块对应的目标数据值块;
所述修改单元207,用于修改所述目标数据值块中的数据值数据。
本发明实施例中,所述装置还包括:比较单元208、添加单元209和释放单元210;
所述比较单元208,还用于将所述目标数据值块对应的数据存储长度与待修改的数据值的数据存储长度进行比较;
所述添加单元209,用于当比较结果表征所述目标数据值块对应的数据值存储长度小于所述待修改的数据值的存储长度时,在以所述目标数据值块为块头的块链后面增加新的数据值块;
所述释放单元210,用于当比较结果表征所述目标数据值块对应的数据值存储长度大于所述待修改的数据值的存储长度时,释放所述目标数据值块对应的数据值所占的块空间。
本发明实施例中,所述接收单元201,还用于接收针对键-值数据的删除请求;
所述确定单元206,还用于基于所述删除请求,确定待删除的键值块所对应的块索引值;以及基于所述块索引值对应的目标键值块中块头索引值,确定与所述目标键值块对应的目标数据值块;
所述释放单元210,还用于删除所述目标数据值块中存储的数据值以及所述目标键值块中存储的键值,以释放所述键值和对应的数据值所占用的块空间。
需要说明的是:上述实施例提供的数据处理装置在进行数据处理时,仅以上述各程序模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的程序模块完成,即将数据处理装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的数据处理装置与数据处理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图3为数据处理装置的结构组成示意图二,数据处理装置300可以是移动电话、计算机、数字广播终端、信息收发设备、游戏控制台、平板设备、个人数字助理、信息推送服务器、内容服务器等。图3所示的数据处理装置300包括:至少一个处理器301、存储器302、至少一个网络接口304和用户接口305。数据处理装置300中的各个组件通过总线***306耦合在一起。可理解,总线***306用于实现这些组件之间的连接通信。总线***306除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图3中将各种总线都标为总线***306。
其中,用户接口305可以包括显示器、键盘、鼠标、轨迹球、点击轮、按键、按钮、触感板或者触摸屏等。
可以理解,存储器302可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(ROM,Read Only Memory)、可编程只读存储器(PROM,Programmable Read-Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read-Only Memory)、电可擦除可编程只读存储器(EEPROM,Electrically Erasable Programmable Read-Only Memory)、磁性随机存取存储器(FRAM,ferromagnetic random access memory)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(CD-ROM,Compact Disc Read-Only Memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(RAM,Random AccessMemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM,Static Random Access Memory)、同步静态随机存取存储器(SSRAM,Synchronous Static Random Access Memory)、动态随机存取存储器(DRAM,Dynamic Random Access Memory)、同步动态随机存取存储器(SDRAM,SynchronousDynamic Random Access Memory)、双倍数据速率同步动态随机存取存储器(DDRSDRAM,Double Data Rate Synchronous Dynamic Random Access Memory)、增强型同步动态随机存取存储器(ESDRAM,Enhanced Synchronous Dynamic Random Access Memory)、同步连接动态随机存取存储器(SLDRAM,SyncLink Dynamic Random Access Memory)、直接内存总线随机存取存储器(DRRAM,Direct Rambus Random Access Memory)。本发明实施例描述的存储器302旨在包括但不限于这些和任意其它适合类型的存储器。
本发明实施例中的存储器302用于存储各种类型的数据以支持数据处理装置300的操作。这些数据的示例包括:用于在数据处理装置300上操作的任何计算机程序,如操作***3021和应用程序3022;音乐数据;动漫数据;图书信息;视频等。其中,操作***3021包含各种***程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。应用程序3022可以包含各种应用程序,例如媒体播放器(Media Player)、浏览器(Browser)等,用于实现各种应用业务。实现本发明实施例方法的程序可以包含在应用程序3022中。
上述本发明实施例揭示的方法可以应用于处理器301中,或者由处理器301实现。处理器301可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器301中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器301可以是通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器301可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本发明实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器302,处理器301读取存储器302中的信息,结合其硬件完成前述方法的步骤。
在示例性实施例中,数据处理装置300可以被一个或多个应用专用集成电路(ASIC,Application Specific Integrated Circuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable LogicDevice)、现场可编程门阵列(FPGA,Field-ProgrammableGate Array)、通用处理器、控制器、微控制器(MCU,Micro Controller Unit)、微处理器(Microprocessor)、或其他电子元件实现,用于执行前述方法。
具体所述处理器301运行所述计算机程序时,执行:接收针对键-值数据的存储请求;基于所述存储请求,提取所述键-值数据中的键值和数据值;将所述键值的哈希值和所述数据值分别以数据块的形式进行存储,且单个键值块与单个数据值块的存储长度相同,且所述哈希值的长度小于等于所述键值块和/或所述数据值块可存储数据的长度。
具体所述处理器301运行所述计算机程序时,还执行:当所述数据值的存储长度大于单个数据块的存储长度时,将所述数据值以多个数据块的形式进行存储;其中,用于存储所述数据值的所述多个数据块之间通过块的索引值进行关联。
具体所述处理器301运行所述计算机程序时,还执行:每个键值块的索引关联以形成一颗平衡二叉树结构;当***新的键-值数据时,所述平衡二叉树结构中左节点的哈希值小于等于根节点的哈希值和右节点的哈希值,且所述根节点的哈希值小于等于所述右节点的哈希值,以保持所述平衡二叉树结构的有序性;任意一个根的左子树和右子树的高度差值小于等于2,以保持所述平衡二叉树结构的平衡性。
具体所述处理器301运行所述计算机程序时,还执行:基于所述键值块中的块头索引值,查找与所述键值块对应的数据值块,其中所述块头索引值用于存储所述数据值块的块链索引值;和/或,基于所述数据值块中关联的块的索引值,查找与所述数据值块对应的前驱块或后继块的块索引值。
具体所述处理器301运行所述计算机程序时,还执行:在存储所述键-值数据的块链表中检测空块状态;当所述空块状态表征所述块链表中无空块时,将所述键值的数据和所述数据值的数据分别以数据块的形式存储于所述块链表的预设存储位置;或者,当所述空块状态表征所述块链表中有空块时,将所述键值的数据和所述数据值的数据分别以数据块的形式存储于所述空块所在位置。
具体所述处理器301运行所述计算机程序时,还执行:接收针对键-值数据的修改请求;基于所述修改请求,确定待修改的键值块的块索引值;基于所述块索引值对应的目标键值块中的块头索引,确定与所述目标键值块对应的目标数据值块;修改所述目标数据值块中的数据值数据。
具体所述处理器301运行所述计算机程序时,还执行:将所述目标数据值块对应的数据存储长度与待修改的数据值的数据存储长度进行比较;当比较结果表征所述目标数据值块对应的数据值存储长度小于所述待修改的数据值的存储长度时,在以所述目标数据值块为块头的块链后面增加新的数据值块;当比较结果表征所述目标数据值块对应的数据值存储长度大于所述待修改的数据值的存储长度时,释放所述目标数据值块对应的数据值所占的块空间。
具体所述处理器301运行所述计算机程序时,还执行:接收针对键-值数据的删除请求;基于所述删除请求,确定待删除的键值块所对应的块索引值;基于所述块索引值对应的目标键值块中块头索引值,确定与所述目标键值块对应的目标数据值块;删除所述目标数据值块中存储的数据值以及所述目标键值块中存储的键值,以释放所述键值和对应的数据值所占用的块空间。
在示例性实施例中,本发明实施例还提供了一种计算机可读存储介质,例如包括计算机程序的存储器302,上述计算机程序可由数据处理装置300的处理器301执行,以完成前述方法所述步骤。计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、FlashMemory、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备,如移动电话、计算机、平板设备、个人数字助理等。
一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器运行时,执行:接收针对键-值数据的存储请求;基于所述存储请求,提取所述键-值数据中的键值和数据值;将所述键值的哈希值和所述数据值分别以数据块的形式进行存储,且单个键值块与单个数据值块的存储长度相同,且所述哈希值的长度小于等于所述键值块和/或所述数据值块可存储数据的长度。
该计算机程序被处理器运行时,还执行:当所述数据值的存储长度大于单个数据块的存储长度时,将所述数据值以多个数据块的形式进行存储;其中,用于存储所述数据值的所述多个数据块之间通过块的索引值进行关联。
该计算机程序被处理器运行时,还执行:每个键值块的索引关联以形成一颗平衡二叉树结构;当***新的键-值数据时,所述平衡二叉树结构中左节点的哈希值小于等于根节点的哈希值和右节点的哈希值,且所述根节点的哈希值小于等于所述右节点的哈希值,以保持所述平衡二叉树结构的有序性;任意一个根的左子树和右子树的高度差值小于等于2,以保持所述平衡二叉树结构的平衡性。
该计算机程序被处理器运行时,还执行:基于所述键值块中的块头索引值,查找与所述键值块对应的数据值块,其中所述块头索引值用于存储所述数据值块的块链索引值;和/或,基于所述数据值块中关联的块的索引值,查找与所述数据值块对应的前驱块或后继块的块索引值。
该计算机程序被处理器运行时,还执行:在存储所述键-值数据的块链表中检测空块状态;当所述空块状态表征所述块链表中无空块时,将所述键值的数据和所述数据值的数据分别以数据块的形式存储于所述块链表的预设存储位置;或者,当所述空块状态表征所述块链表中有空块时,将所述键值的数据和所述数据值的数据分别以数据块的形式存储于所述空块所在位置。
该计算机程序被处理器运行时,还执行:接收针对键-值数据的修改请求;基于所述修改请求,确定待修改的键值块的块索引值;基于所述块索引值对应的目标键值块中的块头索引,确定与所述目标键值块对应的目标数据值块;修改所述目标数据值块中的数据值数据。
该计算机程序被处理器运行时,还执行:将所述目标数据值块对应的数据存储长度与待修改的数据值的数据存储长度进行比较;当比较结果表征所述目标数据值块对应的数据值存储长度小于所述待修改的数据值的存储长度时,在以所述目标数据值块为块头的块链后面增加新的数据值块;当比较结果表征所述目标数据值块对应的数据值存储长度大于所述待修改的数据值的存储长度时,释放所述目标数据值块对应的数据值所占的块空间。
该计算机程序被处理器运行时,还执行:接收针对键-值数据的删除请求;基于所述删除请求,确定待删除的键值块所对应的块索引值;基于所述块索引值对应的目标键值块中块头索引值,确定与所述目标键值块对应的目标数据值块;删除所述目标数据值块中存储的数据值以及所述目标键值块中存储的键值,以释放所述键值和对应的数据值所占用的块空间。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。
Claims (9)
1.一种数据处理方法,所述方法包括:
接收针对键-值数据的存储请求;
基于所述存储请求,提取所述键-值数据中的键值和数据值;
将所述键值的哈希值和所述数据值分别以数据块的形式进行存储,且单个键值块与单个数据值块的存储长度相同,且所述哈希值的长度小于等于所述键值块和/或所述数据值块可存储数据的长度;其中,所述单个键值块用于存储所述哈希值;所述单个数据值块用于存储所述数据值;
基于所述键值块中的块头索引值,查找与所述键值块对应的数据值块,其中所述块头索引值用于存储所述数据值块的块链索引值;和/或,基于所述数据值块中关联的块的索引值,查找与所述数据值块对应的前驱块或后继块的块索引值。
2.根据权利要求1所述的方法,所述方法还包括:
当所述数据值的存储长度大于单个数据块的存储长度时,将所述数据值以多个数据块的形式进行存储;其中,用于存储所述数据值的所述多个数据块之间通过块的索引值进行关联。
3.根据权利要求1所述的方法,所述方法还包括:
每个键值块的索引关联以形成一颗平衡二叉树结构;
当***新的键-值数据时,所述平衡二叉树结构中左节点的哈希值小于等于根节点的哈希值和右节点的哈希值,且所述根节点的哈希值小于等于所述右节点的哈希值,以保持所述平衡二叉树结构的有序性;任意一个根的左子树和右子树的高度差值小于等于2,以保持所述平衡二叉树结构的平衡性。
4.根据权利要求1所述的方法,所述方法还包括:
在存储所述键-值数据的块链表中检测空块状态;
当所述空块状态表征所述块链表中无空块时,将所述键值的数据和所述数据值的数据分别以数据块的形式存储于所述块链表的预设存储位置;
或者,当所述空块状态表征所述块链表中有空块时,将所述键值的数据和所述数据值的数据分别以数据块的形式存储于所述空块所在位置。
5.根据权利要求1所述的方法,所述方法还包括:
接收针对键-值数据的修改请求;
基于所述修改请求,确定待修改的键值块的块索引值;
基于所述块索引值对应的目标键值块中的块头索引,确定与所述目标键值块对应的目标数据值块;
修改所述目标数据值块中的数据值数据。
6.根据权利要求5所述的方法,所述方法还包括:
将所述目标数据值块对应的数据存储长度与待修改的数据值的数据存储长度进行比较;
当比较结果表征所述目标数据值块对应的数据值存储长度小于所述待修改的数据值的存储长度时,在以所述目标数据值块为块头的块链后面增加新的数据值块;
当比较结果表征所述目标数据值块对应的数据值存储长度大于所述待修改的数据值的存储长度时,释放所述目标数据值块对应的数据值所占的块空间。
7.根据权利要求1所述的方法,所述方法还包括:
接收针对键-值数据的删除请求;
基于所述删除请求,确定待删除的键值块所对应的块索引值;
基于所述块索引值对应的目标键值块中块头索引值,确定与所述目标键值块对应的目标数据值块;
删除所述目标数据值块中存储的数据值以及所述目标键值块中存储的键值,以释放所述键值和对应的数据值所占用的块空间。
8.一种数据处理装置,所述装置包括:
接收单元,用于接收针对键-值数据的存储请求;
提取单元,用于基于所述存储请求,提取所述键-值数据中的键值和所述键值对应的数据值;
存储单元,用于将所述键值的哈希值和所述数据值分别以数据块的形式进行存储,且单个键值块与单个数据值块的存储长度相同,且所述哈希值的长度小于等于所述键值块和/或所述数据值块可存储数据的长度;其中,所述单个键值块用于存储所述哈希值;所述单个数据值块用于存储所述数据值;
查找单元,用于基于所述键值块中的块头索引值,查找与所述键值块对应的数据值块,其中所述块头索引值用于存储所述数据值块的块链索引值;和/或,基于所述数据值块中关联的块的索引值,查找与所述数据值块对应的前驱块或后继块的块索引值。
9.一种数据处理装置,所述装置包括:存储器、处理器以及存储在存储器被处理器运行的可执行程序,其特征在于,所述处理器运行所述可执行程序时执行如权利要求1至7任一项所述的一种数据处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811198259.6A CN109460406B (zh) | 2018-10-15 | 2018-10-15 | 一种数据处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811198259.6A CN109460406B (zh) | 2018-10-15 | 2018-10-15 | 一种数据处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109460406A CN109460406A (zh) | 2019-03-12 |
CN109460406B true CN109460406B (zh) | 2021-03-23 |
Family
ID=65607767
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811198259.6A Active CN109460406B (zh) | 2018-10-15 | 2018-10-15 | 一种数据处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109460406B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110399104B (zh) * | 2019-07-23 | 2023-06-09 | 网易(杭州)网络有限公司 | 数据存储方法、数据存储装置、电子设备、存储介质 |
CN110825363B (zh) * | 2019-11-01 | 2024-05-17 | 北京知道创宇信息技术股份有限公司 | 智能合约获取方法、装置、电子设备及存储介质 |
CN112464619B (zh) * | 2021-01-25 | 2021-05-25 | 平安国际智慧城市科技股份有限公司 | 大数据处理方法、装置、设备及计算机可读存储介质 |
CN116414828A (zh) * | 2021-12-31 | 2023-07-11 | 华为技术有限公司 | 一种数据管理方法及相关装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108153757A (zh) * | 2016-12-02 | 2018-06-12 | 深圳市中兴微电子技术有限公司 | 一种哈希表管理的方法和装置 |
CN108446376A (zh) * | 2018-03-16 | 2018-08-24 | 众安信息技术服务有限公司 | 数据存储方法与装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9110936B2 (en) * | 2010-12-28 | 2015-08-18 | Microsoft Technology Licensing, Llc | Using index partitioning and reconciliation for data deduplication |
US9846642B2 (en) * | 2014-10-21 | 2017-12-19 | Samsung Electronics Co., Ltd. | Efficient key collision handling |
CN105320775B (zh) * | 2015-11-11 | 2019-05-14 | 中科曙光信息技术无锡有限公司 | 数据的存取方法和装置 |
CN106202548B (zh) * | 2016-07-25 | 2018-09-04 | 网易(杭州)网络有限公司 | 数据存储方法、查找方法及装置 |
CN107918612B (zh) * | 2016-10-08 | 2019-03-05 | 腾讯科技(深圳)有限公司 | 键值存储***数据结构的实现方法和装置 |
US10243939B2 (en) * | 2016-12-23 | 2019-03-26 | Amazon Technologies, Inc. | Key distribution in a distributed computing environment |
CN108595720B (zh) * | 2018-07-12 | 2020-05-19 | 中国科学院深圳先进技术研究院 | 一种区块链时空数据查询方法、***及电子设备 |
-
2018
- 2018-10-15 CN CN201811198259.6A patent/CN109460406B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108153757A (zh) * | 2016-12-02 | 2018-06-12 | 深圳市中兴微电子技术有限公司 | 一种哈希表管理的方法和装置 |
CN108446376A (zh) * | 2018-03-16 | 2018-08-24 | 众安信息技术服务有限公司 | 数据存储方法与装置 |
Non-Patent Citations (2)
Title |
---|
"Key-Value型NoSQL本地存储***研究";马文龙 等;《计算机学报》;20170601;第41卷(第8期);1722-1751 * |
"PHash: A memory-efficient, high-performance key-value store for large-scale data-intensive applications";Hyotaek Shim;《Journal of Systems and Software》;20170131;第123卷;33-44 * |
Also Published As
Publication number | Publication date |
---|---|
CN109460406A (zh) | 2019-03-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109460406B (zh) | 一种数据处理方法及装置 | |
US10642515B2 (en) | Data storage method, electronic device, and computer non-volatile storage medium | |
CN106970936B (zh) | 数据处理方法及装置、数据查询方法及装置 | |
US8910044B1 (en) | Playlist incorporating tags | |
US9411840B2 (en) | Scalable data structures | |
CN110162525B (zh) | 基于b+树的读写冲突解决方法、装置及存储介质 | |
US8983967B2 (en) | Data storage system having mutable objects incorporating time | |
CN110018998B (zh) | 一种文件管理方法、***及电子设备和存储介质 | |
CN107704202B (zh) | 一种数据快速读写的方法和装置 | |
US20140095458A1 (en) | Storage device for storing directory entries, directory entry lookup apparatus and method, and storage medium storing directory entry lookup program | |
US20140046928A1 (en) | Query plans with parameter markers in place of object identifiers | |
US11429494B2 (en) | File backup based on file type | |
CN113297138A (zh) | 索引建立方法、数据查询方法及计算设备 | |
CN110134335B (zh) | 一种基于键值对的rdf数据管理方法、装置及存储介质 | |
US20140052734A1 (en) | Computing device and method for creating data indexes for big data | |
CN113721862B (zh) | 数据处理方法及装置 | |
CN105447166A (zh) | 一种基于关键字查找信息的方法及*** | |
US9858300B2 (en) | Hash based de-duplication in a storage system | |
EP3343395A1 (en) | Data storage method and apparatus for mobile terminal | |
CN105843809B (zh) | 数据处理方法和装置 | |
US11500943B2 (en) | Method and system for cached early-binding document search | |
CN104572638A (zh) | 数据读写方法及装置 | |
CN111414527A (zh) | 相似项目的查询方法、装置及存储介质 | |
CN107526816B (zh) | 一种流式分发记录的保存方法、装置及电子设备 | |
US20140081986A1 (en) | Computing device and method for generating sequence indexes for data files |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |