天德产品之区块链查询语言BQL
点击上方蓝字关注我们吧
区块链的数据采用增量存储的模式,以区块数据和交易数据为主。目前的区块链块数据或交易数据的查询,主要使用遍历查询、基于哈希的查询和基于块高度的查询等方式。这种设计方式下,应用程序会存储上链数据对应的链上哈希,基于应用数据提供的哈希值进行查询,但无法提供基于复合条件的链上查询或范围数据的链上查询,灵活度极低。
随着区块链技术的发展,区块链的应用场景不断丰富,查询需求更加多变,现有的基于哈希等条件的链上查询方式无法满足应用需要。例如,当我们在某一存有用户信息的区块链上查询年龄大于18的所有用户列表时,传统的区块链查询处理方法只能将所有交易数据进行遍历,每个交易提取应用数据段(data数据)进行解析,获取其中年龄字段对应的数值,大于18的通过筛选。当区块链的整体账本较大时,这种查询方式需要的时间成本较高,难以满足应用的效率要求。
区块链查询语言(Blockchain Query Language)
天德实现一种面向对象的区块链查询语言BQL及其处理方法和装置,使原本低效的区块链查询大大提高了易用性、效率和扩展性。
其特征为:
交易缓存池pool,初始化时将区块链账本中较新的一部分交易数据获取,交易的应用数据(data数据)部分转换为业务实体对象。可将交易数据和转化后的实体对象数据一同存入pool中,也可将交易数据进行简化,仅将哈希值和对应的实体对象数据存入pool中。当有新的数据上链时,该数据进行同样的转化并存入pool中,保持pool的最新状态。同时,设置pool中交易数量上限,超过上限则根据一定算法将pool中部分交易数据序列化到磁盘上。
其查询装置特征为:
(1)交易业务缓存池pool,缓存区块链数据进行格式转换后的交易业务数据,以支持查询;
(2)BQL解析器,解析BQL查询语言对象,并转换成编程语言可识别的逻辑查询条件。其中,BQL对象基本结构包括:
page:用于处理分页查询场景;
condition:查询条件;
conjunction:连接词,与下一个condition之间的连接关系。
其查询方法特征为:
(1)系统启动时初始化交易缓存池pool,区块链数据中的应用数据字段转换为对象格式,一同存入pool;
(2)用户输入或应用构建查询条件;
(3)系统将查询条件转化为BQL对象;
(4)BQL解析器解析BQL对象,翻译成编程语言可识别的逻辑语句;
(5)缓存池pool根据逻辑语句筛选数据并将结果返回;
(6)可选地,系统根据返回结果的交易哈希值进行链上查询,或将返回的结果进行哈希校验,以保证数据的正确性与完整性;
(7)数据返回至应用端。
图1
具体实施案例
某一区块链应用系统,系统启动时初始化pool,将区块链上最新的3000条数据获取,每个交易的应用数据部分(data数据)转化为JSON(JavaScript Object Notation,一种轻量级的数据交换格式)对象,和交易哈希进行映射后存入pool中。pool设定的交易数据上限为10000,当数据量超出上限时,时间戳较小的交易将从pool中序列化到磁盘。
如图2,当进行查询时,系统提供的relation包括等于、不等于、大于、小于、模糊比配,其中等于与不等于查询可以兼容数字或者字符串,而大于小于只能用于数字对比,模糊只能用于字符串查询。提供提供的conjunction包括and和or,并限制一次查询最多可将10个condition进行连接,BQL对象可表达为((c1) && (c2) || (c3) ...)。
图2
BQL解析器收到BQL对象后进行拆解,获取全部的condition,并将每个condition按照and、or关系串联形成系统可执行的逻辑语句,每个condition中包括key和value,其中key对应业务对象中的字段名。
由于pool中交易包含了业务数据JSON对象,系统可直接通过解析完成的查询条件在pool中进行筛选并将对应的交易哈希返回。系统根据返回的交易哈希或交易哈希集合查询对应链上数据,返回查询结果。
推荐阅读
2021国际服贸会新增线上3D展厅国家高新技术企业,专注于区块链底层、区块链产业沙盒(测试和监控)、互链网核心技术的研发。天德科技拥有500多项知识产权;86项国际领先的区块链核心算法发明专利,其中已授权专利24项;60项计算机软件著作权。
©2021 北京天德科技有限公司