一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于索引的链上数据查询方法及装置与流程

2022-02-20 03:17:48 来源:中国专利 TAG:


1.本发明涉及数据检索、区块链、计算机等技术领域,具体是一种基于索引的链上数据查询方法及装置。


背景技术:

2.区块链技术是信息技术领域的一项新兴技术,它是由包括分布式数据存储、密码技术等多项技术融合而成的信息技术,具有去中心化、开放性、不可篡改等特性。由于去中心化应用的日益繁荣,区块链受到了广泛的关注,对区块链中的数据查询需求也越来越大。区块链技术的分布式存储以及数据不可篡改的特性非常适用于设计数据的安全共享以及可靠追溯方案。对于传统区块链而言,其在执行数据查询操作时需分两步执行,首先顺序遍历区块链中现有的所有区块;然后针对每一个区块扫描其内部所有的数据记录,判断每个数据记录是否满足查询要求。显然,这种数据查询方式效率十分低下,难以满足数据共享、数据溯源等数据查询频繁的区块链应用场景。
3.当前在有关区块链技术的应用中,国内外大部分研究都集中于利用区块链现有特性解决具体场景下数据共享或溯源存在的公平共享和可靠存储问题,鲜有文献致力于研究区块链共享平台中数据查询或数据检索效率低下问题。
4.因此,如何针对传统区块链数据查询效率低下问题,实现对区块链上数据的快速高效查询和溯源,是一个有待解决的问题。


技术实现要素:

5.针对现有技术中存在的问题,本发明的目的在于提供一种基于索引的链上数据查询方法及装置,以实现对链上数据(如原始数据及其历史操作记录)的快速高效查询和溯源。
6.本发明的一个方面,提供了一种基于索引的链上数据查询方法,该方法包括以下步骤:
7.原始数据上链步骤,用于为每个待上链原始数据提取数据摘要,为提取的数据摘要构建或更新摘要字典树索引,将待上链数据摘要及构建的摘要字典树索引打包成区块结构并进行上链处理,其中,所述摘要字典树是以分布在不同区块中的上链数据摘要的哈希值作为键值来构建的;
8.数据操作记录产生及上链步骤,用于为原始数据操作构造数据操作记录,为构造的数据操作记录构建或更新数据操作记录链索引,将数据操作记录及数据操作记录链索引打包成区块结构并进行上链处理,其中,所述数据操作记录链被设计为将同一数据的所有操作记录以链式结构进行链接,并且所述数据操作记录链的首节点地址被存储在所述摘要字典树中的对应节点中;
9.原始数据查询步骤,用于在接收到用户的原始数据查询请求后从中提取待查数据摘要的哈希值,从区块链网络最新区块中获取最新的摘要字典树根结点,通过执行摘要字
典树检索获取摘要存储地址,依据获取的存储地址获取数据摘要并通过解析并访问该数据摘要中原始数据的访问地址获取原始数据;以及
10.数据操作记录查询步骤,用于在接收到用户的数据操作记录查询请求后从中提取关联的数据摘要哈希值,从区块链网络最新区块中获取最新的摘要字典树根结点,基于提取的数据摘要哈希值通过执行摘要字典树检索获取操作记录链首节点地址,基于获取的获取操作记录链首节点地址执行操作记录链检索获取所述数据摘要的所有操作记录的存储地址,并依据获取的存储地址从区块链网络中获取所述数据摘要的历史操作记录。
11.在本发明一些实施方式中,所述摘要字典树的节点包括索引节点和数据节点;所述索引节点中存储有索引键和指针数组,所述指针数组中的每一个指针指向不同路径的下一个节点;所述数据节点中存储有索引键、指向当前数据摘要上一版本在摘要字典树中所对应数据节点的地址的指针、当前节点的索引键所对应的数据摘要的存储地址以及当前节点的索引键所对应的数据摘要操作记录链的首节点地址;所述数据操作记录链为单链表结构,其元素为操作记录数组,所述数据操作记录链包括索引节点和数据节点,所述数据操作记录链的索引节点中存储有索引指针和数据指针数组;所述数据操作记录链数据节点包括以下字段信息中的至少部分信息:数据摘要哈希值、数据操作者、时间戳和操作类型。
12.在本发明一些实施方式中,所述索引节点中的索引键的值为数据摘要哈希值的公共前缀,所述数据节点中索引键的值为数据摘要的完整哈希值。
13.在本发明一些实施例中,所述原始数据上链步骤包括:收集待上链的原始数据,为每个原始数据构造数据摘要;通过构建或更新摘要字典树,为每个待上链数据摘要构建摘要字典树索引;将待上链数据摘要和摘要字典树索引数据打包成区块结构,将区块结构序列化到新建的区块文件中;以及将新建的区块文件分发存储到网络中各节点。
14.在本发明一些实施例中,所述通过构建或更新摘要字典树,为每个待上链数据摘要构建摘要字典树索引,包括:计算每一个数据摘要的哈希值,并为其新建一个数据节点,该数据节点的索引建的值为当前数据摘要的哈希值;获取当前摘要字典树,在当前摘要字典树不存在的情况下构建摘要字典树;确定每个数据摘要是否为新增摘要,若不是新增摘要则获取该数据摘要上一版本的哈希值,检索当前摘要字典树获取历史版本数据摘要对应的数据节点,并将该数据节点地址赋值给当前数据节点的所述指针;若为新增摘要,则将当前数据节点所述指针置空,并将新建的每个数据节点插入当前摘要字典树。
15.在本发明一些实施例中,所述数据操作记录产生及上链步骤包括:监听链上原始数据操作行为,并为原始数据操作构造数据操作记录;通过构建或更新操作记录链,为每个待上链的数据操作记录构建数据操作记录链索引;将待上链操作记录和索引数据打包成区块结构,然后将区块结构序列化到新建的区块文件中;以及将新建的区块文件分发存储到网络中各节点。
16.在本发明一些实施例中,所述原始数据查询步骤包括:在接收到用户的原始数据查询请求后,提取其中的待查数据摘要的哈希值;获取当前网络中的最新区块文件并从中提取摘要字典树根节点;基于提取的待查数据摘要的哈希值通过检索摘要字典树获取待查数据摘要存储地址;依据数据摘要存储地址从区块中获取待查数据摘要;以及提取数据摘要中原始数据访问地址,通过访问该地址获取原始数据;
17.所述数据操作记录查询步骤包括:基于数据操作记录查询请求提取其中的待查数
据摘要的哈希值,获取当前网络中的最新区块文件并从中提取摘要字典树根节点;基于提取的待查数据摘要的哈希值通过检索摘要字典树获取待查数据操作记录链首地址;通过检索操作记录链获取待查数据摘要的所有操作记录存储地址;依据存储地址从区块中获取操作记录。
18.在本发明一些实施例中,所述通过构建或更新操作记录链,为每个待上链的数据操作记录构建数据操作记录链索引,包括:将构造的数据操作记录按被操作的原始数据进行分类,使得同一原始数据的操作记录被划为一类;为每个原始数据操作类新建一个索引节点,将该操作类中所有操作记录地址赋值给该索引节点的数据指针数组字段;计算当前数据操作类对应的数据摘要哈希值,通过检索摘要字典树获取该数据摘要的操作记录链首地址,并将其赋值给当前索引节点的索引指针字段;将新建的索引节点地址作为该数据操作记录链的新首节点更新到摘要字典树相应节点中,从而实现新增数据操作记录链索引的构建。
19.本发明的另一方面,提供了一种基于索引的链上数据查询装置,该装置包括处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该装置实现如前所述方法的步骤。
20.本发明的又一方面,还提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如前所述方法的步骤。
21.本发明提供的基于索引的链上数据高效查询方法及装置,针对基于区块链的数据共享和数据溯源场景,围绕传统区块链数据查询效率低下问题,通过为原始数据及其操作构造数据摘要及操作记录并将其二者上链存储,并通过设计摘要字典树和数据操作记录链来为区块链中原始数据摘要以及数据操作记录构建索引,实现对原始数据及其历史操作记录的快速高效查询和溯源。
22.本发明的附加优点、目的,以及特征将在下面的描述中将部分地加以阐述,且将对于本领域普通技术人员在研究下文后部分地变得明显,或者可以根据本发明的实践而获知。本发明的目的和其它优点可以通过在书面说明及其权利要求书以及附图中具体指出的结构实现到并获得。
23.本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。
附图说明
24.此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,并不构成对本发明的限定。在附图中:
25.图1为本发明一实施例中数据操作记录链的逻辑结构的示意图。
26.图2为现有区块链中上链数据的组织结构。
27.图3为本发明实施例中数据摘要和摘要字典树的关系及组织结构示意图。
28.图4为本发明实施例的区块链中原始数据f的操作记录和操作记录链的关系及组织结构示意图。
29.图5为区块链中区块的存储结构示意图。
30.图6为本发明一实施例中基于索引的链上数据访问(查询)装置的示意性框图。
31.图7为本发明一实施例中链上数据查询服务模块的示意性框图。
32.图8为本发明一实施例中数据上链服务模块的示意性框图。
33.图9为本发明一实施例中索引检索模块的示意性框图。
34.图10为本发明一实施例中索引构建模块的示意性框图。
35.图11为本发明一实施例中区块查询模块的示意性框图。
36.图12为本发明一实施例中区块存储模块的示意性框图。
37.图13为字典树的逻辑结构示例。
38.图14为本发明一实施例中摘要字典树的逻辑结构示例。
39.图15为本发明一实施例中基于索引的链上数据访问方法的流程示意图。
40.图16所示为本发明一实施例中原始数据上链流程示意图。
41.图17为本发明一实施例中原始数据查询流程示意图。
42.图18为本发明一实施例中数据操作记录构造及上链流程示意图。
43.图19为本发明一实施例中数据操作记录查询方法的流程示意图。
具体实施方式
44.为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
45.在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
46.应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。
47.本发明针对传统区块链查询效率低下,难以满足数据共享或溯源场景下频繁的数据查询需求这一现状,为原始数据及其操作构造数据摘要及操作记录并上链,并基于此提出了一种链上数据索引的设计方法,即通过设计摘要字典树和数据操作记录链来为区块链中原始数据摘要以及数据操作记录构建索引,加速链上数据摘要及操作记录的获取,进而实现对原始数据及其历史操作记录的快速高效查询和溯源。在提出的链上数据索引的设计方法的基础上本发明还提出了基于索引的链上数据访问方法和装置。本发明提出的基于索引的链上数据访问方法和装置详细介绍了基于索引的链上数据访问流程,即数据摘要及操作记录上链和查询流程。
48.下面描述本发明实施例的链上数据索引的功能及设计方法。本发明实施例针对数据摘要和数据操作记录两种不同的查询需求设计了摘要字典树和数据操作记录链两种不同的索引结构。其中,摘要字典树的设计是为区块链中所有数据摘要构建集中的索引,进而加速对数据摘要的查询效率;数据操作记录链是为了将不同区块中同一数据的不同操作记录链接起来,进而加速数据摘要操作记录的查询效率。下面对本发明实施例的链上数据索引的设计方法进行详细描述。
49.本发明实施例的链上数据索引的设计方法包括如下步骤s1和s2:
50.步骤s1,构建摘要字典树。
51.更具体地,本步骤中,是将分布在不同区块中的上链数据摘要的哈希值作为键值来构建摘要字典树。
52.字典树是一种特殊的多路树,其键(key)的内容通常为字符串。字典树中,节点的位置由键的内容决定,一般将每个键所关联的值保存在该键的最后一个字母所对应的节点中。例如,由键(am,bad,be,so)所构成的字典树示例如图13所示。
53.字典树主要有以下优点:1)字典树的查找效率取决于所查找键的长度;2)给定一组键,不论插入顺序如何,所构造的字典树完全一致(构造一致性);3)字典树具有很好的局部更新性,在对局部键进行更改时,只需更改从根节点到该键所在节点路径中节点的状态,无需更改树中其它节点的状态。
54.本发明实施例中,通过将分布在不同区块中的上链数据摘要的哈希值作为键值来构建字典树,利用字典树的构造一致性来保证每个网络节点中所有数据状态的一致性,同时借助字典树查询效率只与键长有关这一特性来实现对上链数据摘要的高效检索。
55.(一)构造的摘要字典树的功能
56.对于传统区块链网络而言,区块链是由一组区块通过哈希指针串联而成,而区块链网络上的数据则是存储在区块之中。因此,当在对链上某一数据记录进行查询时,需要顺序遍历每个区块以及区块中的每一项数据记录,直到找到该待查数据记录为止。显然,这种通过顺序遍历方式实现数据查询的效率十分低下,无法满足当下许多区块链应用场景的上链数据的查询诉求。
57.针对现有的以上问题,本发明实施例中,通过设计摘要字典树,即计算上链数据摘要的哈希值,并将所有数据摘要的哈希值作为键值构建字典树,从而为区块链中所有数据摘要构建集中的索引,进而加速对数据摘要的查询效率。
58.本发明实施例所设计的摘要字典树的节点主要分为两类,即索引节点(非叶子节点)和数据节点(叶子节点)。下面将对摘要字典树的节点的存储结构进行描述。
59.(1)索引节点数据结构定义:
60.表1.摘要字典树索引节点数据结构定义
[0061][0062][0063]
如表1所示,摘要字典树中索引节点包含两个字段,即“key”字段和“next”字段。其中,“key”字段为索引键,其值为数据摘要哈希值的公共前缀,用于辅助查询;“next”字段为一个指针数组,数组中的每一个指针都指向不同路径的下一个节点。
[0064]
(2)数据节点数据结构定义:
[0065]
表2.摘要字典树数据节点的数据结构定义
[0066]
字段描述key索引键,其值为数据摘要的完整哈希值preversion指针域,其值为本数据摘要上一版本所对应数据节点的地址abstractaddr值域,其值为本数据摘要哈希所对应数据摘要的存储地址
oprecordaddr值域,其值为本数据摘要所对应数据操作链首节点的存储地址
[0067]
如表2所示,摘要字典树中数据节点包含四个字段,即“key”、“preversion”、“abstractaddr”和“oprecordaddr”这四个字段。其中“key”即为索引键,其值为数据摘要的完整哈希值;“preversion”为一个指针,其值为当前数据摘要上一版本在摘要字典树中所对应数据节点的地址,用以维护数据摘要更新状况;“abstractaddr”字段记录了key所对应的数据摘要的存储地址,用于快速获取数据摘要信息;“oprecordaddr”字段记录了key所对应的数据摘要操作记录链的首节点地址,主要用于快速获取该数据摘要的历史操作记录。
[0068]
(3)摘要字典树示例:
[0069]
数据摘要与摘要字典树的对应关系如下表3所述:
[0070]
表3.数据摘要信息表
[0071]
数据摘要地址哈希值数据操作记录链首节点地址abstract_10x123456789anode_1abstract_20x123456789bnode_2abstract_30x123456788anode_3abstract_40x223456789anode_4
[0072]
表3给出了网络中四份数据摘要的具体信息,包括数据摘要地址内容(abstract_*)、数据摘要的哈希值以及该数据所对应的数据操作链首节点地址(node_*),其中abstract_2为abstract_1更新后的数据摘要。表3中的数据摘要所对应摘要字典树的存储结构如图14所示。
[0073]
步骤s2,构建数据操作记录链。
[0074]
对于区块链的许多场景,用户存在频繁对链上数据进行查询或溯源需求,以实现对数据操作记录的追踪。对于传统区块链而言,对链上每一条数据的插查询都是一个顺序遍历的过程,这种数据查询效率十分耗时,无法满足对数据历史操作记录的频繁查询。针对以上问题,本发明实施例通过设计数据操作记录链,以链式结构将不同区块中同一数据的所有操作记录链接起来,并将链式结构的首节点地址存储至其原始数据摘要在摘要字典树所对应叶子节点中,建立起数据摘要到数据操作记录的关联关系,进而加速对原始数据历史操作记录的查询效率。下面对数据操作记录链的设计(构建)进行描述。
[0075]
数据操作记录链是一个单链表结构,链表中的数据是以节点来表示的,每个节点的构成:元素和指针,元素就是存储数据的存储单元,指针就是连接每个节点的地址数据。链式结构的最大优点在于在保证所有数据串接的前提下实现简单。
[0076]
在本发明中,数据操作记录链的元素是一个操作记录数组,它记录了本区块内同一数据的所有操作记录,实现了同一区块内同一数据操作记录的聚合;数据操作记录链的指针是链接前一个节点的地址数据,它实现了不同区块内同一数据操作记录的聚合。本发明实施例通过链式结构在逻辑上实现了区块链上同一数据所有操作记录的“集中”存储,实现了对链上数据操作记录的高效检索。
[0077]
本发明所实施例设计的数据操作记录链的节点主要分为两类,即索引节点和数据节点。存储结构如下:
[0078]
(1)索引节点结构定义
[0079]
表4.数据操作记录链索引节点结构
[0080][0081]
如表4所示,数据操作记录链中索引节点包含两个字段,即prenode和records字段。其中,prenode字段取值为该数据前一个索引节点的地址,用以将不同区块间同一数据的历史操作记录链接起来;records字段是一个数据指针数组,其取值为当前区块中本数据所有操作记录存储的物理地址(即操作记录数据节点地址),用以将本区块同一数据不同操作记录聚合起来。
[0082]
(2)数据节点结构定义
[0083]
表5.数据操作记录链数据节点的数据结构
[0084]
字段描述abstract数据摘要哈希值,标识该数据操作记录所对应的数据摘要operator数据操作者,表示该数据摘要此次操作的数据操作方身份timestamp时间戳,表示该数据摘要此次操作的时间optype操作类型,表示该数据操作此次操作的操作类型(新增、变更、查询)
[0085]
如表5所示,数据操作记录链中数据节点包含四个字段,即:abstract、operator、optype和timestamp。其中abstract字段用于记录本操作记录所关联的数据摘要哈希值;operator字段用于记录该数据摘要此次数据操作时操作方的身份信息;optype字段用于记录该数据摘要此次数据操作时数据操作类型;timestamp字段用于记录该数据摘要此次操作的时间。
[0086]
(3)数据操作记录链示例
[0087]
数据摘要操作记录与数据操作记录链的对应关系如下表所示。
[0088]
表6.数据共享信息表
[0089]
数据摘要操作记录区块号数据摘要操作者操作类型日期data_1i0x123456789aa新增20210401data_2i0x123456789ab查询20210402data_3j0x123456789ac查询20210403data_4j0x123456789ad查询20210404
[0090]
表6给出了数据摘要(0x123456789a)的所有操作记录,整个网络中该数据摘要共执行了四次操作,即a节点上传了该数据摘要,随后b节点、c节点和d节点通过查询方式获取到该数据摘要,四次操作记录分别分布在区块i和区块j之中,则该数据摘要(0x123456789a)所有的操作记录所对应的数据操作记录链如图1所示。
[0091]
现有区块链中上链数据的组织结构如图2所示。在现有的区块链系统中,数据都是以区块作为基本逻辑单元实现数据的存储,区块从逻辑上又可以分为区块头和数据体两个部分,其中区块头中主要存储了区块的一些基本信息,如当前区块的哈希值、前一区块的哈希值以及默克尔树根节点等;数据体中则存储了实际的上链数据。但现有的区块链系统并
未对数据体中上链数据的组织形式进行严格的约定或约束,因此本发明通过为上链数据摘要及数据操作记录构建索引结构,以实现原始数据及数据操作记录的快速高效查询。
[0092]
本发明实施例中数据摘要和摘要字典树的关系及组织结构如图3所示,从链上数据的关系来看,原始数据、数据摘要以及摘要字典树中数据节点是一一对应的,即对于每一份原始数据而言,区块链中存储了与之对应的一份数据摘要,摘要字典树中存在一个与之对应的数据节点。从链上数据逻辑存储结构上来说,区块链并不直接存储上链的原始数据,而是将原始数据的数据摘要以及摘要字典树存储至区块的数据体中,其中摘要字典树是依据区块链中数据摘要的哈希值构建出的一颗索引树,其根节点地址会被存储到区块的区块头中,以支持执行原始数据查询操作时快速获取摘要字典树。
[0093]
图4展示了本发明实施例中的区块链中原始数据的操作记录和操作记录链的关系及组织结构。从链上数据的关系来看,首先原始数据、数据摘要以及操作记录链具有一一对应的关系,即每一份原始数据对应了一份数据摘要,同时也对应了一条操作记录链(如上图,原始数据拥有属于自己的一条操作记录链);此外操作记录链索引节点与数据操作记录是一对多的关系,即本发明实施例为区块内同一原始数据的所有操作记录构造一个操作记录链的索引节点(如图4,操作记录链首节点存储了本区块内数据的所有操作记录的存储地址)。从链上数据逻辑存储结构上来说,本发明实施例会将数据操作记录和操作记录链存储至区块的数据体中,同时将数据操作记录链的首节点地址存储至其所对应数据摘要在摘要字典树中的数据节点中,以便于通过数据摘要哈希快速查询到其所对应原始数据的所有历史操作记录。
[0094]
图5展示了区块链网络中各区块的逻辑组织形式以及存储方式,即展示了区块链网络中如何存储上述逻辑层面的区块。从区块链的逻辑结构看,区块链中的各区块是按照时间顺序排列,各区块通过记录前一区块的地址哈希将顺序排列的各区块串联;从区块链的存储结构看,区块链中各区块都是以文件形式存储到leveldb数据库中,每个区块对应一份区块文件,每个区块文件通过存储前一份区块文件的哈希地址来实现区块的链式结构。
[0095]
下面介绍基于索引的链上数据高效访问装置及装置内各模块的功能。
[0096]
图6所示为本发明一实施例中基于索引的链上数据访问装置的示意性框图。如图6所示,本发明实施例所提出的基于索引的链上数据访问装置主要包括以下模块:数据上链服务模块、数据查询服务模块、索引构建模块、索引检索模块、区块存储模块、区块查询模块以及基础网络设施。各模块功能如下:
[0097]
(1)数据上链服务模块:是为用户提供原始数据和数据操作记录上链服务的入口;
[0098]
(2)数据查询服务模块(或称链上数据查询服务模块):是为用户提供原始数据和数据操作记录查询服务的入口;
[0099]
(3)索引构建模块:用于为待上链的原始数据摘要和数据操作记录这两种上链数据提供索引构建的功能;
[0100]
(4)索引检索模块:主要用于提供对摘要字典树和操作记录链两种数据索引的检索功能;
[0101]
(5)区块存储模块:主要用于实现区块的构建和存储功能,即该模块会接收待上链数据和数据索引并将二者整合打包至区块结构中,然后将该区块结构通过序列化方式存储到区块文件,最后将该区块文件通过基础网络设施分发存储到网络各个节点的leveldb数
据库中;
[0102]
(6)区块查询模块:主要用于实现区块的获取和解析功能,即该模块首先会通过基础网络设施获取当前最新的合法区块文件,然后将该文件反序列化成区块结构,最后对区块结构进行解析来获取上链数据及索引数据;
[0103]
(7)基础网络设施:基础网络设施是一个底层网络通信模块,它是一个物理上由各节点共同组成的底层分布式网络系统,主要为网络中各节点实现区块文件的传输。
[0104]
在本发明一些实施例中,数据查询服务模块可包括:原始数据查询组件和数据操作记录查询组件这两个组件。数据查询服务模块的结构及该模块与外部模块交互逻辑如图7所示,原始数据查询组件用于为用户提供原始数据查询服务。首先该组件会接收用户输入的原始数据的摘要哈希值并通过链上数据访问装置的索引检索模块中的摘要字典树检索组件获取待查原始数据摘要哈希值在摘要字典树的命中节点,然后从命中节点中提取原始数据摘要的存储地址并通过该存储地址从区块内上链数据中获取原始数据摘要,最后通过从数据摘要中提取原始数据的访问地址并通过该访问地址获取待查原始数据。数据操作记录查询组件用于为用户实现数据摘要操作记录查询服务。首先该组件会接收用户的数据操作记录查询请求并从中提取关联的数据摘要哈希值;然后通过索引检索模块的数据摘要字典树检索组件获取待查数据摘要哈希值在摘要字典树的命中节点,并从命中节点中提取数据操作记录链首节点地址;再通过索引检索模块中的操作记录链检索组件获取该数据摘要所有历史操作记录的存储地址;最后通过上述存储地址从区块内上链数据中获取相应的数据操作记录,从而实现用户对链上数据操作记录的查询服务。
[0105]
在本发明一些实施例中,数据上链服务模块可包括原始数据上链组件和数据操作记录上链组件这两个组件。数据上链服务模块的结构及该模块与外部模块的交互逻辑如图8所示,原始数据上链组件用于为用户提供原始数据上链服务。首先,原始数据上链组件会接收用户上传的数据、提取数据摘要,然后将待上链的数据摘要传送给索引构建模块和区块存储模块,以便实现后续索引及区块的构建。数据操作记录上链组件用于为用户实现数据摘要操作记录上链服务。数据操作记录上链操作会在原始数据存储和查询时自动触发,数据操作记录上链组件首先会构造数据操作记录,然后将待上链的数据操作记录传送给索引构建模块和区块存储模块,以便实现后续索引及区块的构建。
[0106]
在本发明一些实施例中,索引检索模块可包括:摘要字典树检索组件和操作记录链检索组件这两个组件。索引检索模块的结构及该模块与外部模块交互逻辑如图9所示,摘要字典树检索组件主要用于摘要字典树的检索流程。在执行原始数据和操作记录查询操作时,摘要字典树检索组件通过检索数据摘要树获取待查数据摘要所命中的节点,支持上层模块从命中节点中获取数据摘要存储地址或者该数据摘要操作记录链的首节点地址。操作记录链检索组件主要用于实现操作记录链的检索流程。在执行数据操作记录查询操作时,操作记录链检索组件通过检索该数据摘要所对应的操作记录链获取该数据摘要所有历史操作记录的存储地址。
[0107]
在本发明一些实施例中,索引构建模块可包括:摘要字典树构建组件和操作记录链构建组件这两个组件。索引构建模块的结构及该模块与外部模块交互逻辑如图10所示,摘要字典树构建组件主要用于实现原始数据上链时摘要字典树的构建或更新。在执行原始数据上链时,摘要字典树构建组件会收集数据上链服务模块构造的新增数据摘要并为其计
算哈希值,然后为其构建摘要字典树或将其插入现有的摘要字典树中,从而为新增数据摘要构建索引。操作记录链构建组件主要用于实现数据操作记录上链时操作记录链的构建或更新。在执行数据操作记录上链时,操作记录链构建组件会收集数据上链服务模块构造的新增数据操作记录,并为其构建操作记录链或将其插入现有的操作记录链中,从而为新增数据操作记录构建索引。
[0108]
在本发明一些实施例中,区块查询模块可包括:区块获取组件和区块解析组件这两个组件。区块查询模块的结构及该模块与外部模块交互逻辑如图11所示,区块获取组件主要用于实现区块文件的获取和区块的提取功能,该组件会通过基础网络设施获取当前网络中最新的合法区块文件,然后通过反序列化的方式将该区块文件反序列化成一个区块结构,从而协助用户执行上链或查询操作。区块解析组件主要用于实现对区块结构的解析功能,该组件会对区块获取组件输出的区块结构进行解析,将区块结构中的上链数据(原始数据摘要或操作记录)和索引数据(数据摘要字典树索引或操作记录链索引)进行分离,从而协助用户执行上链或查询操作。
[0109]
在本发明一些实施例中,区块存储模块可包括:区块构建组件、本地节点区块存储组件和其它节点区块存储组件,区块存储模块的结构及该模块与外部模块交互逻辑如图12所示。区块构建组件主要用于实现区块的构建和序列化功能,该组件会首先接收待上链数据及数据索引并将二者打包到一个区块结构中,然后以序列化的方式将该区块结构序列化存储到一个.block文件,从而实现上链数据和索引数据的聚合。本地节点区块存储组件主要用于实现新建区块文件在本地的存储功能,该组件会将区块构建组件新建的区块文件存储到本地leveldb数据库中,然后通过基础网络设施将该新建的区块文件发布到其他节点,以期节点之间区块文件保持一致。其它节点区块存储组件主要用于实现对其他节点发布的区块文件进行存储,该组件会通过基础网络设施接收其他节点发布的区块文件,在校验其合法性后将其存储到本地leveldb数据库中,以实现网络中各节点存储的区块文件保持一致。
[0110]
在本发明一些实施例中的基础网络设施是一个底层网络通信模块,它是一个物理上由各节点共同组成的底层分布式网络系统,主要为区块链网络中各节点通信提供基础支持。该基础网络设施模块沿用现有区块链网络中的基础网络通信架构,主要为各节点实现区块文件的传输和同步。该模块并非本发明所需着重描述之处,故在此不再赘述。
[0111]
下面描述本发明的基于索引的数据上链方法和链上数据查询方法。
[0112]
根据前面描述的摘要字典树和操作记录链两种索引结构的设计方法及基于索引的链上数据查询装置,通过摘要字典树和操作记录链两种索引结构的构建及使用,便可以实现本发明实施例的基于索引的链上数据查询方法。图15所示为本发明一实施例中基于索引的链上数据访问方法的流程示意图。如图15所示,该方法包括以下步骤:步骤s110:原始数据上链步骤;步骤s120:原始数据查询步骤;步骤s130:数据操作记录产生及上链步骤;以及步骤s140:数据操作记录查询步骤。
[0113]
步骤s110,基于构建的摘要字典树进行原始数据上链。
[0114]
本发明实施例中,原始数据上链是指区块链系统收集用户上传的待上链原始数据(具体数量可依据区块文件大小和系统收集时间进行配置),为每个待上链原始数据提取数据摘要并为提取的数据摘要构建或更新摘要字典树索引然后将待上链数据摘要及构建的
摘要字典树索引打包成一个区块结构并将其序列化成一个.block文件(区块文件),最后通过基础网络设施将新建的区块文件存储分发到网络各个节点的数据库中,如图16所示,该原始数据上链的方法包括以下步骤s111-s112:
[0115]
步骤s111,收集待上链的原始数据,为每个原始数据构造数据摘要。
[0116]
本发明实施例中,考虑到待上链的原始数据格式不一且区块链中存储单个区块存储能力有限,优选对待上链的原始数据按照既定的字段提取规则构造数据摘要,具体实施步骤如下:
[0117]
(1.1)依据设定的区块大小及系统收集时间,收集一定数量的待上链原始数据;
[0118]
(1.2)依据设定的原始数据上链格式,从接收的每个原始数据提取相应的字段和值,构造上链数据摘要。原始数据上链格式主要包含数据哈希值、数据提供方地址、数据上传时间戳以及原始数据访问地址等字段。
[0119]
步骤s112,通过构建或更新摘要字典树,为每个待上链数据摘要构建摘要字典树索引。
[0120]
本步骤中,构建或更新摘要字典树,指的是在已经存在摘要字典树的情况下,依据待上链原始数据更新摘要字典树,在当前尚不存在摘要字典树的情况下依据待上链原始数据创建新的摘要字典树。
[0121]
本发明实施例中,在完成待上链数据的收集后,为了加速数据摘要的访问,需通过构建或更新摘要字典树为步骤2中的数据摘要构建索引,具体实施步骤如下:
[0122]
(2.1)计算每一个数据摘要的哈希值,并为其新建一个数据节点,其key为该数
[0123]
据摘要的哈希值;
[0124]
(2.2)获取当前摘要字典树,判断当前摘要字典树是否为空,若为空则构建摘要字典树;
[0125]
也即,如果尚不存在摘要字典树(当前摘要字典树为空),则构建出摘要字典树从而获得摘要字典树;如果当前存在摘要字典树,则直接获取当前摘要字典树。
[0126]
(2.3)判断每个数据摘要是否为新增摘要,若不是新增摘要则获取该数据摘要上一版本的哈希值,然后检索当前摘要字典树获取历史版本数据摘要对应的数据节点,并将该数据节点地址赋值给当前数据节点的preversion字段,若为新增数据摘要,preversion字段置空;
[0127]
(2.4)将新建的每个数据节点插入当前摘要字典树,通过更新摘要字典树实现该数据摘要字典树索引的构建。
[0128]
步骤s113,将待上链数据摘要和索引数据打包成区块结构,然后将区块结构序列化到文件中。
[0129]
考虑到原有区块链以区块文件为存储形式,本发明实施例将上链数据及索引存储到一个区块结构,然后将该区块结构序列化到一个文件中,具体实施步骤如下:
[0130]
(3.1)将步骤s111输出的待上链数据摘要以及步骤s112构建的数据摘要字典树索引整合打包到一个区块结构;
[0131]
(3.2)为打包得到的区块结构增加必要的校验信息,如前一区块的哈希值、本区块的哈希值以及摘要字典树根节点存储位置(区块内偏移量)。
[0132]
(3.3)将包含上链数据摘要、数据摘要字典树索引以及校验信息的区块结构序列
化成一个文件,文件以.block为后缀。
[0133]
步骤s114,通过基础网络设施将新建的区块文件分发存储到网络中各节点。
[0134]
区块链网络中,数据以区块文件的形式在每一个网络节点中存储备份,以实现数据在全网达成一致共识。同样地,本发明实施例中数据上链也存在区块文件分发存储这一步骤,具体可包括:通过基础区块链网络将步骤s113产生的区块文件分发到网络中其它节点,其他节点收到区块文件并校验完合法性后,也会将区块文件存储到leveldb数据库中。
[0135]
步骤s120,基于摘要字典树进行原始数据查询。
[0136]
本发明实施例中,原始数据查询是指系统在接收到用户的原始数据查询请求后,提取其中的待查数据摘要的哈希值,从区块链网络中获取最新区块文件信息并将其反序列化成区块结构,然后基于提取的待查数据摘要哈希值执行摘要字典树检索获取摘要存储地址,依据获取的存储地址直接获取数据摘要,通过解析并访问该数据摘要中原始数据的访问地址获取原始数据的过程,该原始数据查询流程包括:
[0137]
步骤s121,基于原始数据查询请求,获取当前网络中的最新区块文件并从中提取摘要字典树根节点。
[0138]
更具体地,本步骤中,在接收到用户的原始数据查询请求后,提取其中的待查数据摘要的哈希值;获取当前网络中的最新区块文件并从中提取摘要字典树根节点。
[0139]
本发明中,链上数据及数据索引都是以区块的形式存储的,而区块是以文件形式存储在区块链网络各节点中,因此在执行查询操作时需先从区块链网络中获取最新区块文件并从中获取最新的索引信息,具体实施步骤如下:
[0140]
(1.1)判断本节点所存储的区块文件中是否存在最新区块文件,如果不存在则通过基础网络设施从具有最新区块文件的节点中请求获取最新区块文件;
[0141]
(1.2)通过区块解析组件将最新的区块文件反序列化成一个区块结构,然后从该区块结构中获取摘要字典树的根节点。
[0142]
步骤s122,基于提取的数据摘要哈希值检索摘要字典树获取待查数据摘要存储地址。
[0143]
本发明中,摘要字典树是一颗记录分散各区块中数据摘要存储位置的树形索引结构,通过检索摘要字典树可以快速查询到数据摘要的存储位置,具体实施步骤如下:
[0144]
(2.1)从摘要字典树的根节点出发,判断当前节点是否为待查数据哈希所对应的数据节点,若不是则根据节点索引指针获取下一节点;
[0145]
(2.2)重复以上步骤直至找到对应的数据节点,若不存在这样的节点则代表该数据摘要并未上链,流程结束;否则继续执行;
[0146]
(2.3)解析上述步骤检索到的数据节点,从中获取待查数据摘要的存储地址。
[0147]
步骤s123,依据数据摘要存储地址从区块中获取待查数据摘要。
[0148]
依据步骤s122所输出的数据摘要存储地址,可以直接从相应区块结构中获取待查的数据摘要并返回。
[0149]
步骤s124,提取数据摘要中原始数据访问地址,通过访问该地址获取原始数据。
[0150]
解析步骤s123所获取的数据摘要,从中提取出原始数据的访问地址,然后通过访问该地址查询获取到原始数据。
[0151]
步骤s130,数据操作记录产生及上链步骤。
[0152]
本发明实施例中,数据操作记录是当执行原始数据上链或者查询等操作时系统自动构造产生的。数据操作记录的产生及上链涉及系统自动为原始数据操作构造数据操作记录,为该操作记录构建索引(构建或更新数据操作记录链),将操作记录及索引数据打包成一个区块结构并将其序列化成一个.block文件(区块文件),以及通过基础网络设施将新建的区块文件存储分发到网络各个节点的数据库中,该数据操作记录产生及上链步骤具体包括如下步骤:
[0153]
步骤s131,监听链上原始数据操作行为,并为原始数据操作构造数据操作记录。
[0154]
本发明中,数据操作记录上链组件通过监听机制监听原始数据的操作行为,当存在原始数据上链或查询操作事件时,数据操作记录上链组件会自动收集此类事件并按照既定格式为其构造数据操作记录,具体实施步骤如下:
[0155]
(1.1)依据设定的区块大小及设定的监听时间周期,在固定时间周期内收集固定数量的原始数据操作事件;
[0156]
(1.2)依据设定的数据操作记录上链格式,为上述步骤中收集的每个原始数据操作事件构造数据操作记录。数据操作记录上链格式主要包含被操作原始数据哈希值、数据操作方身份标识以及数据操作时间等字段。
[0157]
步骤s132,通过构建或更新操作记录链,为每个待上链的数据操作记录构建数据操作记录链索引。
[0158]
本发明中,在完成数据操作事件的收集和数据操作记录构造后,为了加速原始数据历史操作记录的访问,需通过构建或更新操作记录链为步骤s131输出的数据操作记录构建或更新数据操作记录链索引,具体实施步骤如下:
[0159]
(2.1)将步骤s131输出的数据操作记录按被操作的原始数据进行分类,即同一原始数据的所有操作记录会被划为一类,记为一个操作类,对每个原始数据操作类执行下述操作;
[0160]
(2.2)为每个原始数据操作类新建一个索引节点,将该操作类中所有操作记录地址(区块内偏移量)赋值给索引节点的records字段;
[0161]
(2.3)计算该数据操作类对应的数据摘要哈希,通过检索摘要字典树获取该数据摘要的操作记录链首地址,并将其赋值给当前索引节点的prenode字段;
[0162]
(2.4)将新建的索引节点地址作为该数据操作记录链的新首节点更新到摘要字典树相应节点中,从而实现新增数据操作记录链索引的构建;
[0163]
步骤s133,将待上链操作记录和索引数据打包成区块结构,然后将区块结构序列化到新建的区块文件中。
[0164]
此步骤与原始数据上链步骤中区块构建及序列化步骤(步骤s113)十分相似,故在此不再叙述。
[0165]
步骤s134,通过基础网络设施将新建的区块文件分发存储到网络中各节点。
[0166]
此步骤与原始数据上链步骤中区块发布存储方法(步骤s114)十分相似,故在此不再叙述。
[0167]
步骤s140,数据操作记录查询步骤。
[0168]
本发明实施例中,数据操作记录查询是指在接收到用户的数据操作记录查询请求后,从中提取待查数据摘要哈希值,从区块链网络中获取最新区块文件信息并将其反序列
化成区块结构,然后基于提取的待查数据摘要哈希值执行摘要字典树检索获取操作记录链首节点地址,接着执行操作记录链检索获取该数据摘要的所有操作记录的存储地址,最后依据上述获取的存储地址从区块链网络中获取该数据摘要的所有历史操作记录的过程,该步骤s140具体包括如下步骤:
[0169]
步骤s141,基于数据操作记录查询请求提取其中的待查数据摘要的哈希值,获取当前网络中的最新区块文件并从中提取摘要字典树根节点。
[0170]
此步骤与原始数据查询步骤中获取最新区块文件并提取摘要字典树根节点的步骤s121一致,故在此不再叙述。
[0171]
步骤s142,基于提取的数据摘要哈希值检索摘要字典树获取待查数据操作记录链首地址。
[0172]
本发明中,摘要字典树的数据节点既记录了数据摘要的存储地址,也记录了该数据摘要所对应操作记录链的首节点地址,因此通过检索摘要字典树可以获取到操作记录链首节点的存储位置,具体实施步骤如下:
[0173]
(2.1)从摘要字典树的根节点出发,判断当前节点是否为待查数据哈希所对应的数据节点,若不是则根据节点索引指针获取下一节点;
[0174]
(2.2)重复以上步骤直至找到对应的数据节点,若不存在这样的节点则代表该数据摘要并未上链,流程结束;否则继续执行;
[0175]
(2.3)解析上述步骤检索到的数据节点,从中获取待查数据摘要的操作记录链首节点的存储位置。
[0176]
步骤s143,通过检索操作记录链获取待查数据摘要的所有操作记录存储地址。
[0177]
本发明实施例中,操作记录链是一个通过地址指针将分散在各区块中的数据操作记录链接起来的链式结构,通过检索操作记录链可以快速查询到数据摘要的存储位置,具体实施步骤如下:
[0178]
(3.1)从操作记录链首节点开始,依据地址指针顺序遍历索引节点,并对每个节点执行下述步骤;
[0179]
(3.2)解析每个索引节点的records字段,从中提取数据操作记录存储地址并加入操作记录结果集;
[0180]
(3.3)将上述完整的数据操作记录存储地址集返回;
[0181]
步骤s144,依据存储地址从区块中获取操作记录。
[0182]
依据步骤s143所输出的数据操作记录存储地址集,可以直接从相应区块结构中获取待查数据摘要的所有历史操作记录并返回。
[0183]
本发明实施例的如上步骤并不限于所示例的顺序,例如步骤s120和步骤s130完全可以互换顺序。
[0184]
总之,本发明通过设计摘要字典树来优化了链上数据摘要的组织形式,为跨区块的链上数据摘要构建集中索引,实现了链上数据摘要的高效查询;通过设计数据操作记录链优化了链上数据操作记录的组织形式,通过链式结构为数据操作记录构建索引,实现了链上数据操作记录的高效查询;本发明进一步通过将数据操作记录链的首节点地址存储至摘要字典树中,建立起了数据摘要到数据操作记录的关联关系,从而加速了数据操作记录查询效率。
[0185]
综上所述,本发明实施例的如上基于索引的链上数据访问方法具有如下有益效果:
[0186]
(1)针对传统区块链数据查询效率低下而无法满足上链数据摘要的查询需求这一问题,本发明实施例通过设计摘要字典树为区块链中所有上链数据摘要构建索引,并将索引根节点存储至最新区块的区块头中,以实现数据摘要的高效查询。
[0187]
(2)针对传统区块链数据查询效率低下而无法满足上链数据操作记录的查询需求这一问题,本发明实施例通过设计数据操作记录链,将同一数据的所有操作记录以链式结构链接起来,并将其首节点地址存储至摘要字典树所对应节点中(特定节点是指该操作记录所关联的数据摘要在摘要字典树中的节点),建立起数据摘要到数据操作记录的关联关系,以实现数据操作记录的高效查询。
[0188]
(3)本发明实施例提出了一种基于索引的链上数据高效查询方法及装置,给出了数据查询检索优化思路及方案,并在此基础上给出了一套链上数据摘要及数据操作记录查询的整体设计架构和流程,设计了更加贴合区块链实际应用场景的区块链系统。
[0189]
本发明针对原始数据的查询操作通过设计摘要字典树为区块链中所有的数据摘要构建索引,加速了链上数据摘要的获取,进而实现了原始数据的快速高效查询;本发明针对数据历史操作记录的查询,本发明通过设计数据操作记录链,将同一数据的所有操作记录以链式结构链接起来,并将其首节点地址存储至摘要字典树所对应的节点中(特定节点是指该操作记录所关联的数据摘要在摘要字典树中的节点),建立起数据摘要到数据操作记录的关联关系,从而加速数据操作记录查询的效率。
[0190]
本发明实施例的基于索引的链上数据高效查询装置,包括处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该装置实现如前所述基于索引的链上数据查询方法的步骤。
[0191]
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时以实现前述基于索引的链上数据高效查询方法的步骤。该计算机可读存储介质可以是有形存储介质,诸如光盘、u盘、软盘、硬盘等。
[0192]
本领域普通技术人员应该可以明白,结合本文中所公开的实施方式描述的各示例性的组成部分、系统和方法,能够以硬件、软件或者二者的结合来实现。具体究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(asic)、适当的固件、插件、功能卡等等。当以软件方式实现时,本发明的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。
[0193]
需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。
[0194]
本发明中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实
施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。
[0195]
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献