数据处理方法、装置、电子设备及计算机存储介质
技术领域
本发明涉及互联网技术领域,具体涉及一种数据处理方法、装置、电子设备及计算机存储介质。
背景技术
在过去的十年中,计算世界已经改变。各种规模的组织开始有了处理大数据的需求,而目前关系型数据库在可缩放方面几乎已经达到极限。一个解决方案是使用键值(Key-Value)存储,它是NoSQL存储的一种形式,其数据按照数据键值对的形式进行组织、索引和存储。Key-Value存储系统具有良好的拓展性、可靠性及高效性。KV存储支持读操作和写操作,还可以通过更新数据和历史数据的合并定期处理过期数据。
数据库是信息系统中最重要的资源,数据库的安全将直接影响信息系统的安全,一旦数据库中的数据被非法篡改,将会对整个系统构成不可弥补的破坏。数据校验可以防止非法数据进入程序、过滤误操作,从而保证程序的有效运行和数据完整。无论是单机存储还是分布式系统存储数据都需要进行数据一致性校验。单机情况如数据迁移、数据库升级等,而分布式存储则需要校验多个子系统和主系统中数据是否一致。目前为了校验KV数据库的完整性,一般要将数据生成梅克尔树,再保存梅克尔根来作为校验的凭证。但是当数据有变动的时候,重新构建梅克尔树的代价非常大,往往会消耗大量运算资源。
现有技术中,主要采用以下两种KV存储系统:
基于哈希表结构的KV存储系统:哈希表可以高效的访问关联数据。每个条目都有一对对应的数据键和数据值,并且能仅通过数据键来快速的取回和赋值。使用哈希存储引擎的数据库一般只支持追加操作,即所有的写操作只追加而不修改老的数据。内存中存储了主键和Value的索引信息,磁盘文件中存储了主键和Value的实际内容,采用基于哈希表的索引数据结构,通过主键快速地定位到Value的位置。由于只能追加,系统中的记录删除或者更新后,原来的记录成为垃圾数据。如果这些数据一直保存下去,文件会无限膨胀下去,因此需要定期执行合并(Compaction)操作以实现垃圾回收。所谓合并操作,即将所有老数据文件中的数据扫描一遍并生成新的数据文件,这里的合并其实就是对同一个Key的多个操作以只保留最新一个的原则进行删除,每次合并后,新生成的数据文件就不再有冗余数据了。但其不能利用部分索引键查询;以及不支持数据一致性校验。
基于LSM结构的KV存储系统:在LSM Tree中,写入操作是相当快速的,通过将大量的随机写转换为顺序写,从而极大地提升了数据写入的性能,虽然与此同时牺牲了部分读的性能。系统同样会周期的执行合并操作(Compaction)。合并操作选择一些文件,并把他们合并到一起,移除重复的更新或者删除纪录,同时也会删除冗余。更重要的是,通过减少文件个数的增长,保证读操作的性能。基于LSM结构的KV存储系统只适合存储Key值有序且写入大于读取的数据,或者读取操作通常是Key值连续的数据。但由于大量的文件被创建,在最坏的情况下,执行读操作时,所有的文件都要搜索;以及不支持数据一致性校验。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据处理方法、数据处理装置、电子设备和计算机存储介质。
根据本发明的一个方面,提供了一种数据处理方法,数据以数据键值对方式进行存储,方法包括:
根据待存储数据的数据键得到该数据键对应的节点列表坐标,其中,节点列表坐标的长度为n;
根据节点列表坐标的长度构建前缀树结构,其中,前缀树结构的深度为n+1,前缀树结构中的节点是长度为预设位数的列表,列表中的最后一位为数据值位,列表中的其他位为数据键的坐标位;
对于待存储数据,根据节点列表坐标在第i层节点对应的坐标位处设置指向第i+1层节点的坐标位的哈希指针,在第n层节点对应的坐标位处设置指向第n+1层节点的数据值位的哈希指针,并将待存储数据的数据值存储至第n+1层节点的数据值位处,其中,i顺序取值范围为[1,n-1];
从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1]。
根据本发明的另一方面,提供了一种数据处理装置,数据以数据键值对方式进行存储,装置包括:
第一确定模块,用于根据待存储数据的数据键得到该数据键对应的节点列表坐标,其中,节点列表坐标的长度为n;
构建模块,用于根据节点列表坐标的长度构建前缀树结构,其中,前缀树结构的深度为n+1,前缀树结构中的节点是长度为预设位数的列表,列表中的最后一位为数据值位,列表中的其他位为数据键的坐标位;
设置模块,用于对于待存储数据,根据节点列表坐标在第i层节点对应的坐标位处设置指向第i+1层节点的坐标位的哈希指针,在第n层节点对应的坐标位处设置指向第n+1层节点的数据值位的哈希指针,其中,i顺序取值范围为[1,n-1];
存储模块,用于将待存储数据的数据值存储至第n+1层节点的数据值位处;
计算模块,用于从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1]。
根据本发明的又一方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述数据处理方法对应的操作。
根据本发明的再一方面,提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使所述处理器执行如上述数据处理方法对应的操作。
根据本发明的一个方面,提供了一种数据处理方法,数据以数据键值对方式进行存储,方法包括:
根据待存储数据的数据键得到该数据键对应的节点列表坐标,其中,节点列表坐标的长度为n;
根据节点列表坐标的长度构建前缀树结构,其中,前缀树结构的深度为n+1,前缀树结构中的节点是长度为预设位数的列表,列表中的最后一位为数据值位,列表中的其他位为数据键的坐标位;
将待存储数据的数据值存储至第n+1层节点的数据值位处;
从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处,以及将第j层节点对应的哈希值和第j层节点组成的数据键值对存储至键值数据库中;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1];
利用预设哈希算法对第1层节点进行哈希处理,得到第1层节点对应的哈希值,将第1层节点对应的哈希值和第1层节点组成的数据键值对存储至键值数据库中,并设置根节点标识,其中,第1层节点为根节点。
根据本发明的另一方面,提供了一种数据处理装置,数据以数据键值对方式进行存储,装置包括:
第一确定模块,用于根据待存储数据的数据键得到该数据键对应的节点列表坐标,其中,节点列表坐标的长度为n;
构建模块,用于根据节点列表坐标的长度构建前缀树结构,其中,前缀树结构的深度为n+1,前缀树结构中的节点是长度为预设位数的列表,列表中的最后一位为数据值位,列表中的其他位为数据键的坐标位;
存储模块,用于将待存储数据的数据值存储至第n+1层节点的数据值位处;
计算模块,用于从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1];和
利用预设哈希算法对第1层节点进行哈希处理,得到第1层节点对应的哈希值;
键值数据库,用于存储第j层节点对应的哈希值和第j层节点组成的数据键值对;和
存储第1层节点对应的哈希值和第1层节点组成的数据键值对,并设置根节点标识,其中,第1层节点为根节点。
根据本发明的又一方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述数据处理方法对应的操作。
根据本发明的再一方面,提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使所述处理器执行如上述数据处理方法对应的操作。
利用该方法存储数据,为后续的数据读取与数据校验提供的方便,能够快速查找到存储数据的数据值,还能够避免数据变动后,数据校验过程必须重新计算整个数据库数据的梅克尔树而带来的巨大计算量。数据存储结构之间用哈希指针连接,每一次的插入和修改都会递归反映到前缀树结构的根节点,因此,在校验时只需要比较最终的前缀树结构中根节点的哈希值即可。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明实施例一的一种数据处理方法的流程示意图;
图2为前缀树结构中的节点的示意图;
图3为数据存储的示意图;
图4示出了根据本发明实施例二的一种数据处理方法的流程示意图;
图5示出了根据本发明实施例三的一种数据处理装置的结构示意图;
图6示出了根据本发明实施例四的一种数据处理装置的结构示意图;
图7示出了根据本发明实施例六的一种电子设备的结构示意图;
图8示出了根据本发明实施例八的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一
图1示出了根据本发明实施例一的一种数据处理方法的流程示意图。其中,数据以数据键值对(KV,Key-Value)方式进行存储,如图1所示,该方法包括以下步骤:
步骤S100,根据待存储数据的数据键得到该数据键对应的节点列表坐标,其中,节点列表坐标的长度为n。
节点列表坐标的长度指该节点列表坐标所包含的数值的个数,举例说明,节点列表坐标为:636174,则节点列表坐标的长度为6,节点列表坐标的长度是构建前缀树结构的重要依据,其决定着所构建的前缀树结构的深度。
节点列表坐标与前缀树结构中的节点相关,该节点列表坐标可以用于指导数据存储,此外,还是读取或更新数据的关键。
当需要对KV数据进行存储时,可以根据待存储的KV数据中的数据键得到该数据键对应的节点列表坐标,其中,节点列表坐标可以是对数据键进行哈希处理后得到的哈希值或者是数据键对应的字符编码,例如ASCII码或Unicode编码,具体地,本发明实施例可以采用以下两种方法确定数据键对应的节点列表坐标:
方法一:利用预设哈希算法对待存储数据的数据键进行哈希处理,得到数据键对应的哈希值,将数据键对应的哈希值作为该数据键对应的节点列表坐标。
方法二:根据待存储数据的数据键计算该数据键对应的字符编码,确定字符编码的长度;利用预设哈希算法对待存储数据的数据键进行哈希处理,得到该数据键对应的哈希值,确定哈希值的长度;将字符编码的长度与哈希值的长度进行比较,根据比较结果确定该数据键对应的节点列表坐标。
具体地,若比较结果为字符编码的长度小于哈希值的长度,则将数据键对应的字符编码作为该数据键对应的节点列表坐标;若比较结果为哈希值的长度小于字符编码的长度,则将数据键对应的哈希值作为该数据键对应的节点列表坐标。
预设哈希算法可以很有多种,例如,RIPEMD160算法、MD2算法、MD4算法、MD5算法、SHA-1算法等,其中,各种哈希算法对其计算结果都有相应的规定,以RIPEMD160算法为例,规定其计算结果长度为20字节,以40个16进制字符表示,有些哈希算法的计算结果采用二进制字符表示,这里就不再一一举例说明。本发明优选采用计算结果采用16进制字符表示的哈希算法,
下面将结合具体实例进行说明,该实例中以字符编码为ASCII码、预设哈希算法为RIPEMD160算法为例进行说明:
若Key[1]=“cat”,计算“cat”对应的十六进制的ASCII码为636174,其ASCII码的长度为6,而利用RIPEMD160算法对“cat”进行哈希处理,得到的哈希值的长度则为40位,其中,“cat”对应的ASCII码的长度小于哈希值的长度,因此,Key[1]的节点列表坐标为636174。
若Key[2]=“the quick brown fox jumps over the lazy dog”,计算“thequick brown fox jumps over the lazy dog”对应的十六进制的ASCII码,确定该ASCII码的长度达到86位,而利用RIPEMD160算法对“the quick brown fox jumps over the lazydog”进行哈希处理,得到的哈希值为“37f332f68db77bd9d7edd4969571ab671cf9dd3b”,其哈希值的长度则为40位,其中,“the quick brown fox jumps over the lazy dog”对应的ASCII码的长度大于哈希值的长度,因此,则Key[2]的节点列表坐标为37f332f68db77bd9d7edd4969571ab671cf9dd3b。
在本发明实施例中,优先采用方法二来确定数据键对应的节点列表坐标,该方法的优点在于能够有效地控制节点列表坐标的长度,当Key对应的ASCII码非常长时,依据对Key进行哈希处理后的哈希值构建前缀树结构,能够保证前缀树结构的极限深度,而不会产生特别长的数据分支;当Key对应的ASCII码较短时,能够充分体现前缀树结构的优势。由于该前缀树结构存在极限深度,因此,可以将数据查找的复杂度控制在一定范围内。
在本发明实施例中,要求数据键对应的字符编码与数据键对应的哈希值用同一进制表示,若利用哈希算法对数据键进行哈希处理后得到的哈希值以二进制字符表示,则数据键对应的字符编码也应以二进制字符表示;若利用哈希算法对数据键进行哈希处理后得到的哈希值以十六进制字符表示,则数据键对应的字符编码也应以十六进制字符表示。
步骤S101,根据节点列表坐标的长度构建前缀树结构,其中,前缀树结构的深度为n+1,前缀树结构中的节点是长度为预设位数的列表,列表中的最后一位为数据值位,列表中的其他位为数据键的坐标位。
其中,前缀树结构的深度指前缀树结构所包含的节点的数量,若节点列表坐标的长度为n,则构建的前缀树结构所包含的节点的数量为n+1。
在本发明实施例中,前缀树结构中的各节点是长度为预设位数的列表,列表中的最后一位为数据值位,列表中的其他位为数据键的坐标位。其中,列表的位数与节点列表坐标相关,若节点列表坐标以十六进制字符表示,则前缀树结构中的节点是长度为17的列表,其中,前16位为数据键的坐标位,第17位为数据值位;若节点列表坐标以二进制字符表示,则前缀树结构中的节点是长度为3的列表,其中,前2位为数据键的坐标位,第3位为数据值位,这里不做具体限定。
举例说明,Key[1]=“cat”的节点列表坐标为636174,节点列表坐标长度为6,则构建的前缀树结构的深度为7;Key[2]=“the quick brown fox jumps over the lazydog”,计算“the quick brown fox jumps over the lazy dog”的节点列表坐标为37f332f68db77bd9d7edd4969571ab671cf9dd3b,节点列表坐标长度为40,则构建的前缀树结构的深度为41,前缀树结构中的节点的示意图请参见图2。
步骤S102,对于待存储数据,根据节点列表坐标在第i层节点对应的坐标位处设置指向第i+1层节点的坐标位的哈希指针,在第n层节点对应的坐标位处设置指向第n+1层节点的数据值位的哈希指针,并将待存储数据的数据值存储至第n+1层节点的数据值位处,其中,i顺序取值范围为[1,n-1]。
在步骤S101中构建了深度为n+1的前缀树结构,在进行数据存储时,在前n层节点的对应的坐标位处设置哈希指针,例如,在对应的坐标位标记next,最后一层的节点数据值位存入数据值。
以待存储的数据为Key[1]=“cat”,Value[1]=“fish”为例,利用步骤S100确定Key[1]=“cat”对应的节点列表坐标为636174,构建深度为7的前缀树结构,从第1层节点开始,在第1层节点对应的坐标位(6号位)处设置指向第2层节点的坐标位(3号位)的哈希指针,例如,可以在第1层节点的6号位标记next,在第2层节点对应的坐标位(3号位)处设置指向第3层节点的坐标位(6号位)的哈希指针,以此类推,在第6层节点对应的坐标位(4号位)处设置指向第7层节点的数据值位的哈希指针,将待存储数据的数据值“fish”存储至第7层节点的数据值位处,请参见图3。其中,next用于指向下一个节点,这样对于需要遍历的地方,就不需要知道节点的个数。
步骤S103,从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1]。
具体地,在利用步骤S102将待存储数据的数据值存储至第n+1层节点的数据值位后,从j=n+1开始,对第j层节点进行序列化处理,得到序列化处理结果,利用预设哈希算法对序列化处理结果进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处,将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1]。
下面将继续以待存储的数据为Key[1]=“cat”,Value[1]=“fish”为例进行详细介绍:
由于节点是以列表形式存在的,在利用步骤S102将待存储数据的数据值“fish”存储至第7层节点的数据值位处后,需要先对第7层节点进行序列化处理,得到序列化处理结果,利用预设哈希算法,例如,RIPEMD160算法对序列化处理结果进行哈希处理,得到第7层节点对应的哈希值,并将计算得到的哈希值存储至第6层节点的坐标位(4号位)处;对第6层节点进行序列化处理,得到序列化处理结果,利用RIPEMD160算法对序列化处理结果进行哈希处理,得到第6层节点对应的哈希值,并将计算得到的哈希值存储至第5层节点的坐标位(7号位)处,以此类推,对第2层节点进行序列化处理,得到序列化处理结果,利用RIPEMD160算法对序列化处理结果进行哈希处理,得到第2层节点对应的哈希值,并将计算得到的哈希值存储至第1层节点的坐标位(6号位)处,数据存储结束,如图3所示。
哈希指针(nextHash)位置可以存储多个哈希值,例如2个Key的节点列表坐标分别是636174和636175,则在第5层节点对应的坐标位(7号位)对应的nextHash可以存放2个下层节点的哈希值,如果节点列表坐标采用16进制表示,则最多可以存放16个哈希值。
在本发明实施例中,存储数据时采用了两种方法来确定数据键对应的节点列表坐标,因此,在读取数据或者更新数据时,需要根据数据键对应的节点列表坐标来查询数据前缀树结构,这里确定数据键对应的节点列表坐标的方法与存储数据时确定数据键对应的节点列表坐标的方法相对应。
在本发明一种优选实施方式中,方法还包括:接收携带有待读取数据的数据键的数据读取请求;根据待读取数据的数据键计算该数据键对应的字符编码,确定字符编码的长度;利用预设哈希算法对待读取数据的数据键进行哈希处理,得到待读取数据的数据键对应的哈希值,确定哈希值的长度;将字符编码的长度与哈希值的长度进行比较,根据比较结果确定该数据键对应的节点列表坐标;根据节点列表坐标遍历查询前缀树结构,得到该数据键对应的数据值。
具体地,用户可以通过输入设备(键盘或者手写输入板等)输入要查询的数据的数据键,例如,用户通过输入设备输入数据键“cat”,即被视为发送了读取数据键“cat”对应的数据值的数据读取请求,确定该数据键“cat”对应的节点列表坐标为636174,利用节点列表坐标636174遍历查询前缀树结构,具体地,根据节点列表坐标中的第一个数值“6”查询第1层节点,第1层节点的6号位设置了用于指向第2层节点的3号位的哈希指针,……,第6层节点的4号位设置了用于指向第7层节点的数据值位的哈希指针,查询到第7层节点存储有该数据键对应的数据值,从第7层节点的数据值位读取该数据键对应的数据值“fish”,在本优选实施例中,确定数据键“cat”对应的节点列表坐标的方法与数据存储时确定数据键对应的节点列表坐标时所采用的方法二类似,这里不再赘述。
在本发明一种优选实施方式中,方法还包括:接收携带有待读取数据的数据键的数据读取请求;利用预设哈希算法对待读取数据的数据键进行哈希处理,得到待读取数据的数据键对应的哈希值;将待读取数据的数据键对应的哈希值作为该数据键对应的节点列表坐标;根据节点列表坐标遍历查询前缀树结构,得到该待读取数据的数据键对应的数据值。
本优选实施例的具体实现与上一优选实施例的具体实现过程类似,不同之处在于节点列表坐标确定方法不同,这里不再赘述。
在本发明一种优选实施方式中,方法还包括:接收携带有待更新数据的数据键和数据值的数据更新请求;根据待更新数据的数据键计算该数据键对应的字符编码,确定字符编码的长度;利用预设哈希算法对待更新数据的数据键进行哈希处理,得到待更新数据的数据键对应的哈希值,确定哈希值的长度;将字符编码的长度与哈希值的长度进行比较,根据比较结果确定该数据键对应的节点列表坐标;根据节点列表坐标遍历查询前缀树结构,得到存储数据键对应的数据值的节点;将待更新数据的数据值存储至该节点的数据值位;从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1]。
具体地,用户可以通过输入设备(键盘或者手写输入板等)输入待更新数据的数据键和数据值,例如,用户通过输入设备输入待更新数据的数据键“cat”和更新后的数据值“mouse”,即被视为发送了更新数据键“cat”对应的数据值的数据更新请求,确定数据键“cat”对应的节点列表坐标为636174,根据节点列表坐标636174遍历查询前缀树结构,具体地,根据节点列表坐标中的第一个数值“6”查询第1层节点,第1层节点的6号位设置了用于指向第2层节点的3号位的哈希指针,……,第6层节点的4号位设置了用于指向第7层节点的数据值位的哈希指针,得到存储数据键对应的数据值的节点;将该节点的数据值位处存储的数据值“fish”更新为“mouse”,然后,从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1](与步骤S103类似,这里不再赘述)。
在本发明一种优选实施方式中,方法还包括:接收携带有待更新数据的数据键和数据值的数据更新请求;利用预设哈希算法对待更新数据的数据键进行哈希处理,得到待更新数据的数据键对应的哈希值;将数据键对应的哈希值作为该数据键对应的节点列表坐标;根据节点列表坐标遍历查询前缀树结构,得到存储数据键对应的数据值的节点;将待更新数据的数据值存储至该节点的数据值位;从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1]。
本优选实施例的具体实现与上一优选实施例的具体实现过程类似,不同之处在于节点列表坐标确定方法不同,这里不再赘述。
在本发明一种优选实施方式中,第1层节点为根节点;
方法还包括:对根节点进行序列化处理,得到序列化处理结果,利用预设哈希算法对序列化处理结果进行哈希处理,得到根节点对应的哈希值,并进行存储。
在本发明一种优选实施方式中,方法还包括:根据数据校验请求,比较不同数据库中前缀树结构中根节点的哈希值是否一致;若一致,则确定数据库之间的数据一致。
其中,数据校验请求可以由用户发起,即用户主动请求校验不同数据库中存储的数据是否一致,例如,在对根节点进行哈希处理后,将根节点的哈希值进行备份存储至其他服务器的数据库中,若存储数据的服务器遭遇断电等情况时,用户可以发起数据校验请求,以确定该服务器的数据是否完整,是否存在数据丢失的情况,具体地,用户发送数据校验请求,存储数据的服务器根据数据校验请求,重新执行步骤S100-步骤S103,然后,对根节点进行序列化处理,得到序列化处理结果,利用预设哈希算法对序列化处理结果进行哈希处理,得到根节点对应的哈希值,将新生成的根节点对应的哈希值与备份存储至其他服务器的数据库中的根节点的哈希值进行比较,若一致,则确定该服务器的数据是完整的,不存在数据丢失的情况。
当然数据校验请求也可以备份服务器发起,即备份服务器主动请求校验从数据库与主服务器的主数据库的数据是否一致。具体地,备份服务器向主服务器发送获取主服务器的主数据库中根节点的哈希值的请求,主服务器响应该请求,将主数据库中根节点的哈希值发送至备份服务器,备份服务器将从数据库中根节点的哈希值与接收的主数据库中根节点的哈希值进行比较,以确定主数据库中的数据与从数据库中的数据是否一致,若从数据库中根节点的哈希值与接收的主数据库中根节点的哈希值相同,则确定数据库之间的数据一致;若从数据库中根节点的哈希值与接收的主数据库中根节点的哈希值不相同,则确定数据库之间的数据不一致。
由于每一次存储数据或更新数据时都要迭代追溯到根节点的结果,因此,在进行数据完整性、一致性校验时,只需要直接对比根节点的哈希值,若一致,则证明不同数据库内的数据内容一致,否则,不同数据库内的数据不完全一致。
利用该方法存储数据,为后续的数据读取与数据校验提供的方便,能够快速查找到存储数据的数据值,还能够避免数据变动后,数据校验过程必须重新计算整个数据库数据的梅克尔树而带来的巨大计算量。数据存储结构之间用哈希指针连接,每一次的插入和修改都会递归反映到前缀树结构的根节点,因此,在校验时只需要比较最终的前缀树结构中根节点的哈希值即可。
实施例二
图4示出了根据本发明实施例二的一种数据处理方法的流程示意图。其中,数据以数据键值对(KV,Key-Value)方式进行存储,如图4所示,该该方法包括以下步骤:
步骤S400,根据待存储数据的数据键得到该数据键对应的节点列表坐标,其中,节点列表坐标的长度为n。
具体地,本发明实施例可以采用以下两种方法确定数据键对应的节点列表坐标:
方法一:利用预设哈希算法对待存储数据的数据键进行哈希处理,得到数据键对应的哈希值,将数据键对应的哈希值作为该数据键对应的节点列表坐标。
方法二:根据待存储数据的数据键计算该数据键对应的字符编码,确定字符编码的长度;利用预设哈希算法对待存储数据的数据键进行哈希处理,得到该数据键对应的哈希值,确定哈希值的长度;将字符编码的长度与哈希值的长度进行比较,根据比较结果确定该数据键对应的节点列表坐标。
具体地,若比较结果为字符编码的长度小于哈希值的长度,则将数据键对应的字符编码作为该数据键对应的节点列表坐标;若比较结果为哈希值的长度小于字符编码的长度,则将数据键对应的哈希值作为该数据键对应的节点列表坐标。
图4所示实施例二中的步骤S400与图1所示实施例一中的步骤S100类似,具体实现请参见步骤S100,这里不再赘述。
步骤S401,根据节点列表坐标的长度构建前缀树结构,其中,前缀树结构的深度为n+1,前缀树结构中的节点是长度为预设位数的列表,列表中的最后一位为数据值位,列表中的其他位为数据键的坐标位。
图4所示实施例二中的步骤S401与图1所示实施例一中的步骤S101类似,具体实现请参见步骤S101,这里不再赘述。
步骤S402,将待存储数据的数据值存储至第n+1层节点的数据值位处。
步骤S403,从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处,以及将第j层节点对应的哈希值和第j层节点组成的数据键值对存储至键值数据库中;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1]。
具体地,在利用步骤S402将待存储数据的数据值存储至第n+1层节点的数据值位后,从j=n+1开始,对第j层节点进行序列化处理,得到序列化处理结果,利用预设哈希算法对序列化处理结果进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处,以及将第j层节点对应的哈希值和第j层节点组成的数据键值对存储至键值数据库中;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1]。
下面将继续以待存储的数据为Key[1]=“cat”,Value[1]=“fish”为例进行详细介绍:
由于节点是以列表形式存在的,在利用步骤S402将待存储数据的数据值“fish”存储至第7层节点的数据值位处后,需要先对第7层节点进行序列化处理,得到序列化处理结果,利用预设哈希算法,例如,RIPEMD160算法对序列化处理结果进行哈希处理,得到第7层节点对应的哈希值,并将计算得到的哈希值存储至第6层节点的坐标位(4号位)处,将第7层节点对应的哈希值和第7层节点组成的数据键值(Key[1]7=Hash7,Value[1]7为第7层节点,第7层节点是数据值位存储了数据值的列表)对存储至键值数据库中;对第6层节点进行序列化处理,得到序列化处理结果,利用RIPEMD160算法对序列化处理结果进行哈希处理,得到第6层节点对应的哈希值,并将计算得到的哈希值存储至第5层节点的坐标位(7号位)处,将第6层节点对应的哈希值和第6层节点组成的数据键值(Key[1]6=Hash6,Value[1]6为第6层节点,第6层节点是4号位存储有第7层节点的哈希值的列表)对存储至键值数据库中;以此类推,对第2层节点进行序列化处理,得到序列化处理结果,利用RIPEMD160算法对序列化处理结果进行哈希处理,得到第2层节点对应的哈希值,并将计算得到的哈希值存储至第1层节点的坐标位(6号位)处,将第2层节点对应的哈希值和第2层节点组成的数据键值(Key[1]2=Hash2,Value[1]2为第6层节点,第2层节点是3号位存储有第3层节点的哈希值的列表)对存储至键值数据库中。
步骤S404,利用预设哈希算法对第1层节点进行哈希处理,得到第1层节点对应的哈希值,将第1层节点对应的哈希值和第1层节点组成的数据键值对存储至键值数据库中,并设置根节点标识,其中,第1层节点为根节点。
具体地,对第1层节点进行序列化处理,得到序列化处理结果,利用RIPEMD160算法对序列化处理结果进行哈希处理,得到第1层节点对应的哈希值,将第1层节点对应的哈希值和第1层节点组成的数据键值(Key[1]1=Hash1,Value[1]1为第1层节点,第1层节点是6号位存储有第2层节点的哈希值的列表)对存储至键值数据库中。
在本发明一种优选实施例中,所述方法还包括:接收携带有待读取数据的数据键的数据读取请求;
具体地,用户可以通过输入设备(键盘或者手写输入板等)输入要查询的数据的数据键,例如,用户通过输入设备输入数据键“cat”,即被视为发送了读取数据键“cat”对应的数据值的数据读取请求。
根据所述待读取数据的数据键计算该数据键对应的字符编码,确定所述字符编码的长度;利用预设哈希算法对所述待读取数据的数据键进行哈希处理,得到待读取数据的数据键对应的哈希值,确定哈希值的长度;将字符编码的长度与哈希值的长度进行比较,根据比较结果确定该数据键对应的节点列表坐标;
这里确定数据键对应的节点列表坐标的方法与图1所示实施例中确定数据键对应的节点列表坐标中的方法二类似,此处不再赘述。
根据所述节点列表坐标中的第1位数值查询键值数据库,定位到相应根节点中与所述第1位数值对应的坐标位,得到该坐标位处存储的第2层节点的哈希值;
从m=2开始,根据第m层节点的哈希值和节点列表坐标中的第k位数值查询键值数据库,定位到所述第m层节点中与所述第k位数值对应的坐标位,得到该坐标位处存储的第m+1层节点的哈希值;将m赋值为m+1,k赋值为k+1,重复执行该步骤,直至m=n,k=n,其中,m取值范围为[2,n],k取值范围为[2,n];
根据第m+1层节点的哈希值查询键值数据库,得到该待读取数据的数据键对应的数据值。
下面以Key[1]=“cat”,Value[1]=“fish”为例详细介绍数据读取过程:利用上述方法步骤确定Key[1]=“cat”的节点列表坐标为636174,以节点列表坐标中的第1位数值“6”查询键值数据库,定位到相应根节点的6号位,获取到该坐标位处存储的第2层节点的哈希值;从第2层节点开始,根据第2层节点的哈希值Hash2查询键值数据库,得到与第2层节点的哈希值Hash2对应的第2层节点,根据节点列表坐标中的第2位数值“3”查询节点,定位到所述第2层节点的3号位,得到该坐标位处存储的第3层节点的哈希值,以此类推得到,得到第7层节点的哈希值Hash7,根据第7层节点的哈希值Hash7得到与第7层节点的哈希值Hash7对应的第7层节点,读取第7层节点数据值位的数据值。
在本发明一种优选实施例中,所述方法还包括:接收携带有待读取数据的数据键的数据读取请求;利用预设哈希算法对所述待读取数据的数据键进行哈希处理,得到待读取数据的数据键对应的哈希值;将所述待读取数据的数据键对应的哈希值作为该数据键对应的节点列表坐标;根据所述节点列表坐标中的第1位数值查询键值数据库,定位到相应根节点中与所述第1位数值对应的坐标位,得到该坐标位处存储的第2层节点的哈希值;从m=2开始,根据第m层节点的哈希值和节点列表坐标中的第k位数值查询键值数据库,定位到所述第m层节点中与所述第k位数值对应的坐标位,得到该坐标位处存储的第m+1层节点的哈希值;将m赋值为m+1,k赋值为k+1,重复执行该步骤,直至m=n,k=n,其中,m取值范围为[2,n],k取值范围为[2,n];根据第m+1层节点的哈希值查询键值数据库,得到该待读取数据的数据键对应的数据值。
本优选实施例的具体实现与上一优选实施例的具体实现过程类似,不同之处在于节点列表坐标确定方法不同,这里不再赘述。
在本发明一种优选实施例中,所述方法还包括:接收携带有待更新数据的数据键和数据值的数据更新请求;
利用预设哈希算法对所述待更新数据的数据键进行哈希处理,得到待更新数据的数据键对应的哈希值;
将所述数据键对应的哈希值作为该数据键对应的节点列表坐标;
根据所述节点列表坐标中的第1位数值查询键值数据库,定位到相应根节点中与所述第1位数值对应的坐标位,得到该坐标位处存储的第2层节点的哈希值;
从m=2开始,根据第m层节点的哈希值和节点列表坐标中的第k位数值查询键值数据库,定位到所述第m层节点中与所述第k位数值对应的坐标位,得到该坐标位处存储的第m+1层节点的哈希值;将m赋值为m+1,k赋值为k+1,重复执行该步骤,直至m=n,k=n,其中,m取值范围为[2,n],k取值范围为[2,n];
根据第n+1层节点的哈希值查询键值数据库,得到第n+1层节点;
将待更新数据的数据值存储至第n+1层节点的数据值位;
从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处,以及将第j层节点对应的哈希值和第j层节点组成的数据键值对存储至键值数据库中;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1];
利用预设哈希算法对第1层节点进行哈希处理,得到第1层节点对应的哈希值,将第1层节点对应的哈希值和第1层节点组成的数据键值对存储至键值数据库中,并设置根节点标识,其中,所述第1层节点为根节点。
本优选实施例中查询到第n+1层节点的具体实现过程与上述优选实施例中读取第n+1层节点的数据值的实现过程类似,在更新第n+1层节点的数据值后,从j=n+1开始,到j=1时所做的递归处理的具体实现过程与步骤S403-步骤S404类似,这里不再赘述。
在本发明一种优选实施例中,所述方法还包括:接收携带有待更新数据的数据键和数据值的数据更新请求;
根据所述待更新数据的数据键计算该数据键对应的字符编码,确定字符编码的长度;
利用预设哈希算法对所述待更新数据的数据键进行哈希处理,得到待更新数据的数据键对应的哈希值,确定哈希值的长度;
将字符编码的长度与哈希值的长度进行比较,根据比较结果确定该数据键对应的节点列表坐标;
根据所述节点列表坐标中的第1位数值查询键值数据库,定位到相应根节点中与所述第1位数值对应的坐标位,得到该坐标位处存储的第2层节点的哈希值;
从m=2开始,根据第m层节点的哈希值和节点列表坐标中的第k位数值查询键值数据库,定位到所述第m层节点中与所述第k位数值对应的坐标位,得到该坐标位处存储的第m+1层节点的哈希值;将m赋值为m+1,k赋值为k+1,重复执行该步骤,直至m=n,k=n,其中,m取值范围为[2,n],k取值范围为[2,n];
根据第n+1层节点的哈希值查询键值数据库,得到第n+1层节点;
将待更新数据的数据值存储至第n+1层节点的数据值位;
从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处,以及将第j层节点对应的哈希值和第j层节点组成的数据键值对存储至键值数据库中;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1];
利用预设哈希算法对第1层节点进行哈希处理,得到第1层节点对应的哈希值,将第1层节点对应的哈希值和第1层节点组成的数据键值对存储至键值数据库中,并设置根节点标识,其中,所述第1层节点为根节点。
本优选实施例的具体实现与上一优选实施例的具体实现过程类似,不同之处在于节点列表坐标确定方法不同,这里不再赘述。
在本发明一种优选实施方式中,第1层节点为根节点;
方法还包括:对根节点进行序列化处理,得到序列化处理结果,利用预设哈希算法对序列化处理结果进行哈希处理,得到根节点对应的哈希值,并进行存储。
在本发明一种优选实施方式中,方法还包括:根据数据校验请求,比较不同数据库中前缀树结构中根节点的哈希值是否一致;若一致,则确定数据库之间的数据一致。
这里数据校验过程与图1所示实施例中的数据校验过程类似,这里不再赘述。
利用该方法存储数据,为后续的数据读取与数据校验提供的方便,能够快速查找到存储数据的数据值,还能够避免数据变动后,数据校验过程必须重新计算整个数据库数据的梅克尔树而带来的巨大计算量。每一次的插入和修改都会递归反映到前缀树结构的根节点,因此,在校验时只需要比较最终的前缀树结构中根节点的哈希值即可。
实施例三
图5示出了根据本发明实施例三的一种数据处理装置的结构示意图。其中,数据以数据键值对(KV,Key-Value)方式进行存储,如图5所示,该装置包括:第一确定模块500、构建模块501、设置模块502、存储模块503和计算模块504。
第一确定模块500,用于根据待存储数据的数据键得到该数据键对应的节点列表坐标,其中,节点列表坐标的长度为n。
构建模块501,用于根据节点列表坐标的长度构建前缀树结构,其中,前缀树结构的深度为n+1,前缀树结构中的节点是长度为预设位数的列表,列表中的最后一位为数据值位,列表中的其他位为数据键的坐标位。
设置模块502,用于对于待存储数据,根据节点列表坐标在第i层节点对应的坐标位处设置指向第i+1层节点的坐标位的哈希指针,在第n层节点对应的坐标位处设置指向第n+1层节点的数据值位的哈希指针,其中,i顺序取值范围为[1,n-1]。
存储模块503,用于将待存储数据的数据值存储至第n+1层节点的数据值位处。
计算模块504,用于从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1]。
可选地,第一确定模块进一步用于:利用预设哈希算法对待存储数据的数据键进行哈希处理,得到数据键对应的哈希值;和
将数据键对应的哈希值作为该数据键对应的节点列表坐标。
可选地,装置还包括:第一接收模块,用于接收携带有待读取数据的数据键的数据读取请求;
第一确定模块进一步用于:利用预设哈希算法对待读取数据的数据键进行哈希处理,得到待读取数据的数据键对应的哈希值;和
将待读取数据的数据键对应的哈希值作为该数据键对应的节点列表坐标;
第一查询模块,用于根据节点列表坐标遍历查询前缀树结构,得到该待读取数据的数据键对应的数据值。
可选地,装置还包括:第二接收模块,用于接收携带有待更新数据的数据键和数据值的数据更新请求;
第一确定模块进一步用于:利用预设哈希算法对待更新数据的数据键进行哈希处理,得到待更新数据的数据键对应的哈希值;和
将数据键对应的哈希值作为该数据键对应的节点列表坐标;
第二查询模块,用于根据节点列表坐标遍历查询前缀树结构,得到存储数据键对应的数据值的节点;
存储模块进一步用于:将待更新数据的数据值存储至该节点的数据值位;
计算模块进一步用于:从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1]。
可选地,第一确定模块进一步用于:根据待存储数据的数据键计算该数据键对应的字符编码,确定字符编码的长度;
利用预设哈希算法对待存储数据的数据键进行哈希处理,得到该数据键对应的哈希值,确定哈希值的长度;和
将字符编码的长度与哈希值的长度进行比较,根据比较结果确定该数据键对应的节点列表坐标。
可选地,装置还包括:第三接收模块,用于接收携带有待读取数据的数据键的数据读取请求;
第一确定模块进一步用于:根据待读取数据的数据键计算该数据键对应的字符编码,确定字符编码的长度;
利用预设哈希算法对待读取数据的数据键进行哈希处理,得到待读取数据的数据键对应的哈希值,确定哈希值的长度;和
将字符编码的长度与哈希值的长度进行比较,根据比较结果确定该数据键对应的节点列表坐标;
第三查询模块,用于根据节点列表坐标遍历查询前缀树结构,得到该数据键对应的数据值。
可选地,装置还包括:第四接收模块,用于接收携带有待更新数据的数据键和数据值的数据更新请求;
第一确定模块进一步用于:根据待更新数据的数据键计算该数据键对应的字符编码,确定字符编码的长度;
利用预设哈希算法对待更新数据的数据键进行哈希处理,得到待更新数据的数据键对应的哈希值,确定哈希值的长度;和
将字符编码的长度与哈希值的长度进行比较,根据比较结果确定该数据键对应的节点列表坐标;
第四查询模块,用于根据节点列表坐标遍历查询前缀树结构,得到存储数据键对应的数据值的节点;
存储模块进一步用于:将待更新数据的数据值存储至该节点的数据值位;
计算模块进一步用于:从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1]。
可选地,第一确定模块进一步用于:若比较结果为字符编码的长度小于哈希值的长度,则将数据键对应的字符编码作为该数据键对应的节点列表坐标;
若比较结果为哈希值的长度小于字符编码的长度,则将数据键对应的哈希值作为该数据键对应的节点列表坐标。
可选地,第1层节点为根节点;
计算模块进一步用于:对根节点进行序列化处理,得到序列化处理结果,利用预设哈希算法对序列化处理结果进行哈希处理,得到根节点对应的哈希值,并进行存储。
可选地,装置还包括:比较模块,用于根据数据校验请求,比较不同数据库中前缀树结构中根节点存储的哈希值是否一致;
第二确定模块,用于若不同数据库中前缀树结构中根节点存储的哈希值一致,则确定数据库之间的数据一致。
可选地,计算模块进一步用于:从j=n+1开始,对第j层节点进行序列化处理,得到序列化处理结果,利用预设哈希算法对序列化处理结果进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处。
利用该方法存储数据,为后续的数据读取与数据校验提供的方便,能够快速查找到存储数据的数据值,还能够避免数据变动后,数据校验过程必须重新计算整个数据库数据的梅克尔树而带来的巨大计算量。数据存储结构之间用哈希指针连接,每一次的插入和修改都会递归反映到前缀树结构的根节点,因此,在校验时只需要比较最终的前缀树结构中根节点的哈希值即可。
实施例四
图6示出了根据本发明实施例四的一种数据处理装置的结构示意图。其中,数据以数据键值对(KV,Key-Value)方式进行存储,如图6所示,该装置包括:第一确定模块600、构建模块601、存储模块602、计算模块603和键值数据库604。
第一确定模块600,用于根据待存储数据的数据键得到该数据键对应的节点列表坐标,其中,节点列表坐标的长度为n;
构建模块601,用于根据节点列表坐标的长度构建前缀树结构,其中,前缀树结构的深度为n+1,前缀树结构中的节点是长度为预设位数的列表,列表中的最后一位为数据值位,列表中的其他位为数据键的坐标位;
存储模块602,用于将待存储数据的数据值存储至第n+1层节点的数据值位处;
计算模块603,用于从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1];和
利用预设哈希算法对第1层节点进行哈希处理,得到第1层节点对应的哈希值;
键值数据库604,用于存储第j层节点对应的哈希值和第j层节点组成的数据键值对;和
存储第1层节点对应的哈希值和第1层节点组成的数据键值对,并设置根节点标识,其中,第1层节点为根节点。
可选地,第一确定模块进一步用于:利用预设哈希算法对待存储数据的数据键进行哈希处理,得到数据键对应的哈希值;和
将数据键对应的哈希值作为该数据键对应的节点列表坐标。
可选地,装置还包括:第一接收模块,用于接收携带有待读取数据的数据键的数据读取请求;
第一确定模块进一步用于:利用预设哈希算法对待读取数据的数据键进行哈希处理,得到待读取数据的数据键对应的哈希值;和
将待读取数据的数据键对应的哈希值作为该数据键对应的节点列表坐标;
第一查询模块,用于根据节点列表坐标中的第1位数值查询键值数据库,定位到相应根节点中与第1位数值对应的坐标位,得到该坐标位处存储的第2层节点的哈希值;
从m=2开始,根据第m层节点的哈希值和节点列表坐标中的第k位数值查询键值数据库,定位到第m层节点中与第k位数值对应的坐标位,得到该坐标位处存储的第m+1层节点的哈希值;将m赋值为m+1,k赋值为k+1,重复执行该步骤,直至m=n,k=n,其中,m取值范围为[2,n],k取值范围为[2,n];和
根据第m+1层节点的哈希值查询键值数据库,得到该待读取数据的数据键对应的数据值。
可选地,装置还包括:第二接收模块,用于接收携带有待更新数据的数据键和数据值的数据更新请求;
第一确定模块进一步用于:利用预设哈希算法对待更新数据的数据键进行哈希处理,得到待更新数据的数据键对应的哈希值;和
将数据键对应的哈希值作为该数据键对应的节点列表坐标;
第二查询模块,用于根据节点列表坐标中的第1位数值查询键值数据库,定位到相应根节点中与第1位数值对应的坐标位,得到该坐标位处存储的第2层节点的哈希值;
从m=2开始,根据第m层节点的哈希值和节点列表坐标中的第k位数值查询键值数据库,定位到第m层节点中与第k位数值对应的坐标位,得到该坐标位处存储的第m+1层节点的哈希值;将m赋值为m+1,k赋值为k+1,重复执行该步骤,直至m=n,k=n,其中,m取值范围为[2,n],k取值范围为[2,n];和
根据第n+1层节点的哈希值查询键值数据库,得到第n+1层节点;
存储模块进一步用于:将待更新数据的数据值存储至第n+1层节点的数据值位;
计算模块进一步用于:从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1];和
利用预设哈希算法对第1层节点进行哈希处理,得到第1层节点对应的哈希值;
键值数据库进一步用于:存储第j层节点对应的哈希值和第j层节点组成的数据键值对;和
存储第1层节点对应的哈希值和第1层节点组成的数据键值对,并设置根节点标识,其中,第1层节点为根节点。
可选地,第一确定模块进一步用于:根据待存储数据的数据键计算该数据键对应的字符编码,确定字符编码的长度;
利用预设哈希算法对待存储数据的数据键进行哈希处理,得到该数据键对应的哈希值,确定哈希值的长度;和
将字符编码的长度与哈希值的长度进行比较,根据比较结果确定该数据键对应的节点列表坐标。
可选地,装置还包括:第三接收模块,用于接收携带有待读取数据的数据键的数据读取请求;
第一确定模块进一步用于:根据待读取数据的数据键计算该数据键对应的字符编码,确定字符编码的长度;
利用预设哈希算法对待读取数据的数据键进行哈希处理,得到待读取数据的数据键对应的哈希值,确定哈希值的长度;和
将字符编码的长度与哈希值的长度进行比较,根据比较结果确定该数据键对应的节点列表坐标;
第三查询模块,用于根据节点列表坐标中的第1位数值查询键值数据库,定位到相应根节点中与第1位数值对应的坐标位,得到该坐标位处存储的第2层节点的哈希值;
从m=2开始,根据第m层节点的哈希值和节点列表坐标中的第k位数值查询键值数据库,定位到第m层节点中与第k位数值对应的坐标位,得到该坐标位处存储的第m+1层节点的哈希值;将m赋值为m+1,k赋值为k+1,重复执行该步骤,直至m=n,k=n,其中,m取值范围为[2,n],k取值范围为[2,n];和
根据第m+1层节点的哈希值查询键值数据库,得到该待读取数据的数据键对应的数据值。
可选地,装置还包括:第四接收模块,用于接收携带有待更新数据的数据键和数据值的数据更新请求;
第一确定模块进一步用于:根据待更新数据的数据键计算该数据键对应的字符编码,确定字符编码的长度;
利用预设哈希算法对待更新数据的数据键进行哈希处理,得到待更新数据的数据键对应的哈希值,确定哈希值的长度;和
将字符编码的长度与哈希值的长度进行比较,根据比较结果确定该数据键对应的节点列表坐标;
第四查询模块,用于根据节点列表坐标中的第1位数值查询键值数据库,定位到相应根节点中与第1位数值对应的坐标位,得到该坐标位处存储的第2层节点的哈希值;
从m=2开始,根据第m层节点的哈希值和节点列表坐标中的第k位数值查询键值数据库,定位到第m层节点中与第k位数值对应的坐标位,得到该坐标位处存储的第m+1层节点的哈希值;将m赋值为m+1,k赋值为k+1,重复执行该步骤,直至m=n,k=n,其中,m取值范围为[2,n],k取值范围为[2,n];和
根据第n+1层节点的哈希值查询键值数据库,得到第n+1层节点;
存储模块进一步用于:将待更新数据的数据值存储至第n+1层节点的数据值位;
计算模块进一步用于:从j=n+1开始,利用预设哈希算法对第j层节点进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处;将j赋值为j-1,重复执行该步骤,直至j=2,数据存储结束,其中,j取值范围为[2,n+1];和
利用预设哈希算法对第1层节点进行哈希处理,得到第1层节点对应的哈希值;
键值数据库进一步用于:存储第j层节点对应的哈希值和第j层节点组成的数据键值对;和
存储第1层节点对应的哈希值和第1层节点组成的数据键值对,并设置根节点标识,其中,第1层节点为根节点。
可选地,第一确定模块进一步用于:若比较结果为字符编码的长度小于哈希值的长度,则将数据键对应的字符编码作为该数据键对应的节点列表坐标;
若比较结果为哈希值的长度小于字符编码的长度,则将数据键对应的哈希值作为该数据键对应的节点列表坐标。
可选地,装置还包括:比较模块,用于根据数据校验请求,比较不同数据库中前缀树结构中根节点的哈希值是否一致;
第二确定模块,用于若不同数据库中前缀树结构中根节点存储的哈希值一致,则确定数据库之间的数据一致。
可选地,计算模块进一步用于:从j=n+1开始,对第j层节点进行序列化处理,得到序列化处理结果,利用预设哈希算法对序列化处理结果进行哈希处理,得到第j层节点对应的哈希值,并将计算得到的哈希值存储至第j-1层节点对应的坐标位处;
对第1层节点进行序列化处理,得到序列化处理结果,利用预设哈希算法对序列化处理结果进行哈希处理,得到第1层节点对应的哈希值。
利用该方法存储数据,为后续的数据读取与数据校验提供的方便,能够快速查找到存储数据的数据值,还能够避免数据变动后,数据校验过程必须重新计算整个数据库数据的梅克尔树而带来的巨大计算量。每一次的插入和修改都会递归反映到前缀树结构的根节点,因此,在校验时只需要比较最终的前缀树结构中根节点的哈希值即可。
实施例五
本申请实施例五提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例一中的数据处理方法。
实施例六
图7示出了根据本发明实施例六的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图7所示,该电子设备可以包括:处理器(processor)702、通信接口(Communications Interface)704、存储器(memory)706、以及通信总线708。
其中:处理器702、通信接口704、以及存储器706通过通信总线708完成相互间的通信。
通信接口704,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器702,用于执行程序710,具体可以执行上述数据处理方法实施例中的相关步骤。
具体地,程序710可以包括程序代码,该程序代码包括计算机操作指令。
处理器702可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器706,用于存放第一数据集合、第二数据集合以及程序710。存储器706可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序710具体可以用于使得处理器702执行实施例一中的方法。
实施例七
本申请实施例七提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例二中的数据处理方法。
实施例八
图8示出了根据本发明实施例八的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图8所示,该电子设备可以包括:处理器(processor)802、通信接口(Communications Interface)804、存储器(memory)806、以及通信总线808。
其中:
处理器802、通信接口804、以及存储器806通过通信总线808完成相互间的通信。
通信接口804,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器802,用于执行程序810,具体可以执行上述数据处理方法实施例中的相关步骤。
具体地,程序810可以包括程序代码,该程序代码包括计算机操作指令。
处理器802可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器806,用于存放第一数据集合、第二数据集合以及程序810。存储器806可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序810具体可以用于使得处理器802执行实施例二中的方法。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。