一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

区块链数据查询方法及装置与流程

2022-10-29 05:34:24 来源:中国专利 TAG:


1.本发明涉及区块链技术领域,尤其涉及一种区块链数据查询方法及装置。


背景技术:

2.hyperledger fabric是目前最流行的联盟链技术框架之一,已在各行各业的区块链解决方案中被使用。原生hyperledger fabric开源项目不支持区块链数据复杂条件查询功能,现有的第三方工具如blockchain-explorer只能查询区块链底层数据,对业务层数据的查询也无能为力。
3.hyperledger fabric只提供基于区块链文件系统的链式存储,以及基于couchdb或leveldb的状态、历史数据库。在数据查询方面具有如下缺点:
4.1、在hyperledger fabric中,状态、历史数据的查询必须通过链码实现,所有的业务逻辑必须写死在链码中,难以灵活地适应数据查询需求的变化。
5.2、目前hyperledger fabric的状态数据库支持couchdb及leveldb两种,历史数据库只支持leveldb一种。couchdb及leveldb均为非关系型数据库,其中leveldb不支持富查询,富查询为按设定的条件筛选查询value满足要求的k-v键值对。couchdb也只支持部分简单富查询功能。因此,只有通过状态数据库使用couchdb部署的hyperledger fabric网络,才能按value值进行富查询,对使用leveldb部署的历史数据库及状态数据库的hyperledger fabric网络,都无法使用富查询。
6.3、现有的第三方数据查询工具如blockchain-explorer也只是简单地展示区块链底层数据,也无法实现对区块链数据的富查询功能。
7.综上所述,现有的hyperledger fabric区块链只能进行k-v查询或简单富查询,或借助blockchain-explorer等工具进行区块链底层数据的展示,从而不能满足对hyperledger fabric区块链数据的复杂查询需求。


技术实现要素:

8.本发明实施例提供一种区块链数据查询方法及装置,用以解决现有技术中hyperledger fabric区块链只能进行k-v查询、简单富查询或底层数据查询的缺陷,实现对区块链应用层数据的复杂查询。
9.本发明实施例提供一种区块链数据查询方法,包括:
10.从hyperledger fabric区块链的文件系统中获取区块链数据,并将所述区块链数据转换为关系型数据库的数据格式;
11.将数据格式转换后的区块链数据存储到所述关系型数据库中;
12.根据用户在hyperledger fabric区块链的浏览器上的输入,使用所述输入对应的查询条件从所述关系型数据库中获取查询结果;其中,所述输入和所述查询条件预先关联。
13.根据本发明一个实施例的区块链数据查询方法,所述区块链数据包括所述区块链数据的当前状态和历史变化记录,所述关系型数据库包括第一数据库和第二数据库;
14.相应地,所述将数据格式转换后的区块链数据存储到所述关系型数据库中,包括:
15.将数据格式转换后的所述区块链数据的当前状态存储到所述第一数据库中;
16.将数据格式转换后的所述区块链数据的历史变化记录存储到所述第二数据库中。
17.根据本发明一个实施例的区块链数据查询方法,所述将数据格式转换后的所述区块链数据的当前状态存储到所述第一数据库中,还包括:
18.将所述当前状态位于所述hyperledger fabric区块链中的区块号和所述当前状态的交易号存储到所述第一数据库中;
19.所述将数据格式转换后的所述区块链数据的历史变化记录存储到所述第二数据库中,还包括:
20.将所述历史变化记录位于所述hyperledger fabric区块链中的区块号和所述历史变化记录的交易号存储到所述第二数据库中。
21.根据本发明一个实施例的区块链数据查询方法,所述将所述区块链数据转换为关系型数据库的数据格式,包括:
22.对所述区块链数据进行解析,获取所述区块链数据的主体信息;
23.将所述主体信息与每种预设数据格式进行匹配;
24.将所述主体信息转换为匹配的预设数据格式。
25.根据本发明一个实施例的区块链数据查询方法,所述从hyperledger fabric区块链的文件系统中获取区块链数据,包括:
26.使用fabric-sdk获取所述区块链数据。
27.根据本发明一个实施例的区块链数据查询方法,所述使用fabric-sdk获取所述区块链数据,包括:
28.通过事件方式获取所述hyperledger fabric区块链上更新的区块链数据;或者,
29.通过轮询方式获取所述hyperledger fabric区块链上的区块链数据。
30.根据本发明一个实施例的区块链数据查询方法,所述关系型数据库为mysql数据库。
31.本发明实施例还提供一种区块链数据查询装置,包括:
32.转换模块,用于从hyperledger fabric区块链的文件系统中获取区块链数据,并将所述区块链数据转换为关系型数据库的数据格式;
33.存储模块,用于将数据格式转换后的区块链数据存储到所述关系型数据库中;
34.查询模块,用于根据用户在hyperledger fabric区块链的浏览器上的输入,使用所述输入对应的查询条件从所述关系型数据库中获取查询结果;其中,所述输入和所述查询条件预先关联。
35.本发明实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述区块链数据查询方法的步骤。
36.本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述区块链数据查询方法的步骤。
37.本发明实施例提供的区块链数据查询方法及装置,通过将区块链的文件系统中不易查询的区块链链式数据转换为易于查询的支持关系型数据库的格式数据,并将格式转换
后的区块链数据存储在关系型数据库中,使用关系型数据库代替原有的直接使用leveldb和couchdb数据库进行查询,可使用各种复杂条件对应用层区块链数据进行查询,增强了hyperledger fabric区块链的数据查询能力,为运维人员及区块链用户提供更方便、易用的区块链数据查询服务。
附图说明
38.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
39.图1是本发明实施例提供的一种区块链数据查询方法的流程示意图;
40.图2是本发明实施例提供的一种区块链数据查询方法的整体架构示意图;
41.图3是本发明实施例提供的一种区块链数据查询装置的结构示意图;
42.图4是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
43.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
44.下面结合图1描述本发明实施例的区块链数据查询方法,该方法包括:步骤101,从hyperledger fabric区块链的文件系统中获取区块链数据,并将所述区块链数据转换为关系型数据库的数据格式;
45.其中,区块链文件系统中存储有hyperledger fabric区块链上各区块的数据。状态数据库和历史数据库中存储的数据最终来源于区块链文件系统。
46.区块链数据为区块链上各区块产生的数据。本实施例不限于区块链数据的获取方式。hyperledger fabric区块链上的区块链数据为链式格式,即键值对格式。
47.由于链式格式的数据只能支持简单查询,因此本实施例将区块链数据转换为能存储到关系型数据库的数据格式,如表格格式。从而将区块链上不易查询、分析的区块链链式数据转换为易于查询、分析的支持关系型数据库的统一格式数据。
48.步骤102,将数据格式转换后的区块链数据存储到所述关系型数据库中;
49.将数据格式转换后的区块链数据存储到关系型数据库中,从而使用关系型数据库代替原有的直接使用leveldb和couchdb数据库进行查询的方式。本实施例不限于关系型数据库的类型。
50.步骤103,根据用户在hyperledger fabric区块链的浏览器上的输入,使用所述输入对应的查询条件从所述关系型数据库中获取查询结果;其中,所述输入和所述查询条件预先关联。
51.在区块链的浏览器上输入关键字,即可根据关键字对应的查询条件对关系型数据库进行查询,获取查询结果。通过关系型数据库可以进行多对多关系的复杂查询,给用户提
供多样化的数据查询能力。
52.预先定义查询条件,将用户输入的关键字作为查询条件的输入,即可实现对关系型数据库的查询。
53.此外,将查询结果在区块链的浏览器上进行显示。
54.本实施例通过将区块链的文件系统中不易查询的区块链链式数据转换为易于查询的支持关系型数据库的格式数据,并将格式转换后的区块链数据存储在关系型数据库中,使用关系型数据库代替原有的直接使用leveldb和couchdb数据库进行查询,可使用各种复杂条件对应用层区块链数据进行查询,增强了hyperledger fabric区块链的数据查询能力,为运维人员及区块链用户提供更方便、易用的区块链数据查询服务。
55.在上述实施例的基础上,本实施例中所述区块链数据包括所述区块链数据的当前状态和历史变化记录,所述关系型数据库包括第一数据库和第二数据库;相应地,所述将数据格式转换后的区块链数据存储到所述关系型数据库中,包括:将数据格式转换后的所述区块链数据的当前状态存储到所述第一数据库中;将数据格式转换后的所述区块链数据的历史变化记录存储到所述第二数据库中。
56.具体地,关系型数据库用于保存转换后的区块链数据。对区块链数据的当前状态和历史变化记录进行分开存储,便于查询。
57.其中,区块链数据的当前状态为区块链数据的最新值。区块链数据的历史变化记录为区块链数据在更新为最新值之前的所有取值记录。
58.在上述实施例的基础上,本实施例中所述将数据格式转换后的所述区块链数据的当前状态存储到所述第一数据库中,还包括:将所述当前状态位于所述hyperledger fabric区块链中的区块号和所述当前状态的交易号存储到所述第一数据库中;所述将数据格式转换后的所述区块链数据的历史变化记录存储到所述第二数据库中,还包括:将所述历史变化记录位于所述hyperledger fabric区块链中的区块号和所述历史变化记录的交易号存储到所述第二数据库中。
59.具体地,对于第一数据库和第二数据库中的每条记录,除了保存区块链数据格式转化后的当前状态和历史变化记录,还需保存其交易号和所在的区块号等区块链信息,以便根据区块链信息到链上查询交易的详细信息。
60.在上述实施例的基础上,本实施例中所述将所述区块链数据转换为关系型数据库的数据格式,包括:对所述区块链数据进行解析,获取所述区块链数据的主体信息;
61.例如,当从hyperledger fabric区块链中获取到一个新区块,并在此区块中解析出一笔交易,其交易信息主体信息格式如下:
62.{
63.read_set:{}
64.write_set:{
65.student_215:{
66.class:1702
67.name:xiaoli
68.major:math
69.}
70.}
71.}
72.此交易信息表示上链了一个id为215的学生的信息。由于一个区块链通道中上链的数据的格式基本是固定的。可预先设置支持关系型数据库的数据格式student(student_id,class,name,major)为链上数据格式。将主体消息转换为链上数据格式后存入关系型数据库中。链上数据格式定义了区块链数据要转换成的目的数据格式
73.将所述主体信息与每种预设数据格式进行匹配;
74.若一个区块链通道中包含多种数据格式,则需要定义多种链上数据格式,并表示其关联关系。例如,如果除了上链了学生信息,还在此通道上链了如下的教师信息,则还需要定义student(teacher_id,name,subject,class)的链上数据格式,并定义student数据格式和teacher数据格式之间的关联关系。
75.{
76.read_set:{},
77.write_set:{
78.teacher_309:{
79.name:laowang
80.subject:math
81.class:1702;
82.}
83.}
84.}
85.此种情况下,将主体信息与每种预设数据格式进行匹配,获取与主体信息匹配的预设数据格式。
86.将所述主体信息转换为匹配的预设数据格式。
87.在区块链中的链式数据转换为关系型数据库的预设数据格式,形成数据条目后,将其插入到关系型数据库中。
88.以上述的student和teacher两个数据格式为例,若要查询某个教师的所有学生,必须进行两个数据格式的关联,这在不能使用富查询的leveldb状态、历史数据库中是无法实现的,只能在使用couchdb的状态数据库通过富查询实现。
89.若一个教师教授多个班级,学生在也多个班级修课,通过couchdb也无法实现这种查询。但借助关系型数据库,此类查询将非常容易实现。
90.在上述各实施例的基础上,本实施例中所述从hyperledger fabric区块链的文件系统中获取区块链数据,包括:使用fabric-sdk获取所述区块链数据。
91.具体地,本实施例使用fabric-sdk同步区块链数据,并提取其中的信息进行数据格式转换。
92.在上述实施例的基础上,本实施例中所述使用fabric-sdk获取所述区块链数据,包括:通过事件方式实时获取所述hyperledger fabric区块链上更新的区块链数据;或者,通过轮询方式主动获取所述hyperledger fabric区块链上的区块链数据。
93.在上述各实施例的基础上,本实施例中所述关系型数据库为mysql数据库。
94.具体地,在关系型数据库为mysql数据库的情况下,使用sql(structured query language,结构化查询语言)查询语句从关系型数据库中获取查询结果。
95.图2所示的架构展示了两种从hyperledger fabric区块链网络查询数据的方式。传统方式直接使用链码从状态、历史数据库查询数据,受制于leveldb、couchdb数据库及链码能力限制,只能进行简单查询,无法进行复杂条件查询,多数据关联查询。而本实施例在用户查询流程中,使用mysql数据库等关系数据库代替了原有的直接使用leveldb、couchdb的状态、历史数据库进行查询的方式。
96.下面对本发明实施例提供的区块链数据查询装置进行描述,下文描述的区块链数据查询装置与上文描述的区块链数据查询方法可相互对应参照。
97.如图3所示,该装置包括转换模块301、存储模块302和查询模块303,其中:
98.转换模块301用于从hyperledger fabric区块链的文件系统中获取区块链数据,并将所述区块链数据转换为关系型数据库的数据格式;
99.其中,区块链文件系统中存储有hyperledger fabric区块链上各区块的数据。状态数据库和历史数据库中存储的数据最终来源于区块链文件系统。
100.区块链数据为区块链上各区块产生的数据。本实施例不限于区块链数据的获取方式。hyperledger fabric区块链上的区块链数据为链式格式,即键值对格式。
101.由于链式格式的数据只能支持简单查询,因此本实施例将区块链数据转换为能存储到关系型数据库的数据格式,如表格格式。从而将区块链上不易查询、分析的区块链链式数据转换为易于查询、分析的支持关系型数据库的统一格式数据。
102.存储模块302用于将数据格式转换后的区块链数据存储到所述关系型数据库中;
103.存储模块302将数据格式转换后的区块链数据存储到关系型数据库中,从而使用关系型数据库代替原有的直接使用leveldb和couchdb数据库进行查询的方式。本实施例不限于关系型数据库的类型。
104.查询模块303用于根据用户在hyperledger fabric区块链的浏览器上的输入,使用所述输入对应的查询条件从所述关系型数据库中获取查询结果;其中,所述输入和所述查询条件预先关联。
105.在区块链的浏览器上输入关键字,即可根据关键字对应的查询条件对关系型数据库进行查询,获取查询结果。通过关系型数据库可以进行多对多关系的复杂查询,给用户提供多样化的数据查询能力。
106.预先定义查询条件,将用户输入的关键字作为查询条件的输入,即可实现对关系型数据库的查询。
107.此外,将查询结果在区块链的浏览器上进行显示。
108.本实施例通过将区块链的文件系统中不易查询的区块链链式数据转换为易于查询的支持关系型数据库的格式数据,并将格式转换后的区块链数据存储在关系型数据库中,使用关系型数据库代替原有的直接使用leveldb和couchdb数据库进行查询,可使用各种复杂条件对应用层区块链数据进行查询,增强了hyperledger fabric区块链的数据查询能力,为运维人员及区块链用户提供更方便、易用的区块链数据查询服务。
109.在上述实施例的基础上,本实施例中所述区块链数据包括所述区块链数据的当前状态和历史变化记录,所述关系型数据库包括第一数据库和第二数据库;相应地,存储模块
用于:将数据格式转换后的所述区块链数据的当前状态存储到所述第一数据库中;将数据格式转换后的所述区块链数据的历史变化记录存储到所述第二数据库中。
110.在上述实施例的基础上,本实施例中存储模块还用于:将所述当前状态位于所述hyperledger fabric区块链中的区块号和所述当前状态的交易号存储到所述第一数据库中;将所述历史变化记录位于所述hyperledger fabric区块链中的区块号和所述历史变化记录的交易号存储到所述第二数据库中。
111.在上述实施例的基础上,本实施例中转换模块用于:对所述区块链数据进行解析,获取所述区块链数据的主体信息;将所述主体信息与每种预设数据格式进行匹配;将所述主体信息转换为匹配的预设数据格式。
112.在上述各实施例的基础上,本实施例中转换模块用于:使用fabric-sdk获取所述区块链数据。
113.在上述实施例的基础上,本实施例中转换模块用于:通过事件方式获取所述hyperledger fabric区块链上更新的区块链数据;或者,通过轮询方式获取所述hyperledger fabric区块链上的区块链数据。
114.在上述各实施例的基础上,本实施例中所述关系型数据库为mysql数据库。
115.图4示例了一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(communications interface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的逻辑指令,以执行区块链数据查询方法,该方法包括:从hyperledger fabric区块链的文件系统中获取区块链数据,并将所述区块链数据转换为关系型数据库的数据格式;将数据格式转换后的区块链数据存储到所述关系型数据库中;根据用户在hyperledger fabric区块链的浏览器上的输入,使用所述输入对应的查询条件从所述关系型数据库中获取查询结果;其中,所述输入和所述查询条件预先关联。
116.此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
117.另一方面,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的区块链数据查询方法,该方法包括:从hyperledger fabric区块链的文件系统中获取区块链数据,并将所述区块链数据转换为关系型数据库的数据格式;将数据格式转换后的区块链数据存储到所述关系型数据库中;根据用户在hyperledger fabric区块链的浏览器上的输入,使用所述输入对应的查询条件从所述关系型数据库中获取查询结果;其中,所述输入和所述查询条件预先关联。
118.又一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的区块链数据查询方法,该方法包括:从hyperledger fabric区块链的文件系统中获取区块链数据,并将所述区块链数据转换为关系型数据库的数据格式;将数据格式转换后的区块链数据存储到所述关系型数据库中;根据用户在hyperledger fabric区块链的浏览器上的输入,使用所述输入对应的查询条件从所述关系型数据库中获取查询结果;其中,所述输入和所述查询条件预先关联。
119.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
120.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
121.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献