CN112035466A - 一种区块链查询外置索引开发框架 - Google Patents
一种区块链查询外置索引开发框架 Download PDFInfo
- Publication number
- CN112035466A CN112035466A CN202010746552.2A CN202010746552A CN112035466A CN 112035466 A CN112035466 A CN 112035466A CN 202010746552 A CN202010746552 A CN 202010746552A CN 112035466 A CN112035466 A CN 112035466A
- Authority
- CN
- China
- Prior art keywords
- data
- index
- query
- module
- logic
- 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.)
- Granted
Links
- 238000011161 development Methods 0.000 title claims abstract description 12
- 230000006978 adaptation Effects 0.000 claims abstract description 21
- 238000000034 method Methods 0.000 claims description 55
- 230000001360 synchronised effect Effects 0.000 claims description 34
- 230000005540 biological transmission Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 16
- 230000006870 function Effects 0.000 description 14
- 230000008569 process Effects 0.000 description 13
- 238000013515 script Methods 0.000 description 9
- 238000004590 computer program Methods 0.000 description 8
- 238000003860 storage Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 6
- 238000004422 calculation algorithm Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 3
- RTZKZFJDLAIYFH-UHFFFAOYSA-N Diethyl ether Chemical compound CCOCC RTZKZFJDLAIYFH-UHFFFAOYSA-N 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005315 distribution function Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
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
- G06F16/2228—Indexing 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/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种区块链查询外置索引开发框架,旨在提高区块链中应用平台层对区块链基础设施层的查询效率,使区块链查询功能更加多样。所述框架应用于区块链,所述框架包括:合约生成模块根据索引模块定义的索引逻辑和查询逻辑,建立合约;根据查询需求,修改合约中的SDK调用代码和查询逻辑,完成合约定义;数据适配模块适配区块链上数据结构为框架预设数据结构;数据同步模块选择对应的数据同步方式将区块链上数据同步至框架中;数据同步后,调用合约中的索引逻辑建立索引,索引数据存储到对应预设数据库;根据建立的索引,调用合约中查询逻辑,完成数据查询任务,根据查询需要,可定义回库查询数据。
Description
技术领域
本发明涉及区块链领域,特别是涉及一种区块链查询外置索引开发框架。
背景技术
区块链是一个分布式的共享账本和数据库,通过特定的共识算法达成一致,在全网进行分布式记账,具有去中心化、不可篡改、全程留痕、可以追溯、集体维护、公开透明等特点。最初区块链的应用是在比特币公链项目中用于交易双方在互不信任的情况下产生不可篡改的交易,但研究者们对区块链价值的追求不止于此,随着区块链技术的不断成熟和应用的落地,区块链最终将迈入高速发展成熟期,基于区块链的数据量和应用量都会有质的飞跃,如何向海量的应用提供丰富的查询功能成为日益重要的研究方向之一。
然而,由于区块链基础设施层往往关注于写入性能的提升,对应用平台层的接口需求较少,因此只能提供少量的标准的查询接口,而应用平台层由于需求多变,难以定义出统一的查询需求让基础设施层实现,导致了基础设施层提供的接口无法被应用平台层直接使用,进而导致应用平台层对区块链基础设施层的查询功能单一、查询效率低。
发明内容
鉴于上述问题,提出了本发明实施例提供一种区块链查询外置索引开发框架,旨在提高区块链中应用平台层对区块链基础设施层的查询效率,使区块链查询功能更加多样。
为了解决上述问题,本发明实施例提供了一种区块链查询外置索引开发框架,所述框架应用于区块链中,所述框架包括合约生成模块、索引模块、数据适配模块、数据同步模块;
所述索引模块定义索引逻辑和查询逻辑,所述索引逻辑包括自定义的索引逻辑和内置的索引逻辑,其中,所述内置的索引逻辑包括时间索引和账户索引;
所述合约生成模块根据所述索引模块定义的索引逻辑建立合约脚本;
根据查询需求,修改合约中的SDK调用代码和查询逻辑为需要查询区块链的SDK调用代码和查询逻辑,完成合约定义;
根据区块链数据结构不同,所述数据适配模块将区块链上的数据结构适配为框架预定义的数据结构;
根据区块链类型不同,所述数据同步模块选择与所述区块链类型对应的数据同步方式,将所述区块链上的数据同步至所述框架内;
所述数据同步模块同步数据后,所述合约调用所述索引模块定义的索引逻辑建立索引,索引数据存储到预设数据库中;
根据建立的索引,所述合约调用所述索引模块定义的查询逻辑,完成符合查询条件的索引数据查询,返回查询结果;
根据查询需要,定义回库查询,将SDK查询代码添加到查询逻辑中,完成通过哈希值获取数据内容的查询。
可选地,所述合约生成模块根据所述索引模块定义的索引逻辑建立合约,包括:
在所述定义的索引逻辑为内置的索引逻辑时,所述合约生成模块根据所述内置的索引逻辑,完成代码的填充,选择索引数据存储的预设数据库类型,建立所述合约;
在所述定义的索引逻辑为所述自定义的索引逻辑时,所述合约生成模块根据所述自定义的索引逻辑,自定义代码填充,选择索引数据存储的预设数据库类型,建立所述合约;其中,所述自定义的索引逻辑将保存至本地。
可选地,根据区块链数据结构不同,所述数据适配模块将区块链上的数据结构适配为框架预定义的数据结构,包括:
所述数据适配模块将区块链数据结构适配为框架预定义的数据结构;
其中,所述数据适配模块将区块链上的数据映射为框架中预定义的数据结构,将区块链数据字段名称、字段类型,输入数据适配器中,所述数据适配模块将所述区块链数据自动适配为所述框架预定义的数据结构。
可选地,根据区块链类型不同,所述数据同步模块选择与所述区块链类型对应的数据同步方式,将所述区块链上的数据同步至所述框架内,包括:
所述数据同步模块根据不同的区块链类型,选择与所述区块链相对应的数据同步方式;
根据所述选择的数据同步方式,将所述区块链上的数据同步至所述框架内;
所述数据同步方式包括区块高度数据同步、遍历数据库数据同步、同步哈希数据同步;
其中,所述数据同步模块设置定时器,对当前同步到的区块哈希和/或区块高度在缓存队列中进行存储,在同步中断后,再次进行同步时,从所述定时器记录的当前同步到的区块哈希和/或区块高度进行断点续传。
可选地,所述数据同步模块,还包括:
所述数据同步模块中的遍历数据库数据同步和同步哈希数据同步,在对当前遍历到的区块进行数据同步时,区块链上同时产生新区块,所述数据同步模块将所述新产生的区块哈希记录到内存队列中去,在所述数据同步模块完成对所述当前遍历到的区块数据同步后,对队列中的所述新产生的区块数据进行数据同步,完成所述队列中新产生区块数据同步后,继续同步区块链上数据。
可选地,所述数据同步模块同步数据后,所述合约调用所述索引模块定义的的索引逻辑建立索引,索引数据存储到预设数据库中,包括:
所述数据同步模块完成数据同步;
所述合约调用所述索引模块定义的的索引逻辑建立索引,索引数据保存到预设数据库中;
其中,所述预设数据库具有多种类型,根据应用于不同场景的查询需求,选择与查询需求相对应的预设数据库存储索引数据;
所述索引模块中的数据库适配器将所述预设数据库适配为框架统一的数据库类型;
其中,所述数据库适配器将接口异构的多种预设数据库解耦,封装统一的框架预设接口,预设数据库共用所述框架预设接口操作所述预设数据库。
可选地,所述预设数据库,还包括:
所述预设数据库不符合查询需求时,自定义接入新的数据库类型;
其中,所述数据库适配器将所述自定义接入的新数据库类型适配为框架统一的数据库类型。
本发明包括以下优点:
本发明中,合约生成模块根据索引模块定义的索引逻辑和查询逻辑,建立合约,根据查询需求,修改合约中的SDK调用代码和查询逻辑,完成合约定义,数据适配模块适配不同区块链上数据结构为框架预设数据结构,数据同步模块选择对应的数据同步方式将区块链上数据同步至框架中,数据同步后,调用合约中的索引逻辑建立索引,索引数据存储到对应预设数据库,根据建立的索引,调用合约中查询逻辑,完成数据查询任务,根据查询需要,可定义回库查询数据。实现将不同区块链上数据同步至框架内,建立同步数据的索引,通过建立的索引完成数据查询,提高区块链中应用平台层对区块链基础设施层的查询效率,使区块链查询功能更加多样。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提出的区块链查询外置索引开发框架的流程图;
图2是本发明的数据库层封装后的类图;
图3是本发明的合约创建界面图;
图4是本发明的数据适配模块的类图;
图5是本发明的数据同步模块的类图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他所有实施例,都应属于本发明保护的范围。
本发明实施例的发明构思在于:合约生成模块根据索引模块定义的索引逻辑和查询逻辑,建立合约脚本,对于不同的区块链,修改合约中的SDK调用代码和查询逻辑,完成合约的定义,在数据适配模块将区块链上数据结构适配为框架预设的数据结构后,同步区块链上数据至框架内,调用索引逻辑建立索引,索引数据存储到预设数据库中,完成数据索引后,调用查询逻辑,在索引数据中完成符合查询条件的数据查询,根据查询需要可以定义是否回区块链主库进行数据查询。因此可以实现将应用平台层和区块链基础设施层的查询接口解耦,将不同区块链上数据同步至框架内进行数据查询任务,有效提高了区块链中应用平台层对区块链基础设施层的查询效率,使区块链查询功能更加多样。
参照图1,图1是本发明一实施例提出的区块链查询外置索引开发框架的流程图。该框架应用于区块链中,该框架包括合约生成模块、索引模块、数据适配模块、数据同步模块。
本发明中,区块哈希值是指区块链通过哈希算法对一个交易区块中的交易信息进行加密,并把信息压缩成由一串数字和字母组成的散列字符串,该哈希值唯一而精准地标识一个区块链中的区块。
本发明中,区块高度是指区块接在主链的个数,也就是连接在区块链上的块数,当前区块链中的不同区块对应不同的区块高度。
本发明中,合约是指智能合约,是部署在区块链上的一段可以自动执行条款的计算机程序。
本发明中,合约引擎是指合约运行的底层架构,合约在合约引擎中运行。
本发明中,基础设施层是指提供读写接口的区块链项目,例如比特币、以太坊等。
本发明中,应用平台层是指通过区块链基础设施层提供的各种读写接口完成的区块链子服务,如电子***,数据存证,数字资产等服务。
如图1所示,该区块链查询外置索引开发框架包括:
S101:所述索引模块定义索引逻辑和查询逻辑,所述索引逻辑包括自定义的索引逻辑和内置的索引逻辑,其中,所述内置的索引逻辑包括时间索引和账户索引。
示例地,索引模块由索引控制器、数据处理算法部分、索引算法部分组成。索引控制器由数据同步模块进行调用,当链上最新的索引请求到达索引控制器时,控制器通过请求分发函数,将索引请求按索引配置分发到不同的索引逻辑脚本上执行,索引逻辑脚本调用内置的索引逻辑或用户提供的索引逻辑中的OnBlock()函数建立数据索引后,检测是否需要调用特定的算法来构建数据结构,如将交易数据处理成基数统计所需要的格式,在将数据处理成所需格式后,将索引数据存储到对应的数据库当中,根据应用于不同场景的查询需求,使用相对应数据库存储索引数据。在索引数据存储到对应数据库后,调用查询逻辑中的OnQuery()方法,根据索引数据来查询符合查询条件的交易数据。
索引模块分为两部分,一个是建立索引部分,包括内置索引逻辑和自定义索引逻辑,可同时定义多个索引逻辑,在将区块链上的数据获取后,一次性构建所需要的所有索引;另一个是按条件查询部分,按条件查询指根据索引数据来查询链上的数据,该条件可以是一个条件也可以是多个条件,同时可自定义查询逻辑,在查询需求发生变化时,支持灵活的查询任务。
本发明中,索引控制器是指合约引擎中运行的监听索引逻辑调用请求的控制器,通过监听到的索引逻辑调用请求,调用到对应索引逻辑的URL来实现索引逻辑的调用,从而构建索引。
索引控制器数据结构如表1:
表1
urlList为索引的调用路径,在合约生成模块生成索引脚本后赋值。Blockqueue为保存待同步区块哈希的队列,该哈希值由数据同步模块传递过来。Dispatch方法通过不断地获取blockqueue中的区块哈希并根据用户配置好的索引Url将区块哈希作为参数传递给对应的索引逻辑建立索引。
在索引逻辑建立索引后,根据应用于不同场景的查询需求,选择与查询需求相对应的预设数据库存储索引数据,例如全文索引数据库用于使大量文本数据具备搜索、分析的能力的场景,关系型数据库适用于读多写少的场景,K-V数据库对于单值查询比较快的场景,且***效率较前两种数据库最高。
不同数据库实例的接口异构,采用不同的数据库存储索引数据需要不断切换数据库的调用接口和操作命令,频繁切换数据库的调用和对数据库的操作会降低查询效率。为此,在本发明实施例中,所述索引模块中的数据库适配器将所述预设数据库适配为框架统一的数据库类型,所述数据库适配器将接口异构的多种预设数据库解耦,封装一个统一的框架预设接口,预设数据库共用所述框架预设接口操作所述预设数据库。具体地,数据库适配器将接口异构的多种预设数据库解耦后,统一接口异构的数据库层,将不同类型的数据库实例适配为框架统一的数据库实例,在对不同数据库实例进行操作时,指定使用的数据库实例,即可使用索引框架提供的接口对该数据库实例进行操作,例如对于数据库的获取、存储、删除某数据操作,对于数据库管理的创建数据库实例、获取数据库实例操作。数据库适配器将常用的操作进行接口封装,封装为Custom_Repository接口,通过一个接口类统一多种数据库实例的操作。
Custom_Repository接口如表2:
表2
Get为获取数据库中数据,在查询过程中,获取满足查询条件的数据库中数据;Put为将数据存储至数据库中,在完成索引建立后,将索引数据存储至数据库中;Delete为删除数据库中数据;Create_DB为创建新的数据库实例类型,所述预设数据库不符合查询需求时,自定义接入新的数据库类型,所述数据库适配器将自定义接入的新数据库类型适配为框架统一的数据库类型;Open_DB为打开数据库实例。
将多种数据库实例的操作封装成Custom_Repository接口后,数据库适配器将数据库层进行封装。
参照图2,图2是本发明的数据库层封装后的类图。如图2所示,DBUtils负责管理Custom_Rep的实例,通过GetInstance()获取Custom_Rep的实例。CreateDB用于创建数据库实例文件,type=0代表数据库实例类型,type定义为数据库实例常量,在核心的GetInstance()中通过type实例类型的常量值来获取对应的数据库实例,实现对应的数据库实例的调用。实际应用中,当已有的数据库类型不满足索引需求时,可在DBUtils中增加数据库实例类型。
具体实现时,用户建立索引逻辑后,根据封装的Custom_Repository接口和封装的数据库层,则可通过指定数据库实例常量调用满足不同应用场景查询需求的数据库实例类型。例如全文索引数据库实例常量为0,关系型数据库实例常量为1,K-V数据库实例常量为2。指定数据库实例常量为1,则索引数据存储至关系型数据库,框架通过Custom_Repository接口直接对该数据库进行各项操作。
S102:所述合约生成模块根据所述索引模块定义的索引逻辑建立合约;根据查询需求,将合约中的SDK调用代码和查询逻辑分别修改为需要查询区块链的SDK调用代码和查询逻辑,完成合约定义。
示例地,合约生成模块通过索引模块定义的索引逻辑和查询逻辑完成合约的创建,合约生成模块的主要框架如表3,定义了合约的创建流程。
OnCreate在合约执行的时候判断数据库是否存在,如果不存在则创建数据库,如果存在则获取数据库实例并存到全局变量中。OnBlock方法用于数据同步模块在获取一个新块时传递块哈希或是整个块到合约方法中。OnTransaction是OnBlock方法的细化,用户将块中的交易进行适配后索引。OnQuery方法用于查询条件构建和结果返回,需要用户按需求进行填写。数据库存储部分会提供好内置的数据库供用户使用,现有的数据库无法满足用户需求的情况下,用户可以通过Custom_Repository数据库的接口对存储层进行扩展,创建自定义数据库实例类型。索引框架会按照固定不变的代码部分加入用户重写的代码,生成对应的合约文件。
表3
内置的索引逻辑模板如表4,${IndexName}等变量通过获取合约生成模块中设置的键值对在运行时生成合约脚本文件。
表4
为便于理解,参照图3,图3是本发明的合约创建界面图。定义的索引逻辑为内置的索引逻辑时,合约生成模块根据所述内置的索引逻辑,完成代码的填充,选择索引数据存储的预设数据库类型,建立合约;定义的索引逻辑为自定义的索引逻辑时,合约生成模块根据自定义的索引逻辑,自定义代码填充,选择索引数据存储的预设数据库类型,建立合约,将自定义的索引逻辑将保存至本地。具体地,如图3所示,对于定义的索引逻辑为框架内置的索引逻辑时,如时间索引用于查询一段时间内的交易数量,账户索引用于查询该账户产生的交易信息,通过勾选需要的索引,框架自动填充OnBlock方法、OnTrans方法和OnQuery方法代码生成需要的合约。当内置索引逻辑不满足用户需求时,可自定义索引逻辑,对于自定义索引逻辑的合约创建过程中,合约生成模块生成一个基本完整的合约,用户通过更改OnBlock方法和OnQuery方法中的部分代码完成自定义索引逻辑和/或查询逻辑,对于同一区块链,只需选取需要索引的字段和数据库实例类型即可生成需要的合约。自定义的索引逻辑会保存至本地,用于下次建立相同自定义索引时,直接调用保存至本地的该索引逻辑。合约创建时,提供SDK包的路径全称,框架生成代码时会将SDK调用部分替换为提供的SDK对象。
S103:根据区块链数据结构不同,所述数据适配模块将区块链上的数据结构适配为框架预定义的数据结构。
示例地,数据适配模块将区块链上的数据结构适配为框架预定义的数据结构步骤为数据适配模块将区块链上的数据映射为框架中预定义的数据结构,将区块链数据字段名称、字段类型,输入数据适配器中,所述数据适配模块将所述区块链数据自动适配为所述框架预定义的数据结构。具体地,通过构造适配器,将预定义的数据单独存放在一个文件夹下,在需要获取对应链的数据结构时,只需操作框架中预定义的基础数据结构,实现操作链上数据结构的功能,完成从区块链上数据映射至框架预定义的数据结构,具体的适配过程如表5所示。
表5
参照图4,图4是本发明的数据适配模块的类图。如图4所示,transaction代表索引框架中预定义的基本数据单元,chaintrans的含义是链上交易,是建立索引的基本数据单元。两者通过TransAdapter实现chaintrans的赋值,将区块链中的数据字段输入chaintrans中,将对应的字段进行类型转换和处理,转换为索引框架可直接使用的数据类型。
完成上述适配后,采用如表6的预定义数据结构调用方式,通过对索引框架内预定义数据的操作实现对区块链上数据的调用。在智能合约引擎IDE中,提供调用jar包函数的功能,通过路径引用的方式在合约中调用适配器方法,通过预定义数据结构的调用,实现适配后的区块链上数据的调用。newtrans即是经过适配后的数据结构。
表6
S104:根据区块链类型不同,所述数据同步模块选择与所述区块链类型对应的数据同步方式,将所述区块链上的数据同步至所述框架内。
本发明中,根据区块链结构不同,具有三种数据同步方式。第一种为区块高度数据同步;第二种为遍历数据库同步,合约直接遍历区块链数据库,不断调用数据库中的Iterator方法同步区块链中的数据,该方法中的区块链中数据存储时会加入部分参数,在进行数据同步时需将区块链数据库中读出的键数据进行反序列化;第三种为同步哈希数据同步,该方法在区块链主链中加入请求代码,获取区块哈希,将新产生的区块哈希同步至框架中。
示例地,在完成将不同区块链上数据结构适配为框架内预设数据结构的定义后,定义数据同步方式,根据区块链类型不同,数据同步模块选择与该区块链类型对应的数据同步方式,将区块链上的数据同步至所述框架内。
参照图5,图5是本发明的数据同步模块的类图。如图5所示,SyncData为数据同步类,用于存储数据同步进度,同时将新产生的块哈希发送到队列。ckptHeight记录当前同步到的块高度,hashQueue存储当前待同步的区块哈希。SyncByIterator表示按照通过遍历数据库来同步的方法;SyncByHeight表示通过高度来遍历区块链的方法,当高度为0时停止本次同步,同时SyncByHeight会定时调用SDK获取区块高度来同步最新区块;SyncByHash是被动同步区块哈希的方法,当区块链产生新块时,会调用该方法同步最新区块哈希到索引框架中。
DButils是在SyncData中调用的数据库实例,用于对存储进度持久化。
DBInstance是数据库实例,GetInstance控制指定数据库类型获取指定数据库实例。
IndexDispatch索引控制器是数据同步模块调用索引控制器将索引请求分发到不同合约的类。
SDKClient是不同区块链的SDK客户端,通过SDKClient可以获取当前区块链的最新高度以及通过哈希获取交易或者通过块哈希获取块。
CustomRep是对预设的数据库实例操作进行封装后的接口,当接入新的数据库时,CustomRep中的方法可以通过框架中自动生成的代码实现数据库类型的切换,不必修改已有的脚本代码。
根据区块链结构不同,采用指定的同步方式进行数据同步,例如单链结构采用区块高度进行数据同步,图式结构采用遍历数据库同步或同步哈希数据同步。指定数据同步方式后,将数据同步的任务指定给SyncData类完成,SyncData类通过DBUtils工具类获取数据库实例,通过数据库实例获取当前同步进度,并判断是否存在链上同步进度,如果不存在,则说明是第一次数据同步,同步模块会新建立区块链同步进度保存变量。如果是按区块高度同步,则将高度保存到数据库当中,如果是按区块哈希同步,将已收到的待同步的哈希值保存到队列结构中。
当采用区块高度遍历进行数据同步时,获取区块链最新高度后,由SyncData类设置定时器,每隔预设时间段,通过SDKClient中的GetBlock()方法获取区块链上的区块;当采用遍历数据库同步方式时,在数据同步过程中,获取区块链中数据库的数据反序列化方法,将数据库中的数据反序列化后进行数据同步;当采用同步哈希数据同步时,在区块链主链上加入请求代码,获取区块哈希值,将新产生的区块哈希同步到框架中。
对于数据同步模块中的遍历数据库同步和同步哈希数据同步,在对当前遍历到的区块进行数据同步时,区块链上同时产生新区块,所述数据同步模块将所述新产生的区块哈希记录到内存队列中去,在所述数据同步模块完成对所述当前遍历到的区块数据同步后,对队列中的所述新产生的区块数据进行数据同步,完成所述队列中新产生区块数据同步后,继续同步区块链上数据。具体地,数据同步过程中是从数据库一个时间点开始遍历,然后对遍历到的区块进行数据同步,在同步过程中,区块链中会产生新的区块,对遍历到的区块进行数据同步时,无法同步到新产生的区块,为了同步到同步过程中新产生的区块,数据同步模块将新产生的区块记录到内存队列中,当对遍历到的区块数据同步完成后,对队列中新产生的区块进行同步,在完成队列中新产生的区块同步后,再进行新一轮的区块链上数据同步。
在同步过程中出现数据同步中断时,数据同步模块设置定时器,对当前同步到的区块哈希和/或区块高度在缓存队列中进行存储,在同步中断后,再次进行同步时,从所述定时器记录的当前同步到的区块哈希和/或区块高度进行断点续传。具体地,数据同步模块中SyncData类设置有定时器,每隔预设时间段则记录当前同步区块哈希或区块高度,在同步中断后恢复同步时,通过读取定时器内记录的区块高度或区块哈希,从该区块高度或区块哈希进行断点续传,继续从中断同步的区块高度或区块哈希处,再次进行数据同步。
S105:所述数据同步模块同步数据后,所述合约调用所述索引模块定义的索引逻辑建立索引,索引数据存储到预设数据库中。
示例地,每次SyncData类获取最新同步区块后,向索引请求控制器发送索引请求的信息,通过合约调用的方式调用索引请求器的请求链接。索引脚本在收到索引请求之后,按照用户配置的索引类型,将索引请求分发到不同的索引合约上,在发送索引请求之前通过SDK方法获取完整的块并将块信息以参数的形式传递给合约。合约调用OnBlock()方法后对块进行遍历,对块中每笔交易执行合约中的OnTransaction()方法建立合约。调用OnTransaction方法后,调用Adapter方法进行数据适配,将链上数据字段适配成索引框架中的数据类型。索引合约脚本调用DBUtils中的GetInstance方法获取数据库实例并通过Put方法存储数据建立索引,将索引数据存储至获取的数据库实例内,完成一次完整的索引建立流程。
S106:根据建立的索引,所述合约调用所述索引模块定义的查询逻辑,完成符合查询条件的索引数据查询,返回查询结果;根据查询需要,定义回库查询,将SDK查询代码添加到查询逻辑中,完成通过哈希值获取数据内容的查询。
示例地,在建立区块链数据索引后,合约调用所述索引模块定义的查询逻辑OnQuery()方法,查询符合查询条件的交易,例如某一时间段内区块链上的交易数量、某个账户的交易明细、某个关键字对应的查询内容,完成查询后返回查询结果。根据查询需要,定义是否回库查询,例如当同步的区块数据不完整,或同步数据为索引主键哈希值时,可定义回库查询逻辑,将SDK查询代码添加到查询逻辑中,实现回区块链主库获取相应哈希值对应区块的具体交易内容数据。
本发明实施例包括以下优点:本发明中,合约生成模块根据索引模块定义的索引逻辑和查询逻辑,建立合约,根据查询需求,修改合约中的SDK调用代码和查询逻辑,完成合约定义,数据适配模块适配不同区块链上数据结构为框架预设数据结构,数据同步模块选择对应的数据同步方式将区块链上数据同步至框架中,数据同步后,调用合约中的索引逻辑建立索引,索引数据存储到对应预设数据库,根据建立的索引,调用合约中查询逻辑,完成数据查询任务,根据查询需要,可定义回库查询数据。实现将不同区块链上数据同步至框架内,建立同步数据的索引,通过建立的索引完成数据查询,提高区块链中应用平台层对区块链基础设施层的查询效率,使区块链查询功能更加多样。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以预测方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种区块链查询外置索引开发框架,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (7)
1.一种区块链查询外置索引开发框架,所述框架应用于区块链中,其特征在于,所述框架包括合约生成模块、索引模块、数据适配模块、数据同步模块;
所述索引模块定义索引逻辑和查询逻辑,所述索引逻辑包括自定义的索引逻辑和内置的索引逻辑,其中,所述内置的索引逻辑包括时间索引和账户索引;
所述合约生成模块根据所述索引模块定义的索引逻辑建立合约;
根据查询需求,将合约中的SDK调用代码和查询逻辑分别修改为需要查询区块链的SDK调用代码和查询逻辑,完成合约定义;
根据区块链数据结构不同,所述数据适配模块将区块链上的数据结构适配为框架预定义的数据结构;
根据区块链类型不同,所述数据同步模块选择与所述区块链类型对应的数据同步方式,将所述区块链上的数据同步至所述框架内;
所述数据同步模块同步数据后,所述合约调用所述索引模块定义的索引逻辑建立索引,索引数据存储到预设数据库中;
根据建立的索引,所述合约调用所述索引模块定义的查询逻辑,完成符合查询条件的索引数据查询,返回查询结果;
根据查询需要,定义回库查询,将SDK查询代码添加到查询逻辑中,完成通过哈希值获取数据内容的查询。
2.据权利要求1所述的框架,其特征在于,所述合约生成模块根据所述索引模块定义的索引逻辑建立合约,包括:
所述定义的索引逻辑为内置的索引逻辑时,所述合约生成模块根据所述内置的索引逻辑,完成代码的填充,选择索引数据存储的预设数据库类型,建立所述合约;
在所述定义的索引逻辑为所述自定义的索引逻辑时,所述合约生成模块根据所述自定义的索引逻辑,自定义代码填充,选择索引数据存储的预设数据库类型,建立所述合约;其中,所述自定义的索引逻辑将保存至本地。
3.根据权利要求1所述的框架,其特征在于,根据区块链数据结构不同,所述数据适配模块将区块链上的数据结构适配为框架预定义的数据结构,包括:
所述数据适配模块将区块链数据结构适配为框架预定义的数据结构;
其中,所述数据适配模块将区块链上的数据映射为框架中预定义的数据结构,将区块链数据字段名称、字段类型,输入数据适配器中,所述数据适配模块将所述区块链数据自动适配为所述框架预定义的数据结构。
4.根据权利要求1所述的框架,其特征在于,根据区块链类型不同,所述数据同步模块选择与所述区块链类型对应的数据同步方式,将所述区块链上的数据同步至所述框架内,包括:
所述数据同步模块根据不同的区块链类型,选择与所述区块链相对应的数据同步方式;
根据所述选择的数据同步方式,将所述区块链上的数据同步至所述框架内;
所述数据同步方式包括区块高度数据同步、遍历数据库数据同步、同步哈希数据同步;
其中,所述数据同步模块设置定时器,对当前同步到的区块哈希和/或区块高度在缓存队列中进行存储,在同步中断后,再次进行同步时,从所述定时器记录的当前同步到的区块哈希和/或区块高度进行断点续传。
5.根据权利要求4所述的框架,其特征在于,所述数据同步模块,还包括:
所述数据同步模块中的遍历数据库数据同步和同步哈希数据同步,在对当前遍历到的区块进行数据同步时,区块链上同时产生新区块,所述数据同步模块将所述新产生的区块哈希记录到内存队列中去,在所述数据同步模块完成对所述当前遍历到的区块数据同步后,对队列中的所述新产生的区块数据进行数据同步,完成所述队列中新产生区块数据同步后,继续同步区块链上数据。
6.根据权利要求1所述的框架,其特征在于,所述数据同步模块同步数据后,所述合约调用所述索引模块定义的的索引逻辑建立索引,索引数据存储到预设数据库中,包括:
所述数据同步模块完成数据同步;
所述合约调用所述索引模块定义的的索引逻辑建立索引,索引数据保存到预设数据库中;
其中,所述预设数据库具有多种类型,根据应用于不同场景的查询需求,选择与查询需求相对应的预设数据库存储索引数据;
所述索引模块中的数据库适配器将所述预设数据库适配为框架统一的数据库类型;
其中,所述数据库适配器将接口异构的多种预设数据库解耦,封装统一的框架预设接口,预设数据库共用所述框架预设接口操作所述预设数据库。
7.根据权利要求6所述的框架,其特征在于,所述预设数据库,还包括:
所述预设数据库不符合查询需求时,自定义接入新的数据库类型;
其中,所述数据库适配器将所述自定义接入的新数据库类型适配为框架统一的数据库类型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010746552.2A CN112035466B (zh) | 2020-07-29 | 2020-07-29 | 一种区块链查询外置索引开发框架 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010746552.2A CN112035466B (zh) | 2020-07-29 | 2020-07-29 | 一种区块链查询外置索引开发框架 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112035466A true CN112035466A (zh) | 2020-12-04 |
CN112035466B CN112035466B (zh) | 2024-04-19 |
Family
ID=73583513
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010746552.2A Active CN112035466B (zh) | 2020-07-29 | 2020-07-29 | 一种区块链查询外置索引开发框架 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112035466B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113704248A (zh) * | 2021-07-12 | 2021-11-26 | 北京邮电大学 | 一种基于外置索引的区块链查询优化方法 |
CN114168685A (zh) * | 2021-12-15 | 2022-03-11 | 北京天德科技有限公司 | 一种基于区块链***的新型数据库架构及运行方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106874393A (zh) * | 2017-01-13 | 2017-06-20 | 北京众享比特科技有限公司 | 基于区块链的业务数据同步方法及***、数据库*** |
CN109086325A (zh) * | 2018-06-29 | 2018-12-25 | 阿里巴巴集团控股有限公司 | 基于区块链的数据处理方法和装置 |
CN109376146A (zh) * | 2018-10-26 | 2019-02-22 | 陕西医链区块链集团有限公司 | 一种基于区块链的搜索引擎***及方法 |
CN109558411A (zh) * | 2017-09-26 | 2019-04-02 | 浙江华信区块链科技服务有限公司 | 一种基于区块链数据的下链同步方法及装置 |
CN109947855A (zh) * | 2019-04-03 | 2019-06-28 | 上海中商网络股份有限公司 | 数据同步处理方法、装置、服务器及存储介质 |
CN111339106A (zh) * | 2020-05-18 | 2020-06-26 | 杭州趣链科技有限公司 | 一种区块链数据索引的方法 |
-
2020
- 2020-07-29 CN CN202010746552.2A patent/CN112035466B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106874393A (zh) * | 2017-01-13 | 2017-06-20 | 北京众享比特科技有限公司 | 基于区块链的业务数据同步方法及***、数据库*** |
CN109558411A (zh) * | 2017-09-26 | 2019-04-02 | 浙江华信区块链科技服务有限公司 | 一种基于区块链数据的下链同步方法及装置 |
CN109086325A (zh) * | 2018-06-29 | 2018-12-25 | 阿里巴巴集团控股有限公司 | 基于区块链的数据处理方法和装置 |
CN109376146A (zh) * | 2018-10-26 | 2019-02-22 | 陕西医链区块链集团有限公司 | 一种基于区块链的搜索引擎***及方法 |
CN109947855A (zh) * | 2019-04-03 | 2019-06-28 | 上海中商网络股份有限公司 | 数据同步处理方法、装置、服务器及存储介质 |
CN111339106A (zh) * | 2020-05-18 | 2020-06-26 | 杭州趣链科技有限公司 | 一种区块链数据索引的方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113704248A (zh) * | 2021-07-12 | 2021-11-26 | 北京邮电大学 | 一种基于外置索引的区块链查询优化方法 |
CN113704248B (zh) * | 2021-07-12 | 2024-01-09 | 北京邮电大学 | 一种基于外置索引的区块链查询优化方法 |
CN114168685A (zh) * | 2021-12-15 | 2022-03-11 | 北京天德科技有限公司 | 一种基于区块链***的新型数据库架构及运行方法 |
CN114168685B (zh) * | 2021-12-15 | 2023-07-18 | 北京天德科技有限公司 | 一种基于区块链***的新型数据库架构及运行方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112035466B (zh) | 2024-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104699718B (zh) | 用于快速引入业务数据的方法和装置 | |
CN105843182B (zh) | 一种基于oms的电力调度事故预案***及方法 | |
CN103473696A (zh) | 一种收集、分析和分发网络商业信息的方法和*** | |
CN103336813A (zh) | 一种基于中间件架构的物联网数据集成管理方案 | |
CN105681477B (zh) | 一种数据访问方法和一种服务器 | |
CN102314358B (zh) | 一种在云平台上以soa的方式部署常规应用的方法 | |
CN105468702A (zh) | 一种大规模rdf数据关联路径发现方法 | |
CN105302920A (zh) | 一种云存储数据的优化管理方法和*** | |
CN111666296A (zh) | 基于Flink的SQL数据实时处理方法、装置、计算机设备和介质 | |
CN107977446A (zh) | 一种基于数据分区的内存网格数据加载方法 | |
CN104657149A (zh) | 一种存储***的管理模块的软件框架实现方法 | |
CN109271561B (zh) | 一种图谱信息检索方法及装置 | |
CN101183370A (zh) | 基于类定义和关系定义的拓扑建模方法 | |
CN103744647A (zh) | 一种基于工作流GPD的Java工作流开发***及其方法 | |
CN112035466A (zh) | 一种区块链查询外置索引开发框架 | |
CN111966692A (zh) | 针对数据仓库的数据处理方法、介质、装置和计算设备 | |
CN104598299A (zh) | 用于对每条接收数据执行聚合处理的***和方法 | |
US20230376475A1 (en) | Metadata management method, apparatus, and storage medium | |
CN103390018A (zh) | 一种基于SDD的Web服务数据建模与搜索方法 | |
CN112231351A (zh) | 一种pb级海量数据的实时查询方法和装置 | |
CN114254606A (zh) | 微服务框架模型 | |
CN110532058B (zh) | 容器集群服务的管理方法、装置、设备及可读存储介质 | |
CN114372064A (zh) | 数据处理装置、方法、计算机可读介质及处理器 | |
CN110866065A (zh) | 一种数据交换***、交换方法及存储介质 | |
CN106603610B (zh) | 一种数据获取以及同步方法、装置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |