基于区块链的链上链下同步方法与流程

文档序号:26139631发布日期:2021-08-03 14:23阅读:617来源:国知局
基于区块链的链上链下同步方法与流程

本发明涉及区块链存储技术领域,具体是基于区块链的链上链下同步方法。



背景技术:

在现有区块链应用中,为保证关键数据的安全性或隐私性,或者其他的业务需要,往往会将这类数据上链进行存证,然后使用链上数据哈希并利用区块链网络的种种特性,如不可篡改,可追溯等,来进行业务间的处理,但现有技术存在这么一个问题,对于业务系统使用的一些关键数据并不是冷数据,即长时间不会发生变化的,但也不是新增或变更特别频繁的即热数据,如果上链程序对于这些关键数据更新的频次太低,就会造成链上数据使用的是过时版本,导致业务系统无法正常处理;如果上链程序对于这些关键数据更新的频次太高,就会造成系统资源的大量浪费,甚至影响系统正常提供服务,造成卡顿延迟甚至宕机的现象。

随着信息时代数据自动化程度越来越高,需要上链的数据也越来越多,靠人工自行判断是否需要同步链上链下数据已经无法满足需求,而现有技术无法做到快速准确的同步链上链下数据。



技术实现要素:

本发明的目的在于提供基于区块链的链上链下同步方法,以解决上述背景技术中提出的问题。

为实现上述目的,本发明提供如下技术方案:

基于区块链的链上链下同步方法,基于区块链的链上链下同步方法,实现方法包括以下步骤:

s1:将需要上链数据存放在链下数据库中;

s2:建立一个上链任务,其功能是以一个固定的扫描间隔从链下数据库中有序按批次读取数据,检查点存储为数据库的主键,初始为空;

s3:在步骤s2的基础上,对数据库记录的主键进行排序读取,检查是否存在比检查点大的记录,若存在则读取一个批次的数据,否则说明未发现新增数据,等待下一个扫描间隔继续扫描;

s4:在步骤s3的基础上,逐条计算一个批次数据里每条记录的哈希,并将主键作为链上唯一标识与整条记录哈希一起上链;

s5:在步骤s4的基础上,把每个批次的数据上链完成后,在本地记录这个批次的最后一条记录的主键,作为检查点;

s6:在步骤s5的基础上,重复步骤s3到步骤s5的过程,最终,在下一个扫描间隔内数据库所有数据都会上链;

s7:在步骤s6的基础上,建立一个验真任务,其功能是以一个固定的扫描间隔从链上有序按批次读取数据,检查点存储为链上标识,初始为空;

s8:在步骤s7的基础上,对链上标识的主键进行排序读取,检查是否存在比检查点大的记录,若存在则读取一个批次的链上数据,否则说明历史数据已检查完毕,检查点置为空,并等待下一个扫描间隔从头开始扫描;

s9:在步骤s8的基础上,逐条读取一个批次的链上数据标识对应的数据库记录,并计算数据库记录的哈希,与链上标识对应的哈希做比对,若哈希一致,说明数据库历史记录没有过更新,若不一致则说明数据库已更新或删除;

s10:在步骤s9的基础上,将数据库已更新的记录进行步骤s4过程,使链下记录保持与链上记录的哈希一致,将每个批次里链下已更新的记录上链后,记录此批次最后一个标识为检查点;

s11:在步骤s10的基础上,重复步骤s8到步骤s10的过程,最终,在下一个扫描间隔内数据库所有已更新或删除的数据都会上链。

作为本发明再进一步的方案:所述步骤s2中上链任务包括创建连接对象、创建命令对象、打开连接对象、在命令对象中执行sql语句和关闭连接对象。

作为本发明再进一步的方案:所述创建连接对象用于开启程序与数据库之间的连接,以在链下数据库与客户端应用程序之间移动数据,所述创建命令对象用于执行命令,并从数据库返回结果,所述打开连接对象用于把命令信息连接到数据库,所述在命令对象中执行sql语句用于循序地读取数据,所述关闭连接对象用于关闭执行后的命令,以减少系统资源对象。

作为本发明再进一步的方案:所述在命令对象中执行sql语句的工作步骤包括:语法分析和语义分析查询、逻辑查询计划生成以及物理查询计划,从而得出sql语句所需要的结果集。

作为本发明再进一步的方案:所述步骤s4中计算数据里每条记录的哈希用于对一个批次的数据进行排序并连接,从而保证了数据的每个分片有序。

与现有技术相比,本发明的有益效果:

本发明对所有存储在链下数据库中的数据,通过一次链下数据上链扫描将链下数据库中所有新增的记录都能够上链,并通过一次链上标识链下扫描能将每条链上标识对应的链下数据库的记录都能在链下数据库更新后链上也能及时更新。如此方法在一轮链上和链下协同扫描后,对于每一条链下数据库的数据都在链上能一一对应一个标识,且数据哈希是完全一致的。通过合理的设定扫描间隔,即不会让链上标识与链下记录脱钩太久,也不会过度占用系统资源频繁扫描,解决了传统技术中无法快速准确同步,或过度占用系统资源的问题。

附图说明

图1为基于区块链的链上链下同步方法的流程示意图。

具体实施方式

请参阅图1,本发明实施例中,基于区块链的链上链下同步方法,基于区块链的链上链下同步方法,实现方法包括以下步骤:

s1:将需要上链数据存放在链下数据库中;

s2:建立一个上链任务,其功能是以一个固定的扫描间隔从链下数据库中有序按批次读取数据,检查点存储为数据库的主键,初始为空;

s3:在步骤s2的基础上,对数据库记录的主键进行排序读取,检查是否存在比检查点大的记录,若存在则读取一个批次的数据,否则说明未发现新增数据,等待下一个扫描间隔继续扫描;

s4:在步骤s3的基础上,逐条计算一个批次数据里每条记录的哈希,并将主键作为链上唯一标识与整条记录哈希一起上链;

s5:在步骤s4的基础上,把每个批次的数据上链完成后,在本地记录这个批次的最后一条记录的主键,作为检查点;

s6:在步骤s5的基础上,重复步骤s3到步骤s5的过程,最终,在下一个扫描间隔内数据库所有数据都会上链;

s7:在步骤s6的基础上,建立一个验真任务,其功能是以一个固定的扫描间隔从链上有序按批次读取数据,检查点存储为链上标识,初始为空;

s8:在步骤s7的基础上,对链上标识的主键进行排序读取,检查是否存在比检查点大的记录,若存在则读取一个批次的链上数据,否则说明历史数据已检查完毕,检查点置为空,并等待下一个扫描间隔从头开始扫描;

s9:在步骤s8的基础上,逐条读取一个批次的链上数据标识对应的数据库记录,并计算数据库记录的哈希,与链上标识对应的哈希做比对,若哈希一致,说明数据库历史记录没有过更新,若不一致则说明数据库已更新或删除;

s10:在步骤s9的基础上,将数据库已更新的记录进行步骤s4过程,使链下记录保持与链上记录的哈希一致,将每个批次里链下已更新的记录上链后,记录此批次最后一个标识为检查点;

s11:在步骤s10的基础上,重复步骤s8到步骤s10的过程,最终,在下一个扫描间隔内数据库所有已更新或删除的数据都会上链。

优选的,步骤s2中上链任务包括创建连接对象、创建命令对象、打开连接对象、在命令对象中执行sql语句和关闭连接对象。

优选的,创建连接对象用于开启程序与数据库之间的连接,以在链下数据库与客户端应用程序之间移动数据,创建命令对象用于执行命令,并从数据库返回结果,打开连接对象用于把命令信息连接到数据库,在命令对象中执行sql语句用于循序地读取数据,关闭连接对象用于关闭执行后的命令,以减少系统资源对象。

优选的,在命令对象中执行sql语句的工作步骤包括:语法分析和语义分析查询、逻辑查询计划生成以及物理查询计划,从而得出sql语句所需要的结果集。

优选的,步骤s4中计算数据里每条记录的哈希用于对一个批次的数据进行排序并连接,从而保证了数据的每个分片有序。

以上的,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。

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