区块链交易索引的存储方法、装置、计算机设备及介质转让专利

申请号 : CN202011640211.3

文献号 : CN112765271B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 邱炜伟李伟黄方蕾胡麦芳张珂杰蔡亮

申请人 : 杭州趣链科技有限公司

摘要 :

本发明公开了一种区块链交易索引的存储方法、装置、计算机设备及介质,所述方法包括:构建交易哈希,交易哈希包括版本信息、时间戳信息和交易哈希值,基于时间戳信息;从交易索引存储数据库中获取与时间戳信息匹配的子数据库,作为目标数据库,其中,交易索引存储数据库包含至少两个子数据库,每个子数据库用于存储预设时间区间的交易哈希;将交易哈希作为Key,根据交易哈希对应交易的区块号和交易在区块内的编号,确定Value,并将Key和Value组成的键值对作为交易哈希索引,存储至目标数据库,本发明提高了区块链中交易数据读写效率。

权利要求 :

1.一种区块链交易索引的存储方法,其特征在于,所述区块链交易索引的存储方法包括:构建交易哈希,所述交易哈希包括版本信息、时间戳信息和交易哈希值;

基于所述时间戳信息,从交易索引存储数据库中获取与所述时间戳信息匹配的子数据库,作为目标数据库,其中,所述交易索引存储数据库包含至少两个子数据库,每个所述子数据库用于存储预设时间区间的交易哈希;

将所述交易哈希作为Key,根据所述交易哈希对应交易的区块号和交易在区块内的编号,确定Value ,并将所述Key和所述Value组成的键值对作为交易哈希索引,存储至所述目标数据库;

所述构建交易哈希包括:

在区块链接收到交易信息时,获取所述交易信息中时间戳信息,并根据所述交易信息,计算交易哈希值;

基于预设方式,确定版本信息;

根据所述版本信息、所述时间戳信息和所述交易哈希值,生成交易哈希。

2.如权利要求1所述的区块链交易索引的存储方法,其特征在于,所述基于所述时间戳信息,从交易索引存储数据库中获取与所述时间戳信息匹配的子数据库,作为目标数据库包括:获取所述子数据库对应的预设时间区间;

通过匹配的方式,确定所述时间戳信息所属的预设时间区间,作为目标时间区间;

将所述目标时间区间对应的子数据库,作为所述目标数据库。

3.如权利要求1所述的区块链交易索引的存储方法,其特征在于,所述子数据库预设存储上限,所述将所述Key和所述Value组成的键值对作为交易哈希索引,存储至所述目标数据库包括:判断所述目标数据库是否为最新的数据库,得到第一判断结果;

在所述第一判断结果为所述目标数据库不是最新的数据库时,将所述Key和所述Value作为键值对,存储至所述目标数据库;

在所述第一判断结果为所述目标数据库是最新的数据库时,则判断所述时间戳信息是否小于等于所述目标数据库预设时间区间对应的最大时间戳,得到第二判断结果;

若所述第二判断结果为所述时间戳信息小于等于所述目标数据库预设时间区间对应的最大时间戳,则将所述Key和所述Value作为键值对,存储至所述目标数据库;

若所述第二判断结果为所述时间戳信息大于所述目标数据库预设时间区间对应的最大时间戳,则判断所述目标数据库中存储的数据量是否达到所述预设存储上限,得到第三判断结果;

在所述第三判断结果为未达到所述预设存储上限时,将所述Key和所述Value作为键值对,存储至所述目标数据库,并采用所述时间戳信息对所述目标数据库的最大时间戳进行更新,得到更新后的预设时间区间;

在所述第三判断结果为达到所述预设存储上限时,执行新建子数据库处理,将新建的子数据库的预设时间区间的上下边界,均设置为所述时间戳信息,并将所述Key和所述Value作为键值对,存储至所述新建的子数据库。

4.如权利要求1至3任一项所述的区块链交易索引的存储方法,其特征在于,所述区块链存储方法还包括:若接收到交易哈希查询请求,则对所述交易哈希查询请求进行解析,得到目标时间戳信息;

基于所述目标时间戳信息,确定待查询的子数据库;

通过键值对查询的方式,从所述待查询的子数据库中,获取目标区块号;

根据磁盘读取的方式,获取所述目标区块号对应的区块,作为目标区块;

遍历所述目标区块,获取所述交易哈希查询请求对应的交易信息。

5.如权利要求1所述的区块链交易索引的存储方法,其特征在于,所述交易哈希中存储的版本信息、时间戳信息和交易哈希值的顺序,依次为版本信息、时间戳信息和交易哈希值。

6.一种区块链交易索引的存储装置,其特征在于,所述区块链交易索引的存储装置包括:构建模块,用于构建交易哈希,所述交易哈希包括版本信息、时间戳信息和交易哈希值;

匹配模块,用于基于所述时间戳信息,从交易索引存储数据库中获取与所述时间戳信息匹配的子数据库,作为目标数据库,其中,所述交易索引存储数据库包含至少两个子数据库,每个所述子数据库用于存储预设时间区间的交易哈希,在区块链接收到交易信息时,获取所述交易信息中时间戳信息,并根据所述交易信息,计算交易哈希值;

基于预设方式,确定版本信息;

根据所述版本信息、所述时间戳信息和所述交易哈希值,生成交易哈希;

存储模块,用于将所述交易哈希作为Key,根据所述交易哈希对应交易的区块号和交易在区块内的编号,确定Value,并将所述Key和所述Value组成的键值对作为交易哈希索引,存储至所述目标数据库。

7.如权利要求6所述的区块链交易索引的存储装置,其特征在于,所述匹配模块包括:区间范围获取单元,用于获取所述子数据库对应的预设时间区间;

目前区间确定单元,用于通过匹配的方式,确定所述时间戳信息所属的预设时间区间,作为目标时间区间;

目标数据库确定单元,用于将所述目标时间区间对应的子数据库,作为所述目标数据库。

8.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至

5任一项所述的区块链交易索引的存储方法。

9.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述的区块链交易索引的存储方法。

说明书 :

区块链交易索引的存储方法、装置、计算机设备及介质

技术领域

[0001] 本发明涉及区块链技术领域,尤其涉及一种区块链交易索引的存储方法、装置、计算机设备及介质。

背景技术

[0002] 目前区块链中,交易哈希是根据交易内容,通过哈希算法计算得到的无规则字符数组。而区块链往往需要对外提供一类接口,通过交易哈希获取交易及相关信息,包括回执等等。首先通过交易哈希,获取到此交易所在区块的区块号,之后再通过区块号获取完整区块,遍历区块找到此交易。同样,区块链系统需要存储交易哈希。由于交易哈希完全随机,同时对其读写非常频繁,在数据量较大时需要耗费较长时间,导致存储层将面临随机读写问题,效率极低。

发明内容

[0003] 本发明实施例提供一种区块链交易索引的存储方法、装置、计算机设备和存储介质,以提高区块链上交易数据读写的效率。
[0004] 为了解决上述技术问题,本申请实施例提供一种区块链交易索引的存储方法,包括:
[0005] 构建交易哈希,所述交易哈希包括版本信息、时间戳信息和交易哈希值;
[0006] 基于所述时间戳信息,从交易索引存储数据库中获取与所述时间戳信息匹配的子数据库,作为目标数据库,其中,所述交易索引存储数据库包含至少两个子数据库,每个所述子数据库用于存储预设时间区间的交易哈希;
[0007] 将所述交易哈希作为Key,根据所述交易哈希对应交易的区块号和交易在区块内的编号,确定Value,并将所述Key和所述Value组成的键值对作为交易哈希索引,存储至所述目标数据库。
[0008] 可选地,所述构建交易哈希包括:
[0009] 在区块链接收到交易信息时,获取所述交易信息中时间戳信息,并根据所述交易信息,计算交易哈希值;
[0010] 基于预设方式,确定版本信息;
[0011] 根据所述版本信息、所述时间戳信息和所述交易哈希值,生成交易哈希。
[0012] 可选地,所述基于所述时间戳信息,从交易索引存储数据库中获取与所述时间戳信息匹配的子数据库,作为目标数据库包括:
[0013] 获取所述子数据库对应的预设时间区间;
[0014] 通过匹配的方式,确定所述时间戳信息所属的预设时间区间,作为目标时间区间;
[0015] 将所述目标时间区间对应的子数据库,作为所述目标数据库。
[0016] 可选地,所述子数据库预设存储上限,所述将所述Key和所述Value组成的键值对作为交易哈希索引,存储至所述目标数据库包括:
[0017] 判断所述目标数据库是否为最新的数据库,得到第一判断结果;
[0018] 在所述第一判断结果为所述目标数据库不是最新的数据库时,将所述Key和所述Value作为键值对,存储至所述目标数据库;
[0019] 在所述第一判断结果为所述目标数据库是最新的数据库时,则判断所述时间戳信息是否小于等于所述目标数据库预设时间区间对应的最大时间戳,得到第二判断结果;
[0020] 若所述第二结果为所述时间戳信息小于等于所述目标数据库预设时间区间对应的最大时间戳,则将所述Key和所述Value作为键值对,存储至所述目标数据库;
[0021] 若所述第二结果为所述时间戳信息大于所述目标数据库预设时间区间对应的最大时间戳,则判断所述目标数据库中存储的数据量是否达到所述预设存储上限,得到第三判断结果;
[0022] 在所述第三判断结果为未达到所述预设存储上限时,将所述Key和所述Value作为键值对,存储至所述目标数据库,并采用所述时间戳信息对所述目标数据库的最大时间戳进行更新,得到更新后的预设时间区间;
[0023] 在所述第三判断结果为达到所述预设存储上限时,执行新建子数据库处理,将新建的子数据库的预设时间区间的上下边界,均设置为所述时间戳信息,并将所述Key和所述Value作为键值对,存储至所述新建的子数据库。
[0024] 可选地,所述区块链存储方法还包括:
[0025] 若接收到交易哈希查询请求,则对所述交易哈希查询请求进行解析,得到目标时间戳信息;
[0026] 基于所述目标时间戳信息,确定待查询的子数据库;
[0027] 通过键值对查询的方式,从所述待查询的子数据库中,获取目标区块号;
[0028] 根据磁盘读取的方式,获取所述目标区块号对应的区块,作为目标区块;
[0029] 遍历所述目标区块,获取所述交易哈希查询请求对应的交易信息。
[0030] 为了解决上述技术问题,本申请实施例还提供一种区块链交易索引的存储装置,包括:
[0031] 构建模块,用于构建交易哈希,所述交易哈希包括版本信息、时间戳信息和交易哈希值;
[0032] 匹配模块,用于基于所述时间戳信息,从交易索引存储数据库中获取与所述时间戳信息匹配的子数据库,作为目标数据库,其中,所述交易索引存储数据库包含至少两个子数据库,每个所述子数据库用于存储预设时间区间的交易哈希;
[0033] 存储模块,用于将所述交易哈希作为Key,根据所述交易哈希对应交易的区块号和交易在区块内的编号,确定Value,并将所述Key和所述Value组成的键值对作为交易哈希索引,存储至所述目标数据库。
[0034] 可选地,所述构建模块包括:
[0035] 哈希值计算单元,用于在区块链接收到交易信息时,获取所述交易信息中时间戳信息,并根据所述交易信息,计算交易哈希值;
[0036] 版本确定单元,用于基于预设方式,确定版本信息;
[0037] 生成单元,用于根据所述版本信息、所述时间戳信息和所述交易哈希值,生成交易哈希。
[0038] 可选地,所述匹配模块包括:
[0039] 区间范围获取单元,用于获取所述子数据库对应的预设时间区间;
[0040] 目前区间确定单元,用于通过匹配的方式,确定所述时间戳信息所属的预设时间区间,作为目标时间区间;
[0041] 目标数据库确定单元,用于将所述目标时间区间对应的子数据库,作为所述目标数据库。
[0042] 可选地,所述子数据库预设存储上限,所述存储模块包括:
[0043] 第一判断单元,用于判断目标数据库是否为最新的数据库,得到第一判断结果;
[0044] 第一存储单元,用于在第一判断结果为目标数据库不是最新的数据库时,将Key和Value作为键值对,存储至目标数据库;
[0045] 第二判断单元,用于在第一判断结果为目标数据库是最新的数据库时,则判断时间戳信息是否小于等于目标数据库预设时间区间对应的最大时间戳,得到第二判断结果;
[0046] 第二存储单元,用于若第二结果为时间戳信息小于等于目标数据库预设时间区间对应的最大时间戳,则将Key和Value作为键值对,存储至目标数据库;
[0047] 第三判断单元,用于若第二结果为时间戳信息大于目标数据库预设时间区间对应的最大时间戳,则判断目标数据库中存储的数据量是否达到预设存储上限,得到第三判断结果;
[0048] 第三存储单元,用于在第三判断结果为未达到预设存储上限时,将Key和Value作为键值对,存储至目标数据库,并采用时间戳信息对目标数据库的最大时间戳进行更新,得到更新后的预设时间区间;
[0049] 新建子数据库单元,用于在第三判断结果为达到预设存储上限时,执行新建子数据库处理,将新建的子数据库的预设时间区间的上下边界,均设置为时间戳信息,并将Key和Value作为键值对,存储至新建的子数据库。可选地,所述区块链交易索引的存储装置还包括:
[0050] 请求解析模块,用于若接收到交易哈希查询请求,则对所述交易哈希查询请求进行解析,得到目标时间戳信息;
[0051] 子数据库确定模块,用于基于所述目标时间戳信息,确定待查询的子数据库;
[0052] 区块号获取模块,用于通过键值对查询的方式,从所述待查询的子数据库中,获取目标区块号;
[0053] 区块确定模块,用于根据磁盘读取的方式,获取所述目标区块号对应的区块,作为目标区块;
[0054] 遍历模块,用于遍历所述目标区块,获取所述交易哈希查询请求对应的交易信息。
[0055] 为了解决上述技术问题,本申请实施例还提供一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述区块链交易索引的存储方法的步骤。
[0056] 为了解决上述技术问题,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述区块链交易索引的存储方法的步骤。
[0057] 本发明实施例提供的区块链交易索引的存储方法、装置、计算机设备及存储介质,构建交易哈希,交易哈希包括版本信息、时间戳信息和交易哈希值,基于时间戳信息,从交易索引存储数据库中获取与时间戳信息匹配的子数据库,作为目标数据库,其中,交易索引存储数据库包含至少两个子数据库,每个子数据库用于存储预设时间区间的交易哈希,将交易哈希作为Key,根据交易哈希对应交易的区块号和交易在区块内的编号,确定Value,并将Key和Value组成的键值对作为交易哈希索引,存储至目标数据库,实现将交易哈希的随机写优化为顺序写,提高交易数据查询效率,同时,将交易哈希索引存储到独立的子数据库,在进行交易数据查询时,有利于快速获取待查询的交易哈希索引,进而根据交易哈希索引确定区块号,减少磁盘数据次数,提高交易数据读写效率。

附图说明

[0058] 为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0059] 图1是本申请可以应用于其中的示例性系统架构图;
[0060] 图2是本申请的区块链交易索引的存储方法的一个实施例的流程图;
[0061] 图3是根据本申请的区块链交易索引的存储装置的一个实施例的结构示意图;
[0062] 图4是根据本申请的计算机设备的一个实施例的结构示意图。

具体实施方式

[0063] 除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同;本文中在申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请;本申请的说明书和权利要求书及上述附图说明中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。本申请的说明书和权利要求书或上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。
[0064] 在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
[0065] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0066] 请参阅图1,如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
[0067] 用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。
[0068] 终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、MP3播放器(Moving Picture E界面显示perts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture E界面显示perts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。
[0069] 服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103上显示的页面提供支持的后台服务器。
[0070] 需要说明的是,本申请实施例所提供的区块链交易索引的存储方法由服务器执行,相应地,区块链交易索引的存储装置设置于服务器中。
[0071] 应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器,本申请实施例中的终端设备101、102、103具体可以对应的是实际生产中的应用系统。
[0072] 请参阅图2,图2示出本发明实施例提供的一种区块链交易索引的存储方法,以该方法应用在图1中的服务端为例进行说明,详述如下:
[0073] S201:构建交易哈希,交易哈希包括版本信息、时间戳信息和交易哈希值。
[0074] 具体地,在发生交易时,通过交易信息,生成版本信息、时间戳信息和交易哈希值,进而构建交易哈希。
[0075] 其中,版本信息用于保证交易哈希的兼容性,当区块数量增长至超过八字节的时候,将版本信息增加,可以将区块字段延长至十六个字节,避免后续兼容性的问题。
[0076] 其中,交易哈希中的时间戳信息直接取自交易携带的时间戳,在正常执行过程中,区块链打包并执行交易的顺序与交易生成的时间基本一致,确保交易在数据库写上的局部性和顺序性。
[0077] 其中,每一个哈希对应的交易就是唯一的交易,确保了交易的隐私性和安全性。
[0078] 构建交易哈希的具体实现过程,也可参见后续实施例的描述,为避免重复,此处不再赘述。
[0079] 优选地,本实施例中,交易哈希存储的版本信息、时间戳信息和交易哈希值的顺序,依次为版本信息、时间戳信息和交易哈希值。采用本实施例的交易哈希,将现有方式中无序的交易哈希有序化,在进行后续读写查询处理时,通过有序化的方式,节约大量时间,提高数据读写效率。
[0080] 考虑到当前区块哈希与交易哈希类似,均采用无规则字符数组的形式表示,这使得在进行区块查找时,需要通过区块哈希,获取到此区块的区块号,再通过区块号与区块哈希,获取完整区块,使得区块链系统需要存储两类信息,即区块哈希到区块号的索引信息,与区块号和区块哈希到区块全量数据的索引信息,在获取时,也需要进行两次磁盘访问,这使得数据读写效率不高。作为一种优选方案,在本实施例的一具体实施方案中,对区块哈希进行重新编码,将区块号直接嵌入区块哈希中,并增加版本号,得到通过将版本信息、区块号和区块哈希值,按照顺序组合而成的区块哈希。
[0081] 进一步地,本实施例优选的区块哈希中,第一个字节为版本信息,后八个字节为区块号,后缀字节为区块哈希结果。当区块数量增长至超过八字节的时候,将版本信息增加,可以将区块字段延长至十六个字节,确保后续兼容性的所有问题。
[0082] 例如,在一具体实现方式中,区块哈希计算时,假设当前版本为0,要存储100号区块,那么以十六进制表示,区块哈希的第一个字节即为0x00,后八个字节为0x0000000000000064,即前九个字节为0x000000000000000064,后面再缀上旧哈希计算方式得到的哈希值。通过区块哈希访问区块时,解析区块哈希的第二到第九字节,即可获取区块号100,并通过区块号获取区块。具体的版本信息、区块号与区块哈希值所使用的位数都可以根据具体场景做改变。
[0083] 应理解,采用本实施例优选的区块哈希,可以使得原本无序的区块哈希,按照版本信息和区块号进行排序,有利于提高数据查询的效率,同时,由于将区块号嵌入到区块哈希中,减少了区块哈希至区块号的索引存储开销,也减少接口读取时的一次磁盘访问,有利于通过区块哈希进行交易数据的存储和读写效率。
[0084] S202:基于时间戳信息,从交易索引存储数据库中获取与时间戳信息匹配的子数据库,作为目标数据库,其中,交易索引存储数据库包含至少两个子数据库,每个子数据库用于存储预设时间区间的交易哈希。
[0085] 本实施例中预设有交易索引存储数据库,该交易索引存储数据库包含至少两个子数据库,每个子数据库用于存储预设时间区间的交易哈希,包含最大时间戳和最小时间戳构成的预设时间区间,子数据库仅存储其对应的的预设时间区间范围内的交易哈希,通过将交易对应的时间戳信息与每个子数据进行匹配,确定当前交易数据需要存储的子数据库,作为目标数据库。
[0086] 需要说明的是,在数据量较少时,本实施例中的交易索引存储数据库包含子数据库数量也可以是一个,在后续随着存储数量的增加,动态进行子数据库的新建,具体过程可参考后续实施例的描述,为避免重复,此处不再赘述。
[0087] 应理解,本实施例中交易索引存储数据库包含至少两个子数据库,是作为本实施例在实际应用中的一种优选方式,通过多个子数据库的方式,对交易哈希索引进行有序存储,有利于提高交易查询效率。
[0088] 其中,预设时间区间可根据实际需要设定一直初始值,在后续通过新的交易哈希的插入到目标数据库时,可对其进行更新。
[0089] S203:将交易哈希作为Key,根据交易哈希对应交易的区块号和交易在区块内的编号,确定Value,并将Key和Value组成的键值对作为交易哈希索引,存储至目标数据库。
[0090] 具体地,将交易哈希作为Key,根据交易哈希对应交易的区块号和交易在区块内的编号,确定Value,实现以键值对的形式,将交易哈希和交易的区块号存储至目标数据库。
[0091] 其中,根据交易哈希对应交易的区块号和交易在区块内的编号,确定Value,具体可以是通过将交易的区块号和交易在区块内的编号,按照实际需求进行串联处理,得到Value。
[0092] 本实施例中,通过构建交易哈希,交易哈希包括版本信息、时间戳信息和交易哈希值,基于时间戳信息,从交易索引存储数据库中获取与时间戳信息匹配的子数据库,作为目标数据库,其中,交易索引存储数据库包含至少两个子数据库,每个子数据库用于存储预设时间区间的交易哈希,将交易哈希作为Key,根据交易哈希对应交易的区块号和交易在区块内的编号,确定Value,并将Key和Value组成的键值对作为交易哈希索引,存储至目标数据库,实现将交易的随机写优化为顺序写,并将交易存储到独立的子数据库,保证数据库的高性能读写,提高数据读写效率。
[0093] 在本实施例的一些可选的实现方式中,步骤S201中,构建交易哈希包括:
[0094] 在区块链接收到交易信息时,获取交易信息中时间戳信息,并根据交易信息,计算交易哈希值;
[0095] 基于预设方式,确定版本信息;
[0096] 根据版本信息、时间戳信息和交易哈希值,生成交易哈希。
[0097] 具体地,根据交易内信息,包括其时间信息,计算出交易哈希,交易中通常包含了发起方地址、接收方地址、交易payload、签名等等各类信息,交易哈希通常就是整合所有交易信息,使用哈希算法计算得到,哈希算法有非常多的选择。本实施例中,将时间信息嵌入在交易哈希中,在一具体实施方式中,第一个字节为版本信息,后续八个字节填充时间戳信息,最后连接上哈希算法计算得到的交易哈希值,即可组成一个交易哈希。
[0098] 例如,假设当前版本为0,当前时间戳为1603975389074698000,以十六进制表示,交易哈希的第一个字节即为0x00,后八个字节为0x1642771e3e442f00,即前九个字节为0x001642771e3e442f00,后面再缀上旧哈希计算方式得到的哈希值。在存储时,根据此时间戳,以及上述交易存储至数据库流程,插入数据库。
[0099] 其中,确定版本号的预设方式,可根据实际情况进行设定,此处不做限制,通过版本号的方式,可使得无序的交易哈希有序化,有利于提高在后续进行查询插入等数据处理时的数据处理效率。
[0100] 需要说明的是,版本信息的设定、时间戳信息的设定、哈希所使用的位数都可以根据具体场景做改变,此处不做具体限定。
[0101] 可选地,当区块数量增长至超过八字节的时候,将版本信息增加,可以将区块字段延长至十六个字节。这样的设计保证了后续兼容性的所有问题。
[0102] 本实施例中,通过版本信息、时间戳信息和交易哈希值,生成交易哈希,将用于进行的版本信息和时间戳信息写入到交易哈希,而无需通过通过磁盘读写的方式获取号,减少磁盘读写的次数,提高数据读写效率,采用时间戳信息作为,使得交易的随机写优化为顺序写,保证数据库的高性能读写,提高数据读写效率。
[0103] 在本实施例的一些可选的实现方式中,步骤S202中,基于时间戳信息,从交易索引存储数据库中获取与时间戳信息匹配的子数据库,作为目标数据库包括:
[0104] 获取子数据库对应的预设时间区间;
[0105] 通过匹配的方式,确定时间戳信息的预设时间区间,作为目标时间区间;
[0106] 将目标时间区间对应的子数据库,作为目标数据库。
[0107] 具体地,每个子数据库分别用于存储特定时间范围内的交易信息,记录该数据库中存储交易最小的时间戳与最大的时间戳,获取每个子数据库对应的预设时间区间,并与时间戳信息中的时间点进行匹配,若预设时间区间的最小的时间戳与最大的时间戳之间,包含的时间戳信息中的时间点,则将该预设时间区间作为目标时间区间,将目标时间区间对应的子数据库,作为目标数据库,后续采用该目标数据库进行该交易数据的读写。
[0108] 本实施例中,通过时间戳信息与每个子数据库对应的的预设时间区间进行匹配,确定目标数据库,实现目标数据库的快速确定,有利于提高后续数据读写效率和数据查询效率。
[0109] 在本实施例的一些可选的实现方式中,子数据库预设存储上限,步骤S203中,将Key和Value组成的键值对作为交易哈希索引,存储至目标数据库包括:
[0110] 判断目标数据库是否为最新的数据库,得到第一判断结果;
[0111] 在第一判断结果为目标数据库不是最新的数据库时,将Key和Value作为键值对,存储至目标数据库;
[0112] 在第一判断结果为目标数据库是最新的数据库时,则判断时间戳信息是否小于等于目标数据库预设时间区间对应的最大时间戳,得到第二判断结果;
[0113] 若第二结果为时间戳信息小于等于目标数据库预设时间区间对应的最大时间戳,则将Key和Value作为键值对,存储至目标数据库;
[0114] 若第二结果为时间戳信息大于目标数据库预设时间区间对应的最大时间戳,则判断目标数据库中存储的数据量是否达到预设存储上限,得到第三判断结果;
[0115] 在第三判断结果为未达到预设存储上限时,将Key和Value作为键值对,存储至目标数据库,并采用时间戳信息对目标数据库的最大时间戳进行更新,得到更新后的预设时间区间;
[0116] 在第三判断结果为达到预设存储上限时,执行新建子数据库处理,将新建的子数据库的预设时间区间的上下边界,均设置为时间戳信息,并将Key和Value作为键值对,存储至新建的子数据库。
[0117] 例如,在一具体实施方式中,存在三个子数据库,时间分别为8点到9点,9点到10点,10点到11点。如果新的交易哈希时间戳为7点就存在第一个子数据库,并将第一个数据库时间更新为7点到9点,如果新的交易哈希时间戳为八点半,就存在第一个子数据库,九点半就存在第二个数据库,十点半存在第三个。
[0118] 其中,判断目标数据库是否为最新的数据库,是通过判断目标数据库是否为上一次交易哈希存储的子数据库,若是,则为最新的数据库,若否,则不是最新的数据库。
[0119] 需要说明的是,偶尔有较老的交易出现,也能够根据其时间戳信息,找到正确的子数据库进行写入,且由于区块链的读请求集中于新数据,时间较为久远的数据库可以视情况关闭,减少内存占用,当需要读取时,将其重新打开读取即可,有利于提高数据读写效率。
[0120] 其中,预设存储上限可根据实际应用场景需求进行设定,例如,设定为2万条等,此处不做具体限定。
[0121] 应理解,对子数据库预设存储上限,限制了每一子数据库大小,在后续进行数据读写时,确保子数据库性能稳定,有利于提高数据读写效率。
[0122] 本实施例中,通过对目标数据库的存储情况进行限定,使得交易哈希按照时间戳顺序进行存储,有利于提高后续读写查询的效率,同时,由于限制了每一子数据库大小,因此读写性能稳定,提高数据读写效率。
[0123] 在本实施例的一些可选的实现方式中,该区块链交易索引的存储方法还包括:
[0124] 若接收到交易哈希查询请求,则对交易哈希查询请求进行解析,得到目标时间戳信息;
[0125] 基于目标时间戳信息,确定待查询的子数据库;
[0126] 通过键值对查询的方式,从待查询的子数据库中,获取目标区块号;
[0127] 根据磁盘读取的方式,获取目标区块号对应的区块,作为目标区块;
[0128] 遍历目标区块,获取交易哈希查询请求对应的交易信息。
[0129] 本实施例中,每个子数据库存储预设时间区间的交易哈希,基于目标时间戳信息,确定待查询的子数据库,是通过每个子数据库对应的预设时间区间来进行匹配,将包含目标时间戳信息中时间点的子数据库,确定为存储有目标时间戳信息对应的交易哈希的子数据库,进而作为待查询的子数据库。
[0130] 本实施例中,在接收到交易哈希查询请求时,通过对交易哈希查询请求进行解析,得到目标时间戳信息,再基于目标时间戳信息,确定待查询的子数据库,子数据按照时间区间进行顺序存储,有利于提高确定待查询的子数据库的效率,同时通过键值对查询的方式,从待查询的子数据库中,查询获取目标区块号,再根据磁盘读取的方式,获取目标区块号对应的区块,作为目标区块,进而遍历目标区块,获取交易哈希查询请求对应的交易信息,减少磁盘读取的次数,提高交易信息查询的效率。
[0131] 应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
[0132] 图3示出与上述实施例区块链交易索引的存储方法一一对应的区块链交易索引的存储装置的原理框图。如图3所示,该区块链交易索引的存储装置包括构建模块31、匹配模块32和存储模块33。各功能模块详细说明如下:
[0133] 构建模块31,用于构建交易哈希,交易哈希包括版本信息、时间戳信息和交易哈希值;
[0134] 匹配模块32,用于基于时间戳信息,从交易索引存储数据库中获取与时间戳信息匹配的子数据库,作为目标数据库,其中,交易索引存储数据库包含至少两个子数据库,每个子数据库用于存储预设时间区间的交易哈希;
[0135] 存储模块33,用于将交易哈希作为Key,根据交易哈希对应交易的区块号和交易在区块内的编号,确定Value,并将Key和Value组成的键值对作为交易哈希索引,存储至目标数据库。
[0136] 可选地,构建模块31包括:
[0137] 哈希值计算单元,用于在区块链接收到交易信息时,获取交易信息中时间戳信息,并根据交易信息,计算交易哈希值;
[0138] 版本确定单元,用于基于预设方式,确定版本信息;
[0139] 生成单元,用于根据版本信息、时间戳信息和交易哈希值,生成交易哈希。
[0140] 可选地,匹配模块32包括:
[0141] 区间范围获取单元,用于获取子数据库对应的预设时间区间;
[0142] 目前区间确定单元,用于通过匹配的方式,确定时间戳信息所属的预设时间区间,作为目标时间区间;
[0143] 目标数据库确定单元,用于将目标时间区间对应的子数据库,作为目标数据库。
[0144] 可选地,子数据库预设存储上限,存储模块33包括:
[0145] 第一判断单元,用于判断目标数据库是否为最新的数据库,得到第一判断结果;
[0146] 第一存储单元,用于在第一判断结果为目标数据库不是最新的数据库时,将Key和Value作为键值对,存储至目标数据库;
[0147] 第二判断单元,用于在第一判断结果为目标数据库是最新的数据库时,则判断时间戳信息是否小于等于目标数据库预设时间区间对应的最大时间戳,得到第二判断结果;
[0148] 第二存储单元,用于若第二结果为时间戳信息小于等于目标数据库预设时间区间对应的最大时间戳,则将Key和Value作为键值对,存储至目标数据库;
[0149] 第三判断单元,用于若第二结果为时间戳信息大于目标数据库预设时间区间对应的最大时间戳,则判断目标数据库中存储的数据量是否达到预设存储上限,得到第三判断结果;
[0150] 第三存储单元,用于在第三判断结果为未达到预设存储上限时,将Key和Value作为键值对,存储至目标数据库,并采用时间戳信息对目标数据库的最大时间戳进行更新,得到更新后的预设时间区间;
[0151] 新建子数据库单元,用于在第三判断结果为达到预设存储上限时,执行新建子数据库处理,将新建的子数据库的预设时间区间的上下边界,均设置为时间戳信息,并将Key和Value作为键值对,存储至新建的子数据库。
[0152] 可选地,该区块链交易索引的存储装置还包括:
[0153] 请求解析模块,用于若接收到交易哈希查询请求,则对交易哈希查询请求进行解析,得到目标时间戳信息;
[0154] 子数据库确定模块,用于基于目标时间戳信息,确定待查询的子数据库;
[0155] 区块号获取模块,用于通过键值对查询的方式,从待查询的子数据库中,获取目标区块号;
[0156] 区块确定模块,用于根据磁盘读取的方式,获取目标区块号对应的区块,作为目标区块;
[0157] 遍历模块,用于遍历目标区块,获取交易哈希查询请求对应的交易信息。
[0158] 关于区块链交易索引的存储装置的具体限定可以参见上文中对于区块链交易索引的存储方法的限定,在此不再赘述。上述区块链交易索引的存储装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0159] 为解决上述技术问题,本申请实施例还提供计算机设备。具体请参阅图4,图4为本实施例计算机设备基本结构框图。
[0160] 所述计算机设备4包括通过系统总线相互通信连接存储器41、处理器42、网络接口43。需要指出的是,图中仅示出了具有组件连接存储器41、处理器42、网络接口43的计算机设备4,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。其中,本技术领域技术人员可以理解,这里的计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
[0161] 所述计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述计算机设备可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
[0162] 所述存储器41至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或D界面显示存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器41可以是所述计算机设备4的内部存储单元,例如该计算机设备4的硬盘或内存。在另一些实施例中,所述存储器41也可以是所述计算机设备4的外部存储设备,例如该计算机设备4上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器41还可以既包括所述计算机设备4的内部存储单元也包括其外部存储设备。本实施例中,所述存储器41通常用于存储安装于所述计算机设备4的操作系统和各类应用软件,例如电子文件的控制的程序代码等。此外,所述存储器41还可以用于暂时地存储已经输出或者将要输出的各类数据。
[0163] 所述处理器42在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器42通常用于控制所述计算机设备4的总体操作。本实施例中,所述处理器42用于运行所述存储器41中存储的程序代码或者处理数据,例如运行电子文件的控制的程序代码。
[0164] 所述网络接口43可包括无线网络接口或有线网络接口,该网络接口43通常用于在所述计算机设备4与其他电子设备之间建立通信连接。
[0165] 本申请还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有界面显示程序,所述界面显示程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的区块链交易索引的存储方法的步骤。
[0166] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例所述的方法。
[0167] 显然,以上所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例,附图中给出了本申请的较佳实施例,但并不限制本申请的专利范围。本申请可以以许多不同的形式来实现,相反地,提供这些实施例的目的是使对本申请的公开内容的理解更加透彻全面。尽管参照前述实施例对本申请进行了详细的说明,对于本领域的技术人员来而言,其依然可以对前述各具体实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等效替换。凡是利用本申请说明书及附图内容所做的等效结构,直接或间接运用在其他相关的技术领域,均同理在本申请专利保护范围之内。