区块链数据索引方法和设备与流程

文档序号:11774863阅读:969来源:国知局
区块链数据索引方法和设备与流程

本公开的实施例总体上涉及数据索引技术领域,更具体地涉及区块链的数据索引方法和设备。



背景技术:

区块链是一种去中心化的存储和计算技术,其通过将加密数据块按照时间顺序叠加而生成的持久的不可修改的记录,并且将计入存储在区块链网络的各个节点中,使得以去中心化的方式集体维护一个可靠数据库。每个数据块中包含了一定时间内的系统数据,并且生成数据指纹用于验证其信息的有效性和链接下一个数据库块。因此,区块链在数据防篡改、透明性以及去中心化方面具有技术优势。

在已有的区块链系统中,数据存储的基本方式通常为键值存储,即对于每一个存储在区块链上的数据,主要通过主键对数据体进行索引。这样的设计方式具有轻量化、简单以及高效等益处,然而对复杂查询(例如,范围查询或条件查询)却难以提供快速的响应。并且,在对数据进行查询时,需要遍历区块链中存储的所有相关记录,从而导致查询效率较低。因而,如何提高区块链中数据索引及查询的效率成为一个关注焦点。



技术实现要素:

有鉴于此,本公开的各实施例提出了一种区块链数据索引方法和设备。本公开的实施例通过设计二级索引结构,能够实现数据的高效索引及快速查询,从而解决了现有区块链查询效率低的问题。

根据本公开的方面,提供了一种区块链索引方法。该方法包括接收交易信息和与该交易信息关联的索引标识;确定区块链的索引列表集中是否存在与该索引标识相关联的索引列表;以及响应于该索引列表集中存在与该索引标识相关联的索引列表,向该索引列表添加与该交易信息相关联的新的条目。

根据本公开的第二方面,提供了一种电子设备。该电子设备包括处理器和耦合至处理器并且存储有指令的存储器。该指令在由处理器执行时使得电子设备执行以下动作:接收交易信息和与该交易信息关联的索引标识;确定区块链的索引列表集中是否存在与该索引标识相关联的索引列表;以及响应于该索引列表集中存在与该索引标识相关联的索引列表,向该索引列表添加与该交易信息相关联的新的条目。

根据本公开的第三方面,本公开的实施例还提供了一种计算机可读存储介质。该计算机可读存储介质具有存储在其上的计算机可读程序指令。这些计算机可执行指令在设备中运行时使得该设备执行根据本公开中的各个实施例所描述的方法或过程。

提供发明内容部分是为了以简化的形式来介绍对概念的选择,它们在下文的具体实施方式中将被进一步描述。发明内容部分无意标识本公开的关键特征或必要特征,也无意限制本公开的范围。

附图说明

通过结合附图对本公开示例性实施例进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施例中,相同的参考标号通常代表相同部件。

图1图示了传统的区块链网络的架构的示意图;

图2图示了根据本公开实施例的区块链数据索引的方法的流程图;

图3图示了根据本公开实施例的建立索引列表的过程;

图4图示了根据本公开实施例的向索引列表添加条目的过程;

图5图示了可以用来实施本公开内容的实施例的示例设备的示意性框图。

具体实施方式

以下参考附图详细描述本公开的各个示例性实施例。附图中的流程图和框图示出了根据本公开的各种实施例的方法和系统的可能实现的体系架构、功能和操作。应当注意,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分可以包括一个或多个用于实现各个实施例中所规定的逻辑功能的可执行指令。也应当注意,在有些作为备选的实现中,方框中所标注的功能也可以按照不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,或者它们有时也可以按照相反的顺序执行,这取决于所涉及的功能。同样应当注意的是,流程图和/或框图中的每个方框、以及流程图和/或框图中的方框的组合,可以使用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以使用专用硬件与计算机指令的组合来实现。

本文所使用的术语“包括”、“包含”及类似术语应该被理解为是开放性的术语,即“包括/包含但不限于”,表示还可以包括其他内容。在本公开内容中,术语“基于”是“至少部分地基于”;术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”。

应当理解,给出这些示例性实施例仅是为了使本领域技术人员能够更好地理解进而实现本公开的实施例,而并非以任何方式限制发明的范围。

如上文所讨论的,现有的区块链由于缺少对查询的优化,在查询时往往需要遍历区块链中所有的交易记录。随着区块链上存储的数据越来越大,查询的效率也将越来越低。图1图示了传统的区块链网络的架构100的示意图。如图1所示,架构100包括区块链节点111、112、113、114、115以及116。这些区块链节点可以包括多个区块,其中每个区块可以存储交易记录信息,当响应用户查询时,需要遍历区块链节点中的全部区块。例如,用户可以用其账户a作为查询的关键词,则系统需要遍历全部区块链区块以获得所有与账户a相关的交易记录信息。同时,现有的区块链也难以支持复杂查询(例如,范围查询或条件查询)。这在很大程度上制约了区块链技术的发展。

为了至少部分解决上述问题以及其他潜在问题,本公开的实施例提供了一种区块链数据索引的方案。在该方案中,智能合约建立了二级索引结构的索引列表,其中级索引结构可以记录索引标识以及按照时间顺序排列的交易编号,而第二级索引结构还可以记录交易编号所对应的交易摘要信息。

基于这样的索引结构,区块链可以快速地向用户返回第二级索引结构中所记录的交易摘要信息,如果用户还需要更加详尽的交易信息,则可以通过交易摘要信息中所记载的区块号以及交易哈希值在区块链中快速地定位所对应的交易,从而获得该交易的全部信息。通过这样的方式,区块链的查询效率可以得到极大提升,同时能够提供对复杂查询(例如,范围查询或条件查询)的有效支持。

以下将参考附图2至图4描述根据本公开实施例的区块链数据索引的方法。其中,图2图示了根据本公开实施例的区块链数据索引的方法200图,图3图示了根据本公开实施例的建立数据索引列表的过程300,图4图示了根据本公开实施例的向索引列表添加条目的过程400。

在框202,系统接收交易信息和与交易信息关联的索引标识。例如,在一些实施例中,在交易提交时,系统可以提示用户输入索引标识,从而实现索引标识与所提交交易信息的关联。

在一些实施例中,用户可以通过输入关键词作为索引标识。例如,在交易完成时,用户可以输入x银行作为索引标识。在一些实施例中,用户还可以指定交易信息中的特定字段的值作为索引标识。例如,在交易完成时,用户可以指定交易的账单编号作为索引标识。在一些实施例中,用户还可以输入多个关键词和/或指定交易信息中的多个特定字段的值作为索引标识。

在一些实施例中,系统还可以检查用户所输入的关键词以判定其是否符合预设的规则,并向用户输出提示信息。例如,当用户仅录入x银行的简称y时,系统可以判定该简称y不符合规则,并向用户发出提示,让用户将y补充完整为x银行,从而保证用户能够保证每次录入的关键词的一致。预设的规则的示例可以包括但不限于:是否为简称、长度是否超过限制、是否存在与关键词同义的官方表述等。

在框204,系统确定区块链的索引列表集中是否存在与索引标识相关联的索引列表。具体地,系统可以查询区块链中索引列表集中的索引列表以确定索引列表集中是否存在与索引标识相关联的索引列表。如果不存在,则方法进行到框206,即基于交易信息和索引标识在区块链中的索引列表集中建立新的索引列表。以下将结合图3描述根据本公开实施例的建立新的索引列表的过程。

如图3所示,在框302,系统接收应收款项交易信息。在该示例中,其包括账单编号、金额、借款方、资金方以及担保方等字段的信息。同时,用户可以通过输入关键词或以指定的方式确定该交易的账单编号值sh100010作为本次交易的索引标识。

由于区块链中不存在与索引标识sh100010相关联的索引列表,因此需要创建新的索引列表。在一些实施方式中,可以采用二级索引结构的索引列表。如框304所示,首先建立一级索引。一级索引可以存储索引值和与索引值相关联的交易记录标识,其中索引值中可以存储所接受的索引标识。在一个实施例中,交易记录标识可以为按照时间顺序排列的交易编号。一级索引的示例可以如索引320所示,其包括索引值322(在该示例中,为sh100010)以及索引内容324。在一些实施例中,索引内容可以为一个数组,其存储交易记录编号,在该实施例中,由于该交易为索引内容中第一个交易记录,因此其编号可以为tx1。

在框306,还需要建立二级索引。二级索引中可以存储与交易记录标识对应的交易摘要信息,其中交易摘要信息可以包括该交易信息的部分或全部信息二级索引的示例可以如索引330所示,其可以存储一级索引320中的索引内容324中所存储的交易编号tx1所对应交易摘要信息(交易记录332)。在该示例中,交易记录332所存储的交易信息可以包括交易哈希值、交易区块号、金额、借款方、资金方和担保方。如果以上交易摘要信息无法满足用户的需求,则用户可以通过交易哈希值以及交易区块号快速定位该交易在区块链中的位置,获得该交易的全部信息,这个过程将在下文详细描述。

通过过程300,系统可以建立与索引值sh100010相关联的索引列表310,并通过二级索引结构(一级索引320以及二级索引330)来组织与索引标识相关联的交易信息。

再次参考图2,在框204,如果的索引列表集中存在与索引标识相关联的索引列表,则方法进行到框208,即向与索引标识相关联的索引列表添加与交易信息相关联的新的条目。在一些实施例中,所添加的新的条目可以包括一级索引中新的交易信息标识信息以及二级索引中新的交易摘要信息。以下将结合图4描述根据本公开实施例的建立新的索引列表的过程400。

如图4所示,在框402,系统接收应收账款转让交易信息。在该示例中,其包括账单编号、金额、借款方、资金方、担保方以及受让方等字段的信息。同时,用户可以通过输入关键词或以指定的方式确定该交易的账单编号值sh100010作为本次交易的索引标识。

由于区块链中的索引列表集中已经存在与索引标识sh100010相关联的索引列表,因此不需要创建新的索引列表,而只需要更新索引列表410中的信息。具体地,如框404所示,首先对一级索引420进行更新,即在索引内容424中,添加新的交易记录编号tx2。

在框406,在二级索引430中的交易记录432后添加新的交易记录434,交易记录434存储一级索引420中的索引内容424中所存储的交易编号tx2所对应的交易摘要信息。在该示例中,该交易摘要信息可以包括交易哈希值、交易区块号、金额、借款方、资金方、担保方、受让方和操作类型。同样,如果以上交易摘要信息无法满足用户的需求,则用户可以通过交易哈希值以及交易区块号快速定位该交易在区块链中的位置,获得该交易的全部信息。

以上描述了基于本公开的区块链数据索引方法的建立二级索引结构的过程。在该过程中,由于交易记录的添加是按照交易所发送的逻辑时间顺序,因此根据交易记录编号的查询也可以对交易记录的发生记录进行存证。同时,由于索引列表建立在区块链的内部,可以实现全网的所有节点共享索引记录。

此外,相对于现有的方法,本公开还可以避免对区块链所有区块中的所有交易数据的遍历。例如,对于图4所示的索引列表,用户可以输入账单编号sh100010作为查询关键词,此时系统可以查询索引列表,基于索引值422中存储的内容(sh100010)与查询关键词匹配,返回一级索引420中的索引内容424,即交易记录编号[tx1,tx2]。由此向用户反映,该账单编号下存在2条交易记录,其编号分别为tx1以及tx2。基于所返回的索引内容424,用户可以进一步输入tx2作为新的查询关键词,则系统可以查询索引列表,并返回与交易记录编号tx2相关联的交易记录434。具体地,系统可以返回“索引值:sh100010_tx2,索引内容:{交易哈希值:222,交易区块号:2,金额:100,借款方:a,资金方:b银行,担保方:c保理公司,受让方:d公司,操作类型:转让”。从而,用户可以获得与交易记录编号tx2相关联的交易摘要信息,如果以上信息无法满足用户的查询需要,则用户可以利用交易哈希值(222)以及交易区块号(2)快速地在区块链中定位该交易的位置,从而获得该交易的全部交易信息。

在一些实施例中,系统还可以接收范围查询。例如,对于图4所示的索引列表,用户查询账单编号sh100010下的第1-50条交易的信息。此时由于索引列表中仅存在tx1以及tx2这两条交易记录,因此其将返回这两条交易记录的信息。而现实中,存储的交易记录往往数量巨大,提供范围查询能够有效地提高检索的效率。在一些实施例中,系统可以存储与交易记录相关联的时间戳信息,由于交易记录严格按照逻辑时间顺序排序,因此系统还可以通过判断交易记录的时间戳是否符合条件来响应诸如a时间点以后的全部交易记录的条件查询。基于以上的方式,系统可以提供对用户灵活多变的复杂查询的支持,从而提高了区块链中数据查询的效率。

图5图示了可以用来实施本公开的实施例的电子设备500的示意性框图。应当理解,电子设备500可以被实现为采用本公开是数据索引方法的任一区块链节点,区块链节点中的任一模块。如图5所示,设备500包括中央处理单元(cpu)501(例如处理器),其可以根据存储在只读存储器(rom)502中的计算机程序指令或者从存储单元508加载到随机访问存储器(ram)503中的计算机程序指令,来执行各种适当的动作和处理。在ram503中,还可存储设备500操作所需的各种程序和数据。cpu501、rom502以及ram503通过总线504彼此相连。输入/输出(i/o)接口505也连接至总线504。

设备500中的多个部件连接至i/o接口505,包括:输入单元506,例如键盘、鼠标等;输出单元507,例如各种类型的显示器、扬声器等;存储单元508,例如磁盘、光盘等;以及通信单元509,例如网卡、调制解调器、无线通信收发机等。通信单元509允许设备500通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。

上文所描述的各种方法,例如方法,可由处理单元501执行。例如,在一些实施例中,方法200可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元508。在一些实施例中,计算机程序的部分或者全部可以经由rom502和/或通信单元509而被载入和/或安装到设备500上。当计算机程序被加载到ram503并由cpu501执行时,可以执行上文描述的方法200中的一个或多个动作或步骤。

计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

本文所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本公开内容操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开内容的各个方面。

应当注意,尽管在上文的详细描述中提及了设备的若干模块或子模块,但是这种划分仅仅是示例性而非强制性的。实际上,根据本公开的实施例,上文描述的两个或更多模块的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。

以上所述仅为本公开的实施例可选实施例,并不用于限制本公开的实施例,对于本领域的技术人员来说,本公开的实施例可以有各种更改和变化。凡在本公开的实施例的精神和原则之内,所作的任何修改、等效替换、改进等,均应包含在本公开的实施例的保护范围之内。

虽然已经参考若干具体实施例描述了本公开的实施例,但是应该理解,本公开的实施例并不限于所公开的具体实施例。本公开的实施例旨在涵盖在所附权利要求的精神和范围内所包括的各种修改和等同布置。所附的权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。

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