[发明专利]一种面向Hyperledger Fabric的SQL访问方法有效
申请号: | 202110366610.3 | 申请日: | 2021-04-06 |
公开(公告)号: | CN113157723B | 公开(公告)日: | 2022-06-03 |
发明(设计)人: | 陈星;黄志豪;林力强;陈艳 | 申请(专利权)人: | 福州大学 |
主分类号: | G06F16/242 | 分类号: | G06F16/242;G06F16/2455;G06F8/41;G06F16/27 |
代理公司: | 福州元创专利商标代理有限公司 35100 | 代理人: | 钱莉;蔡学俊 |
地址: | 350108 福建省福州市*** | 国省代码: | 福建;35 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 面向 hyperledger fabric sql 访问 方法 | ||
1.一种面向Hyperledger Fabric的SQL访问方法,其特征在于,包括以下步骤:
定义关系模型至键值对模型的转换规则,将关系模型向键值对模型进行转换;
基于智能合约技术,开发SQL执行合约,SQL执行合约通过接受应用层传入的SQL语句作为参数,并结合转换后的存储结构,实现SQL语句向底层状态数据库操作的转换;
应用自动重构工具,实现应用层相关逻辑代码的自动化映射转换;
所述定义关系模型至键值对模型的转换规则,将关系模型向键值对模型进行转换具体为:
步骤S11:在关系模型的有向图结构上添加两种类型的描述标签,分别为表间关系的描述标签和表类型的描述标签;
步骤S12:根据嵌入原则与引用原则实现关系模型向键值对模型的转换;
所述嵌入原则为:将拥有一对一或者一对多关系的数据内嵌到一个单一的文档中,使用内嵌功能对数据所有者及其包含的概念进行建模;
所述引用原则为:若表为TI兴趣表,即该表存在频繁的修改和插入,则使用引用来建模而不是嵌入的方式;
所述基于智能合约技术,开发SQL执行合约,SQL执行合约通过接受应用层传入的SQL语句作为参数,并结合转换后的存储结构,实现SQL语句向底层状态数据库操作的转换具体为:
步骤S21:当从上层的应用接收了SQL语句后,使用JSQLParser完成词法和语法的解析,生成SQL语句对应的Java对象;
步骤S22:通过遍历的方式对Java对象表达式进行语法的正确性分析,检查SQL语句的语法结构和语义逻辑是否正确;
步骤S23:进行SQL向Fabric中智能合约相应操作的转换;
步骤S24:通过增加调用层,将底层的Fabric API和访问接口的代码进行隔离,对Fabric API中的常用类进行封装;
所述应用自动重构工具,实现应用层相关逻辑代码的自动化映射转换具体包括以下步骤:
步骤S31:确定源码中需要转换的代码位置,并用标签来标注;
步骤S32:制定相应的代码转换规则,扫描源码包下的所有java文件,通过标注的标签识别需要转换的代码段,并将其转换为目标代码字符串;
步骤S33:导入Fabric-Driver的jar包以及相关配置文件及身份证书文件;
步骤S34:封装API,设计应用层交互中间件Fabric-Driver;Fabric-Driver包括网络配置模块、证书管理模块、合约管理模块以及通道管理模块。
2.根据权利要求1所述的一种面向Hyperledger Fabric的SQL访问方法,其特征在于,步骤S23具体包括数据插入、数据查询、数据修改以及数据删除的操作;
所述数据插入具体为:对于Insert类型语句,在插入数据时,找到插入表所嵌入的目标表的对应文档,通过PutState API插入数据;在数据插入的过程中,需要根据转换后的表结构判断数据插入的位置,如果目标表是以嵌入方式存储,则遍历目标表所嵌入的所有父表的文档中,然后更新父表的相关字段;若不是以内嵌方式存储,首先判断该表是否包含外键,若是,则进一步判断当前条行记录对应的所有外键值所关联的目标文档是否存在,若不存在关联的目标文档,则忽略本条操作;
所述数据查询具体为:建立Select子句与Mongo query语法子句的映射关系,建立where子句运算符与selector子句运算符的映射关系,并通过GetQueryResultForStringAPI进行查询操作;
所述数据修改具体为:通过GetQueryResultForString与PutState两个API组合使用进行修改,首先读取目标文档,然后更新字段后再重新写入新的数据;当表以文档引用的方式存储时,直接修改所有满足条件的目标文档;当表以嵌入方式存储时,修改时需要同时遍历查询多个目标文档并修改;
所述数据删除具体为:首先查询到需删除的文档的key值,再调用DeleteState删除数据;首先,判断该表是否以嵌入方式存储,若是内嵌存储,则需要遍历所有嵌入的目标表并存在关联字段的文档,然后更新文档数据,删除数据后还需要读取该表的所有子表,若存在子表,则数据删除首先需要删除所有引用了该数据的所有子表对应的数据文档,若是独立存储的话,则直接删除目标表的所有文档,并且删除所有子表的关联数据。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于福州大学,未经福州大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110366610.3/1.html,转载请声明来源钻瓜专利网。