基于区块链的KV分离存储方法及系统技术方案

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

【技术实现步骤摘要】
基于区块链的KV分离存储方法及系统


[0001]本专利技术涉及区块链领域,尤其涉及一种基于区块链的KV分离存储方法及系统。

技术介绍

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

技术实现思路

[0008]为解决上述问题,本专利技术提供一种基于区块链的KV分离存储方法及系统,通过将区块数据使用文件进行存储,并将每个区块的存储文件名、文件内的偏移量及哈希值存储入RocksDB中,以减小RocksDB中的存储规模,从而解决读放大和写放大的问题,另外由于存储规模减小,可以避免频繁的合并压缩问题。
[0009]为达到上述目的,本专利技术提供了一种基于区块链的KV分离存储方法,包括:当获取到写请求时,计算当前文件与待写入区块的总数据量,若所述总数据量超出预设阈值,则在新文件中写入所述待写入区块并记录文件内的偏移量,将新文件的名称、偏移量及哈希值作为所述待写入区块的对应值存入数据库中;否则,在所述当前文件中顺序写入所述待写入区块并记录文件内的偏移量,将当前文件的名称、偏移量及哈希值作为所述待写入区块的对应值存入数据库中;其中,所述当前文件为前一写入区块的存储文件;当获取到读请求时,从所述数据库中查找待读取区块的对应值,根据所述对应值中文件的名称及偏移量定位到匹配区块,若所述匹配区块的哈希值与所述对应值中的哈希值相同,读取所述匹配区块。
[0010]进一步可选的,所述计算当前文件与待写入区块的总数据量之前,包括:判断所述待写入区块是否为创世区块;当所述待写入区块为创世区块时,建立初始文件,将所述待写入区块写入所述初始文件;当所述待写入区块不是创世区块时,计算当前文件与所述待写入区块的总数据量。
[0011]进一步可选的,所述从所述数据库中查找待读取区块的对应值之前,包括:从缓存
中查询所述待读取区块;当所述缓存中存在所述待读取区块时,读取所述待读取区块;当所述缓存中不存在所述待读取区块时,从所述数据库中查找所述待读取区块的对应值。
[0012]进一步可选的,所述从所述数据库中查找待读取区块的对应值,根据所述对应值中文件的名称及偏移量定位到匹配区块,若所述匹配区块的哈希值与所述对应值中的哈希值相同,读取所述匹配区块,包括:当所述数据库中不存在所述待读取区块的对应值时,作出异常提示;当所述匹配区块的哈希值与所述对应值中的哈希值不一致时,作出异常提示。
[0013]进一步可选的,所述在新文件中写入所述待写入区块,包括:获取所述当前文件的名称;其中,所述当前文件的名称为编号形式;在所述当前文件的名称基础上加一得到所述新文件的名称,将所述待写入区块写入所述新文件的起始位置。
[0014]另一方面,本专利技术还提供一种基于区块链的KV分离存储系统,包括:数据写入模块,用于当获取到写请求时,计算当前文件与待写入区块的总数据量,若所述总数据量超出预设阈值,则在新文件中写入所述待写入区块并记录文件内的偏移量,将新文件的名称、偏移量及哈希值作为所述待写入区块的对应值存入数据库中;否则,在所述当前文件中顺序写入所述待写入区块并记录文件内的偏移量,将当前文件的名称、偏移量及哈希值作为所述待写入区块的对应值存入数据库中;其中,所述当前文件为前一写入区块的存储文件;数据读取模块,用于当获取到读请求时,从所述数据库中查找待读取区块的对应值,根据所述对应值中文件的名称及偏移量定位到匹配区块,若所述匹配区块的哈希值与所述对应值中的哈希值相同,读取所述匹配区块。
[0015]进一步可选的,该系统包括:判断模块,用于判断所述待写入区块是否为创世区块;第一执行模块,用于当所述待写入区块为创世区块时,建立初始文件,将所述待写入区块写入所述初始文件;第二执行模块,用于当所述待写入区块不是创世区块时,计算当前文件与所述待写入区块的总数据量。
[0016]进一步可选的,该系统包括:查询模块,用于从缓存中查询所述待读取区块;第一读取模块,用于当所述缓存中存在所述待读取区块时,读取所述待读取区块;第二读取模块,用于当所述缓存中不存在所述待读取区块时,从所述数据库中查找所述待读取区块的对应值。
[0017]进一步可选的,所述数据读取模块包括:第一提示子模块,用于当所述数据库中不存在所述待读取区块的对应值时,作出异常提示;第二提示子模块,用于当所述匹配区块的哈希值与所述对应值中的哈希值不一致时,作出异常提示。
[0018]进一步可选的,所述数据写入模块包括:文件名称获取子模块,用于获取所述当前文件的名称;其中,所述当前文件的名称为编号形式;新文件名称确定子模块,用于在所述当前文件的名称基础上加一得到所述新文件的名称,将所述待写入区块写入所述新文件的起始位置。
[0019]上述技术方案具有如下有益效果:将区块数据使用文件存储,将区块的数据顺序写入文件并将区块的存储文件名、文件内偏移量及哈希值存入数据库(RocksDB),减少了数据库(RocksDB)中的数据存储规模,可以有效的避免读放大、写放大的问题;此外,由于数据规模减小,还可以频繁的compaction问题;在获取到区块的地址及偏移量后,可以快速定位到区块的数据,提高读取区块的速度;在不降低读性能的前提下,使数据快速写入本地数据库。
附图说明
[0020]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0021]图1是本专利技术实施例提供的基于区块链的KV分离存储方法的流程图;
[0022]图2是本专利技术实施例提供的创世区块写入文件方法的流程图;
[0023]图3是本专利技术实施例提供的缓存读取方法的流程图;
[0024]图4是本专利技术实施例提供的异常提示方法的流程图;
[0025]图5是本专利技术实施例提供的创建新文件写入区块方法的流程图;
[0026]图6是本专利技术实施例提供的一种文件设计形式;
[0027]图7是本专利技术实施例提供的基于区本文档来自技高网
...

【技术保护点】

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

【专利技术属性】
技术研发人员:段荣伟兰春嘉
申请(专利权)人:上海零数众合信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1