一种基于文件的区块链区块存储和读取方法技术

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

【技术实现步骤摘要】
一种基于文件的区块链区块存储和读取方法
本专利技术涉及去中心化的区块链存储体系,尤其涉及一种基于文件的区块链区块存储和读取方法。
技术介绍
区块链技术,区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改,区块链上的交易确认由区块链上的所有节点共同完成,由共识算法保证其一致性,区块链上维护一个公共的账本,公共账本位于存储区块上任何节点可见,从而保证其不可伪造和篡改。传统区块链的存储体系均基于开源的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所示):根据需要读取的区块号读取相应区块的索引信息,根据索引信息定位到区块位于文件的具体偏移量,根据偏移量读取区块信息。为了更方便地连续读取区块信息,也可以定义迭代器,选择初始遍历的区块号,根据初始区块号读取相应区块的索引信息,根据索引信息定位到区块位于文件的具体偏移量,依次遍历整个文件,根据需要读取所需要区块的区块信息。本领域普通技术人员可以理解,以上所述仅为专利技术的优选实例而已,并不用于限制专利技术,尽管参照前述实例对专利技术进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在专利技术的精神和原则之内,所做的修改、等同替换等均应包含在专利技术的保护范围之内。本文档来自技高网...

【技术保护点】
1.一种基于文件的区块链区块存储和读取方法,其特征在于,所述的存储包括如下步骤:(1)读取最后一次成功提交的区块号,将其存储为变量名为LastCommit的键值对;(2)根据最后一次提交的区块号,定位到当前文件写入的位置,然后写入最新的区块信息;(3)根据写入的区块信息获得该区块在文件中的偏移量,根据区块号和偏移量定义为当前区块号的索引信息,写入索引文件中;(4)更新最后一次成功提交的区块号,重复步骤(1)‑(3),完成整个区块的写入;(5)经过区块链网络若干个节点共识,若此时发现某个节点的区块写入错误,则从其他节点获取正确写入的区块号,更新错误节点最后一次成功提交的区块号,重复步骤(1)‑(4),直到区块链网络达成网络共识。所述的读取包括如下步骤:根据需要读取的区块号读取相应区块的索引信息,根据索引信息定位到区块位于文件的具体偏移量,根据偏移量读取区块信息。

【技术特征摘要】
1.一种基于文件的区块链区块存储和读取方法,其特征在于,所述的存储包括如下步骤:(1)读取最后一次成功提交的区块号,将其存储为变量名为LastCommit的键值对;(2)根据最后一次提交的区块号,定位到当前文件写入的位置,然后写入最新的区块信息;(3)根据写入的区块信息获得该区块在文件中的偏移量,根据区块号和偏移量定义为当前区块号的索引信息,写入索引文件中;(4)更新最后一次成功提交的区块号,重复步骤(1)-(3),完成整个区块的写入;(5)经过区块链网络若干个节点共识,若此时发现某个节点的区块写入错误,则从其他节点获取正确写入的区块号,更新错误节点最后一次成功提交的区块号,重复步骤(1)-(4),直到区块链网络达成网络共识。所述的读取包括如下步骤:根据需要读取的区块号读取相应区块的索引信息,根据索引信息定位到区块位于文件的具体偏移量,根据偏移量读取区块信息。2.根据权利要求1所述的基于文件的区块链区块存储和读取方法,其特征在于,所述的读取进一步包括如下步骤:定义迭代器,选择初始遍历的区块号,根据初始区块号读...

【专利技术属性】
技术研发人员:邱炜伟李启雷李伟梁秀波尹可挺
申请(专利权)人:杭州趣链科技有限公司
类型:发明
国别省市:浙江,33

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

1