CN113961568A - 基于区块链的链式数据结构的区块快速查找方法 - Google Patents
基于区块链的链式数据结构的区块快速查找方法 Download PDFInfo
- Publication number
- CN113961568A CN113961568A CN202111574920.0A CN202111574920A CN113961568A CN 113961568 A CN113961568 A CN 113961568A CN 202111574920 A CN202111574920 A CN 202111574920A CN 113961568 A CN113961568 A CN 113961568A
- Authority
- CN
- China
- Prior art keywords
- block
- height
- index
- chain
- function
- 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.)
- Pending
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
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
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)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种基于区块链的链式数据结构的区块快速查找方法,包括:根据第一函数和区块链高度按照预设规则为所有区块建立多级索引,以使每个区块对应的索引落在预设阈值范围内;查找目标区块时,根据第二函数和目标区块高度值查找目标区块的索引值;如果目标区块高度值小于0或大于最大区块高度值,第二函数返回空值;如果目标区块高度值大于0且不大于最大区块高度值,返回目标区块的索引值,以根据索引值查找到对应的区块。本申请通过在链式数据结构中建立多级索引的方式,将原来查询目标区块的时间复杂度O(n)降为Olog(n),解决了在区块链的链式数据结构中,随着区块链的延长区块查找效率低的问题。
Description
技术领域
本申请涉及区块链技术领域,尤其涉及一种基于区块链的链式数据结构的区块快速查找方法。
背景技术
区块链是一个不断无限递增的链式数据结构,以首尾相连的链式的数据结构进行存储和维护,而且以区块链的分布式架构特点,其区块是会随着系统的运行时间正相关的无限延长。
在传统的区块链维护里面,会把区块链从创世区块开始逐个进行添加,一直添加到最新的区块为止。此时的区块是存放在一个集合中的。要从集合中查找某个区块,取决于当前集合的查找性能。
当需要通过区块链去查找某个区块时,对于传统的查找方式而言,就是对这个区块链集合进行遍历,从头到尾或者从尾到头遍历一遍,直到找到需要查找的区块为止。但是当区块链的长度逐渐变得很长时,查询区块的速度性能就会随着区块链的长度增长而明显下降。通常情况下,区块链的数据往往会非常庞大,可能会达到几十万到几百万的区块长度,在这种情况下,当要查询区块链中某个区块时,查询效率就会很低。
发明内容
本申请提供一种基于区块链的链式数据结构的区块快速查找方法,以解决在区块链的链式数据结构中,随着区块链的延长区块查找效率低的问题。
基于区块链的链式数据结构的区块快速查找方法,包括:
根据第一函数和区块链高度按照预设规则为所有区块建立多级索引,以使每个区块对应的索引落在预设阈值范围内;
在查找目标区块时,根据第二函数和目标区块高度值查找目标区块的索引值;
如果目标区块高度值小于0或大于区块链的最大区块高度值,第二函数返回空值;
如果目标区块高度值大于0且不大于区块链的最大区块高度值,第二函数返回目标区块的索引值,以根据索引值查找到对应的区块。
进一步地,新节点加入所述区块链时,利用区块头,在内存中创建新的区块数据结构的区块索引,并将所述区块索引根据父区块指向以顺序相连的方式构建一个内存中的区块链链表。
进一步地,根据第一函数和区块链高度按照预设规则为所有区块建立多级索引,以使每个区块对应的索引落在预设阈值范围内,包括:
在第一函数中输入区块链高度,当区块链高度大于2时,判断区块链高度的奇偶性;
如果区块链高度是偶数,将区块链高度的最低位转为0,得到第一转换高度,以及返回第一转换高度;
如果区块链高度是奇数,将区块链高度减掉1后的最低位转为0,得到中间转换高度,将中间转换高度加1得到第二转换高度,以及返回第二转换高度。
进一步地,根据第二函数和目标区块高度值查找目标区块的索引值,包括:
在第二函数中输入目标区块高度值;
根据目标区块高度值和预设循环输出目标区块的索引值,预设循环是预先设定的。
进一步地,多级索引是通过如下方式建立的:
每间隔第一预设间隔数量的区块建立一个对应的第一层区块索引,所有第一层区块索引构成一级索引;
以一级索引为基础,每间隔第二预设间隔数量的第一层区块索引建立一个第二层区块索引,所有第二层区块索引构成二级索引;
以二级索引为基础,每间隔第三预设间隔数量的第二层区块索引建立一个第三层区块索引,所有第三层区块索引构成三级索引;
直至满足预设规则及预设数量的索引级别。
进一步地,第一预设间隔、第二预设间隔及第三预设间隔相同。
进一步地,该方法,还包括:如果区块链高度小于2,第一函数返回0,不建立区块的索引。
进一步地,第一函数为GetSkipHeight函数,GetSkipHeight函数用于为区块及索引创建对应的索引。
进一步地,第二函数为GetAncestor函数,GetAncestor函数用于查找目标区块对应的索引值以及目标区块对应的父辈区块。
进一步地,该方法,还包括:创建BuildSkip方法,用于在区块链延长时,更新区块链的多级索引。
由以上技术方案可知,本申请提供一种基于区块链的链式数据结构的区块快速查找方法,包括:根据第一函数和区块链高度按照预设规则为所有区块建立多级索引,以使每个区块对应的索引落在预设阈值范围内;在查找目标区块时,根据第二函数和目标区块高度值查找目标区块的索引值;如果目标区块高度值小于0或大于区块链的最大区块高度值,第二函数返回空值;如果目标区块高度值大于0且不大于区块链的最大区块高度值,第二函数返回目标区块的索引值,以根据索引值查找到对应的区块。本申请通过在链式数据结构中建立多级索引的方式,将原来查询目标区块的时间复杂度O(n)降为Olog(n),解决了在区块链的链式数据结构中,随着区块链的延长区块查找效率低的问题。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例提供的基于区块链的链式数据结构的区块快速查找方法流程示意图;
图2为本申请实施例示出的区块链的链式数据结构示意图;
图3为本申请实施例示出的区块链链式数据结构创建第一级索引的示意图;
图4为本申请实施例示出的区块链链式数据结构创建第二级索引的示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。以下结合附图,详细说明本申请各实施例提供的技术方案。
在当前区块链的链式数据结构中,如果要查找某个数据,那么需要从头开始逐个进行比较,直到找到包含数据的那个节点,最极端情况下需要遍历到这个区块链的末端。也就是说,时间复杂度为O(n)。O(n) 表示时间复杂度,表示的是线性阶,随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。同样,当要插入新数据的时候,也要经历同样的查找过程,从而确定插入位置。
为了解决区块链的链式数据结构中随着区块链的延长区块查找效率低的问题,本申请提供一种基于区块链的链式数据结构的区块快速查找方法,图1为本申请实施例提供的基于区块链的链式数据结构的区块快速查找方法流程示意图,如图1所示,该方法包括如下S1-S4的步骤:
S1:根据第一函数和区块链高度按照预设规则为所有区块建立多级索引,以使每个区块对应的索引落在预设阈值范围内;
在根据第一函数和区块链高度按照预设规则为所有区块建立多级索引之前,本申请实施例还包括如下内容:当新节点加入区块链系统时,利用区块头,在内存中创建新的区块数据结构内存的区块索引,并把这些新的区块索引根据“父区块指向”以顺序相连的方式构建一个内存中的区块链链表。
具体地,创建区块链的链表存储结构的方式可以为,如std::vector<CRegularBlockIndex*> vChain,链表存储结构用于存储区块链中顺序相连的区块,所有的区块都将存放在这个集合中。
一种实现方式中,第一函数为GetSkipHeight函数,是本申请实施例自定义的,GetSkipHeight函数用于为区块及索引创建对应的索引。GetSkipHeight函数又可以称为伪随机索引提供函数,如GetSkipHeight(int blockHeight),输入为当前区块链的高度,功能为查找某个目标区块时提供正确的索引。本申请实施例中的伪随机索引提供函数实际上是创建了一个伪随机算法,GetSkipHeight的作用是让新建的索引能够尽可能落在目标区块附近,不会偏离太远,这样可以增加查询效率,整个索引队列是有顺序的。
GetSkipHeight的实现逻辑为,根据第一函数和区块链高度按照预设规则为所有区块建立多级索引,以使每个区块对应的索引落在预设阈值范围内,其中,预设规则是根据区块链高度预先设定的,具体可以根据实际情况设定。具体实施中,在第一函数中输入区块链高度,分为以下几种情形:
第一种情形:如果区块链高度小于2,第一函数直接返回0,不建立区块的索引。
第二种情形:如果区块链高度大于2,判断区块链高度的奇偶性;
如果区块链高度是偶数,将区块链高度的最低位转为0,得到第一转换高度,以及返回第一转换高度。也就是说,如果区块链高度是偶数,则返回将当前高度的最低位转为0后得出的高度值(经过最低位转换为0的操作得出的值会比输入的高度略小)。这里的当前高度是指调用GetSkipHeight这个函数时输入的高度值,最低位是指这个数字的二进制表示中的第0个位置的数,可以用来实现判断这个数的十进制是否为奇数还是偶数。把这个数的二进制的最低位,如果不是0就改为0,那么这个数字的十进制会有一个很小的改变,但是会落到这个数的附近。比如当前是10,二进制是1010,最低位改为0就变成0010,它的十进制数就变为2。
在一些实施例中,相关的代码可以为(以下代码仅为示意性说明):
/**
* @brief CBlockIndex::GetSkipHeight
* @param height
* @return
*/
int CBlockIndex::GetSkipHeight(int height)
{
if(height < 2)
{
return 0;
}
// height & 1 效果相当于当height的二进制的最低位为0(偶数)时,取值this->InvertLowestOne(height),否则返回this->InvertLowestOne(this->InvertLowestOne(height - 1)) + 1
// 以此来实现一定的随机性,用来创建索引。
this->InvertLowestOne(height);
};
如果区块链高度是奇数,将区块链高度减掉1后的最低位转为0,得到中间转换高度,将中间转换高度加1得到第二转换高度,以及返回第二转换高度。也就是说,如果区块链高度是奇数,则返回“当前高度-1”后的最低位转换为0后的数,再次做转换后的结果+1。具体实现过程可以为,以这个数的二进制的最低位为基准,如果不是0就改为0,那么这个数字的十进制会有一个很小的改变,但是会落到这个数的附近。比如当前是10,二进制是1010,最低位改为0就编程0010,它的十进制数就变为2。转换的目的就是想通过这样的方式,让索引创建在目标区块的附近,这样,要查找这个区块的时候就会更快。
需要说明的是,这里的奇偶数其实就是伪随机算法的一种手段,它的效果就是能让索引落在目标区块附近,十进制的数其实就是区块在区块链上的高度,相关的实现代码可以为(以下代码仅为示意性说明):
例如,转换当前高度为最低位为0的算法:InvertLowestOne(int n) { return n& (n - 1);
/**
* @brief CBlockIndex::InvertLowestOne
* 将最低位转为0,然后返回当前高度(会比输入的高度略小)
* @param n
* @return
*/
int CBlockIndex::InvertLowestOne(int n) { return n & (n - 1); }
例如,获取当前高度遍历索引值的算法:
int GetSkipHeight(int height)
{
if(height < 2){
return 0;
}
};
图2为本申请实施例示出的区块链的链式数据结构示意图,图中创世纪区块默认区块高度值为0,block1至blockn为链式数据结构中的区块,其中n为正整数n大于1。在传统的查询实现中,是通过从头尾进行遍历的方式进行逐个比较查询的,一直查到最后,直到查询完成为止,容易看出,当区块为于n的位置时,此时的时间复杂度是O(n)。
而本申请实施例是以图2中的区块链链式数据结构为基准,在链式数据结构之上创建逐层的索引,一种实现方式中,可以通过如下方式建立多级索引,每间隔第一预设间隔数量的区块建立一个对应的第一层区块索引,所有第一层区块索引构成一级索引;以一级索引为基础,每间隔第二预设间隔数量的第一层区块索引建立一个第二层区块索引,所有第二层区块索引构成二级索引;以二级索引为基础,每间隔第三预设间隔数量的第二层区块索引建立一个第三层区块索引,所有第三层区块索引构成三级索引;直至满足预设规则及预设数量的索引级别。其中,第一预设间隔、第二预设间隔及第三预设间隔(还可以有其他预设间隔)可以相同,也可以不同,但优选地,多个预设间隔相同。
为了便于进一步理解本方案,下面结合实际例子进行过程说明。
以要查询目标区块为block 6、预设间隔为1为例,创建方式如下,每两个(即隔一个)创建一个索引。参见图3,图3为本申请实施例示出的区块链链式数据结构创建第一级索引的示意图,在区块链中,每间隔一个区块以其中一个作为索引,一般情况下要求在每一级的索引间隔是等距离的,但也不是强制要求,也可以间隔不等,本申请实施例优选等间距。
在查找某个区块时,不再是从头开始逐个往后遍历,而是把目标高度为6的区块与第一层的索引直接比较,如图3中分别与区块高度为1、3、5、7进行比较,这时会发现高度为6的区块在区块高度为5 和区块高度为7之间,此时再返回来就找到了高度为6的区块。
图4为本申请实施例示出的区块链链式数据结构创建第二级索引的示意图,如果再以第一级索引根据每间隔一个的方式创建第二级索引,此时查找高度为6的区块的路径将变为:直接查找对比区块高度为3的区块,然后对比高度为7的区块,发现高度为6的区块在3、7之间,然后在把3、7之间按每两个划分为一组的方式进行第三级索引创建,方法一样,此时会发现区块高度为6的区块刚好落在高度为5、7之间,到此就找到了高度为6的区块了。不管当前的区块链有多长,都以这样的基本划分法去建立分级索引就可以大大缩减遍历需要走过的区块。
如图4所示,原本传统的查询需要经过从“创世纪区块-1-2-3-4-5-6”高度为6共7
个遍历过程,当使用了上述的方法之后,查询只需要经历3-7-6共三个步骤,遍历效率直接
提升一倍。这种方式的效率,在区块链越长的时候越能得到体现;区块链的长度越长,创建
的索引层次越多,它的效率就越能得到体现。例如,在区块链中,传统的查询的时间复杂度
是O(n),当区块链中有n个区块时,按照每两个节点抽出一个节点作为上一级索引的节点,
那么第一级索引节点大约是n/2个,第二级的索引大约是 n/4 个,以此类推,第 k 级索引
的节点个数是第 k-1 级索引的节点个数的 1/2,那么第 k 级索引点的个数: 。
假设索引有 h 级,最高级的索引是 2 个节点通过上面的分析可以得到:,
即: 。如果包含最原始的区块链这一层,那么整个索引的高度是:。当
在查询某个区块的时候,如果每一层都要遍历m个区块,那查询一个数据的时间复杂度是:O
(m*),常数系数在时间复杂度中可以忽略,即复杂度为O(),这种查找效率的
提升,索引层级越多,越能体现其处理效率。所以,对于区块链来说,前提是建立了很多级索
引。
在步骤S1中建立完多级索引之后,继续向下执行步骤S2。
S2:在查找目标区块时,根据第二函数和目标区块高度值查找目标区块的索引值;
本申请实施例中,第二函数为GetAncestor函数,GetAncestor函数用于查找目标区块对应的索引值以及目标区块对应的父辈区块,GetAncestor函数也是自定义的。
一种实现方式中,定义GetAncestor函数的用途为,如果当前区块高度即输入到GetAncestor中的区块高度为奇数时,可以用来往前定位某个区块的查找。输入参数即为目标区块高度height,返回为找到的目标区块的blockindex。blockindex是区块索引数据结构,里面包含了区块头中的所有属性,此外还有区块在链上的高度等信息,一个blockindex对应唯一一个区块block。
根据第二函数和目标区块高度值查找目标区块的索引值可以通过如下方式实现,在第二函数中输入目标区块高度值,根据目标区块高度值和预设循环输出目标区块的索引值,预设循环是预先设定的。其中,根据目标区块高度值的大小又分为步骤S3和步骤S4这两种情况,具体如下:
S3:如果目标区块高度值小于0或大于区块链的最大区块高度值,第二函数返回空值;
S4:如果目标区块高度值大于0且不大于区块链的最大区块高度值,第二函数返回目标区块的索引值,以根据索引值查找到对应的区块。
为了进一步理解上述步骤,现结合具体实例对步骤S3和步骤S4的实现逻辑进行详细说明。如果输入的目标区块高度值小于0或者大于区块链的最大区块高度值(高度大于当前区块链的最大高度),第二函数直接返回空值。否则,进入下一步,可以定义一个高度步长heightWalk,高度步长的作用是定义每次创建索引或者查找时需要跳跃的间隔是多少,即可以用来确认预设间隔如第一预设间隔、第二预设间隔,这些条件都可以是预设规则。
一种实现方式中,heightWalk的初始值为当前blockindex的区块高度,然后创建一个while循环,条件为(heightWalk > height),这个条件的作用是,当步长仍然大于区块高度时,继续创建分级索引,直到步长比这个区块高度小为止。然后调用GetSkipHeight获取层级索引,判断拿到高度是否就是目标高度的区块,如果是,则赋值并返回,如果不是,则继续循环。这个过程也就是多级索引的实现原理,索引用GetSkipHeight来实现,直到查询到目标区块为止。具体的,上述过程可以通过如下代码实现(代码仅为示意性说明):
/**
* @brief CRegularBlockIndex::GetAncestor
* @param height
* @return
*/
CRegularBlockIndex* CRegularBlockIndex::GetAncestor(int height)
{
if((height > this->nHeight) || (height < 0))
{
return nullptr;
}
CRegularBlockIndex* pindexWalk = this;
int heightWalk = this->nHeight;
while(heightWalk > height)
{
int heightSkip = this->GetSkipHeight(heightWalk);
int heightSkipPrev = this->GetSkipHeight(heightWalk - 1);
if((pindexWalk->pskip != nullptr) && ((heightSkip == height)|| ((heightSkip > height) && !((heightSkipPrev < heightSkip - 2) &&(heightSkipPrev >= height)))))
{
pindexWalk = pindexWalk->pskip;
heightWalk = heightSkip;
}
else
{
pindexWalk = pindexWalk->pprevRB;
heightWalk--;
}
}
return pindexWalk;
};//回溯并查找对应的父辈区块。
实际场景中,区块链的链式数据结构是会延长和更新的,本申请实施例还提供一种BuildSkip方法,用于在区块链延长时,更新区块链的多级索引。在具体的使用过程中,每次有查询需要的区块时,可以直接使用GetSkipHeight来获取对应想要的区块,每次插入时,可以用BuildSkip更新索引。BuildSkip的主要功能就是对当前区块在区块链中的blockindex以及其父区块的索引进行重新构建,目标是解决当区块链延长时的索引层更新的问题,会再次调用上述功能算法。每次新增区块到链上时,都会调用buidskip来创建新的索引,buidskip就会动态去更新索引需要的级数。例如,调用的语句可以为:pskip = this->pprevRB->GetAncestor(this->GetSkipHeight(this->nHeight));
一种实现方式中,buidskip方法的部分代码如下(以下代码仅为示意性说明):
/**
* @brief CBlockIndex::BuildSkip
*/
void CRegularBlockIndex::BuildSkip()
{
if(this->pprevRB)
{
pskip = this->pprevRB->GetAncestor(this->GetSkipHeight(this->nHeight));
}
}//核心功能:在区块链有延长更新时被调用,目的是利用当前区块的高度,在区块链链上往前更新索引的层级,以及更新索引。
由以上技术方案可知,本申请提供一种基于区块链的链式数据结构的区块快速查找方法,包括:根据第一函数和区块链高度按照预设规则为所有区块建立多级索引,以使每个区块对应的索引落在预设阈值范围内;在查找目标区块时,根据第二函数和目标区块高度值查找目标区块的索引值;如果目标区块高度值小于0或大于区块链的最大区块高度值,第二函数返回空值;如果目标区块高度值大于0且不大于区块链的最大区块高度值,第二函数返回目标区块的索引值,以根据索引值查找到对应的区块。本申请通过在链式数据结构中建立多级索引的方式,将原来查询目标区块的时间复杂度O(n)降为Olog(n),解决了在区块链的链式数据结构中,随着区块链的延长区块查找效率低的问题。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
Claims (10)
1.基于区块链的链式数据结构的区块快速查找方法,其特征在于,包括:
根据第一函数和区块链高度按照预设规则为所有区块建立多级索引,以使每个区块对应的索引落在预设阈值范围内;
在查找目标区块时,根据第二函数和目标区块高度值查找所述目标区块的索引值;
如果所述目标区块高度值小于0或大于所述区块链的最大区块高度值,所述第二函数返回空值;
如果所述目标区块高度值大于0且不大于所述区块链的最大区块高度值,所述第二函数返回所述目标区块的索引值,以根据所述索引值查找到对应的区块。
2.根据权利要求1所述的基于区块链的链式数据结构的区块快速查找方法,其特征在于,在根据第一函数和区块链高度按照预设规则为所有区块建立多级索引之前,还包括:
新节点加入所述区块链时,利用区块头,在内存中创建新的区块数据结构的区块索引,并将所述区块索引根据父区块指向以顺序相连的方式构建一个内存中的区块链链表。
3.根据权利要求1所述的基于区块链的链式数据结构的区块快速查找方法,其特征在于,根据第一函数和区块链高度按照预设规则为所有区块建立多级索引,以使每个区块对应的索引落在预设阈值范围内,包括:
在所述第一函数中输入所述区块链高度,当所述区块链高度大于2时,判断所述区块链高度的奇偶性;
如果所述区块链高度是偶数,将所述区块链高度的最低位转为0,得到第一转换高度,以及返回所述第一转换高度;
如果所述区块链高度是奇数,将所述区块链高度减掉1后的最低位转为0,得到中间转换高度,将所述中间转换高度加1得到第二转换高度,以及返回所述第二转换高度。
4.根据权利要求1所述的基于区块链的链式数据结构的区块快速查找方法,其特征在于,根据第二函数和目标区块高度值查找所述目标区块的索引值,包括:
在所述第二函数中输入所述目标区块高度值;
根据所述目标区块高度值和预设循环输出所述目标区块的索引值,所述预设循环是预先设定的。
5.根据权利要求1所述的基于区块链的链式数据结构的区块快速查找方法,其特征在于,所述多级索引是通过如下方式建立的:
每间隔第一预设间隔数量的区块建立一个对应的第一层区块索引,所有所述第一层区块索引构成一级索引;
以所述一级索引为基础,每间隔第二预设间隔数量的所述第一层区块索引建立一个第二层区块索引,所有所述第二层区块索引构成二级索引;
以所述二级索引为基础,每间隔第三预设间隔数量的所述第二层区块索引建立一个第三层区块索引,所有所述第三层区块索引构成三级索引;
直至满足所述预设规则及预设数量的索引级别。
6.根据权利要求5所述的基于区块链的链式数据结构的区块快速查找方法,其特征在于,所述第一预设间隔、所述第二预设间隔及所述第三预设间隔相同。
7.根据权利要求1所述的基于区块链的链式数据结构的区块快速查找方法,其特征在于,还包括:如果所述区块链高度小于2,所述第一函数返回0,不建立所述区块的索引。
8.根据权利要求1所述的基于区块链的链式数据结构的区块快速查找方法,其特征在于,所述第一函数为GetSkipHeight函数,所述GetSkipHeight函数用于为所述区块及所述索引创建对应的索引。
9.根据权利要求1所述的基于区块链的链式数据结构的区块快速查找方法,其特征在于,所述第二函数为GetAncestor函数,所述GetAncestor函数用于查找所述目标区块对应的索引值以及所述目标区块对应的父辈区块。
10.根据权利要求1所述的基于区块链的链式数据结构的区块快速查找方法,其特征在于,还包括:创建BuildSkip方法,用于在所述区块链延长时,更新所述区块链的多级索引。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111574920.0A CN113961568A (zh) | 2021-12-22 | 2021-12-22 | 基于区块链的链式数据结构的区块快速查找方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111574920.0A CN113961568A (zh) | 2021-12-22 | 2021-12-22 | 基于区块链的链式数据结构的区块快速查找方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113961568A true CN113961568A (zh) | 2022-01-21 |
Family
ID=79473472
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111574920.0A Pending CN113961568A (zh) | 2021-12-22 | 2021-12-22 | 基于区块链的链式数据结构的区块快速查找方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113961568A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115017103A (zh) * | 2022-08-08 | 2022-09-06 | 平安银行股份有限公司 | 金融业务影像信息获取方法、装置、电子设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106844477A (zh) * | 2016-12-23 | 2017-06-13 | 北京众享比特科技有限公司 | 区块链系统、区块查找方法和区块链后向同步方法 |
CN109791594A (zh) * | 2016-08-12 | 2019-05-21 | Altr解决方案公司 | 为了在多个不可变数据结构上持续存储而对数据进行分段 |
CN110471923A (zh) * | 2019-08-12 | 2019-11-19 | 深圳前海微众银行股份有限公司 | 一种区块链交易记录的处理方法及装置 |
CN112269791A (zh) * | 2020-11-30 | 2021-01-26 | 上海特高信息技术有限公司 | 账本索引跳表的构建方法及使用其的区块链账本处理方法 |
US20210165890A1 (en) * | 2019-12-02 | 2021-06-03 | Schvey, Inc. D/B/A Axoni | Cross-partition calls in partitioned, tamper-evident data stores |
CN113535732A (zh) * | 2021-07-23 | 2021-10-22 | 东北大学 | 面向信誉-行为关联双区块链的可验证查询优化方法 |
-
2021
- 2021-12-22 CN CN202111574920.0A patent/CN113961568A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109791594A (zh) * | 2016-08-12 | 2019-05-21 | Altr解决方案公司 | 为了在多个不可变数据结构上持续存储而对数据进行分段 |
CN106844477A (zh) * | 2016-12-23 | 2017-06-13 | 北京众享比特科技有限公司 | 区块链系统、区块查找方法和区块链后向同步方法 |
CN110471923A (zh) * | 2019-08-12 | 2019-11-19 | 深圳前海微众银行股份有限公司 | 一种区块链交易记录的处理方法及装置 |
US20210165890A1 (en) * | 2019-12-02 | 2021-06-03 | Schvey, Inc. D/B/A Axoni | Cross-partition calls in partitioned, tamper-evident data stores |
CN112269791A (zh) * | 2020-11-30 | 2021-01-26 | 上海特高信息技术有限公司 | 账本索引跳表的构建方法及使用其的区块链账本处理方法 |
CN113535732A (zh) * | 2021-07-23 | 2021-10-22 | 东北大学 | 面向信誉-行为关联双区块链的可验证查询优化方法 |
Non-Patent Citations (2)
Title |
---|
QISHUAI: "VersionBits模块解析", 《HTTPS://WWW.JIANSHU.COM/P/3DF8F4F2408C?UTM_CAMPAIGN=MALESKINE&UTM_CONTENT=NOTE&UTM_MEDIUM=SEO_NOTES&UTM_SOURCE=RECOMMENDATION》 * |
许鹏程 等: "引入交叉熵与动态故障集的含风电大电网可靠性评估", 《电力系统自动化》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115017103A (zh) * | 2022-08-08 | 2022-09-06 | 平安银行股份有限公司 | 金融业务影像信息获取方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4805315B2 (ja) | データ構造によるコンピュータ表現及びそれに関連する符号化/復号化方法 | |
US11899667B2 (en) | Efficient use of trie data structure in databases | |
JP3771271B2 (ja) | コンパクト0完全木における順序付けられたキーの集まりの記憶と検索のための装置及び方法 | |
EP1360616B1 (en) | Database system and query optimiser | |
CN109656798B (zh) | 基于顶点重排序的超级计算机大数据处理能力测试方法 | |
US20160103858A1 (en) | Data management system comprising a trie data structure, integrated circuits and methods therefor | |
Müller et al. | Retrieval and perfect hashing using fingerprinting | |
Hadian et al. | Interpolation-friendly B-trees: Bridging the Gap Between Algorithmic and Learned Indexes. | |
CN111126625A (zh) | 一种可扩展的学习索引方法及系统 | |
CN111666468A (zh) | 一种基于团簇属性在社交网络中搜索个性化影响力社区的方法 | |
US7130859B2 (en) | Data structure for search | |
CN113961568A (zh) | 基于区块链的链式数据结构的区块快速查找方法 | |
US8976048B2 (en) | Efficient processing of Huffman encoded data | |
US7624326B2 (en) | Encoding device and method, decoding device and method, program, and recording medium | |
CN116010664A (zh) | 基于mptt和双亲查找的数据处理方法及系统 | |
Mohan et al. | Computationally optimal metric-first code tree search algorithms | |
CN113630123B (zh) | 一种数据压缩系统及方法 | |
Cabrera | On indexing de Bruijn sequences | |
US6246349B1 (en) | Method and system for compressing a state table that allows use of the state table without full uncompression | |
US6367054B1 (en) | Method of generating finite state data for designing a cascade decomposed logic circuit | |
CN113254025B (zh) | 基于原语状态机的关键字特征集合编译方法、装置及设备 | |
CN107025255B (zh) | 用于确定对象序列中的对象的索引的系统和方法 | |
CN113961713A (zh) | 基于层次编码的图数据结构表示、存储、查询方法及装置 | |
CN117667976A (zh) | 一种数据处理方法、装置、设备及存储介质 | |
Liddell et al. | Length-restricted coding in static and dynamic frameworks |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20220121 |