一种区块链数据查询方法、终端及存储介质

文档序号:36725781发布日期:2024-01-16 12:32阅读:19来源:国知局
一种区块链数据查询方法、终端及存储介质

本发明涉及数据查询,尤其涉及一种区块链数据查询方法、终端及存储介质。


背景技术:

1、区块链采取全复制的数据存储机制,为每个节点保留整个区块链的完整副本。每个副本都是一个区块链账本,其记录了区块链的完整历史。区块链中需要存储和管理的数据主要包括:当前状态数据和历史状态数据。其中,当前状态数据是节点处理完从创世区块到当前高度的所有区域和交易后形成的最终结果;历史状态数据是从创世区块到达当前状态的路径,包括区块数据和交易数据。目前一般是将当前状态数据存储于状态数据库中,以及将历史状态数据以历史账本文件的形式存储。

2、而随着区块链技术和产业的发展,区块链技术已经在众多行业得以应用,包括金融、政务能源、工业生产、医疗、物流等,常常涉及对历史状态数据的检索。以物流应用为例,某包裹位置以当前状态数据形式存储在区块链上,区块链可以快速检索到该获取的当前所在位置(当前状态数据),却无法快速知晓该包裹在某历史事件内的所在位置(历史状态数据)。

3、现有技术中主要通过两种方法实现对区块链上历史状态数据的检索:第一种方法是在检索某个历史状态数据时,需逐一获取区块文件,反序列化文件进行检索,若该区块文件中不符合待查信息,需再获取下一区块文件,再反序列化,循环往复直至满足检索条件或遍历完整个区块链账本为止;第二种方法是将历史状态数据以一定时间段作为分割,分别将各个时间段内的状态值以当前状态数据的形式存入状态数据库中。在检索历史状态数据时,先对待查时间段与状态数据库中的存储时间段做对比,去除有时间段交集的状态值,再返回结果,从而实现对历史状态数据的检索。

4、上述第一种方法简单且原始,需要大量文件操作及反序列化操作,导致大量磁盘io和处理器开销,检索效率极其低下。第二种方法虽然相较于上述第一种方案能够提高一定的检索效率,但是第二种方法需要维护每个历史状态数据在不同时间段的状态值,这意味着即使某个历史状态数据后续不在变更,仍需随着时间进展将每一时间段的历史状态值存入状态数据库,造成无效存储;并且在大部分应用场景下,只有小部分的历史状态数据会面临频繁变更,从而会导致大量不必要的存储开销;另外,由于区块链不可篡改的特性,区块链账本是一个只增不减的存储结构,随着数据量的不断增加,给状态数据库和内存带来了巨大的压力,从而导致严重阻碍正常的系统运行甚至系统崩溃。

5、基于此,如何在提高区块链历史状态数据的检索效率的情况下,节约存储开销成为亟需解决的技术问题。


技术实现思路

1、本发明的主要目的在于提供一种区块链数据查询方法、终端及存储介质,旨在解决现有技术中区块链历史状态数据的检索效率低,且所需存储开销大的问题。

2、为了实现上述目的,本发明提供了一种区块链数据查询方法,其包括:

3、接收来自客户端的历史数据查询请求并获取预设区块聚合索引;所述历史数据查询请求包括:待查询主体标识、待查询时间范围,所述预设区块聚合索引由若干包括索引块头和索引块体的索引块连接组成;

4、基于所述索引块头中的索引作用时间范围和索引写集,根据所述待查询时间范围和所述待查询主体标识,从预设区块聚合索引中确定所述历史数据查询请求的目标索引块;所述索引作用时间范围用于表征所述索引块记录的区块链区块中执行交易涉及的时间范围;所述索引写集由所述索引块记录的区块链区块的区块写集组成;所述区块写集由所述区块链区块中的交易写集组成;

5、基于所述目标索引块的索引块体,根据所述待查询时间范围和所述待查询主体标识,从所述目标索引块中确定所述历史数据查询请求对应的目标区块记录;所述索引块体由若干区块记录组成,所述区块记录包括:区块作用时间以及所述区块写集;

6、将所述目标区块记录对应的区块id发送至所述客户端,以使所述客户端基于所述区块id对应的目标区块进行账本查询,得到所述历史数据查询请求的查询结果。

7、可选地,所述基于所述索引块头中的索引作用时间范围和索引写集,根据所述待查询时间范围和所述待查询主体标识,从预设区块聚合索引中确定所述历史数据查询请求的目标索引块,具体包括:

8、根据所述待查询时间范围以及所述索引块头中的索引作用时间范围,确定所述预设区块聚合索引中与所述待查询时间范围有交集的索引块,作为所述历史数据查询请求的待定索引块;

9、将所述待查询主体标识与所述待定索引块的所述索引块头的索引写集进行匹配,根据相应的匹配结果确定所述历史数据查询请求的目标索引块。

10、可选地,所述索引块头还包括:第一布隆过滤器;所述将所述待查询主体标识与所述待定索引块的所述索引块头的索引写集进行匹配,具体包括:

11、通过所述索引块头的第一布隆过滤器,对所述待查询主体标识与所述待定索引块的所述索引块头的索引写集进行匹配。

12、可选地,所述基于所述目标索引块的索引块体,根据所述待查询时间范围和所述待查询主体标识,从所述目标索引块中确定所述历史数据查询请求对应的目标区块记录,具体包括:

13、基于所述目标索引块的索引块体中的各区块记录的区块作用时间,确定所述目标索引块的索引块体中与所述待查询时间范围有交集的区块记录,作为待定区块记录;

14、将所述待查询主体标识与所述待定区块记录中的所述区块写集进行匹配,根据相应的匹配结果确定所述历史数据查询请求的目标区块记录。

15、可选地,所述区块记录还包括:第二布隆过滤器;所述将所述待查询主体标识与所述待定区块记录中的所述区块写集进行匹配,具体包括:

16、通过所述待定区块记录中的第二布隆过滤器,将所述待查询主体标识与所述待定区块记录中的所述区块写集进行匹配。

17、可选地,所述索引作用时间范围用于表征所述索引块记录的区块链区块中执行成功的交易涉及的时间范围。

18、可选地,所述区块写集为所述区块链区块中的交易记录中的键值对的键参数,所述键参数用于表征所述交易记录的交易主体。

19、可选地,在获取预设区块聚合索引之前,所述方法还包括:

20、针对每个上链区块,遍历所述上链区块中所有交易记录,并根据所述交易记录生成所述区块写集以及所述区块作用时间;其中,所述上链区块用于表示所述区块链中已上链的区块链区块;

21、基于所述上链区块的区块标识、所述区块写集以及所述区块作用时间构成所述区块记录;

22、按照所述上链区块的上链顺序,将预设数量连续连接的所述上链区块的区块记录组成所述索引块体;

23、根据所述索引块体中的各所述区块记录,生成对应的所述索引块头;

24、将所述索引块头与对应的所述索引块体组成所述索引块,并将所述索引块按照预设顺序连接得到所述预设区块聚合索引。

25、为了实现上述目的,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如上任意一项所述的区块链数据查询方法中的步骤。

26、为了实现上述目的,本发明实施例还提供了一种终端,其包括:处理器和存储器;所述存储器上存储有可被所述处理器执行的计算机可读程序;所述处理器执行所述计算机可读程序时实现如上任意一项所述的区块链数据查询方法中的步骤。

27、本发明通过索引块头中的索引作用时间范围和索引写集,根据待查询时间范围和待查询主体标识,从预设区块聚合索引中确定历史数据查询请求的目标索引块;基于目标索引块的索引块体,根据待查询时间范围和待查询主体标识,从目标索引块中确定历史数据查询请求对应的目标区块记录;再将目标区块记录对应的区块id发送至所述客户端,以使客户端基于该区块id对应的目标区块进行账本查询,得到所述历史数据查询请求的查询结果,一方面通过区块链的预设区块聚合索引实现了对待查数据所在区块链区块的快速定位,可以避免大量系统开销,提高区块链数据的检索查询效率;另一方面区块链的预设区块聚合索引仅提供对历史状态数据的摘要聚合,不会随时间发展产生大量额外冗余数据,有效节约存储开销,避免影响区块链系统正常运行和系统宕机崩溃的风险。基于此,实现了在提高区块链的历史状态数据查询检索效率的同时,节约存储空间资源。

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