区块链数据存储方法、装置、设备及介质制造方法及图纸

技术编号:19903644 阅读:19 留言:0更新日期:2018-12-26 02:58
本发明专利技术实施例公开了一种区块链数据存储方法、装置、设备及存储介质。其中,该方法由区块链网络中的节点执行,该方法包括:依据待写入SST磁盘存储文件的编号和可存储SST文件的当前目录路径数量,确定所述待写入SST文件的目录编号;通过原子操作将所述待写入SST文件存储于所述目录编号对应的目录路径下。本发明专利技术实施例提供的技术方案,保证了区块链数据写入的原子性,且通过优化底层KV存储,支持了多盘存储区块链数据。

【技术实现步骤摘要】
区块链数据存储方法、装置、设备及介质
本专利技术实施例涉及区块链
,尤其涉及一种区块链数据存储方法、装置、设备及存储介质。
技术介绍
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。常规区块链网络中,会由区块生成节点不断创建区块,添加到区块链尾部,形成一条区块链。区块添加到链上后,就不会被删除和修改。因此,随着时间的推移,区块链上的数据会越来越多,导致单块磁盘无法存储。当前,主流的区块链公链:比特币、以太坊的全节点存储空间都需要百GB规模,且每天以数GB的规模增长。常用的现有技术中,有一些方案是在每块盘放置一个KV(KeyValue)存储实例,在应用层依据待存储数据本身将数据写入到不同的KV存储实例;还有一些方案是通过做磁盘阵列的方式。然而,应用层分多KV实例的缺点是不同KV实例是独立的,无法保证区块链事务的写入原子性,可能会存在一个事务的不同操作数据的存储状态不同。磁盘阵列的方式的缺点有2个:首先,软件阵列方案最多只支持16TB的存储容量;其次,磁盘阵列的方案无法做到动态地扩容,需要停止服务,重做磁盘阵列。
技术实现思路
本专利技术实施例提供了一种区块链数据存储方法、装置、设备及存储介质,能够支持多盘存储区块链数据。第一方面,本专利技术实施例提供了一种区块链数据存储方法,由区块链网络中的节点执行,该方法包括:依据待写入SST磁盘存储文件的编号和可存储SST文件的当前目录路径数量,确定所述待写入SST文件的目录编号;通过原子操作将所述待写入SST文件存储于所述目录编号对应的目录路径下。第二方面,本专利技术实施例提供了一种区块链数据存储装置,配置于区块链网络中的节点中,该装置包括:待写目录编号确定模块,用于依据待写入SST磁盘存储文件的编号和可存储SST文件的当前目录路径数量,确定所述待写入SST文件的目录编号;写入模块,用于通过原子操作将所述待写入SST文件存储于所述目录编号对应的目录路径下。第三方面,本专利技术实施例还提供了一种设备,该设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现第一方面中任意所述的区块链数据存储方法。第四方面,本专利技术实施例还提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任意所述的区块链数据存储方法。本专利技术实施例提供的技术方案,通过待写入SST文件的编号和可存储SST文件的当前目录路径数量,得到待写入SST文件的目录编号;并通过LevelDB的原子操作,将该待写入SST文件整体存储在目标编号对应的目标路径下。保证了区块链数据写入的原子性,且通过优化底层KV存储,支持了多盘存储区块链数据。附图说明图1A是本专利技术实施例一中提供的一种区块链数据存储方法的流程图;图1B是本专利技术实施例所适用的区块链数据存储示意图;图2是本专利技术实施例二中提供的一种区块链数据存储方法的流程图;图3是本专利技术实施例三中提供的一种区块链数据存储方法的流程图;图4是本专利技术实施例四中提供的一种区块链数据存储装置的结构框图;图5是本专利技术实施例五中提供的一种设备的结构示意图。具体实施方式下面结合附图和实施例对本专利技术实施例作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本专利技术实施例,而非对本专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本专利技术实施例相关的部分而非全部结构。实施例一图1A为本专利技术实施例一提供的一种区块链数据存储方法的流程图,本实施例适用于基于LSM-Tree的数据库的存储引擎,例如LevelDB存储引擎或RocksDB存储引擎,对区块链数据进行存储的情况,为了便于表述后续以LevelDB存储引擎为例进行说明。本专利技术实施例的方案应用于区块链网络中的节点,该方法可以由本专利技术实施例提供的区块链数据存储装置来执行,该装置可采用软件和/或硬件的方式实现,并可集成于承载区块链网络节点的计算设备中。参见图1A,该方法具体包括:S110,依据待写入SST文件的编号和可存储SST文件的当前目录路径数量,确定待写入SST文件的目录编号。其中,SST(SortedStringTable,排序字符串表)文件是基于LSM-Tree的存储引擎的数据文件的一种,是一种磁盘数据存储文件,可以划分为Level0到LevelN多层,如图1B所示,每一层包含多个SST文件,单个SST文件容量随层次增加成倍增长,文件内数据有序。其中Level0的SST文件由Immutable直接Dump产生,其他Level的SST文件由其上一层的文件和本层文件的重整归并产生。待写入SST文件是指需将本机节点内存中的SST文件存储至本机节点的磁盘中的SST文件。SST文件的编号是依据整数递增的形式编写的,且每个SST文件的编号均是唯一的,如可以按照1至N的顺序编写。例如某SST文件的编号为100db,则该SST文件的上一个SST文件和下一个SST文件分别为99db和101db。当前目录路径数量是指本机节点中当前可用于存储SST文件的磁盘数,如图1B中有disk-1至disk-NN个磁盘;目录编号是指磁盘编号,如disk-1至disk-N,可通过待写入SST文件的编号与可存储SST文件的当前目录路径数量做取余或取模等运算得到。可选的,依据待写入SST文件的编号和可存储SST文件的当前目录路径数量,确定待写入SST文件的目录编号可以是:采用待写入SST文件的编号对可存储SST文件的当前目录路径数量进行取余,依据余数得到待写入SST文件的目录编号。具体的,将待写入SST文件的编号对可存储SST文件的当前目录路径数量做取余运算后得到的余数作为待写入SST文件的目录编号。例如,待写入SST文件名是123451db,则可知待写入SST文件的编号为123451;而本机节点上当前有3块磁盘(disk-1、disk-2和disk-3)可用于存储SST文件,则当前目录路径数量为3;用待写入SST文件的编号123451对当前目录路径数量3取余,得到余数为1,因此确定待写入SST文件的目录编号为disk-1。S120,通过原子操作将待写入SST文件存储于目录编号对应的目录路径下。其中,原子操作是指不会被线程调度机制打断的操作。也就是说,原子操作是不可分割的,在执行完毕之前不会被任何其它任务或事件中断。目录路径即为具体的文件存储地址。具体的,通过LevelDB的原子操作,将待写入SST文件存储在目标编号对应的目标路径下,若待写入SST文件已全部存储于目录路径下,则在本机节点的清单文件中更新待写入SST文件的信息;否则,依据本机节点的日志文件中包括的待写入SST文件中的事务数据,重新对待写入SST文件执行写盘操作。需要说明的是,待写入SST文件中的事务数据中同一事务请求关联的各组事务数据(key-value)打包到同一批量中,且存储状态保持一致。需要说明的是,本实施例中SST文件中存储的数据可以包括区块链中的区块数据,也可以包括没有打包成区块的事务数据。由于现有的LevelDB在进行区块链数据存储时,是在LevelDB之外的应用层对待写入的“Key”即数据本身做取余运算的,可能会存在一个事务请求关联的不同事物数据本文档来自技高网...

【技术保护点】
1.一种区块链数据存储方法,其特征在于,由区块链网络中的节点执行,所述方法包括:依据待写入SST文件的编号和可存储SST文件的当前目录路径数量,确定所述待写入SST文件的目录编号;通过原子操作将所述待写入SST文件存储于所述目录编号对应的目录路径下。

【技术特征摘要】
1.一种区块链数据存储方法,其特征在于,由区块链网络中的节点执行,所述方法包括:依据待写入SST文件的编号和可存储SST文件的当前目录路径数量,确定所述待写入SST文件的目录编号;通过原子操作将所述待写入SST文件存储于所述目录编号对应的目录路径下。2.根据权利要求1所述的方法,其特征在于,依据待写入SST文件的编号和可存储SST文件的当前目录路径数量,确定所述待写入SST文件的目录编号之前,还包括:若检测到本机节点的内存中存储的事务数据满足写盘条件,则生成待写入SST文件,其中内存中存储的事务数据是将同一事务请求关联的各组事务数据打包到同一批量中形成的;或者,响应于对预先存储的SST文件的重建操作,生成待写入SST文件。3.根据权利要求1所述的方法,其特征在于,通过原子操作将所述待写入SST文件存储于所述目录编号对应的目录路径下之后,还包括:从本机节点的日志文件中删除成功写入所述目录路径下的SST文件对应的日志数据。4.根据权利要求3所述的方法,其特征在于,所述日志文件、本机节点的清单文件以及本机节点的最新清单指针文件存储于预设的元数据目录路径下。5.根据权利要求1所述的方法,其特征在于,依据待写入SST文件的编号和可存储SST文件的当前目录路径数量,确定所述待写入SST文件的目录编号,包括:若检测到可存储SST文件的目录路径扩容,则依据当前目录路径数量和扩容的目录路径数量,确定新的当前目录路径数量;依据待写入SST文件的编号和新的当前目录路径数量,确定所述待写入SS...

【专利技术属性】
技术研发人员:孙君意肖伟
申请(专利权)人:百度在线网络技术北京有限公司
类型:发明
国别省市:北京,11

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

1