一种支持时间范围和属性范围复合查询的区块链索引方法与流程

文档序号:17130863发布日期:2019-03-16 01:11阅读:275来源:国知局
一种支持时间范围和属性范围复合查询的区块链索引方法与流程

本发明属于区块链技术领域,尤其涉及基于区块链索引的区块数据与交易数据的查询技术,特别是一种支持时间范围和属性范围复合查询的区块链索引方法。



背景技术:

区块链系统通常将一批交易打包进区块,然后以区块为单位对这些交易进行共识、存储及执行。在数据结构上,区块链实质是一个以区块为结点的链表,每个区块中主要包含交易数据、前块哈希及元数据。区块中的交易数据是前一区块创建后到当前区块创建时,系统中发起的所有交易。针对每个区块都可计算出一个哈希值,其被称为区块哈希或区块id。通过在区块中包含前一区块的哈希,即可以前块哈希为指针把各个孤立的区块链接起来。以区块为单位组织交易数据,并以区块哈希作为指针将孤立的区块按时间顺序链接在一起,一方面保证了交易数据的不可篡改性,另一方面也实现了交易数据的可追溯性。

为了方便新块的追加操作,区块链数据通常以日志文件的方式进行存储。目前区块链系统提供的索引机制,仅支持基于区块序号(高度)、区块哈希的区块数据检索及基于交易哈希的交易数据检索。以交易数据检索为例,索引的健是交易哈希,值是区块链文件名和交易位于区块链文件中的地址偏移量。因为并不支持基于交易时间、交易属性(如交易金额、交易类型等)的索引,所以当需要基于具体的交易时间、交易属性查询交易时,就会特别繁琐低效。例如查询交易金额大于500且小于1000的交易,其需要从区块链的第1个区块开始,把每个区块中的每个交易都反序列化,并逐个比较判断各个交易的属性是否满足查询条件,直至最后一个区块。区块链在数据结构上实质是一个以区块为结点的链表,因而整个查询过程与链表查询类似。如果需要基于多种交易属性的复合查询,如查询在某交易时间段内且交易金额在某范围的所有交易,查询过程就会更为复杂低效。相对于已经相当成熟且快速的数据库索引相比,目前的区块链系统尚缺乏完善高效的索引方案。

为了克服现有区块链系统基于交易时间与交易属性查询低效的问题,本发明提出了一种支持时间范围和属性范围复合查询的区块链索引方法,实现了基于交易时间与交易属性的高效查询。



技术实现要素:

本发明的目的是针对现有区块链系统基于交易时间与交易属性查询低效的问题,提出了一种支持时间范围和属性范围复合查询的区块链索引方法,实现了基于交易时间与交易属性的高效查询。

实现本发明目的的具体技术方案是:

一种支持时间范围和属性范围复合查询的区块链索引方法,该方法包括基于区块序号及区块创建时间的b+树索引和基于交易属性的层次索引。所述基于区块序号及区块创建时间的b+树索引实现了基于区块序号或交易时间到区块存储地址的快速查询;所述基于交易属性的层次索引实现了基于交易属性到交易存储地址的快速查询;具体包括以下步骤:

步骤1:构建基于区块序号及区块创建时间的b+树索引

步骤a1:采集新的区块数据,分别提取4个参数:区块序号/区块高度、区块创建时间、区块所在的区块链文件名和区块位于区块链文件中的地址偏移量;

步骤a2:新建b+树结点,结点中健的格式为“blocknum,timestamp”,其中blocknum为区块序号,timestamp为区块创建时间;结点中指针的格式为“blockfile_offset”,其中blockfile为区块所在的区块链文件名,offset为区块位于区块链文件中的地址偏移量;分别填入步骤a1采集的4个参数;

步骤a3:基于新结点中健的blocknum部分,并依照b+树结点插入算法插入该新结点至b+树,以持续更新整颗b+树索引;

步骤2:构建基于交易属性的层次索引

步骤b1:采集新的区块数据,提取新区块的所有交易中索引所需的属性值及相应交易的存储地址;

步骤b2:基于新的交易属性值,更新第1层位图索引,该索引依据交易属性确定了包含指定交易属性值的每个交易所在的区块;

步骤b3:基于新的交易属性值,更新第2层b+树索引,该索引为每个区块单独构建,其依据交易属性确定了被查询交易的存储地址。

所述步骤b2中第1层位图索引的更新包括如下步骤:

步骤b21:基于新区块中的交易属性值采样并维护位图索引所需的等深直方图(equi-depthhistogram)的平衡,直方图的每个桶(bucket)代表了交易属性其中的一个取值范围,所有桶所代表的互不相交的取值范围合在一起,即覆盖了该属性的所有取值;

步骤b22:追加表达新区块中交易属性取值范围的位向量新行到位图索引;位图索引为区块链中的每个新区块分别维护一个位向量,位向量的长度等于直方图的桶数;位向量的第i位为1时,表明该区块含有一些交易,这些交易属性的取值位于直方图第i个桶对应的属性取值范围;第i位为0时,表明该区块中所有交易的交易属性取值,都不位于直方图第i个桶对应的属性取值范围。

其中,步骤b21所述的等深直方图伴随新区块的产生,周期地采样区块中的交易属性值,并持续维持等深直方图的平衡。

其中,步骤b22所述的位图索引的位向量也可直接表示离散值的取值,如交易属性为“交易类型”时,位向量的第i位可直接表示该区块中是否含有编码值为i的交易类型。所述步骤b3中第2层b+树索引的更新包括如下步骤:

步骤b31:针对新区块中每个交易数据,分别提取索引所需的3个参数:交易属性值、交易所在的区块链文件名和交易位于区块链文件中的地址偏移量;

步骤b32:新建b+树结点,结点中的健为交易属性;结点中的指针的格式为“blockfile_offset”,其中blockfile为交易所在的区块链文件名,offset为交易位于区块链文件中的地址偏移量,分别填入步骤b31所采集的3个参数;

步骤b33:基于新结点中健的具体取值,依照b+树结点插入算法插入新结点至b+树,以持续更新整颗b+树索引。

本发明的有益效果包括:

基于区块序号及区块创建时间的b+树索引既可按区块序号查询也可按交易时间查询。基于区块序号查询时,可仅利用结点中健的blocknum部分。基于交易时间查询时,可仅利用结点中健的timestamp部分。所以该索引可分别加速4种类型的查询:基于区块序号或其范围查询相应区块的存储地址;基于区块序号或其范围查询相应区块的创建时间;基于时间范围查询相应区块的存储地址;基于时间范围查询相应区块的序号。

基于交易属性的层次索引加速了基于交易属性或其范围的交易查询。该索引层次共分为2层,第1层位图索引确定了包含指定交易属性值的交易所在的区块;针对由第1层索引所获得的区块,第2层索引基于每个区块的b+树索引进一步确定了被查询交易的存储地址。基于交易属性的层次索引具有以下优点:伴随着新区块的产生,仅需针对新区块追加索引信息,已有索引结构不需删除和修改,即第1层位图索引只需添加新行以表达新区块中的交易在交易属性上的取值分布,第2层b+树索引只需添加b+树以在新区块中基于交易属性值快速查找到交易的存储位置;当依据查询条件查询到的结果集为空时,只需用到第1层位图索引,无需用到第2层b+树索引,因而当查询结果集为空时,基于该层次索引的查询非常高效。

结合基于区块序号及区块创建时间的b+树索引和基于交易属性的层次索引可实现基于时间范围和属性范围的复合查询。

附图说明

图1是本发明涉及的基于区块序号及区块创建时间的b+树索引示意图;

图2是本发明涉及的基于交易属性的层次索引示意图;

图3是以查询某个时间段内交易金额在某范围内的所有交易为例,说明基于区块序号及区块创建时间的b+树索引和基于交易属性的层次索引的复合查询过程示意图;

图4是区块链数据与基于区块序号及区块创建时间的b+树索引、基于交易属性的层次索引间的关系结构示意图。

具体实施方式

结合以下具体实施例和附图,对本发明作进一步的详细说明。实施本发明的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本发明没有特别限制内容。

实施例

图1描述了基于区块序号及区块创建时间的b+树索引。该b+树索引每个结点中健的格式为“blocknum,timestamp”,其中blocknum为区块序号,timestamp为区块创建时间。每个结点中指针的格式为“blockfile_offset”,其中blockfile为区块所在的区块链文件名,offset为区块位于区块链文件中的地址偏移量。例如,左下角第一个叶子结点中的键为“1,ts1”,表明该结点索引的是区块序号(高度)为1、区块创建时间为ts1的区块;该叶子结点中的指针为p1,其存储了区块序号为1的区块的存储位置(具体格式为“区块文件名+文件内偏移量”)。

基于图1描述的索引可分别加速4中类型的查询:基于区块序号或其范围查询相应区块的存储地址;基于区块序号或其范围查询相应区块的创建时间;基于时间范围查询相应区块的存储地址;基于时间范围查询相应区块的序号。

基于区块序号查询时,可仅利用结点中健的blocknum部分。查询结果可选用结点中健的timestamp部分以查得对应的区块创建时间,也可选用结点中指针以查得区块存储地址,进而取得整个区块数据。

因为区块内任何交易的交易时间大于前一区块的创建时间并小于其所在区块的创建时间,因而基于区块创建时间的b+树索引可实现基于交易时间的查询。基于交易时间范围查询时,可仅利用结点中健的timestamp部分。查询结果可选用结点中健的blocknum部分以查得对应的区块序号,也可选用结点中指针以查得区块存储地址,进而取得整个区块数据。

图2描述了一种组合了位图索引和b+树索引的层次索引,其加速了基于交易属性(如交易金额或交易类型等)或其范围的交易查询。该索引层次共分为2层,第1层索引基于位图索引确定了包含指定交易属性值的交易位于那些区块;针对由第1层索引所获得的区块,第2层索引基于每个区块的b+树索引进一步确定了被查询交易的存储地址。

第1层位图索引针对需被查询的交易属性构建了一个等深直方图,其每个桶代表了该属性其中的一个取值范围,所有桶所代表的互不相交的取值范围合在一起,即覆盖了该属性的所有取值。然后针对该直方图构建位图索引,位图索引为区块链中的每个区块分别建立一个位向量,位向量的长度等于直方图的桶数。位向量的第i位为1时,表明该区块含有一些交易,这些交易属性的取值位于直方图第i个桶对应的属性取值范围;第i位为0时,表明该区块中所有交易的交易属性取值,都不位于直方图第i个桶对应的属性取值范围。随着新区块的产生,表达新区块中交易属性取值的位向量新行会被追加到位图索引中。当交易属性的取值为离散值时,位图索引的位向量可直接表示离散值的取值,如交易属性为“交易类型”时,位向量的第i位可直接表示该区块中是否含有编码值为i的交易类型。

第2层b+树索引基于交易属性为每个区块分别构建了一个b+树索引。b+树每个结点中的健为交易属性;每个结点中的指针的格式为“blockfile_offset”,其中blockfile为交易所在的区块链文件名,offset为交易位于区块链文件中的地址偏移量。当根据指定的交易属性值查询一个区块内的多个交易时,可基于b+树快速定位到包含该属性值的交易的存储地址。

基于交易属性的层次索引具有以下优点:伴随着新区块的产生,仅需针对新区块追加索引结点,已有索引结点不需删除和修改。位图索引只需添加新行以表达新区块中的交易在交易属性上的取值分布,b+树索引只需添加b+树以方便在新区块中基于交易属性值索引到具体交易的存储位置;当依据查询条件查询到的结果集为空时,仅用到了第1层的位图索引,无需用到第2层的b+树索引,因而当查询结果集为空时,该层次索引的查询非常高效。

结合基于区块序号及区块创建时间的b+树索引和基于交易属性的层次索引可实现基于时间范围和属性范围的复合查询。

图3以查询交易时间范围在[6/7/2018,6/8/2018]且交易金额范围在[800,1000]的所有交易为例,说明结合基于区块序号及区块创建时间的b+树索引和基于交易属性的层次索引实现复合查询的过程。

针对交易时间的范围查询,可使用基于区块序号及区块创建时间的b+树索引以加速查询过程。以交易时间范围[6/7/2018,6/8/2018]为输入,基于b+树结点中健的“timestamp”部分由根向下到叶子结点,查找出大于等于“6/7/2018”且小于等于“6/8/2018”的所有键,然后根据这些健的“bloclknum”部分,返回位向量结果集“0000001110...”,即第7块、第8块和第9块区块中含有交易时间范围在[6/7/2018,6/8/2018]的交易。

针对交易金额的范围查询,可使用基于交易金额属性的层次索引以加速查询过程。以交易金额范围[800,1000]为输入,基于层次索引的第1层位图索引进行查询。将输入与等深直方图中各桶表达的范围比对后,找出了范围在[700,900)和[900,1200)的两个桶,这两个桶分别对应于位图索引中位向量的第5位和第6位。在所有区块的位向量中,因为只有区块9和区块10的位向量第5位或第6位不为0,因而返回位向量结果集“0000000011...”,即第9块、第10块区块中含有交易金额范围在[800,1000]的交易。

对前两步返回的两个位向量进行“与运算”,得到位向量“0000000010...”,即只有区块9中的交易含有交易时间范围在[6/7/2018,6/8/2018]且交易金额范围在[800,1000]的交易。

为了进一步在区块9中找出同时满足两种查询范围的具体交易,可使用基于交易金额属性的层次索引的第2层b+树索引进行查询。以交易金额范围[800,1000]为输入,在区块9的基于交易金额属性的b+树的树根向下到叶子结点,查找出金额大于等于“800”且小于等于“1000”的所有交易。找到具体交易后,若其交易时间也在[6/7/2018,6/8/2018]范围内,就将该交易加入结果集。从图3可知,区块9中实际满足条件的交易是tj+1。

经过基于区块序号及区块创建时间的b+树索引和基于交易属性的层次索引的符合查询后,交易时间范围在[6/7/2018,6/8/2018]且交易金额范围在[800,1000]的交易是tj+1。

以上是结合基于区块序号及区块创建时间的b+树索引和基于交易属性的层次索引的具体查询过程,在区块链系统中可通过以下方法1中的相关代码实现,方法1的代码如下所示:

图4描述了区块链数据与基于区块序号及区块创建时间的b+树索引、基于交易属性的层次索引间的关系结构。相对于每次均需从区块链头部逐个查询区块的传统方法,本发明提出的索引加速了基于交易时间与交易属性的范围查询与复合查询,解决了区块链系统基于交易时间与交易属性查询效率低效的问题。

本发明的保护内容不局限于以上实施例。在不背离发明构思的精神和范围下,本领域技术人员能够想到的变化和优点都被包括在本发明中,并且以所附的权利要求书为保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1