CN109086388B - 区块链数据存储方法、装置、设备及介质 - Google Patents

区块链数据存储方法、装置、设备及介质 Download PDF

Info

Publication number
CN109086388B
CN109086388B CN201810836163.1A CN201810836163A CN109086388B CN 109086388 B CN109086388 B CN 109086388B CN 201810836163 A CN201810836163 A CN 201810836163A CN 109086388 B CN109086388 B CN 109086388B
Authority
CN
China
Prior art keywords
written
directory
file
sst file
sst
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.)
Active
Application number
CN201810836163.1A
Other languages
English (en)
Other versions
CN109086388A (zh
Inventor
孙君意
肖伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201810836163.1A priority Critical patent/CN109086388B/zh
Publication of CN109086388A publication Critical patent/CN109086388A/zh
Application granted granted Critical
Publication of CN109086388B publication Critical patent/CN109086388B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

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

Description

区块链数据存储方法、装置、设备及介质
技术领域
本发明实施例涉及区块链技术领域,尤其涉及一种区块链数据存储方法、装置、设备及存储介质。
背景技术
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
常规区块链网络中,会由区块生成节点不断创建区块,添加到区块链尾部,形成一条区块链。区块添加到链上后,就不会被删除和修改。因此,随着时间的推移,区块链上的数据会越来越多,导致单块磁盘无法存储。当前,主流的区块链公链:比特币、以太坊的全节点存储空间都需要百GB规模,且每天以数GB的规模增长。
常用的现有技术中,有一些方案是在每块盘放置一个KV(Key Value)存储实例,在应用层依据待存储数据本身将数据写入到不同的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(Sorted String Table,排序字符串表)文件是基于LSM-Tree的存储引擎的数据文件的一种,是一种磁盘数据存储文件,可以划分为Level 0到Level N多层,如图1B所示,每一层包含多个SST文件,单个SST文件容量随层次增加成倍增长,文件内数据有序。其中Level 0的SST文件由Immutable直接Dump产生,其他Level的SST文件由其上一层的文件和本层文件的重整归并产生。
待写入SST文件是指需将本机节点内存中的SST文件存储至本机节点的磁盘中的SST文件。SST文件的编号是依据整数递增的形式编写的,且每个SST文件的编号均是唯一的,如可以按照1至N的顺序编写。例如某SST文件的编号为100db,则该SST文件的上一个SST文件和下一个SST文件分别为99db和101db。
当前目录路径数量是指本机节点中当前可用于存储SST文件的磁盘数,如图1B中有disk-1至disk-N N个磁盘;目录编号是指磁盘编号,如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”即数据本身做取余运算的,可能会存在一个事务请求关联的不同事物数据的存储状态不同。例如,对于区块链中的一个事务交易数据,Alice给Bob转账,需要扣除Alice的币,然后转给Bob。这2个操作数据要么全部生效,要么全部失败,而现有的存储方式可能使得这两个操作数据分别存储在不同的数据库中,如果只生效了部分就会引起数据不一致,因此无法保证区块链数据写入的原子性。
而本实施例直接在LevelDB内部对待写入SST文件的编号做取余运算,并基于LSM-Tree的存储引擎的原子操作功能,将存储区块链中的事务数据的SST文件整体存储于某一目录编号对应的目录路径下,使得区块链数据存储的完整性,进而保证了区块链中事务数据写入的原子性。具体的,本实施例将会把Alice给Bob转账,需要扣除Alice的币,然后转给Bob,这2个操作数据同时存储在一个SST文件中,若该SST文件为待写入SST文件,则在LevelDB内部对该待写入SST文件的编号做取余运算,得到待写入SST文件的目录编号,通过LevelDB的原子操作,将该待写入SST文件整体存储在目标编号对应的目标路径下,从而保证了区块链数据存储的完整性,同时由于以SST文件为单位分散在多块磁盘上存储,扩展了区块链的存储容量。
本发明实施例提供的技术方案,通过待写入SST文件的编号和可存储SST文件的当前目录路径数量,得到待写入SST文件的目录编号;并通过LevelDB的原子操作,将该待写入SST文件整体存储在目标编号对应的目标路径下。保证了区块链数据写入的原子性,且通过优化底层KV存储,支持了多盘存储区块链数据。
实施例二
图2为本发明实施例二提供的一种区块链数据存储方法的流程图,本实施例在上述实施例的基础上进一步的优化。参见图2,该方法具体包括:
S210,若检测到本机节点的内存中存储的事务数据满足写盘条件,则生成待写入SST文件;或者,响应于对预先存储的SST文件的重建操作,生成待写入SST文件。
其中,内存中存储的事务数据是将同一事务请求关联的各组事务数据打包到同一批量中形成的,从而保证同一事务请求数据写入的原子性。写盘条件是指预先设置的内存中事务数据达到写入磁盘存储阈值的条件;存储阈值是预先设置的可根据实际情况进行修正,可以是存储容量,也可以是数据字节数等。如果本机节点是区块生成节点,事务数据包括区块数据和没有打包成区块的数据;如果本机节点是其他节点,事务数据是区块数据。
具体,若本机节点检测到本机节点的内存中存储的事务数据达到预设的写盘条件,则对内存中存储的事务数据进行打包压缩等操作后生成待写入SST文件。
重建操作是指由于预先存储SST文件的不同目录路径下的Level 0中数据存在交叉重叠,需重新对Level 0中数据整理的操作。例如,参见图1B所示,若Level 0这层中disk-1所包含的SST文件中的数据与disk-2所包含的SST文件中的数据存在交叉的现象时,后台数据服务器将生成重建操作指令,并发送至本机节点,本机节点则响应对预先存储的SST文件的重建操作,对Level 0中数据重新整理,生成待写入文件。示例性的,本机节点重新构建Level 0中的SST文件后,再依据重新存储的Level 0的SST文件依次重新构建Level 1至Level N的SST文件,最终降低了数据的重叠度。
具体的,本实施所提供的生成待写入SST文件的两种机制,若满足其中的任一项,则生成待写入SST文件,并执行后续待写入SST文件写入目录路径的操作。
S220,依据待写入SST文件的编号和可存储SST文件的当前目录路径数量,确定待写入SST文件的目录编号。
S230,通过原子操作将待写入SST文件存储于目录编号对应的目录路径下。
S240,从本机节点的日志文件中删除成功写入目录路径下的SST文件对应的日志数据。
其中,日志文件即LOG文件,是指顺序记录所有LevelDB操作,并用于在机器宕机或内存数据丢失时恢复数据的文件,是一种临时文件。
需要说明的是,基于LSM-Tree的存储引擎的数据所有的写入操作最先存储在日志文件中,从而确保了写入的持久性和原子性。便于提供高效的查询,数据会被整理到SST文件中,当数据整理到SST文件后,日志文件中对应的部分就可丢弃。
具体的,若本机节点检测到待写入SST文件成功写入待写入SST文件的目录编号对应的目录路径下,则从日志文件中删除SST文件对应的日志数据,可释放内存存储空间。可选的,若检测到待写入SST文件未成功写入待写入SST文件的目录编号对应的目录路径下,则重新执行写入操作直至成功写入为止。
示例性的,本机节点的日志文件、本机节点的清单文件以及本机节点的最新清单指针文件存储于预设的元数据目录路径下。
其中,清单文件即Manifest文件,是指用于记录SST各个文件的管理信息的文件;管理信息是指管理SST文件的信息,如某个SST文件属于哪个Level、文件名称是什么、最小Key和最大Key各自是多少等。最新清单指针文件即为Current文件,用于记载当前的Manifest文件名。元数据目录路径是指预先设置的专门用于存储本机节点LevelDB中日志文件、清单文件及最新清单指针文件三个元数据的文件。
需要说明的是,为了便于统筹管理多个LevelDB,本实施例中本机节点中的用于存储SST文件的多个目录路径共用一个日志文件、清单文件及最新清单指针文件。例如,图1B中的disk-1至disk-N N个磁盘共用disk0元数据目标路径下的LOG文件、Manifest文件和Current文件。
本发明实施例提供的技术方案,通过待写入SST文件的编号和可存储SST文件的当前目录路径数量,得到待写入SST文件的目录编号;并通过LevelDB的原子操作,将该待写入SST文件整体存储在目标编号对应的目标路径下。保证了区块链数据写入的原子性,且通过优化底层KV存储,支持了多盘存储区块链数据。
实施例三
图3为本发明实施例三提供的一种区块链数据存储方法的流程图,本实施例在上述实施例的基础上,进一步对依据待写入SST磁盘存储文件的编号和可存储SST文件的当前目录路径数量,确定待写入SST文件的目录编号的进行解释说明。参见图3,该方法具体包括:
S310,若检测到可存储SST文件的目录路径扩容,则依据当前目录路径数量和扩容的目录路径数量,确定新的当前目录路径数量。
其中,目录路径扩容是指本机节点中可用于存储SST文件的目录路径增加。具体的,若当前的目录路径数量为N,扩容的目录路径数量为M,则新的当前目录路径数量为N+M。
S320,依据待写入SST文件的编号和新的当前目录路径数量,确定待写入SST文件的目录编号。
具体的,可采用待写入SST文件的编号对新的当前目录路径数量进行取余,依据余数得到待写入SST文件的目录编号。
S330,通过原子操作将待写入SST文件存储于目录编号对应的目录路径下。
若目录路径不存在扩容,则要读取已存入目录路径下的SST文件的数据,可依据待读SST文件的编号和当前目录路径数量,确定待读SST文件的目录编号,从待读目录编号对应的目录路径下直接读取待读SST文件的数据。示例性的,若检测到可存储SST文件的目录路径扩容,则依据当前目录路径数量和扩容的目录路径数量,确定新的当前目录路径数量之后,还可以包括:
A、依据待读SST文件的编号和新的当前目录路径数量,确定待读目录编号。
具体的,待读目录标号的确定步骤与待写入SST文件的目录编号的确定步骤可以相同,如可采用待读SST文件的编号对新的当前目录路径数量进行取余,依据余数得到待读目录编号;也可以采用其他能够准确确定待读目录编号的方式。
B、若待读目录编号对应的目录路径下存在待读SST文件,则从待读目录编号对应的目录路径下获取待读SST文件的数据;否则,遍历各其他目录路径直到读取待读SST文件的数据为止。
具体的,由于取余底数发生了变化,因此可能存在先前写入该待读SST文件的目录编号,与采用待读SST文件的编号对新的当前目录路径数量进行取余,依据余数得到的待读目录编号不同。若不同,则待读目录编号对应的目录路径下不存在待读SST文件,由于读操作并不是频繁操作,且SST文件的编号是唯一且递增的,因此可通过遍历各其他目录路径直至读取到待读SST文件的数据为止;若相同,则待读目录编号对应的目录路径下存在待读SST文件,可直接在该目录路径下读取待读SST文件的数据。
例如,当前目录路径数量为3,扩容的目录路径数量为1,则新的当前目录路径数量为4。若一个SST文件的编号为123451,则可知该SST文件存储在在disk-1磁盘中的文件夹下;而依据待读SST文件的编号123451对新的当前目录路径取余,得到的余数为3,因此确定待读目录编号为disk-3。由于在该待读目录编号对应的目录路径下查找不到待读SST文件,需遍历另外三个目录路径disk-1、disk-2和disk-4进行查找,直至在disk-1中读取到该待读SST文件的数据为止。
本发明实施例提供的技术方案,在本机节点检测到可存储SST文件的目录路径扩容时,将依据当前目录路径数量和扩容的目录路径数量确定新的当前目录路径数量;通过待写入SST文件的编号和新的当前目录路径数量,得到待写入SST文件的目录编号;并通过LevelDB的原子操作,将该待写入SST文件整体存储在目标编号对应的目标路径下。保证了区块链数据写入的原子性,且通过优化底层KV存储,支持了多盘存储区块链数据,且可以动态扩容。
实施例四
图4为本发明实施例四提供的一种区块链数据存储装置的结构框图,该装置配置于区块链系统中的节点中,可执行本发明任意实施例所提供的区块链数据存储方法,具备执行方法相应的功能模块和有益效果。如图4所示,该装置可以包括:
待写目录编号确定模块410,用于依据待写入SST文件的编号和可存储SST文件的当前目录路径数量,确定待写入SST文件的目录编号;
写入模块420,用于通过原子操作将待写入SST文件存储于目录编号对应的目录路径下。
本发明实施例所提供的技术方案,通过待写入SST文件的编号和可存储SST文件的当前目录路径数量,得到待写入SST文件的目录编号;并通过LevelDB的原子操作,将该待写入SST文件整体存储在目标编号对应的目标路径下。保证了区块链数据写入的原子性,且通过优化底层KV存储,支持了多盘存储区块链数据。
示例性的,该装置还可以包括:
文件写入模块,用于在依据待写入SST文件的编号和可存储SST文件的当前目录路径数量,确定待写入SST文件的目录编号之前,若检测到本机节点的内存中存储的事务数据满足写盘条件,则生成待写入SST文件,其中内存中存储的事务数据是将同一事务请求关联的各组事务数据打包到同一批量中形成的;或者,响应于对预先存储的SST文件的重建操作,生成待写入SST文件。
示例性的,该装置还可以包括:
日志数据删除模块,用于在通过原子操作将待写入SST文件存储于目录编号对应的目录路径下之后,从本机节点的日志文件中删除成功写入目录路径下的SST文件对应的日志数据。
需要说明的是,本实施例中的日志文件、本机节点的清单文件以及本机节点的最新清单指针文件存储于预设的元数据目录路径下。
示例性的,待写目录编号确定模块410,还用于:
若检测到可存储SST文件的目录路径扩容,则依据当前目录路径数量和扩容的目录路径数量,确定新的当前目录路径数量;依据待写入SST文件的编号和新的当前目录路径数量,确定待写入SST文件的目录编号。
示例性的,上述装置还可以包括:
待读目标编号确定模块,用于在依据当前目录路径数量和扩容的目录路径数量,确定新的当前目录路径数量之后,依据待读SST文件的编号和新的当前目录路径数量,确定待读目录编号;
待读文件数据读取模块,用于若待读目录编号对应的目录路径下存在待读SST文件,则从待读目录编号对应的目录路径下获取待读SST文件的数据;否则,遍历各其他目录路径直到读取待读SST文件的数据为止。
示例性的,待写目录编号确定模块410,还可以用于:
采用待写入SST文件的编号对可存储SST文件的当前目录路径数量进行取余,依据余数得到待写入SST文件的目录编号。
实施例五
图5为本发明实施例五提供的一种设备的结构示意图,图5示出了适于用来实现本发明实施例实施方式的示例性设备的框图。图5显示的设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。设备12典型的是承担区块链系统节点功能的计算设备。
如图5所示,设备12以通用计算设备的形式表现。设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图5未显示,通常称为“硬盘驱动器”)。尽管图5中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。系统存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明实施例各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如系统存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明实施例所描述的实施例中的功能和/或方法。
设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该设备12交互的设备通信,和/或与使得该设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与设备12的其它模块通信。应当明白,尽管图中未示出,可以结合设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的区块链数据存储方法。
实施例六
本发明实施例六还提供一种计算机可读存储介质,其上存储有计算机程序(或称为计算机可执行指令),该程序被处理器执行时用于执行一种区块链数据存储方法,该方法包括:
依据待写入SST文件的编号和可存储SST文件的当前目录路径数量,确定所述待写入SST文件的目录编号;
通过原子操作将所述待写入SST文件存储于所述目录编号对应的目录路径下。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明实施例操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明实施例进行了较为详细的说明,但是本发明实施例不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (10)

1.一种区块链数据存储方法,其特征在于,由区块链网络中的节点执行,所述方法包括:
依据本机节点内存中待写入SST文件的编号,和本机节点中可存储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文件的编号和新的当前目录路径数量,确定所述待写入SST文件的目录编号。
6.根据权利要求5所述的方法,其特征在于,依据当前目录路径数量和扩容的目录路径数量,确定新的当前目录路径数量之后,还包括:
依据待读SST文件的编号和新的当前目录路径数量,确定待读目录编号;
若待读目录编号对应的目录路径下存在所述待读SST文件,则从所述待读目录编号对应的目录路径下获取所述待读SST文件的数据;否则,遍历各其他目录路径直到读取待读SST文件的数据为止。
7.根据权利要求1所述的方法,其特征在于,依据待写入SST文件的编号和可存储SST文件的当前目录路径数量,确定所述待写入SST文件的目录编号,包括:
采用所述待写入SST文件的编号对可存储SST文件的当前目录路径数量进行取余,依据余数得到所述待写入SST文件的目录编号。
8.一种区块链数据存储装置,其特征在于,配置于区块链网络中的节点中,所述装置包括:
待写目录编号确定模块,用于依据本机节点内存中待写入SST文件的编号,和本机节点中可存储SST文件的磁盘的当前目录路径数量,确定所述待写入SST文件在本机节点磁盘中的目录编号;
写入模块,用于通过原子操作将本机节点内存中的所述待写入SST文件,存储于本机节点中所述目录编号对应的目录路径磁盘下;
其中,同一事务请求关联的各组事务数据存储在同一所述待写入SST文件中。
9.一种计算机设备,其特征在于,所述计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一项所述的区块链数据存储方法。
10.一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一项所述的区块链数据存储方法。
CN201810836163.1A 2018-07-26 2018-07-26 区块链数据存储方法、装置、设备及介质 Active CN109086388B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810836163.1A CN109086388B (zh) 2018-07-26 2018-07-26 区块链数据存储方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810836163.1A CN109086388B (zh) 2018-07-26 2018-07-26 区块链数据存储方法、装置、设备及介质

Publications (2)

Publication Number Publication Date
CN109086388A CN109086388A (zh) 2018-12-25
CN109086388B true CN109086388B (zh) 2020-12-29

Family

ID=64830931

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810836163.1A Active CN109086388B (zh) 2018-07-26 2018-07-26 区块链数据存储方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN109086388B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111382123B (zh) * 2018-12-28 2023-06-16 广州市百果园信息技术有限公司 文件存储方法、装置、设备及存储介质
CN110515957A (zh) * 2019-09-02 2019-11-29 深圳市网心科技有限公司 一种区块链数据存储的方法、系统、设备及可读存储介质
SG11202002588RA (en) 2019-09-12 2020-04-29 Alibaba Group Holding Ltd Log-structured storage systems
SG11202002021WA (en) * 2019-09-12 2020-04-29 Alibaba Group Holding Ltd Log-structured storage systems
CN115398874A (zh) * 2019-09-12 2022-11-25 创新先进技术有限公司 日志结构存储系统
US10942852B1 (en) 2019-09-12 2021-03-09 Advanced New Technologies Co., Ltd. Log-structured storage systems
CN111769946B (zh) * 2020-05-08 2022-08-19 贵阳信息技术研究院(中科院软件所贵阳分部) 一种面向联盟链的大规模节点扩容方法
CN111737261B (zh) * 2020-06-24 2023-09-22 山东大学 基于LSM-Tree的压缩日志缓存方法及装置
CN112463447B (zh) * 2020-11-25 2022-12-23 浪潮云信息技术股份公司 一种基于分布式数据库实现物理备份的优化方法
CN113032356B (zh) * 2021-03-31 2023-05-26 中电科航空电子有限公司 一种客舱分布式文件存储系统及实现方法
CN113688099B (zh) * 2021-08-09 2023-10-13 上海沄熹科技有限公司 基于spdk的数据库存储引擎加速方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105447000A (zh) * 2014-07-31 2016-03-30 阿里巴巴集团控股有限公司 一种事务消息的传输方法和设备
CN107844363A (zh) * 2017-10-27 2018-03-27 东软集团股份有限公司 业务事务处理方法、装置、存储介质及设备
CN107992356A (zh) * 2017-12-13 2018-05-04 上海壹账通金融科技有限公司 区块链事务区块处理方法、电子装置及可读存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103744628B (zh) * 2014-01-27 2016-09-28 北京奇虎科技有限公司 SSTable文件存储方法及装置
CN105187489A (zh) * 2015-08-05 2015-12-23 深圳联友科技有限公司 可集群并支持多用户同时上传的文件传输方法和系统
CN105573828B (zh) * 2015-12-17 2019-04-12 布比(北京)网络技术有限公司 一种操作处理方法及装置
CN105630609B (zh) * 2016-02-24 2021-05-11 杭州复杂美科技有限公司 区块链的打包存储方法
KR101781583B1 (ko) * 2016-08-31 2017-09-27 서강대학교산학협력단 블록체인을 기반으로 한 파일 관리/검색 시스템 및 파일 관리/검색 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105447000A (zh) * 2014-07-31 2016-03-30 阿里巴巴集团控股有限公司 一种事务消息的传输方法和设备
CN107844363A (zh) * 2017-10-27 2018-03-27 东软集团股份有限公司 业务事务处理方法、装置、存储介质及设备
CN107992356A (zh) * 2017-12-13 2018-05-04 上海壹账通金融科技有限公司 区块链事务区块处理方法、电子装置及可读存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"基于Leveldb的企业级大数据集群化存储设计与实现";秦峥惠;《中国优秀硕士学位论文全文数据库 信息科技辑》;20160315(第3期);I138-5581 *

Also Published As

Publication number Publication date
CN109086388A (zh) 2018-12-25

Similar Documents

Publication Publication Date Title
CN109086388B (zh) 区块链数据存储方法、装置、设备及介质
US10891264B2 (en) Distributed, scalable key-value store
US10296518B2 (en) Managing distributed deletes in a replicated storage system
US10970173B2 (en) Logging process in a data storage system
US10310904B2 (en) Distributed technique for allocating long-lived jobs among worker processes
US9514139B2 (en) Space efficient cascading point in time copying
US11392567B2 (en) Just-in-time multi-indexed tables in a shared log
CN111177143B (zh) 键值数据存储方法、装置、存储介质与电子设备
JP6445049B2 (ja) ログの管理方法及び計算機システム
US9619322B2 (en) Erasure-coding extents in an append-only storage system
US9898468B2 (en) Single pass file system repair with copy on write
KR20120082176A (ko) 데이터베이스 관리 시스템의 데이터 처리 방법 및 시스템
US20200142784A1 (en) Method, device and computer program product for recovering metadata
US11768741B2 (en) Replicating changes written by a transactional virtual storage access method
US7949632B2 (en) Database-rearranging program, database-rearranging method, and database-rearranging apparatus
US10942912B1 (en) Chain logging using key-value data storage
US11132401B1 (en) Distributed hash table based logging service
US11556519B2 (en) Ensuring integrity of records in a not only structured query language database
US10976959B2 (en) Method and system for accessing virtual machine state while virtual machine restoration is underway
US9967310B2 (en) Using an RPC framework to facilitate out-of-band data transfers
US11099948B2 (en) Persistent storage segment caching for data recovery
TWI475419B (zh) 用於在儲存系統上存取檔案的方法和系統
CN116186033A (zh) 数据归档方法、系统、设备及存储介质
CN115203200A (zh) 一种数据库表结构变更的方法、装置、设备及存储介质

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