基于区块链的KV分离存储方法及系统与流程

未命名 10-08 阅读:150 评论:0

基于区块链的kv分离存储方法及系统
技术领域
1.本发明涉及区块链领域,尤其涉及一种基于区块链的kv分离存储方法及系统。


背景技术:

2.在区块链系统中,数据的存储一直是一个重要的问题。由于区块链的分布式性质和不可篡改的特点,使得区块链数据存储的要求十分高。rocksdb是一个高性能、嵌入式的键值存储引擎,具有快速的数据读写能力、高效的存储空间利用率和可靠的数据一致性。因此,采用rocksdb作为区块链的数据存储引擎,可以提高数据的读写效率和存储空间利用率。
3.然而rocksdb在针对区块链的区块数据存储时,区块中需要存储对应的区块相关信息、交易信息等内容,当交易较多时,会形成较大的区块,因此在将这些较大的区块存储入rocksdb中时,便会导致如下问题:
4.1、数据写入量较大且写入数据较快时,会造成compaction不可控问题;
5.2、数据写入的写放大问题;
6.3、数据读取时读放大的问题。
7.针对现有技术中的以上问题,目前还没有一个有效的解决方法。


技术实现要素:

8.为解决上述问题,本发明提供一种基于区块链的kv分离存储方法及系统,通过将区块数据使用文件进行存储,并将每个区块的存储文件名、文件内的偏移量及哈希值存储入rocksdb中,以减小rocksdb中的存储规模,从而解决读放大和写放大的问题,另外由于存储规模减小,可以避免频繁的合并压缩问题。
9.为达到上述目的,本发明提供了一种基于区块链的kv分离存储方法,包括:当获取到写请求时,计算当前文件与待写入区块的总数据量,若所述总数据量超出预设阈值,则在新文件中写入所述待写入区块并记录文件内的偏移量,将新文件的名称、偏移量及哈希值作为所述待写入区块的对应值存入数据库中;否则,在所述当前文件中顺序写入所述待写入区块并记录文件内的偏移量,将当前文件的名称、偏移量及哈希值作为所述待写入区块的对应值存入数据库中;其中,所述当前文件为前一写入区块的存储文件;当获取到读请求时,从所述数据库中查找待读取区块的对应值,根据所述对应值中文件的名称及偏移量定位到匹配区块,若所述匹配区块的哈希值与所述对应值中的哈希值相同,读取所述匹配区块。
10.进一步可选的,所述计算当前文件与待写入区块的总数据量之前,包括:判断所述待写入区块是否为创世区块;当所述待写入区块为创世区块时,建立初始文件,将所述待写入区块写入所述初始文件;当所述待写入区块不是创世区块时,计算当前文件与所述待写入区块的总数据量。
11.进一步可选的,所述从所述数据库中查找待读取区块的对应值之前,包括:从缓存
中查询所述待读取区块;当所述缓存中存在所述待读取区块时,读取所述待读取区块;当所述缓存中不存在所述待读取区块时,从所述数据库中查找所述待读取区块的对应值。
12.进一步可选的,所述从所述数据库中查找待读取区块的对应值,根据所述对应值中文件的名称及偏移量定位到匹配区块,若所述匹配区块的哈希值与所述对应值中的哈希值相同,读取所述匹配区块,包括:当所述数据库中不存在所述待读取区块的对应值时,作出异常提示;当所述匹配区块的哈希值与所述对应值中的哈希值不一致时,作出异常提示。
13.进一步可选的,所述在新文件中写入所述待写入区块,包括:获取所述当前文件的名称;其中,所述当前文件的名称为编号形式;在所述当前文件的名称基础上加一得到所述新文件的名称,将所述待写入区块写入所述新文件的起始位置。
14.另一方面,本发明还提供一种基于区块链的kv分离存储系统,包括:数据写入模块,用于当获取到写请求时,计算当前文件与待写入区块的总数据量,若所述总数据量超出预设阈值,则在新文件中写入所述待写入区块并记录文件内的偏移量,将新文件的名称、偏移量及哈希值作为所述待写入区块的对应值存入数据库中;否则,在所述当前文件中顺序写入所述待写入区块并记录文件内的偏移量,将当前文件的名称、偏移量及哈希值作为所述待写入区块的对应值存入数据库中;其中,所述当前文件为前一写入区块的存储文件;数据读取模块,用于当获取到读请求时,从所述数据库中查找待读取区块的对应值,根据所述对应值中文件的名称及偏移量定位到匹配区块,若所述匹配区块的哈希值与所述对应值中的哈希值相同,读取所述匹配区块。
15.进一步可选的,该系统包括:判断模块,用于判断所述待写入区块是否为创世区块;第一执行模块,用于当所述待写入区块为创世区块时,建立初始文件,将所述待写入区块写入所述初始文件;第二执行模块,用于当所述待写入区块不是创世区块时,计算当前文件与所述待写入区块的总数据量。
16.进一步可选的,该系统包括:查询模块,用于从缓存中查询所述待读取区块;第一读取模块,用于当所述缓存中存在所述待读取区块时,读取所述待读取区块;第二读取模块,用于当所述缓存中不存在所述待读取区块时,从所述数据库中查找所述待读取区块的对应值。
17.进一步可选的,所述数据读取模块包括:第一提示子模块,用于当所述数据库中不存在所述待读取区块的对应值时,作出异常提示;第二提示子模块,用于当所述匹配区块的哈希值与所述对应值中的哈希值不一致时,作出异常提示。
18.进一步可选的,所述数据写入模块包括:文件名称获取子模块,用于获取所述当前文件的名称;其中,所述当前文件的名称为编号形式;新文件名称确定子模块,用于在所述当前文件的名称基础上加一得到所述新文件的名称,将所述待写入区块写入所述新文件的起始位置。
19.上述技术方案具有如下有益效果:将区块数据使用文件存储,将区块的数据顺序写入文件并将区块的存储文件名、文件内偏移量及哈希值存入数据库(rocksdb),减少了数据库(rocksdb)中的数据存储规模,可以有效的避免读放大、写放大的问题;此外,由于数据规模减小,还可以频繁的compaction问题;在获取到区块的地址及偏移量后,可以快速定位到区块的数据,提高读取区块的速度;在不降低读性能的前提下,使数据快速写入本地数据库。
附图说明
20.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
21.图1是本发明实施例提供的基于区块链的kv分离存储方法的流程图;
22.图2是本发明实施例提供的创世区块写入文件方法的流程图;
23.图3是本发明实施例提供的缓存读取方法的流程图;
24.图4是本发明实施例提供的异常提示方法的流程图;
25.图5是本发明实施例提供的创建新文件写入区块方法的流程图;
26.图6是本发明实施例提供的一种文件设计形式;
27.图7是本发明实施例提供的基于区块链基于区块链的kv分离存储系统的结构示意图;
28.图8是本发明实施例提供的用于将创世区块写入文件的模块结构示意图;
29.图9是本发明实施例提供的用于读取缓存中区块的模块结构示意图;
30.图10是本发明实施例提供的数据读取模块的结构示意图;
31.图11是本发明实施例提供的数据写入模块的结构示意图。
32.附图标记:100-数据写入模块;1001-文件名称获取子模块;1002-新文件名称确定子模块;200-数据读取模块;2001-第一提示子模块;2002-第二提示子模块;300-判断模块;400-第一执行模块;500-第二执行模块;600-查询模块;700-第一读取模块;800-第二读取模块。
具体实施方式
33.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
34.rocksdb使用log-structured merge(lsm)trees做为基本的数据存储结构。即在写入时,会通过追加日志的形式写入(顺序写),写性能较高,但是如果写入数据较大,则会造成lsm的层级频繁合并压缩。
35.为解决上述问题,本发明实施例提供了一种基于区块链的kv分离存储方法,图1是本发明实施例提供的基于区块链的kv分离存储方法的流程图,如图1所示,该方法包括:
36.s1、当获取到写请求时,计算当前文件与待写入区块的总数据量,若总数据量超出预设阈值,则在新文件中写入待写入区块并记录文件内的偏移量,将新文件的名称、偏移量及哈希值作为待写入区块的对应值存入数据库中;否则,在当前文件中顺序写入待写入区块并记录文件内的偏移量,将当前文件的名称、偏移量及哈希值作为待写入区块的对应值存入数据库中;其中,当前文件为前一写入区块的存储文件;
37.本实施例在写入区块数据时,首先确认前一写入区块所存储的文件,将该文件作为当前文件,并识别该当前文件的名称与当前文件的数据量。
38.计算待写入区块与当前文件的总数据量(即待写入区块的数据量与当前文件的数据量之和),若总数据量大于预设阈值,说明当前文件无法再存储待写入区块的数据,若存入该待写入区块会超出存储限制,则需要重新建立一个新文件,在新文件中写入该待写入区块的数据,记录新文件的名称及待写入区块在该新文件中的偏移量。
39.如果待写入区块与当前文件的总数据量小于或等于预设阈值,说明当前文件可以存储待写入区块的数据,并且不会超出存储限制。此时,将待写入区块的数据直接写入当前文件中,并记录当前文件的名称及待写入区块在当前文件中的偏移量。
40.将待写入区块的存储文件的文件名称、文件内的偏移量及哈希值作为该区块在数据库rocksdb中的对应值(value值),将其写入rocksdb中。
41.s2、当获取到读请求时,从数据库中查找待读取区块的对应值,根据对应值中文件的名称及偏移量定位到匹配区块,若匹配区块的哈希值与对应值中的哈希值相同,读取匹配区块。
42.当需要读取区块数据时,从数据库rocksdb中提取待读取区块的对应值,该值中包括待读取区块存储的文件名称、文件内的偏移量及哈希值。首先根据文件名称确定文件路径,根据文件路径查找到对应的文件,读取该文件的指定位置(偏移量),得到匹配区块。此时需要判断匹配区块是否确实为待读取区块,将匹配区块的哈希值与待读取区块对应值中的哈希值进行比较,如果一致,则认为匹配区块为待读取区块,读取该区块的内容并返回数据。
43.作为一种可选的实施方式,图2是本发明实施例提供的创世区块写入文件方法的流程图,如图2所示,计算当前文件与待写入区块的总数据量之前,包括:
44.s01、判断待写入区块是否为创世区块;
45.s02、当待写入区块为创世区块时,建立初始文件,将待写入区块写入初始文件;
46.s03、当待写入区块不是创世区块时,计算当前文件与待写入区块的总数据量。
47.当获取到写入请求时,首先判断待写入区块是否为创世区块(区块链中第一个被最早构建的区块)。
48.如果该待写入区块为创世区块,则说明并没有任何一个文件用来存储区块,因此需要建立一个初始文件,根据配置文件,获取区块存储的方式及路径,并将创世区块写入初始文件中。
49.如果该待写入区块并非创世区块,则将当前文件的数据量与待写入区块的数据量进行求和进行后续的写入操作。
50.作为一种可选的实施方式,图3是本发明实施例提供的缓存读取方法的流程图,如图3所示,从数据库中查找待读取区块的对应值之前,包括:
51.s04、从缓存中查询待读取区块;
52.s05、当缓存中存在待读取区块时,读取待读取区块;
53.s06、当缓存中不存在待读取区块时,从数据库中查找待读取区块的对应值。
54.为提高数据读取效率,本实施例在从rocksdb中提取数据之前,首先从缓存中查询待读取区块,缓存中保存一定量的最近存储区块,若从缓存中可以查询到待读取区块,则直接从缓存中读取区块数据,以减少根据rocksdb中的对应值定位待读取区块的时间。若缓存中没有查询到待读取区块,再从rocksdb中查询待读取区块数据。这样分级查询的方式,可
以减缓数据读取压力,提高读取的效率。
55.作为一种可选的实施方式,图4是本发明实施例提供的异常提示方法的流程图,如图4所示,从数据库中查找待读取区块的对应值,根据对应值中文件的名称及偏移量定位到匹配区块,若匹配区块的哈希值与对应值中的哈希值相同,读取匹配区块,包括:
56.s201、当数据库中不存在待读取区块的对应值时,作出异常提示;
57.s202、当匹配区块的哈希值与对应值中的哈希值不一致时,作出异常提示。
58.在从rocksdb中查询数据时,若不能获得对应值中有效的文件名称及偏移量时,需要作出异常提示,认为数据查询异常。
59.在匹配区块的哈希值与待读取区块的对应值中的哈希值不一致时,也需要作出异常提示,认为数据查询异常。
60.更进一步的,当从缓存中没有查询到待读取区块,转而从rocksdb中获取数据时,若数据不存在数据库中,也需要进行异常提示,认为数据查询异常。
61.作为一种可选的实施方式,图5是本发明实施例提供的创建新文件写入区块方法的流程图,如图5所示,在新文件中写入待写入区块,包括:
62.s101、获取当前文件的名称;其中,当前文件的名称为编号形式;
63.s102、在当前文件的名称基础上加一得到新文件的名称,将待写入区块写入新文件的起始位置。
64.在上述过程中创建的文件均是按顺序创建的,对应的名称为编号形式,也为递增创建。例如,初始文件的名称可定义为1,紧接着创建的文件名称定义为2,以此类推创建后续的文件。也即在创建新文件时,新文件的名称是在前一文件名称的基础上加一得到的,当在新文件中写入第一个区块时,在文件的起始位置写入,该写入区块的偏移量为0。
65.更进一步的,可在最初根据区块的特性对文件进行设计,图6展示了一种可能的文件形式设计方案,首先定义区块存储的对应的长度信息及区块基本信息,之后存储了区块头的编码后数据、交易及回执的编码后数据,该设计可以通过统计其区块内交易长度计算出对应的偏移值进行并发解码。如此,可以在进行读操作时,按照各待读取区块的交易长度、顺序编号的文件名称等信息对各待读取区块进行并行读取,提高读取效率。
66.作为一种可选的实施方式,本发明实施例还提供了一种基于区块链的kv分离存储系统,图7是本发明实施例提供的基于区块链基于区块链的kv分离存储系统的结构示意图,如图7所示,该系统包括:
67.数据写入模块100,用于当获取到写请求时,计算当前文件与待写入区块的总数据量,若总数据量超出预设阈值,则在新文件中写入待写入区块并记录文件内的偏移量,将新文件的名称、偏移量及哈希值作为待写入区块的对应值存入数据库中;否则,在当前文件中顺序写入待写入区块并记录文件内的偏移量,将当前文件的名称、偏移量及哈希值作为待写入区块的对应值存入数据库中;其中,当前文件为前一写入区块的存储文件;
68.本实施例在写入区块数据时,首先确认前一写入区块所存储的文件,将该文件作为当前文件,并识别该当前文件的名称与当前文件的数据量。
69.计算待写入区块与当前文件的总数据量(即待写入区块的数据量与当前文件的数据量之和),若总数据量大于预设阈值,说明当前文件无法再存储待写入区块的数据,若存入该待写入区块会超出存储限制,则需要重新建立一个新文件,在新文件中写入该待写入
区块的数据,记录新文件的名称及待写入区块在该新文件中的偏移量。
70.如果待写入区块与当前文件的总数据量小于或等于预设阈值,说明当前文件可以存储待写入区块的数据,并且不会超出存储限制。此时,将待写入区块的数据直接写入当前文件中,并记录当前文件的名称及待写入区块在当前文件中的偏移量。
71.将待写入区块的存储文件的文件名称、文件内的偏移量及哈希值作为该区块在数据库rocksdb中的对应值(value值),将其写入rocksdb中。
72.数据读取模块200,用于当获取到读请求时,从数据库中查找待读取区块的对应值,根据对应值中文件的名称及偏移量定位到匹配区块,若匹配区块的哈希值与对应值中的哈希值相同,读取匹配区块。
73.当需要读取区块数据时,从数据库rocksdb中提取待读取区块的对应值,该值中包括待读取区块存储的文件名称、文件内的偏移量及哈希值。首先根据文件名称确定文件路径,根据文件路径查找到对应的文件,读取该文件的指定位置(偏移量),得到匹配区块。此时需要判断匹配区块是否确实为待读取区块,将匹配区块的哈希值与待读取区块对应值中的哈希值进行比较,如果一致,则认为匹配区块为待读取区块,读取该区块的内容并返回数据。
74.作为一种可选的实施方式,图8是本发明实施例提供的用于将创世区块写入文件的模块结构示意图,如图8所示,该系统包括:
75.判断模块300,用于判断待写入区块是否为创世区块;
76.第一执行模块400,用于当待写入区块为创世区块时,建立初始文件,将待写入区块写入初始文件;
77.第二执行模块500,用于当待写入区块不是创世区块时,计算当前文件与待写入区块的总数据量。
78.当获取到写入请求时,首先判断待写入区块是否为创世区块(区块链中第一个被最早构建的区块)。
79.如果该待写入区块为创世区块,则说明并没有任何一个文件用来存储区块,因此需要建立一个初始文件,根据配置文件,获取区块存储的方式及路径,并将创世区块写入初始文件中。
80.如果该待写入区块并非创世区块,则将当前文件的数据量与待写入区块的数据量进行求和进行后续的写入操作。
81.作为一种可选的实施方式,图9是本发明实施例提供的用于读取缓存中区块的模块结构示意图,如图9所示,该系统包括:
82.查询模块600,用于从缓存中查询待读取区块;
83.第一读取模块700,用于当缓存中存在待读取区块时,读取待读取区块;
84.第二读取模块800,用于当缓存中不存在待读取区块时,从数据库中查找待读取区块的对应值。
85.为提高数据读取效率,本实施例在从rocksdb中提取数据之前,首先从缓存中查询待读取区块,缓存中保存一定量的最近存储区块,若从缓存中可以查询到待读取区块,则直接从缓存中读取区块数据,以减少根据rocksdb中的对应值定位待读取区块的时间。若缓存中没有查询到待读取区块,再从rocksdb中查询待读取区块数据。这样分级查询的方式,可
以减缓数据读取压力,提高读取的效率。
86.作为一种可选的实施方式,图10是本发明实施例提供的读取模块的结构示意图,如图10所示,数据读取模块200包括:
87.第一提示子模块2001,用于当数据库中不存在待读取区块的对应值时,作出异常提示;
88.第二提示子模块2002,用于当匹配区块的哈希值与对应值中的哈希值不一致时,作出异常提示。
89.在从rocksdb中查询数据时,若不能获得对应值中有效的文件名称及偏移量时,需要作出异常提示,认为数据查询异常。
90.在匹配区块的哈希值与待读取区块的对应值中的哈希值不一致时,也需要作出异常提示,认为数据查询异常。
91.更进一步的,当从缓存中没有查询到待读取区块,转而从rocksdb中获取数据时,若数据不存在数据库中,也需要进行异常提示,认为数据查询异常。
92.作为一种可选的实施方式,图11是本发明实施例提供的写入模块的结构示意图,如图11所示,数据写入模块100包括:
93.文件名称获取子模块1001,用于获取当前文件的名称;其中,当前文件的名称为编号形式;
94.新文件名称确定子模块1002,用于在当前文件的名称基础上加一得到新文件的名称,将待写入区块写入新文件的起始位置。
95.在上述过程中创建的文件均是按顺序创建的,对应的名称为编号形式,也为递增创建。例如,初始文件的名称可定义为1,紧接着创建的文件名称定义为2,以此类推创建后续的文件。也即在创建新文件时,新文件的名称是在前一文件名称的基础上加一得到的,当在新文件中写入第一个区块时,在文件的起始位置写入,该写入区块的偏移量为0。
96.更进一步的,可在最初根据区块的特性对文件进行设计,图6展示了一种可能的文件形式设计方案,首先定义区块存储的对应的长度信息及区块基本信息,之后存储了区块头的编码后数据、交易及回执的编码后数据,该设计可以通过统计其区块内交易长度计算出对应的偏移值进行并发解码。如此,可以在进行读操作时,按照各待读取区块的交易长度、顺序编号的文件名称等信息对各待读取区块进行并行读取,提高读取效率。
97.上述技术方案具有如下有益效果:将区块数据使用文件存储,将区块的数据顺序写入文件并将区块的存储文件名、文件内偏移量及哈希值存入rocksdb,减少了rocksdb中的数据存储规模,可以有效的避免读放大、写放大的问题;此外,由于数据规模减小,还可以频繁的compaction问题;在获取到区块的地址及偏移量后,可以快速定位到区块的数据,提高读取区块的速度;在不降低读性能的前提下,使数据快速写入本地数据库。
98.以上发明的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上内容仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术特征:
1.一种基于区块链的kv分离存储方法,其特征在于,包括:当获取到写请求时,计算当前文件与待写入区块的总数据量,若所述总数据量超出预设阈值,则在新文件中写入所述待写入区块并记录文件内的偏移量,将新文件的名称、偏移量及哈希值作为所述待写入区块的对应值存入数据库中;否则,在所述当前文件中顺序写入所述待写入区块并记录文件内的偏移量,将当前文件的名称、偏移量及哈希值作为所述待写入区块的对应值存入数据库中;其中,所述当前文件为前一写入区块的存储文件;当获取到读请求时,从所述数据库中查找待读取区块的对应值,根据所述对应值中文件的名称及偏移量定位到匹配区块,若所述匹配区块的哈希值与所述对应值中的哈希值相同,读取所述匹配区块。2.根据权利要求1所述的基于区块链的kv分离存储方法,其特征在于,所述计算当前文件与待写入区块的总数据量之前,包括:判断所述待写入区块是否为创世区块;当所述待写入区块为创世区块时,建立初始文件,将所述待写入区块写入所述初始文件;当所述待写入区块不是创世区块时,计算当前文件与所述待写入区块的总数据量。3.根据权利要求1所述的基于区块链的kv分离存储方法,其特征在于,所述从所述数据库中查找待读取区块的对应值之前,包括:从缓存中查询所述待读取区块;当所述缓存中存在所述待读取区块时,读取所述待读取区块;当所述缓存中不存在所述待读取区块时,从所述数据库中查找所述待读取区块的对应值。4.根据权利要求1所述的基于区块链的kv分离存储方法,其特征在于,所述从所述数据库中查找待读取区块的对应值,根据所述对应值中文件的名称及偏移量定位到匹配区块,若所述匹配区块的哈希值与所述对应值中的哈希值相同,读取所述匹配区块,包括:当所述数据库中不存在所述待读取区块的对应值时,作出异常提示;当所述匹配区块的哈希值与所述对应值中的哈希值不一致时,作出异常提示。5.根据权利要求1所述的基于区块链的kv分离存储方法,其特征在于,所述在新文件中写入所述待写入区块,包括:获取所述当前文件的名称;其中,所述当前文件的名称为编号形式;在所述当前文件的名称基础上加一得到所述新文件的名称,将所述待写入区块写入所述新文件的起始位置。6.一种基于区块链的kv分离存储系统,其特征在于,包括:数据写入模块,用于当获取到写请求时,计算当前文件与待写入区块的总数据量,若所述总数据量超出预设阈值,则在新文件中写入所述待写入区块并记录文件内的偏移量,将新文件的名称、偏移量及哈希值作为所述待写入区块的对应值存入数据库中;否则,在所述当前文件中顺序写入所述待写入区块并记录文件内的偏移量,将当前文件的名称、偏移量及哈希值作为所述待写入区块的对应值存入数据库中;其中,所述当前文件为前一写入区块的存储文件;数据读取模块,用于当获取到读请求时,从所述数据库中查找待读取区块的对应值,根
据所述对应值中文件的名称及偏移量定位到匹配区块,若所述匹配区块的哈希值与所述对应值中的哈希值相同,读取所述匹配区块。7.根据权利要求6所述的基于区块链的kv分离存储系统,其特征在于,包括:判断模块,用于判断所述待写入区块是否为创世区块;第一执行模块,用于当所述待写入区块为创世区块时,建立初始文件,将所述待写入区块写入所述初始文件;第二执行模块,用于当所述待写入区块不是创世区块时,计算当前文件与所述待写入区块的总数据量。8.根据权利要求6所述的基于区块链的kv分离存储系统,其特征在于,包括:查询模块,用于从缓存中查询所述待读取区块;第一读取模块,用于当所述缓存中存在所述待读取区块时,读取所述待读取区块;第二读取模块,用于当所述缓存中不存在所述待读取区块时,从所述数据库中查找所述待读取区块的对应值。9.根据权利要求6所述的基于区块链的kv分离存储系统,其特征在于,所述数据读取模块包括:第一提示子模块,用于当所述数据库中不存在所述待读取区块的对应值时,作出异常提示;第二提示子模块,用于当所述匹配区块的哈希值与所述对应值中的哈希值不一致时,作出异常提示。10.根据权利要求6所述的基于区块链的kv分离存储系统,其特征在于,所述数据写入模块包括:文件名称获取子模块,用于获取所述当前文件的名称;其中,所述当前文件的名称为编号形式;新文件名称确定子模块,用于在所述当前文件的名称基础上加一得到所述新文件的名称,将所述待写入区块写入所述新文件的起始位置。

技术总结
本发明公开了一种基于区块链的KV分离存储方法及系统,其中该方法包括:当获取到写请求时,计算当前文件与待写入区块的总数据量,若总数据量超出预设阈值,则在新文件中写入待写入区块并记录文件内的偏移量,将新文件的名称、偏移量及哈希值作为待写入区块的对应值存入数据库中;否则,在当前文件中顺序写入待写入区块并记录文件内的偏移量,将当前文件的名称、偏移量及哈希值作为待写入区块的对应值存入数据库中;其中,当前文件为前一写入区块的存储文件;当获取到读请求时,从数据库中查找待读取区块的对应值,根据对应值中文件的名称及偏移量定位到匹配区块,若匹配区块的哈希值与对应值中的哈希值相同,读取匹配区块,提高了数据读写效率。了数据读写效率。了数据读写效率。


技术研发人员:段荣伟 兰春嘉
受保护的技术使用者:上海零数众合信息科技有限公司
技术研发日:2023.06.30
技术公布日:2023/10/5
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐