首页 / 专利库 / 集成电路 / 集成电路卡 / 微控制器 / 存储器 / key-value数据库中的数据压缩方法、访问方法和系统

key-value数据库中的数据压缩方法、访问方法和系统

阅读:102发布:2021-09-18

专利汇可以提供key-value数据库中的数据压缩方法、访问方法和系统专利检索,专利查询,专利分析的服务。并且本 发明 提供一种key‑value 数据库 中的 数据压缩 方法、 访问 方法和系统,所述数据压缩方法包括:数据压缩操作,截取初始key‑value数据中完整key域数据的部分字节生成简化key域数据,基于简化key域数据和初始value域数据生成简化后的key‑value数据,其中所述完整key域数据具有完整key值,所述简化key域数据具有简化key值;存储操作,将简化后的key‑value数据存储在key‑value数据库中,并利用线性数据表存储存在哈希映射地址冲突和简化key值冲突的key‑value数据,所存储的key‑value数据包括完整key域数据和对应的value域数据。本发明 实施例 的方法和系统,能够提高 区 块 链 数据库中的访存性能。,下面是key-value数据库中的数据压缩方法、访问方法和系统专利的具体信息内容。

1.一种key-value数据库中的数据压缩方法,其特征在于,该方法包括以下步骤:
数据压缩操作,截取初始key-value数据中完整key域数据的部分字节生成简化key域数据,基于简化key域数据和初始key-value数据中的value域数据生成简化后的key-value数据,其中所述完整key域数据具有完整key值,所述简化key域数据具有简化key值;以及数据存入操作,将简化后的key-value数据存储在key-value数据库中,并利用线性数据表存储存在哈希映射地址冲突和简化key值冲突的key-value数据,所存储的key-value数据包括完整key域数据和对应的value域数据;
其中,所述完整key域数据包括交易ID和输出索引,所述截取初始key-value数据中完整key域数据的部分字节,作为简化key域数据的步骤包括:将完整key域数据中的交易ID的字节数m0和/或输出索引的字节数n0缩短,得到简化key域数据,使得简化key域数据中的字节数满足m+n<m0+n0,其中,m和n分别为简化key域数据中交易ID的字节数m0和输出索引的字节数。
2.根据权利要求1所述的方法,其特征在于,基于如下公式确定m和n:
其中,E1为哈希映射相关的平均碰撞次数,E2为线性数据表大小,2s为用于存储key-value数据的数据桶的数量,t为要存储的key-value数据的条目数量。
3.根据权利要求1所述的方法,其特征在于:
所述初始key-value数据为链交易数据中的未花费交易数据UTXO;
所述m被设置为大于n。
4.根据权利要求1所述的方法,其特征在于:
所述key-value数据库中的数据和所述线性数据表存储在内存中。
5.根据权利要求1-4中任意一项所述的方法,其特征在于,所述存在哈希映射地址冲突和简化key值冲突的key-value数据包括具有不同的完整key值,被哈希映射到相同的地址,且对应相同的简化key值的多条key-value数据。
6.根据权利要求1-4中任意一项所述的方法,其特征在于,所述数据存入操作包括:
针对要存储的初始key-value数据,对完整key值哈希,得到key-value数据库中对应数据桶的地址;
在对应数据桶中没有数据的情况下,存储简化后的key-value数据;在对应数据桶中存在数据的情况下,将当前简化后的key-value数据的简化key值与对应数据桶中的简化key值相比较,如果对应数据桶中不存在相同的简化key值,则按照预定的冲突解决法寻找对应的存储地址,如果对应数据桶中存在相同的简化key值,则将要存储的初始key-value数据存储在线性数据表中。
7.一种基于如权利要求1-6中任意一项所述的key-value数据库中的数据压缩方法的数据访问方法,其特征在于,该数据访问方法包括以下步骤:
对给定的完整key值进行哈希映射,得到key-value数据库中对应数据桶的地址;
在对应数据桶中存在数据的情况下,查找线性数据表中是否记录有该给定的完整key值,如果线性数据表中没有记录该给定的完整key值,则从key-value数据库中返回该简化key值对应的value值,如果线性数据表中记录有当前给定的完整key值,则从所述线性数据表中获得该完整key值对应的value值。
8.一种数据压缩系统,该系统包括处理器和存储器,所述存储器包括内存和硬盘,其特征在于,所述存储器存储有key-value数据库和线性数据表,所述存储器还用于存储计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该系统实现权利要求1-7中任意一项所述方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至7任一项所述方法的步骤。

说明书全文

key-value数据库中的数据压缩方法、访问方法和系统

技术领域

[0001] 本发明涉及计算机数据处理技术领域,尤其涉及面向链应用的数据处理技术,更具体地涉及一种key-value数据库中的数据压缩方法、访问方法和系统。

背景技术

[0002] 区块链是随着比特币等数字加密货币的日益普及而逐渐兴起的一种全新技术,它提供了一种去中心化的、无需信任积累的信用建立范式,目前已经引起金融行业、科研机构、政府部和投资公司的高度重视与广泛关注。
[0003] 区块链起源于比特币,作为比特币的底层技术,本质上是一个去中心化的数据库。区块链技术是一种不依赖第三方、通过自身分布式节点进行网络数据的存储、验证、传递和交流的一种技术方案。区块链技术被认为是互联网发明以来最具颠覆性的技术创新,它依靠密码学和数学巧妙的分布式算法,在无法建立信任关系的互联网上,无需借助任何第三方中心的介入就可以使参与者达成共识,以极低的成本解决了信任与价值的可靠传递难题。
[0004] 在区块链中,节点通过特定的共识算法以及交易验证算法实现去中心化交易。交易数据被分为两类,一类是块数据(block),里面包含了已经被确认的数字资产交易,这类数据以区块的形式存储至数据库中,区块以链的方式组成区块链;另一类数据是未花费交易数据(UTXO,Unspent Transaction Output),它是块数据的子集,是专门为提高交易验证速度而设立的数据。交易数据都被存储在数据库中,交易数据在写入区块前需要执行一系列的验证过程,在这些过程中需要访问和更新数据库,因此数据库的效率,尤其是存储UTXO的数据库效率,对区块链的交易性能至关重要。
[0005] UTXO数据是验证交易签名的必不可少的数据,大多数区块链系统采用key-value数据库来存储UTXO数据,key-value数据库包括key域数据和value域数据,其中key域数据与交易ID相关,value域数据与节点地址相关,每一个(key,value)对(可简称为(K,V)对)被称为一个条目,区块链系统可以根据key值(简称K)快速映射到存储对应(key,value)条目中的节点地址。区块链系统中,其key域数据可由交易ID和输出索引组成,其value域数据由节点地址、交易金额等组成。对应key-value数据库,如果其数据在内存中,则可以很快的存取数据(~20us/opr),但如果数据在硬盘中,其访存速度会变得降低接近3个数量级(~10ms/opr),由于区块链巨大的交易量,数据库所存储的UTXO数据已达到3GB左右,而且还在继续增长,目前的内存容量越来越难以满足UTXO数据的增长,导致部分数据被放置于硬盘中,从而极大地降低了数据库的访存性能。
[0006] 另外,由于key-value数据库的地址映射机制(哈希映射),在数据访存时会有一定数量的冲突产生,即不同key值的条目会被映射到相同的地址。这种冲突主要通过开放地址法或链表法解决,但是如果冲突率过高,数据库处理冲突的事件开销就会增大,从而也会降低数据库的访存性能。
[0007] 如何提高区块链数据库的访存性能,是一个有待解决的问题。

发明内容

[0008] 鉴于此,本发明实施例提供了一种key-value数据库中的数据压缩方法、装置和系统,以消除或改善现有技术中存在的一个或更多个缺陷
[0009] 本发明的技术方案如下:
[0010] 根据本发明的一方面,提供了一种key-value数据库中的数据压缩方法,该方法包括以下步骤:
[0011] 数据压缩操作,截取初始key-value数据中完整key域数据的部分字节生成简化key域数据,基于简化key域数据和初始key-value数据中的value域数据生成简化后的key-value数据,其中所述完整key域数据具有完整key值,所述简化key域数据具有简化key值;
[0012] 数据存入操作,将简化后的key-value数据存储在key-value数据库中,并利用线性数据表存储存在哈希映射地址冲突和简化key值冲突的key-value数据,所存储的key-value数据包括完整key域数据和对应的value域数据。
[0013] 优选地,所述完整key域数据包括交易ID和输出索引,所述截取初始key-value数据中完整key域数据的部分字节,作为简化key域数据的步骤包括:将完整key域数据中的交易ID的字节数m0和/或输出索引的字节数n0缩短,得到简化key域数据,使得简化key域数据中的字节数满足m+n<m0+n0,其中,m和n分别为简化key域数据中交易ID的字节数m0和输出索引的字节数。
[0014] 优选地,基于如下公式确定m和n:
[0015]
[0016]
[0017] 其中,E1为哈希映射相关的平均碰撞次数,E2为线性数据表大小,2s为用于存储key-value数据的数据桶的数量,t为要存储的key-value数据的条目数量。
[0018] 优选地,所述初始key-value数据为区块链交易数据中的未花费交易数据(UTXO);所述m被设置为大于n。
[0019] 优选地,所述key-value数据库中的数据和所述线性数据表存储在内存中。
[0020] 优选地,所述存在哈希映射地址冲突和简化key值冲突的key-value数据包括具有不同的完整key值,被哈希映射到相同的地址,且对应相同的简化key值的多条key-value数据。
[0021] 优选地,在进行数据存入时执行的所述数据存入操作包括:针对要存储的初始key-value数据,对完整key值哈希,得到key-value数据库中对应数据桶的地址;在对应数据桶中没有数据的情况下,存储简化后的key-value数据;在对应数据桶中存在数据的情况下,将当前简化后的key-value数据的简化key值与对应数据桶中的简化key值相比较,如果对应数据桶中不存在相同的简化key值,则按照预定的冲突解决法寻找对应的存储地址并进行存储,如果对应数据桶中存在相同的简化key值,则将要存储的初始key-value数据存储在线性数据表中。
[0022] 根据本发明的另一方面,提供一种基于如前所述的key-value数据库中的数据压缩方法的数据访问方法,该数据访问方法包括以下步骤:
[0023] 对给定的完整key值进行哈希映射,得到key-value数据库中对应数据桶的地址;
[0024] 在对应数据桶中存在数据的情况下,查找线性数据表中是否记录有该给定的完整key值,如果线性数据表中没有记录该给定的完整key值,则从key-value数据库中返回该简化key值对应的value值,如果线性数据表中记录有当前给定的完整key值,则从所述线性数据表中获得该完整key值对应的value值。
[0025] 根据本发明的另一方面,提供一种数据压缩系统,该系统包括处理器和存储器,所述存储器包括内存和硬盘,所述存储器还用于存储key-value数据库和线性数据表,所述存储器还用于存储计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该系统实现如前所述方法的步骤。
[0026] 根据本发明的又一方面,提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如前所述方法的步骤。
[0027] 本发明实施例提供的方法和系统,能够使得内存能够利用系统的存储空间存储更多的key-value数据(如UTXO),从而可以改善key-value数据库的访存性能。
[0028] 本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。附图说明
[0029] 此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中:
[0030] 图1为本发明一实施例中key-value数据库的数据压缩方法的示例性流程。
[0031] 图2为本发明一实施例中的key域数据压缩方法图。
[0032] 图3为本发明一实施例中的线性数据表图。
[0033] 图4为本发明一实施例中数据库系统的示意图。
[0034] 图5为本发明一实施例中的数据存入操作的流程图
[0035] 图6为本发明一实施例中的数据访问操作的流程图。
[0036] 图7为本发明一实施例中数据压缩系统的示意性框图

具体实施方式

[0037] 为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
[0038] 在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
[0039] 应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。
[0040] 在此,还需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互结合。
[0041] 图1所示为本发明实施例中key-value数据库的数据压缩方法的示例性流程。如图1所示,该方法包括以下步骤:
[0042] 步骤S110,数据压缩操作,截取初始key-value数据(或称key-value条目)中完整key域数据的部分字节生成简化key域数据,基于简化key域数据和初始key-value数据中的value域数据生成简化后的key-value数据。
[0043] 本步骤中截取的字节顺序和字节位置可以自行设定。截取前完整key域数据具有完整key值K,截取字节后得到的简化key域数据具有简化key值K′,简化key值小于完整key值,即K′<K。
[0044] 作为示例,初始key-value数据为区块链应用中的UTXO条目,但本发明并不限于此,还可适于在key-value数据库中存储的其他类型的key-value数据。
[0045] 通常,诸如UTXO条目之类的key-value数据的key域数据包括交易ID和输出索引,在这种情况下,本步骤可以包括:
[0046] 1、将key域中的交易ID缩短为简化交易ID。该简化交易ID的操作包括:截取交易ID中的部分(m)字节作为简化交易ID,截取的字节顺序和字节位置可以自行设定。
[0047] 以典型区块链应用为例,区块链应用中的交易ID是交易信息的哈希(HASH)值,共32字节,因此截取字节的位置和顺序可以任意选取,例如,可以简单地截取交易ID的最高位的m个字节作为简化交易ID。
[0048] 2、将key域中的输出索引数据缩短为简化索引。该简化输出索引的操作包括:截取索引数据的部分(n)字节作为简化索引,截取的字节顺序和字节位置可以自行设定。
[0049] 仍以区块链应用为例,它的输出索引为4字节,一般的索引值较小,本发明中可截取索引数据的低n位字节作为简化索引。
[0050] 简化交易ID和简化输出索引组合成为新的key域数据,如图2所示。简化前的初始的key-value数据可简称为(K,V)数据,简化后的key-value数据可简称为(K′,V)数据。
[0051] 如上描述的是将初始key域数据中交易ID的字节数(m0)和输出索引的字节数(n0)均进行缩短,得到简化key域数据。在本发明另选实施例中,还可以将交易ID的字节数(m0)和输出索引的字节数(n0)中的任一个进行缩短。
[0052] 总之,简化key域数据中的字节数要满足m+n<m0+n0,其中m≤m0,n≤n0。
[0053] 本步骤可以对key-value数据库中原有的key-value数据进行压缩,也可以对将要存入key-value数据库的key-value进行压缩。
[0054] 步骤S120,数据存入操作,将简化后的key-value数据存储在key-value数据库中,并利用线性数据表存储存在哈希映射地址冲突和简化key值冲突的key-value数据。
[0055] 本步骤中将新的简化后的key域数据和原有对应的value数据一起存储在key-value数据库中,也即key-value数据库所存储的key-value数据包括简化后的key域数据和原有的value域数据。压缩后的数据和原数据的存储方式以及对应关系一致,但存储相同数量的key-value数据(UTXO条目),将占用更少的内存,此外数据库也具备冲突处理方法。
[0056] 本发明实施例中,使用简化的key域数据会造成现有的冲突处理方法在特定情况下失效,该特定情况为:当不同的完整key值被哈希映射到相同的地址而同时又具有相同的简化key值,即存在哈希映射地址冲突和简化key值冲突。这是因为现有的冲突处理算法都是根据key值区分冲突,而在上述情况中,不同完整key值的简化key值一致会导致算法无法区分冲突的条目。
[0057] 为此,本发明的方法中,针对存在哈希映射地址冲突和简化key值冲突的key-value数据,创建了线性数据表。具体地,将被哈希映射到相同的地址而同时又具有相同的简化key值而导致发生冲突的key-value条目存储在该线性数据表中,当系统访问和改写这些冲突的数据时将被定位到新数据表中的对应条目。本发明的线性数据表中存储的是key-value条目的完整数据而不是简化数据,如图3所示。
[0058] 进一步地,本发明的方法中,可以通过合理确定简化后字节位数(m+n)来保证或提高数据库系统的访存性能。这是因为,key域数据压缩后的字节位数m和n会影响压缩后的key-value数据在数据库中的碰撞率,m和n过大使得数据压缩效果不明显,数据库性能的提高有限。而m和n过小会导致碰撞率过高从而使数据库访问缓慢,另一方面也会增加线性数据表的大小,过大的数据表同样会降低数据表的访问性能。因此,m和n可以根据需要参考碰撞次数和线性数据表的尺寸来决定。一般而言,因为线性数据表尺寸对性能的影响更大,根据线性数据表的大小来决定m和n即可。一实施例中,m和n可以基于如下公式确定:
[0059]
[0060]
[0061] 其中,E1为哈希映射相关的平均碰撞次数,E2为线性数据表大小,2s为用于存储key-value数据的数据桶的数量,t为要存储的key-value数据的条目数量。
[0062] 根据上述公式可以由m和n得到对应的碰撞次数E1和数据表尺寸E2,同理地,如果设定E1和E2的数值,利用上述公式可以确定m和n的值。以区块链应用为例,设定E2的大小不能多于100个条目,同时给定t=50M,s=32,同时因为原交易ID长度大于索引长度,可尽量使m比n大,则最后计算得出的满足要求的m和n值分别为m=3,n=1,此时线性数据表大小为32。合理地确定了m和n的数值或m+n的数值,可以防止线性数据表过大而大大降低数据库访存性能。
[0063] 如上确定m和n的方式仅为示例,本发明并不限于此。
[0064] 图5所示为本发明一实施例中的数据存入操作的流程图。如图5所示,对于给定的初始key-value数据(具有完整key值K和完整value值V,即(K,V)数据),存入操作流程包括:对完整key值K哈希,得到数据库中对应数据桶的地址,如果桶里没有数据,说明当前没有冲突,则把经前述数据压缩操作步骤简化后的key-value数据(即(K′,V)数据)存储到该桶中。
如果桶里已有数据,说明发生了哈希映射地址冲突,将当前简化后的key-value数据的简化key值与对应数据桶中的简化key值相比较,如果对应数据桶中不存在相同的简化key值,则按照预定的冲突解决法寻找对应的存储地址进行存储,如按照传统的开放地址法或链表法寻找对应的存储地址进行存储,把(K′,V)数据存储到数据库中;如果对应数据桶中存在相同的简化key值,说明发生了哈希映射地址冲突和简化key值冲突,则把对应的(K,V),即初始key-value数据,存储在线性数据表中。图4示出了本发明一实施例中存储有key-value数据库和线性数据表的数据库系统。
[0065] 基于如上所述的针对key域数据的数据压缩方法,对数据库系统的数据访问操作如图6所示。给定完整key值K,想要在数据库系统中获取对应的value值V,具体的数据访问操作包括:对K哈希,得到数据库中对应的桶的地址,如果对应桶里没有数据,则说明对于K没有条目被记录,访问操作返回空;如果有数据,说明数据库有对应条目,但是可能存在冲突的情况,需要继续访问线性数据表,查看完整K是否在线性数据表有记录,如果在线性数据表中没有记录,说明key-value数据库中存储的条目是K对应的条目,返回其value值即可;如果线性数据表中存有记录,则说明真正的条目存在线性数据表中,将线性数据表的value数据返回。
[0066] 通过如上所述的针对key域数据的数据压缩方法,在key-value数据库中存储相同数量的key-value数据条目,如UTXO条目,将占用更少的存储空间,这意味着同样存储空间的内存可以存储更多的key-value数据条目,从而可以大大提高数据的访存速度。此外,本发明通过设计合理的简化后的字节数,可以控制数据库处理冲突事件的开销过大,并保证了线性数据表不会过大而影响数据库的访存性能,从而保证了系统性能的提高。
[0067] 本公开的方法不仅适于区块链中的交易数据,同样可以应用于适于在key-value数据库中存储的其他类型的数据,如物联网中的交易数据。
[0068] 与前述方法相应地,本发明还提供一种数据压缩系统,该系统包括处理器和存储器,存储器包括内存和硬盘,存储器中存储有数据库,该数据库包括key-value数据桶和线性数据表,存储器还用于存储计算机指令,处理器用于执行存储器中存储的计算机指令,在计算机指令被处理器执行时该数据压缩系统实现如前所述各个方法步骤。优选地,key-value数据桶和线性数据表优先存储在存储器的内存中,从而提高系统访存性能。
[0069] 在本公开的一些实施例中,数据压缩系统可以包括收发单元,该收发单元可包括接收器和发送器,如图7所示,处理器、存储器、接收器和发送器可通过总线系统连接,处理器可控制收发单元收发key-value数据。
[0070] 作为一种实现方式,本发明中接收器和发送器的功能可以考虑通过收发电路或者收发的专用芯片来实现,处理器可以考虑通过专用处理芯片、处理电路或通用芯片实现。
[0071] 作为另一种实现方式,可以将实现处理器,接收器和发送器功能的程序代码存储在存储器中,通用处理器通过执行存储器中的代码来实现处理器,接收器和发送器的功能。
[0072] 本公开还涉及存储介质,其上可以存储有计算机程序代码,当程序代码被执行时可以实现本发明的方法的各种实施例,该存储介质可以是有形存储介质,诸如光盘、U盘、软盘、硬盘等。
[0073] 需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。
[0074] 还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或系统。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
[0075] 软件可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
[0076] 本发明中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。
[0077] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈