CN112579602B - 多版本数据存储方法、装置、计算机设备及存储介质 - Google Patents
多版本数据存储方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN112579602B CN112579602B CN202011532673.3A CN202011532673A CN112579602B CN 112579602 B CN112579602 B CN 112579602B CN 202011532673 A CN202011532673 A CN 202011532673A CN 112579602 B CN112579602 B CN 112579602B
- Authority
- CN
- China
- Prior art keywords
- node
- tree
- data
- hash value
- version
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
- G06F16/2329—Optimistic concurrency control using versioning
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及区块链技术领域,公开了一种多版本数据存储方法、装置、计算机设备及存储介质,其方法包括:接收对MVB树的指定节点数据的修改指令;复制所述指定节点数据索引路径上的第一树节点数据,获得复制后的第二树节点数据;根据所述修改指令对所述第二树节点数据进行修改,根据不处于索引路径的节点数据和修改后的第二树节点数据生成MVB树的修改版本。本发明可以提高区块链数据的存储效率。
Description
技术领域
本发明涉及区块链技术领域,尤其涉及一种多版本数据存储方法、装置、计算机设备及存储介质。
背景技术
现有技术中,传统的默克尔B+树即在B+树的基础上加上计算节点哈希的过程,树的节点均存放在单个数据文件。而MPT(Merkle Patricia Tree,梅克尔帕特里夏树)则融合了前缀树与默克尔树的特点。MPT使用leveldb数据库(谷歌公司开发的一种数据库)存储数据,存在读放大写放大问题。另外,MPT按前缀索引,读取路径长,造成哈希计算次数多,影响访问性能。而且,数据存储过程中,频繁的编码解码,消耗了大量的计算资源,存储效率差。
发明内容
基于此,有必要针对上述技术问题,提供一种多版本数据存储方法、装置、计算机设备及存储介质,以解决现有区块链数据存储效率低的问题。
一种多版本数据存储方法,包括:
接收对MVB树的指定节点数据的修改指令;
复制所述指定节点数据索引路径上的第一树节点数据,获得复制后的第二树节点数据;
根据所述修改指令对所述第二树节点数据进行修改,根据不处于所述索引路径的节点数据和修改后的所述第二树节点数据生成所述MVB树的修改版本。
一种多版本数据存储装置,包括:
接收指令模块,用于接收对MVB树的指定节点数据的修改指令;
复制模块,用于复制所述指定节点数据索引路径上的第一树节点数据,获得复制后的第二树节点数据;
修改模块,用于根据所述修改指令对所述第二树节点数据进行修改,根据不处于所述索引路径的节点数据和修改后的所述第二树节点数据生成所述MVB树的修改版本。
一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机可读指令,所述处理器执行所述计算机可读指令时实现上述多版本数据存储方法。
一个或多个存储有计算机可读指令的可读存储介质,所述计算机可读指令被一个或多个处理器执行时,使得所述一个或多个处理器执行如上述多版本数据存储方法。
上述多版本数据存储方法、装置、计算机设备及存储介质,以复制的方式保存新修改的数据,形成MVB树结构的多版本数据,可以高速存储节点数据,而且MVB树的路径短,进行索引时IO次数少,效率大,大大减少了磁盘读写时间。此外,本发明还支持多版本数据与数据回滚,在稳定点才进行树的分裂与以及数据落盘(存入磁盘),减少磁盘时间与计算时间,存储时拆分内容数据(叶子节点的数据)与索引文件(非叶子节点的数据),分别采取不同的存储方式,实现更佳的存储性能,解决了区块链数据存储效率低的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例中多版本数据存储方法的一应用环境示意图;
图2是本发明一实施例中多版本数据存储方法的一流程示意图;
图3是本发明一实施例中MVB树进行复制修改时的结构示意图;
图4是本发明一实施例中多版本数据存储装置的一结构示意图;
图5是本发明一实施例中计算机设备的一示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本实施例提供的多版本数据存储方法,可应用在如图1的应用环境中,其中,客户端与服务端进行通信。其中,客户端包括但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。服务端可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一实施例中,如图2所示,提供一种多版本数据存储方法,以该方法应用在图1中的服务端为例进行说明,包括如下步骤S10-S30。
S10、接收对MVB树的指定节点数据的修改指令。
可理解地,MVB树(Multi-version verifiable)为默克尔B+树的一种变体。MVB树以默克尔B+树的结构存储了若干节点数据。指定节点数据为待修改的节点数据。修改指令可以指对节点数据进行修改的指令,包括但不限于增加节点、删除节点或者改变节点数据内容的指令。如图3所示,图3中的版本1为修改前的MVB树的结构,版本2为修改后的MVB树的结构。在版本1中,指定节点数据可以指节点C3。
S20、复制所述指定节点数据索引路径上的第一树节点数据,获得复制后的第二树节点数据。
可理解地,第一树节点数据可以包括指定节点数据的索引路径上多个节点数据。在图3的示例中,指定节点数据为节点C3,第一树节点数据包括A1、B3和C3。通过复制,获得的第二树节点数据为A2、B2和C2。其中,A1与A2对应、B3与B2对应、C3与C2对应。
S30、根据所述修改指令对所述第二树节点数据进行修改,根据不处于所述索引路径的节点数据和修改后的所述第二树节点数据生成所述MVB树的修改版本。
可理解地,可以根据修改指令对第二树节点数据进行修改,根据不处于索引路径的节点数据和修改后的第二树节点数据生成MVB树的修改版本生成MVB树的修改版本。在图3的示例中,通过修改指令,在节点C3增加了数据D1。修改后的第二树节点数据包括A2、B2和包含D1的C2。由于A2和B2的键值对列表与A1和B3相同,因而,不处于索引路径的节点数据B1及其子节点C1,节点数据C5也处于MVB树的修改版本中。需要注意的是,D1可以是节点C2中的新增数据,也可以是节点C2中的替换数据。例如,修改前,节点C2不包含数据D1,修改后,新增数据D1。又如,修改前,节点C2包含数据D2,修改后,D2替换为D1。
在本实施例提供的多版本数据存储方法中,以复制的方式保存新修改的数据,形成MVB树结构的多版本数据,可以高速存储节点数据,而且MVB树的路径短,进行索引时IO次数少,效率大,大大减少了磁盘读写时间。
可选的,步骤S30,即所述根据所述修改指令对所述第二树节点数据进行修改,根据不处于所述索引路径的节点数据和修改后的所述第二树节点数据生成所述MVB树的修改版本之后,还包括:
S40、当所述修改指令所属的事务结束时,判断所述事务是否达到稳定点;
S51、若所述事务未达到稳定点,所述MVB树进行内存提交,生成所述修改版本的根节点哈希值。
可理解的,修改指令是基于其所属的事务生成的。一个事务可以生成一个或多个修改指令。可以根据实际需要设置达到稳定点的条件。例如,当执行完毕的事务的个数达到预设值时,可视为事务达到稳定点。否则,则视为事务未达到稳定点。若事务未达到稳定点,MVB树进行内存提交,生成修改版本的根节点哈希值。内存提交指的是MVB树计算存储于内存中的修改版本的根节点哈希值的过程。
在稳定点前,若需要进行数据回滚,只需要将MVB树的当前树根节点设置为要回滚的树根,并清除维护多版本树根的内存列表即可。
可选的,步骤S51,即所述若所述事务未达到稳定点,所述MVB树进行内存提交,生成所述修改版本的根节点哈希值,包括:
S511、计算修改后的第二树节点数据的第一次级节点的哈希值,所述第一次级节点为所述修改版本的根节点的子节点;
S512、若存在不处于所述索引路径的次级节点,根据所述次级节点的哈希值和所述第一次级节点的哈希值计算所述修改版本的根节点哈希值,所述次级节点为所述修改版本的根节点的子节点。
可理解地,第一次级节点为修改版本的根节点的子节点。在图3的示例中,节点B2即为第一次级节点。节点C2的哈希值与节点C5的哈希值组成数组,计算该数组的哈希值,即为节点B2的哈希值。
不处于所述索引路径的次级节点的哈希值和第一次级节点的哈希值组成数组,计算该数组的哈希值,即为修改版本的根节点哈希值。在图3的示例中,节点A2为根节点,不处于所述索引路径的次级节点为节点B1,第一次级节点为节点B2。节点B1的哈希值与节点B2的哈希值组成数组,计算该数组的哈希值,即为修改版本的根节点A2的哈希值。
可理解地,步骤S511中,即所述计算修改后的第二树节点数据的第一次级节点的哈希值,包括:
S5111、根据所述第一次级节点的子节点计算所述第一次级节点的哈希值,若所述第一次级节点的子节点为叶子节点,根据所述叶子节点内存储的键值对计算所述叶子节点的哈希值。
可理解地,当第一次级节点的子节点为叶子节点时,可以将该子节点内存储的键值对组成数组,计算该数组的哈希值,即为叶子节点的哈希值。
可选的,步骤S511中,即所述计算修改后的第二树节点数据的第一次级节点的哈希值,包括:
S5111、根据所述第一次级节点的子节点计算所述第一次级节点的哈希值,若所述第一次级节点的子节点为非叶子节点,根据所述非叶子节点的子节点的哈希值计算所述非叶子节点的哈希值。
可理解地,当第一次级节点的子节点为非叶子节点时,可以将该非叶子节点的子节点的哈希值组成数据,计算该数组的哈希值,即为该非叶子节点的哈希值。
可选的,步骤S30,即所述根据所述修改指令对所述第二树节点数据进行修改,根据不处于所述索引路径的节点数据和修改后的所述第二树节点数据生成所述MVB树的修改版本之后,还包括:
S40、当所述修改指令所属的事务结束时,判断所述事务是否达到稳定点;
S52、若所述事务达到稳定点,所述MVB树进行磁盘提交,生成所述修改版本的根节点哈希值。
可理解的,修改指令是基于其所属的事务生成的。一个事务可以生成一个或多个修改指令。可以根据实际需要设置达到稳定点的条件。例如,当执行完毕的事务的个数达到预设值时,可视为事务达到稳定点。否则,则视为事务未达到稳定点。若事务达到稳定点,MVB树进行磁盘提交,生成修改版本的根节点哈希值。磁盘提交指的是MVB树计算存储于磁盘中的修改版本的根节点哈希值的过程。
由于修改版本在进行磁盘存储时,可能发生节点分裂,磁盘提交生成的根节点哈希值可能与内存提交生成的根节点哈希值存在差异。
可选的,步骤S52,即所述若所述事务达到稳定点,所述MVB树进行磁盘提交,生成所述修改版本的根节点哈希值,包括:
S521、计算所述修改版本的根节点哈希值;
S522、根据预设写入规则将所述修改版本的脏节点写入磁盘中,并将所述修改版本的根节点设置为所述MVB树的根节点。
本实施例中,可以分别计算修改版本各个节点的哈希值,组成数组,计算数组的哈希值,即为修改版本的根节点哈希值。
预设写入规则可以根据实际需要设置。在此处,预设写入规则可以规定不同类型节点数据对应不同的存储方式。脏节点指的是从指定节点数据(包括)至根节点(包括)上的任意一个节点。根据预设写入规则将修改版本的脏节点写入磁盘中时,所有脏节点都需要写入。在完成写入后,可以将修改版本的根节点设置为MVB树的根节点,而原来版本的根节点作为当前根节点的子节点。
可选的,步骤S521,即所述计算所述修改版本的根节点哈希值,包括:
S5211、获取修改后的第二树节点数据;
S5212、根据预设节点分裂方法对所述修改后的第二树节点数据进行分裂处理,生成分裂后的第二树节点数据;
S5213、计算所述分裂后的第二树节点数据的第二次级节点的哈希值,所述第二次级节点为所述修改版本的根节点的子节点;
S5214、若存在不处于所述索引路径的次级节点,根据所述次级节点的哈希值和所述第二次级节点的哈希值计算所述修改版本的根节点哈希值,所述次级节点为所述修改版本的根节点的子节点。
可理解地,在计算节点的哈希值前,需要判断是否需要对叶子节点进行分裂。若满足预设分裂条件,则需要对叶子进行分裂处理,形成若干个叶子节点。在一示例中,预设分裂条件可以是基于节点数据的列表长度决定的。当节点数据的列表长度超出预设阈值时,则需要进行分裂,若未超出,则不需要进行分裂。当所有叶子节点均不满足预设分裂条件时,则叶子节点分裂处理的流程完成。
同样的,当非叶子节点下的子叶节点超出预设节点数阈值时,需要对非叶子节点进行分裂。否则不需要进行分裂。
在完成节点分裂后,可以获得分裂后的第二树节点数据。可参照不进行分裂时计算修改版本的根节点哈希值的方法计算分裂后的修改版本的根节点哈希值,在此不再赘述。
可选的,步骤S5212,即所述根据预设节点分裂方法对所述修改后的第二树节点数据进行分裂处理,生成分裂后的第二树节点数据,包括:
S52121、判断指定叶子节点的键值对列表长度是否超出预设阈值;
S52122、若指定叶子节点的键值对列表长度超出预设阈值,则将所述指定叶子节点分裂为若干个键值对列表长度不超出所述预设阈值的分裂节点;
S52123、计算各个所述分裂节点的哈希值,并将所述各个所述分裂节点对应的键值对列表第一个键值插入到所述分裂节点的父节点中。
本实施例中,预设阈值可以根据实际需要进行设置。在一些示例中,不同层级的节点对应的预设阈值,可以相同,也可以不同。指定叶子节点可以是预设分裂条件的判断对象。而满足预设分裂条件,指的是指定叶子节点的键值对列表长度超出预设阈值。若满足预设分裂条件,则需将该指定叶子节点分裂为若干个键值对列表长度不超出预设阈值的分裂节点。然后将各个分裂节点对应的键值对列表的第一键值插入到分裂节点的父节点中。若不满足预设分裂条件,则不需要对指定叶子节点进行分裂。在一示例中,第一键值可以指分裂节点(叶子节点)的键值对列表的第一个键值(Key)。
键值插入完成之后,需要判断父节点的键值对列表长度是否超出预设阈值。若父节点的键值对列表长度超出预设阈值,则需要按照上述指定叶子节点的分裂方式进行节点分裂处理。在此不再赘述。当所有节点的键值对列表长度均不超出预设阈值,则表示节点分裂处理已经完成。
可选的,步骤S5213中,即所述计算所述分裂后的第二树节点数据的第二次级节点的哈希值,包括:
S52131、根据所述第二次级节点的子节点计算所述第二次级节点的哈希值,若所述第二次级节点的子节点为叶子节点,根据所述叶子节点内存储的键值对计算所述叶子节点的哈希值。
可理解地,可参照第一次级节点的哈希值的计算方式计算第二次级节点的哈希值,在此不再赘述。
可选的,步骤S5213中,即所述计算所述分裂后的第二树节点数据的第二次级节点的哈希值,包括:
S52132、根据所述第二次级节点的子节点计算所述第二次级节点的哈希值,若所述第二次级节点的子节点为非叶子节点,根据所述非叶子节点的子节点的哈希值计算所述非叶子节点的哈希值。
可理解地,可参照第一次级节点的哈希值的计算方式计算第二次级节点的哈希值,在此不再赘述。
可选的,步骤S522,即所述根据预设写入规则将所述修改版本的脏节点写入磁盘中之后,还包括:
S523、执行内存清理操作。
在此处,执行内存清理操作可以指清除维护多版本树根的内存列表。通过内存清理操作,可以减少计算资源的占用,提高MVB树的可访问性。
可选的,所述预设写入规则包括:
非叶子节点存储于单文件中,存储方式为缓存IO。
在此处,非叶子节点的占用空间往往小于叶子节点。可以将叶子节点存储在单文件中,以缓存IO(buffer IO)方式存储。在读取非叶子节点时,非叶子节点所在的文件可以直接映射到内存中。以单文件的存储方式、缓存IO的形式,使非叶子节点所在的文件缓存在内存中,提高了非叶子节点的访问性能。
可选的,所述预设写入规则包括:
叶子节点存储于多文件中,存储方式为直接IO。
在此处,叶子节点的占用空间大,无法将其全部存在内存中。因而可以采用直接IO(direct IO)的方式存储。只需要在读写时单,独读写某个磁盘页,只加载最近访问的一个或者多个叶子节点数据于内存中,减少内存占用,加快访问速度。
可选的,步骤S10,即所述接收对MVB树的指定节点数据的修改指令之前,还包括:
S101、新建事务;
S102、根据所述事务生成所述修改指令。
在此处,事务(transaction)是区块链的一种基本活动,可以表示一种交易操作,如资金侧的转账支付。新建事务表示一个事务的发生。一个事务可能触发一个或多个修改指令。
可选的,步骤S30,即所述根据所述修改指令对所述第二树节点数据进行修改,根据不处于所述索引路径的节点数据和修改后的所述第二树节点数据生成所述MVB树的修改版本之后,还包括:
S60、当所述修改指令所属的事务结束时,接收特定数据的证明请求;
S61、生成所述特定数据的默克尔证明,所述默克尔证明包括所述特定数据的数据节点以及所述修改版本的根节点的节点路径;
S62、根据所述默克尔证明计算所述特定数据的验证哈希值;
S63、当所述验证哈希值与所述根节点哈希值相等时,判定所述特定数据存储于所述MVB树中。
可理解地,步骤S60发生在步骤S51或S52之后。MVB树可以生成默克尔证明,来证明节点数据在数据库的可用性。默克尔证明包括特定数据所在的数据节点到修改版本(修改版本即为最新版本)根节点的节点路径。用户拿到默克尔证明后,可以根据该节点路径计算出一个验证哈希值,并与所述修改版本的根节点哈希值(即为事务生成的全局数据哈希摘要)进行比对,进而验证数据在数据库的可用性。当验证哈希值与根节点哈希值相等时,判定特定数据存储于MVB树中。当验证哈希值与根节点哈希值不相等时,判定特定数据不存储于MVB树中。
可选的,步骤S30,即所述根据所述修改指令对所述第二树节点数据进行修改,根据不处于所述索引路径的节点数据和修改后的所述第二树节点数据生成所述MVB树的修改版本,包括:
S301、将所述第二树节点数据的根节点设置为所述修改版本的根节点。
可理解地,MVB树的修改版本仅包含修改后的第二树节点数据,因而可以将第二树节点数据的根节点设置为修改版本的根节点。而对于不处于索引路径的节点(如图3中的B1及其子节点C1、C4),则保留原有的引用路径。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
在一实施例中,提供一种多版本数据存储装置,该多版本数据存储装置与上述实施例中多版本数据存储方法一一对应。如图4所示,该多版本数据存储装置包括接收指令模块10、复制模块20和修改模块30。各功能模块详细说明如下:
接收指令模块10,用于接收对MVB树的指定节点数据的修改指令;
复制模块20,用于复制所述指定节点数据索引路径上的第一树节点数据,获得复制后的第二树节点数据;
修改模块30,用于根据所述修改指令对所述第二树节点数据进行修改,根据不处于所述索引路径的节点数据和修改后的所述第二树节点数据生成所述MVB树的修改版本。
可选的,多版本数据存储装置还包括:
稳定点判断模块,用于当所述修改指令所属的事务结束时,判断所述事务是否达到稳定点;
内存提交模块,用于若所述事务未达到稳定点,所述MVB树进行内存提交,生成所述修改版本的根节点哈希值。
可选的,内存提交模块包括:
第一次级节点计算单元,用于计算修改后的第二树节点数据的第一次级节点的哈希值,所述第一次级节点为所述修改版本的根节点的子节点;
第一根节点哈希值计算单元,用于若存在不处于所述索引路径的次级节点,根据所述次级节点的哈希值和所述第一次级节点的哈希值计算所述修改版本的根节点哈希值,所述次级节点为所述修改版本的根节点的子节点。
可选的,第一次级节点计算单元包括:
第一叶子哈希计算单元,用于根据所述第一次级节点的子节点计算所述第一次级节点的哈希值,若所述第一次级节点的子节点为叶子节点,根据所述叶子节点内存储的键值对计算所述叶子节点的哈希值。
可选的,第一次级节点计算单元包括:
第一非叶子哈希计算单元,用于根据所述第一次级节点的子节点计算所述第一次级节点的哈希值,若所述第一次级节点的子节点为非叶子节点,根据所述非叶子节点的子节点的哈希值计算所述非叶子节点的哈希值。
可选的,多版本数据存储装置还包括:
稳定点判断模块,用于当所述修改指令所属的事务结束时,判断所述事务是否达到稳定点;
磁盘提交模块,用于若所述事务达到稳定点,所述MVB树进行磁盘提交,生成所述修改版本的根节点哈希值。
可选的,磁盘提交模块包括:
磁盘根哈希单元,用于计算所述修改版本的根节点哈希值;
磁盘写入单元,用于根据预设写入规则将所述修改版本的脏节点写入磁盘中,并将所述修改版本的根节点设置为所述MVB树的根节点。
可选的,磁盘根哈希单元包括:
获取修改数据单元,用于获取修改后的第二树节点数据;
节点分裂单元,用于根据预设节点分裂方法对所述修改后的第二树节点数据进行分裂处理,生成分裂后的第二树节点数据;
第二次级节点计算单元,用于计算所述分裂后的第二树节点数据的第二次级节点的哈希值,所述第二次级节点为所述修改版本的根节点的子节点;
第二根节点哈希值计算单元,用于若存在不处于所述索引路径的次级节点,根据所述次级节点的哈希值和所述第二次级节点的哈希值计算所述修改版本的根节点哈希值,所述次级节点为所述修改版本的根节点的子节点。
可选的,节点分裂单元包括:
阈值判断单元,用于判断指定叶子节点的键值对列表长度是否超出预设阈值;
分裂单元,用于若指定叶子节点的键值对列表长度超出预设阈值,则将所述指定叶子节点分裂为若干个键值对列表长度不超出所述预设阈值的分裂节点;
键值插入单元,用于计算各个所述分裂节点的哈希值,并将所述各个所述分裂节点对应的键值对列表第一个键值插入到所述分裂节点的父节点中。
可选的,第二次级节点计算单元包括:
第二叶子哈希计算单元,用于根据所述第二次级节点的子节点计算所述第二次级节点的哈希值,若所述第二次级节点的子节点为叶子节点,根据所述叶子节点内存储的键值对计算所述叶子节点的哈希值。
可选的,第二次级节点计算单元包括:
第二非叶子哈希计算单元,用于根据所述第二次级节点的子节点计算所述第二次级节点的哈希值,若所述第二次级节点的子节点为非叶子节点,根据所述非叶子节点的子节点的哈希值计算所述非叶子节点的哈希值。
可选的,磁盘提交模块还包括:
内存清理单元,用于执行内存清理操作。
可选的,所述预设写入规则包括:
非叶子节点存储于单文件中,存储方式为缓存IO。
可选的,所述预设写入规则包括:
叶子节点存储于多文件中,存储方式为直接IO。
可选的,多版本数据存储装置还包括:
建立事务单元,用于新建事务;
生成修改指令单元,用于根据所述事务生成所述修改指令。
可选的,多版本数据存储装置还包括:
接收证明请求单元,用于当所述修改指令所属的事务结束时,接收特定数据的证明请求;
默克尔证明单元,用于生成所述特定数据的默克尔证明,所述默克尔证明包括所述特定数据的数据节点以及所述修改版本的根节点的节点路径;
生成验证值单元,用于根据所述默克尔证明计算所述特定数据的验证哈希值;
证明单元,用于当所述验证哈希值与所述根节点哈希值相等时,判定所述特定数据存储于所述MVB树中。
可选的,修改模块30包括:
节点设置单元,用于将所述第二树节点数据的根节点设置为所述修改版本的根节点。
关于多版本数据存储装置的具体限定可以参见上文中对于多版本数据存储方法的限定,在此不再赘述。上述多版本数据存储装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括可读存储介质、内存储器。该可读存储介质存储有操作系统、计算机可读指令和数据库。该内存储器为可读存储介质中的操作系统和计算机可读指令的运行提供环境。该计算机设备的数据库用于存储多版本数据存储方法所涉及的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机可读指令被处理器执行时以实现一种多版本数据存储方法。本实施例所提供的可读存储介质包括非易失性可读存储介质和易失性可读存储介质。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可读指令,处理器执行计算机可读指令时实现以下步骤:
接收对MVB树的指定节点数据的修改指令;
复制所述指定节点数据索引路径上的第一树节点数据,获得复制后的第二树节点数据;
根据所述修改指令对所述第二树节点数据进行修改,根据不处于所述索引路径的节点数据和修改后的所述第二树节点数据生成所述MVB树的修改版本。
在一个实施例中,提供了一个或多个存储有计算机可读指令的计算机可读存储介质,本实施例所提供的可读存储介质包括非易失性可读存储介质和易失性可读存储介质。可读存储介质上存储有计算机可读指令,计算机可读指令被一个或多个处理器执行时实现以下步骤:
接收对MVB树的指定节点数据的修改指令;
复制所述指定节点数据索引路径上的第一树节点数据,获得复制后的第二树节点数据;
根据所述修改指令对所述第二树节点数据进行修改,根据不处于所述索引路径的节点数据和修改后的所述第二树节点数据生成所述MVB树的修改版本。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机可读指令来指令相关的硬件来完成,所述的计算机可读指令可存储于一非易失性可读取存储介质或易失性可读存储介质中,该计算机可读指令在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (12)
1.一种多版本数据存储方法,其特征在于,包括:
接收对MVB树的指定节点数据的修改指令;
复制所述指定节点数据索引路径上的第一树节点数据,获得复制后的第二树节点数据;
根据所述修改指令对所述第二树节点数据进行修改,根据不处于所述索引路径的节点数据和修改后的所述第二树节点数据生成所述MVB树的修改版本;
当所述修改指令所属的事务结束时,判断所述事务是否达到稳定点;
若所述事务未达到稳定点,所述MVB树进行内存提交,生成所述修改版本的根节点哈希值;内存提交指的是MVB树计算存储于内存中的修改版本的根节点哈希值的过程;
若所述事务达到稳定点,所述MVB树进行磁盘提交,生成所述修改版本的根节点哈希值;
所述若所述事务达到稳定点,所述MVB树进行磁盘提交,生成所述修改版本的根节点哈希值,包括:
计算所述修改版本的根节点哈希值;
根据预设写入规则将所述修改版本的脏节点写入磁盘中,并将所述修改版本的根节点设置为所述MVB树的根节点。
2.如权利要求1所述的多版本数据存储方法,其特征在于,所述若所述事务未达到稳定点,所述MVB树进行内存提交,生成所述修改版本的根节点哈希值,包括:
计算修改后的第二树节点数据的第一次级节点的哈希值,所述第一次级节点为所述修改版本的根节点的子节点;
若存在不处于所述索引路径的次级节点,根据所述次级节点的哈希值和所述第一次级节点的哈希值计算所述修改版本的根节点哈希值,所述次级节点为所述修改版本的根节点的子节点。
3.如权利要求2所述的多版本数据存储方法,其特征在于,所述计算修改后的第二树节点数据的第一次级节点的哈希值,包括:
根据所述第一次级节点的子节点计算所述第一次级节点的哈希值,若所述第一次级节点的子节点为叶子节点,根据所述叶子节点内存储的键值对计算所述叶子节点的哈希值;
根据所述第一次级节点的子节点计算所述第一次级节点的哈希值,若所述第一次级节点的子节点为非叶子节点,根据所述非叶子节点的子节点的哈希值计算所述非叶子节点的哈希值。
4.如权利要求1所述的多版本数据存储方法,其特征在于,所述计算所述修改版本的根节点哈希值,包括:
获取修改后的第二树节点数据;
根据预设节点分裂方法对所述修改后的第二树节点数据进行分裂处理,生成分裂后的第二树节点数据;
计算所述分裂后的第二树节点数据的第二次级节点的哈希值,所述第二次级节点为所述修改版本的根节点的子节点;
若存在不处于所述索引路径的次级节点,根据所述次级节点的哈希值和所述第二次级节点的哈希值计算所述修改版本的根节点哈希值,所述次级节点为所述修改版本的根节点的子节点。
5.如权利要求4所述的多版本数据存储方法,其特征在于,所述根据预设节点分裂方法对所述修改后的第二树节点数据进行分裂处理,生成分裂后的第二树节点数据,包括:
判断指定叶子节点的键值对列表长度是否超出预设阈值;
若指定叶子节点的键值对列表长度超出预设阈值,则将所述指定叶子节点分裂为若干个键值对列表长度不超出所述预设阈值的分裂节点;
计算各个所述分裂节点的哈希值,并将所述各个所述分裂节点对应的键值对列表第一个键值插入到所述分裂节点的父节点中。
6.如权利要求4所述的多版本数据存储方法,其特征在于,所述计算所述分裂后的第二树节点数据的第二次级节点的哈希值,包括:
根据所述第二次级节点的子节点计算所述第二次级节点的哈希值,若所述第二次级节点的子节点为叶子节点,根据所述叶子节点内存储的键值对计算所述叶子节点的哈希值;
根据所述第二次级节点的子节点计算所述第二次级节点的哈希值,若所述第二次级节点的子节点为非叶子节点,根据所述非叶子节点的子节点的哈希值计算所述非叶子节点的哈希值。
7.如权利要求1所述的多版本数据存储方法,其特征在于,所述预设写入规则包括:
非叶子节点存储于单文件中,存储方式为缓存IO;
叶子节点存储于多文件中,存储方式为直接IO。
8.如权利要求1所述的多版本数据存储方法,其特征在于,所述接收对MVB树的指定节点数据的修改指令之前,还包括:
新建事务;
根据所述事务生成所述修改指令。
9.如权利要求1或2所述的多版本数据存储方法,其特征在于,所述根据所述修改指令对所述第二树节点数据进行修改,根据不处于所述索引路径的节点数据和修改后的所述第二树节点数据生成所述MVB树的修改版本之后,还包括:
当所述修改指令所属的事务结束时,接收特定数据的证明请求;
生成所述特定数据的默克尔证明,所述默克尔证明包括所述特定数据的数据节点以及所述修改版本的根节点的节点路径;
根据所述默克尔证明计算所述特定数据的验证哈希值;
当所述验证哈希值与所述根节点哈希值相等时,判定所述特定数据存储于所述MVB树中。
10.一种多版本数据存储装置,其特征在于,包括:
接收指令模块,用于接收对MVB树的指定节点数据的修改指令;
复制模块,用于复制所述指定节点数据索引路径上的第一树节点数据,获得复制后的第二树节点数据;
修改模块,用于根据所述修改指令对所述第二树节点数据进行修改,根据不处于所述索引路径的节点数据和修改后的所述第二树节点数据生成所述MVB树的修改版本;
稳定点判断模块,用于当所述修改指令所属的事务结束时,判断所述事务是否达到稳定点;
内存提交模块,用于若所述事务未达到稳定点,所述MVB树进行内存提交,生成所述修改版本的根节点哈希值;内存提交指的是MVB树计算存储于内存中的修改版本的根节点哈希值的过程;
磁盘提交模块,用于若所述事务达到稳定点,所述MVB树进行磁盘提交,生成所述修改版本的根节点哈希值;
所述磁盘提交模块包括:
磁盘根哈希单元,用于计算所述修改版本的根节点哈希值;
磁盘写入单元,用于根据预设写入规则将所述修改版本的脏节点写入磁盘中,并将所述修改版本的根节点设置为所述MVB树的根节点。
11.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机可读指令,其特征在于,所述处理器执行所述计算机可读指令时实现如权利要求1至9中任一项所述多版本数据存储方法。
12.一个或多个存储有计算机可读指令的可读存储介质,所述计算机可读指令被一个或多个处理器执行时,使得所述一个或多个处理器执行如权利要求1至9中任一项所述多版本数据存储方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011532673.3A CN112579602B (zh) | 2020-12-22 | 2020-12-22 | 多版本数据存储方法、装置、计算机设备及存储介质 |
PCT/CN2020/139809 WO2022134128A1 (zh) | 2020-12-22 | 2020-12-28 | 多版本数据存储方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011532673.3A CN112579602B (zh) | 2020-12-22 | 2020-12-22 | 多版本数据存储方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112579602A CN112579602A (zh) | 2021-03-30 |
CN112579602B true CN112579602B (zh) | 2023-06-09 |
Family
ID=75138859
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011532673.3A Active CN112579602B (zh) | 2020-12-22 | 2020-12-22 | 多版本数据存储方法、装置、计算机设备及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN112579602B (zh) |
WO (1) | WO2022134128A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114153848A (zh) * | 2021-05-07 | 2022-03-08 | 支付宝(杭州)信息技术有限公司 | 区块链数据存储方法及装置、电子设备 |
CN112988909B (zh) * | 2021-05-07 | 2021-09-28 | 支付宝(杭州)信息技术有限公司 | 区块链数据存储方法及装置、电子设备 |
CN112988912B (zh) * | 2021-05-07 | 2021-11-02 | 支付宝(杭州)信息技术有限公司 | 区块链数据存储方法及装置、电子设备 |
CN114356927A (zh) * | 2021-12-31 | 2022-04-15 | 杭州趣链科技有限公司 | 数据存储方法、装置、计算机设备和存储介质 |
CN116069788B (zh) * | 2023-03-24 | 2023-06-20 | 杭州趣链科技有限公司 | 数据处理方法、数据库系统、计算机设备和存储介质 |
CN116627920B (zh) * | 2023-07-24 | 2023-11-07 | 华能信息技术有限公司 | 一种基于工业互联网的数据存储方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1522409A (zh) * | 2001-06-09 | 2004-08-18 | 存储交易株式会社 | 用于数据库系统的考虑了高速缓存的并行控制方案 |
CN105868396A (zh) * | 2016-04-19 | 2016-08-17 | 上海交通大学 | 内存文件系统的多版本控制方法 |
CN109992998A (zh) * | 2019-03-31 | 2019-07-09 | 杭州复杂美科技有限公司 | 一种信息存储方法和系统、设备及存储介质 |
CN110109927A (zh) * | 2019-04-25 | 2019-08-09 | 上海新炬网络技术有限公司 | 基于LSM树的Oracle数据库数据处理方法 |
CN111475508A (zh) * | 2020-03-31 | 2020-07-31 | 浙江大学 | 一种优化叶子节点合并操作的高效索引方法 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8412689B2 (en) * | 2010-07-07 | 2013-04-02 | Microsoft Corporation | Shared log-structured multi-version transactional datastore with metadata to enable melding trees |
US8768977B2 (en) * | 2012-07-31 | 2014-07-01 | Hewlett-Packard Development Company, L.P. | Data management using writeable snapshots in multi-versioned distributed B-trees |
CN103518364B (zh) * | 2013-03-19 | 2016-03-09 | 华为技术有限公司 | 分布式存储系统的数据更新方法及服务器 |
US10614055B2 (en) * | 2016-12-29 | 2020-04-07 | Emc Ip Holding Cimpany Llc | Method and system for tree management of trees under multi-version concurrency control |
CN109325022B (zh) * | 2018-07-20 | 2021-04-27 | 新华三技术有限公司 | 一种数据处理方法和装置 |
CN109690522B (zh) * | 2018-08-27 | 2024-02-27 | 袁振南 | 一种基于b+树索引的数据更新方法、装置及存储装置 |
CN110688377B (zh) * | 2019-08-30 | 2020-07-17 | 阿里巴巴集团控股有限公司 | 一种更新状态默克树的方法及装置 |
CN110602239B (zh) * | 2019-09-20 | 2023-09-19 | 腾讯科技(深圳)有限公司 | 一种区块链信息存储方法及相关设备 |
CN111324613B (zh) * | 2020-03-13 | 2021-03-26 | 华东师范大学 | 一种面向联盟链的分片内数据组织管理方法 |
CN111444535B (zh) * | 2020-03-20 | 2024-01-26 | 苏州链原信息科技有限公司 | 用于生成聚合数据标签的方法、设备及计算机存储介质 |
CN111444542A (zh) * | 2020-03-30 | 2020-07-24 | 陈兴芜 | 一种针对版权文件的数据处理方法、装置及存储介质 |
CN111930309A (zh) * | 2020-07-31 | 2020-11-13 | 中国人民解放军海军工程大学 | 基于数据分块技术的文件循环存储方法和装置 |
CN112035491B (zh) * | 2020-09-30 | 2021-12-28 | 中山大学 | 基于区块链的数据存储方法、电子积分处理方法及系统 |
-
2020
- 2020-12-22 CN CN202011532673.3A patent/CN112579602B/zh active Active
- 2020-12-28 WO PCT/CN2020/139809 patent/WO2022134128A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1522409A (zh) * | 2001-06-09 | 2004-08-18 | 存储交易株式会社 | 用于数据库系统的考虑了高速缓存的并行控制方案 |
CN105868396A (zh) * | 2016-04-19 | 2016-08-17 | 上海交通大学 | 内存文件系统的多版本控制方法 |
CN109992998A (zh) * | 2019-03-31 | 2019-07-09 | 杭州复杂美科技有限公司 | 一种信息存储方法和系统、设备及存储介质 |
CN110109927A (zh) * | 2019-04-25 | 2019-08-09 | 上海新炬网络技术有限公司 | 基于LSM树的Oracle数据库数据处理方法 |
CN111475508A (zh) * | 2020-03-31 | 2020-07-31 | 浙江大学 | 一种优化叶子节点合并操作的高效索引方法 |
Non-Patent Citations (1)
Title |
---|
以B链树为索引的动态多版本数据库的并发控制;包斌;计算机应用;第26卷(第1期);220-233 * |
Also Published As
Publication number | Publication date |
---|---|
WO2022134128A1 (zh) | 2022-06-30 |
CN112579602A (zh) | 2021-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112579602B (zh) | 多版本数据存储方法、装置、计算机设备及存储介质 | |
TWI735545B (zh) | 一種模型的訓練方法和裝置 | |
CN112559529B (zh) | 数据存储方法、装置、计算机设备及存储介质 | |
US10331641B2 (en) | Hash database configuration method and apparatus | |
US11604608B2 (en) | Blockchain transaction processing systems and methods | |
CN109446114B (zh) | 一种空间数据缓存方法、装置和存储介质 | |
WO2020093501A1 (zh) | 文件存储方法、删除方法、服务器及存储介质 | |
CN112785408A (zh) | 基于哈希的对账方法及装置 | |
CN110633378A (zh) | 一种支持超大规模关系网络的图数据库构建方法 | |
WO2021051782A1 (zh) | 区块链的共识方法、装置及设备 | |
WO2022061878A1 (en) | Blockchain transaction processing systems and methods | |
CN112368682A (zh) | 使用高速缓存用于内容验证和错误补救 | |
CN115952195A (zh) | 一种区块链数据溯源查询优化方法 | |
CN111984204A (zh) | 一种数据读写方法、装置及电子设备和存储介质 | |
CN109388651B (zh) | 一种数据处理方法和装置 | |
CN114138792A (zh) | 一种Key-value分离存储方法及系统 | |
WO2022087837A1 (en) | Blockchain system having efficient world state data structures | |
WO2022087834A1 (en) | Blockchain system having efficient world state data structures | |
CN112965939A (zh) | 一种文件合并方法、装置和设备 | |
CN111291083A (zh) | 网页源码数据处理方法、装置及计算机设备 | |
CN115794819A (zh) | 一种数据写入方法及电子设备 | |
US11500845B2 (en) | Blockchain transaction processing systems and methods | |
WO2020238736A1 (zh) | 一种生成解码矩阵的方法、解码方法和对应装置 | |
CN112487111A (zh) | 基于kv数据库的数据表关联方法及装置 | |
US10795875B2 (en) | Data storing method using multi-version based data structure |
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 |