一种基于文件的区块链区块存储和读取方法与流程

文档序号:15982163发布日期:2018-11-17 00:27阅读:1678来源:国知局

本发明涉及去中心化的区块链存储体系,尤其涉及一种基于文件的区块链区块存储和读取方法。



背景技术:

区块链技术,区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改,区块链上的交易确认由区块链上的所有节点共同完成,由共识算法保证其一致性,区块链上维护一个公共的账本,公共账本位于存储区块上任何节点可见,从而保证其不可伪造和篡改。

传统区块链的存储体系均基于开源的key/value数据库,例如leveldb,尽管leveldb面利用多层合并的方式对数据的写入以及读取做了很大的优化,读写效率较其他传统的数据库也得到了一定的提高,但是针对大数据量且连续的区块数据仍无法达到实际生产所要求达到的吞吐量。

传统的区块链网络中,节点中所有的信息,包括状态信息以及区块均存储key/value数据库中,区块数据庞大,一旦系统运行过久区块数据量过大,会导致整个区块链网络的存储读写性能严重降低,成为整个区块链网络运行性能的瓶颈,是区块链在实际应用中的一大痛点。



技术实现要素:

本发明的目的是针对现有技术的不足,提供一种基于文件的区块链区块存储和读取方法,该方法是针对区块数据量大且连续的特性,进行存储的优化。具体技术方案如下:

一种基于文件的区块链区块存储和读取方法,其特征在于,所述的存储包括如下步骤:

(1)读取最后一次成功提交的区块号,将其存储为变量名为lastcommit的键值对;

(2)根据最后一次提交的区块号,定位到当前文件写入的位置,然后写入最新的区块信息;

(3)根据写入的区块信息获得该区块在文件中的偏移量,根据区块号和偏移量定义为当前区块号的索引信息,写入索引文件中;

(4)更新最后一次成功提交的区块号,重复步骤(1)-(3),完成整个区块的写入;

(5)经过区块链网络若干个节点共识,若此时发现某个节点的区块写入错误,则从其他节点获取正确写入的区块号,更新错误节点最后一次成功提交的区块号,重复步骤(1)-(4),直到区块链网络达成网络共识。

所述的读取包括如下步骤:

根据需要读取的区块号读取相应区块的索引信息,根据索引信息定位到区块位于文件的具体偏移量,根据偏移量读取区块信息。

优选地,所述的读取进一步包括如下步骤:

定义迭代器,选择初始遍历的区块号,根据初始区块号读取相应区块的索引信息,根据索引信息定位到区块位于文件的具体偏移量,依次遍历整个文件,根据需要读取所需要区块的区块信息。

优选地,所述的步骤(2)中,当写入最新的区块信息后文件大于500m,则放弃此次写入,新建区块存储文件和区块索引文件,重新写入最新区块信息。

优选地,所述的区块号和索引文件按如下规则进行命名:

将新建区块存储以及索引文件后第一个区块号作为文件名,文件后缀分别为.log和.idx。

优选地,所述的区块在文件中的存储方式如下:前8个字节代表偏移量,9-12字节代表区块的大小,其他字节代表区块具体信息。

优选地,所述的区块索引文件的存储方式如下:前4个字节代表当前区块号相对于该文件中第一个区块号的偏移值,第5-8个字节代表当前区块在区块存储文件中的物理偏移量。

本发明的有益效果是:本发明提出的基于文件的区块存储和读取方法,通过文件存储读写效率高的特性,同时将所有区块文件按照容量大小切分为不同的区块和索引存储文件,利用索引和最后一次区块成功提交信息做到了区块的快速读写,在保证区块信息正确持久化的情况下,提高区块链的存储性能。本发明应用于现有的区块链网络中,在保证了区块信息能够被准确且完整的写入的情况下,提高了整个区块存储的效率,是在传统基于key/value的区块链体系下一个新的突破。

附图说明

图1是基于文件的区块存储架构图;

图2是区块存储结构体示意图;

图3是区块索引存储结构图;

图4是区块写入流程图。

图5是区块读取流程图。

具体实施方式

下面根据附图和优选实施例详细描述本发明,本发明的目的和效果将变得更加明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

一种基于文件的区块链区块存储和读取方法,所述的存储包括如下步骤(如图4所示):

(1)读取最后一次成功提交的区块号,区块号的格式要求为“block-区块号”,且为字节数组类型,将其存储为变量名为lastcommit的键值对;

(2)根据最后一次提交的区块号,定位到当前文件写入的位置,然后写入最新的区块信息,这里的区块信息也为字节数组类型;

(3)根据写入的区块信息获得该区块在文件中的偏移量,根据区块号和偏移量定义为当前区块号的索引信息,写入索引文件中;当写入最新的区块信息后文件大于500m,则放弃此次写入,新建区块存储文件和区块索引文件,重新写入最新区块信息。所述的区块号和索引文件按如下规则进行命名:将新建区块存储以及索引文件后第一个区块号作为文件名,文件后缀分别为.log和.idx。区块存储文件和索引文件的架构图如图1所示。

(4)更新最后一次成功提交的区块号,重复步骤(1)-(3),完成整个区块的写入;其中,区块在文件中的存储方式如下:前8个字节代表偏移量,9-12字节代表区块的大小,其他字节代表区块具体信息,如图2所示。区块索引信息在索引文件中的存储方式如下:前4个字节代表当前区块号相对于该文件中第一个区块号的偏移值,第5-8个字节代表当前区块在区块存储文件中的物理偏移量,如图3所示。

(5)经过区块链网络若干个节点共识,若此时发现某个节点的区块写入错误,则从其他节点获取正确写入的区块号,更新错误节点最后一次成功提交的区块号,重复步骤(1)-(4),直到区块链网络达成网络共识。

所述的读取包括如下步骤(如图5所示):

根据需要读取的区块号读取相应区块的索引信息,根据索引信息定位到区块位于文件的具体偏移量,根据偏移量读取区块信息。

为了更方便地连续读取区块信息,也可以定义迭代器,选择初始遍历的区块号,根据初始区块号读取相应区块的索引信息,根据索引信息定位到区块位于文件的具体偏移量,依次遍历整个文件,根据需要读取所需要区块的区块信息。

本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。



技术特征:

技术总结
本发明公开一种基于文件的区块链区块存储和读取方法,在一个区块链节点中,写入时,读取最后一次成功提交的区块号,定位到当前文件写入的位置,然后写入最新的区块信息;根据写入的区块信息生出索引,更新最后一次成功提交的区块号,重复前述步骤,完成整个区块的写入,若有写入错误,则需要更新区块号进行区块重写;读取采用常规的读取方法。本发明应用于现有的区块链网络中,在保证了区块信息能够被准确且完整的写入的情况下,提高了整个区块存储的效率,是在传统基于Key/Value的区块链体系下一个新的突破。

技术研发人员:邱炜伟;李启雷;李伟;梁秀波;尹可挺
受保护的技术使用者:杭州趣链科技有限公司
技术研发日:2018.05.29
技术公布日:2018.11.16
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1