CN109684337A - 一种基于多级缓存的区块链状态数据存储和读取方法 - Google Patents
一种基于多级缓存的区块链状态数据存储和读取方法 Download PDFInfo
- Publication number
- CN109684337A CN109684337A CN201811636076.8A CN201811636076A CN109684337A CN 109684337 A CN109684337 A CN 109684337A CN 201811636076 A CN201811636076 A CN 201811636076A CN 109684337 A CN109684337 A CN 109684337A
- Authority
- CN
- China
- Prior art keywords
- memtable
- status data
- block
- block chain
- storage
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于多级缓存的区块链状态数据存储和读取方法,在一个区块链节点中,写入时,根据区块为最小单位,原子性写入一个区块内的所有状态信息和区块高度编码后的状态信息写入MemTable中,写入成功则将未编码的状态信息缓存至第一级缓存中;若MemTable原子写入失败,则需要根据区块号重新进行状态信息的写入。读取则以常规方法,按照先读第一级缓存,后读取Memtable的顺序进行读取。本发明应用于现有的区块链网络中,在保证了区块状态数据能够被准确且完整的写入的情况下,提高了整个状态数据存储的效率,是在传统基于Key/Value的区块链体系下一个新的突破。
Description
技术领域
本发明涉及去中心化的区块链存储体系,尤其涉及一种基于多级缓存的区块链状态数据存储和读取方法。
背景技术
区块链技术,区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改,区块链上的交易确认由区块链上的所有节点共同完成,由共识算法保证其一致性,区块链上维护一个公共的账本,公共账本位于存储区块上任何节点可见,从而保证其不可伪造和篡改。
传统区块链的存储体系均基于开源的Key/Value数据库,例如LevelDB,尽管LevelDB面利用多层合并的方式对数据的写入以及读取做了很大的优化,读写效率较其他传统的数据库也得到了一定的提高,但是针对大数据量且连续的区块数据仍无法达到实际生产所要求达到的吞吐量。
传统的区块链网络中,节点中所有的信息,包括状态信息以及区块均存储在Key/Value数据库中,区块数据庞大,一旦系统运行过久区块数据量过大,会导致整个区块链网络的存储读写性能严重降低,成为整个区块链网络运行性能的瓶颈,是区块链在实际应用中的一大痛点。
发明内容
本发明的目的是针对现有技术的不足,提供一种基于多级缓存的区块链状态数据存储和读取方法,该方法是针对区块链Key/Value形式的状态数据,进行存储的优化。
本发明的目的是通过以下技术方案来实现的:一种基于多级缓存的区块链状态数据存储和读取方法,所述的存储包括如下步骤:
步骤一:将一个区块的所有状态数据组成一个Batch;
步骤二:将一个Batch内的所有状态信息编码后以原子性存储到Memtable中,同时更新状态数据中的区块高度信息;若MemTable原子写入失败,则需要根据区块号重新进行状态信息的写入;
步骤三:重复步骤一和步骤二,完成整个区块的状态数据写入,同时将所有未编码前的状态数据存入第一级缓存中去;
所述的读取包括如下步骤:
根据所需读取的区块状态信息,按照第一级缓存,MemTable,Immutable MemTable以及LevelDB数据库的顺序进行依次状态数据的读取。
进一步地,所述步骤三包括如下子步骤:
第一级缓存按照区块号为单位,进行区块链状态数据的淘汰,若第一级缓存数据已满,则依次淘汰区块号最小的状态数据,淘汰最小区块号的状态数据后,则缓存最新区块号的区块链状态数据。
进一步地,所述的步骤二中,当写入最新的状态数据后Memtable大于500M,则放弃此次写入,将此MemTable转换为Immutable Memtable,同时新建一块Memtable,重新写入最新区块链状态信息。
进一步地,所述的MemTable转换为Immutable Memtable过程中存储进一步包括如下子步骤:
(1)在MemTable转化为Immutable MemTable之后,Immutable MemTable会遍历其中的Key/Value内容,将操作记录存于LOG文件中;
(2)再次遍历Immutable Memtable,读取Key/Value,存储在LevelDB数据库中。
(3)Immutable MemTable存储完毕后,删除对应的LOG文件;
进一步地,所述的MemTable转换为Immutable Memtable过程中包括如下步骤:
当区块链节点宕机导致Immutable MemTable数据丢失,可以根据LOG文件恢复出对应Immutable MemTable。
本发明的有益效果是:提供一种基于多级缓存的区块链状态数据存储和读取方法,通过缓存存储读写效率高的特性,同时将所有区块链的状态数据先缓存于内存数据库中,利用多级的缓存控制提高缓存的命中率,同时采用异步持久化数据的模型,在保证区块信息正确持久化的情况下,提高区块链的存储性能。本发明应用于现有的区块链网络中,在保证了区块链状态数据能够被准确且完整的写入的情况下,提高了整个区块链状态数据存储的效率,是在传统基于Key/Value的区块链体系下一个新的突破。
附图说明
图1是基于多级缓存的状态数据存储架构图;
图2是状态数据写入流程图。
图3是状态数据读取流程图。
具体实施方式
下面根据附图和优选实施例详细描述本发明,本发明的目的和效果将变得更加明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
一种基于多级缓存的区块链状态数据存储和读取方法,所述的存储包括如下步骤(如图2所示):
步骤一:将一个区块的所有状态数据组成一个Batch;
步骤二:将一个Batch内的所有状态信息编码后以原子性存储到Memtable中,同时更新状态数据中的区块高度信息;当写入最新的状态数据后Memtable大于500M,则放弃此次写入,将此MemTable转换为Immutable Memtable,同时新建一块Memtable,重新写入最新区块链状态信息;在MemTable转化为Immutable MemTable之后,Immutable MemTable会遍历其中的Key/Value内容,将操作记录存于LOG文件中;再次遍历Immutable Memtable,读取Key/Value,存储在LevelDB数据库中;Immutable MemTable存储完毕后,删除对应的LOG文件;
步骤三:重复步骤一和步骤二,完成整个区块的状态数据写入,同时将所有未编码前的状态数据存入第一级缓存中去;
所述的读取包括如下步骤(如图3所示):
根据所需读取的区块状态信息,按照第一级缓存,MemTable,Immutable MemTable以及LevelDB数据库的顺序进行依次状态数据的读取。
第一级缓存按照区块号为单位,进行区块链状态数据的淘汰,若第一级缓存数据已满,则依次淘汰区块号最小的状态数据,淘汰最小区块号的状态数据后,则缓存最新区块号的区块链状态数据。
同时当区块链节点宕机导致Immutable MemTable数据丢失,可以根据LOG文件恢复出对应Immutable MemTable。
进一步地,所述步骤三包括如下子步骤:
第一级缓存按照区块号为单位,进行区块链状态数据的淘汰,若第一级缓存数据已满,则依次淘汰区块号最小的状态数据,淘汰最小区块号的状态数据后,则缓存最新区块号的区块链状态数据。
进一步地,所述的步骤二中,当写入最新的状态数据后Memtable大于500M,则放弃此次写入,将此MemTable转换为Immutable Memtable,同时新建一块Memtable,重新写入最新区块链状态信息。
进一步地,所述的MemTable转换为Immutable Memtable过程中存储进一步包括如下子步骤:
(1)在MemTable转化为Immutable MemTable之后,Immutable MemTable会遍历其中的Key/Value内容,将操作记录存于LOG文件中;
(2)再次遍历Immutable Memtable,读取Key/Value,存储在LevelDB数据库中。
(3)Immutable MemTable存储完毕后,删除对应的LOG文件;
进一步地,所述的MemTable转换为Immutable Memtable过程中包括如下步骤:
当区块链节点宕机导致Immutable MemTable数据丢失,可以根据LOG文件恢复出对应Immutable MemTable。
本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。
Claims (5)
1.一种基于多级缓存的区块链状态数据存储和读取方法,其特征在于,所述的存储包括如下步骤:
步骤一:将一个区块的所有状态数据组成一个Batch。
步骤二:将一个Batch内的所有状态信息编码后以原子性存储到Memtable中,同时更新状态数据中的区块高度信息;若MemTable原子写入失败,则需要根据区块号重新进行状态信息的写入。
步骤三:重复步骤一和步骤二,完成整个区块的状态数据写入,同时将所有未编码前的状态数据存入第一级缓存中去。
所述的读取包括如下步骤:
根据所需读取的区块状态信息,按照第一级缓存,MemTable,Immutable MemTable以及LevelDB数据库的顺序进行依次状态数据的读取。
2.根据权利要求1所述一种基于多级缓存的区块链状态数据存储和读取方法,其特征在于,所述步骤三包括如下子步骤:
第一级缓存按照区块号为单位,进行区块链状态数据的淘汰,若第一级缓存数据已满,则依次淘汰区块号最小的状态数据,淘汰最小区块号的状态数据后,则缓存最新区块号的区块链状态数据。
3.根据权利要求1所述基于多级缓存的区块链状态数据存储和读取方法,其特征在于,所述的步骤二中,当写入最新的状态数据后Memtable大于500M,则放弃此次写入,将此MemTable转换为Immutable Memtable,同时新建一块Memtable,重新写入最新区块链状态信息。
4.根据权利要求3所述所述基于多级缓存的区块链状态数据存储和读取方法,其特征在于,所述的MemTable转换为Immutable Memtable过程中存储进一步包括如下子步骤:
(1)在MemTable转化为Immutable MemTable之后,Immutable MemTable会遍历其中的Key/Value内容,将操作记录存于LOG文件中。
(2)再次遍历Immutable Memtable,读取Key/Value,存储在LevelDB数据库中。
(3)Immutable MemTable存储完毕后,删除对应的LOG文件;
5.根据权利要求4所述基于多级缓存的区块链状态数据存储和读取方法,其特征在于,所述的MemTable转换为Immutable Memtable过程中包括如下步骤:
当区块链节点宕机导致Immutable MemTable数据丢失,可以根据LOG文件恢复出对应Immutable MemTable。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811636076.8A CN109684337B (zh) | 2018-12-29 | 2018-12-29 | 一种基于多级缓存的区块链状态数据存储和读取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811636076.8A CN109684337B (zh) | 2018-12-29 | 2018-12-29 | 一种基于多级缓存的区块链状态数据存储和读取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109684337A true CN109684337A (zh) | 2019-04-26 |
CN109684337B CN109684337B (zh) | 2021-05-04 |
Family
ID=66191190
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811636076.8A Active CN109684337B (zh) | 2018-12-29 | 2018-12-29 | 一种基于多级缓存的区块链状态数据存储和读取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109684337B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110531924A (zh) * | 2019-05-31 | 2019-12-03 | 杭州复杂美科技有限公司 | 用于扩展区块链存储容量的方法和设备、存储介质及系统 |
CN110543485A (zh) * | 2019-08-21 | 2019-12-06 | 杭州趣链科技有限公司 | 一种基于快照的区块链预约归档方法 |
CN111241061A (zh) * | 2020-01-09 | 2020-06-05 | 平安科技(深圳)有限公司 | 状态数据库的写入方法、数据处理装置及存储介质 |
CN111274318A (zh) * | 2020-01-16 | 2020-06-12 | 杭州趣链科技有限公司 | 一种区块链状态数据的存储、回滚方法、设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108132958A (zh) * | 2016-12-01 | 2018-06-08 | 阿里巴巴集团控股有限公司 | 一种多级缓存数据存储、查询、调度以及处理方法及装置 |
CN108804112A (zh) * | 2018-05-22 | 2018-11-13 | 上海分布信息科技有限公司 | 一种区块链落账处理方法及系统 |
-
2018
- 2018-12-29 CN CN201811636076.8A patent/CN109684337B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108132958A (zh) * | 2016-12-01 | 2018-06-08 | 阿里巴巴集团控股有限公司 | 一种多级缓存数据存储、查询、调度以及处理方法及装置 |
CN108804112A (zh) * | 2018-05-22 | 2018-11-13 | 上海分布信息科技有限公司 | 一种区块链落账处理方法及系统 |
Non-Patent Citations (3)
Title |
---|
GIUSEPPE DECANDIA等: "Dynamo: Amazon’s Highly Available Key-Value Store", 《ACM SIGOPS OPERATING SYESTEMS REVIEW》 * |
明辉: "缓存那些事", 《HTTPS://TECH.MEITUAN.COM/2017/03/17/CACHE-ABOUT.HTML》 * |
罗军等: "高效Key_Value持久化缓存系统的实现", 《计算机工程》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110531924A (zh) * | 2019-05-31 | 2019-12-03 | 杭州复杂美科技有限公司 | 用于扩展区块链存储容量的方法和设备、存储介质及系统 |
CN110543485A (zh) * | 2019-08-21 | 2019-12-06 | 杭州趣链科技有限公司 | 一种基于快照的区块链预约归档方法 |
CN111241061A (zh) * | 2020-01-09 | 2020-06-05 | 平安科技(深圳)有限公司 | 状态数据库的写入方法、数据处理装置及存储介质 |
CN111241061B (zh) * | 2020-01-09 | 2023-04-07 | 平安科技(深圳)有限公司 | 状态数据库的写入方法、数据处理装置及存储介质 |
CN111274318A (zh) * | 2020-01-16 | 2020-06-12 | 杭州趣链科技有限公司 | 一种区块链状态数据的存储、回滚方法、设备和存储介质 |
CN111274318B (zh) * | 2020-01-16 | 2023-04-25 | 杭州趣链科技有限公司 | 一种区块链状态数据的存储、回滚方法、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109684337B (zh) | 2021-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109684337A (zh) | 一种基于多级缓存的区块链状态数据存储和读取方法 | |
CN110471795B (zh) | 区块链状态数据恢复方法及装置、电子设备 | |
CN107066393A (zh) | 提高地址映射表中映射信息密度的方法 | |
CN108810041A (zh) | 一种分布式缓存系统的数据写入及扩容方法、装置 | |
CN108829772A (zh) | 一种基于文件的区块链区块存储和读取方法 | |
CN107766374B (zh) | 一种海量小文件存储读取的优化方法和系统 | |
CN108228649A (zh) | 用于数据访问的方法和设备 | |
CN103559027A (zh) | 一种key与value分开存储的key-value存储系统设计方法 | |
CN105677508B (zh) | 一种云存储中纠删码数据的修改方法及系统 | |
CN112988073B (zh) | 一种可降低区块链存储开销的阶梯式数据存储方法及系统 | |
CN109977129A (zh) | 多级数据缓存方法及设备 | |
CN110188108A (zh) | 数据存储方法、装置、系统、计算机设备及存储介质 | |
CN106527973A (zh) | 一种数据重复删除的方法及装置 | |
CN107340978A (zh) | 一种存储预读方法、装置及存储系统 | |
CN110795363B (zh) | 一种存储介质的热页预测方法和页面调度方法 | |
CN106407224A (zh) | 一种键值存储系统中文件压实的方法和装置 | |
CN109471843A (zh) | 一种元数据缓存方法、系统及相关装置 | |
CN109582708A (zh) | 一种时序数据库系统 | |
CN106788468A (zh) | 一种纠删码更新方法及装置,电子设备 | |
CN113867627B (zh) | 一种存储系统性能优化方法及系统 | |
CN106201918B (zh) | 一种基于大数据量和大规模缓存快速释放的方法和系统 | |
CN109144431B (zh) | 数据块的缓存方法、装置、设备及存储介质 | |
CN107766355A (zh) | 层级数据管理方法、层级数据管理系统及即时通信系统 | |
CN113268457A (zh) | 一种支持高效写的自适应学习索引方法和系统 | |
CN110515897A (zh) | Lsm存储系统读性能的优化方法及系统 |
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 |