CN109815291B - 数据同步方法、装置、电子设备及存储介质 - Google Patents
数据同步方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN109815291B CN109815291B CN201811626766.5A CN201811626766A CN109815291B CN 109815291 B CN109815291 B CN 109815291B CN 201811626766 A CN201811626766 A CN 201811626766A CN 109815291 B CN109815291 B CN 109815291B
- Authority
- CN
- China
- Prior art keywords
- state
- message record
- service data
- message
- block chain
- 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.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Telephonic Communication Services (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请公开一种数据同步方法、装置、电子设备及存储介质,数据同步方法包括:从消息表中获取待处理状态的消息记录;所述消息表用于保存与业务数据相关联的消息记录;所述消息记录记载有合约调用信息、标记状态和用于标识消息记录的主键ID;待处理状态的消息记录与待写入区块链的账本的业务数据相关联;根据待处理状态的消息记录的合约调用信息,确定需要调用的合约;向区块链发送同步信息,所述同步信息包括合约的调用请求和待处理状态的消息记录的主键ID;如果接收到区块链反馈的同步成功状态信息,将待处理状态的消息记录的标记状态变更为成功状态。本申请能确保关系型数据库写入区块链账本的数据具有幂等性,保证数据同步的一致性和准确性。
Description
技术领域
本申请涉及区块链技术领域,尤其涉及一种数据同步方法、装置、电子设备及存储介质。
背景技术
区块链可以看作分布式账本,用于记录和存储数据,具有去中心化、开放、安全和不可篡改等优点,集成了智能合约的区块链,还能够自动化地执行某些预先定义好的规则和条款。基于区块链技术的优势,对于某些应用类软件,比如购物、社交或服务类软件,越来越多的用户选择将软件生成的业务数据上传至区块链,这一过程称之为上链。常规的上链流程为:先将业务数据存储在关系型数据库中,然后由关系型数据库将业务数据同步至区块链的账本。
关系型数据库与区块链进行数据同步时,一般采用同步调用的方式,即关系型数据库中业务数据操作成功后,调用智能合约,并由智能合约获取关系型数据库中存储的业务数据,并将业务数据写入区块链的账本,从而实现业务数据的上链。如果智能合约调用过程中出现异常,导致数据同步失败,需要重新调用智能合约。
但是,由于调用智能合约的响应时间长,并且智能合约调用过程在请求、执行和反馈的不同阶段都可能发生异常,即便业务数据操作成功,如果没有接收到智能合约调用成功的反馈时,客户端也无法准确判定智能合约调用过程是否执行成功,这种情况可能会出现非幂等的问题。比如,在发送智能合约调用请求后,如果智能合约调用过程已经执行成功,即区块链的账本中已经写入一次业务数据,但是由于存在网络IO异常,客户端无法获取区块链反馈的成功状态,为了消除网络IO异常,需要重新调用智能合约,这将导致该业务数据被重复写入区块链的账本,从而产生非幂等的问题,无法保证数据同步的一致性和准确性。
发明内容
本申请提供一种数据同步方法、装置、电子设备及存储介质,以解决关系型数据库与区块链进行数据同步时,容易出现非幂等的问题。
第一方面,本申请提供一种数据同步方法,包括:
从消息表中获取待处理状态的消息记录;所述消息表用于保存与业务数据相关联的消息记录;所述消息记录记载有合约调用信息、标记状态和用于标识所述消息记录的主键ID;所述待处理状态的消息记录与待写入区块链的账本的业务数据相关联;
根据所述待处理状态的消息记录的合约调用信息,确定需要调用的合约;
向区块链发送同步信息,所述同步信息包括所述合约的调用请求和所述待处理状态的消息记录的主键ID;
如果接收到所述区块链反馈的同步成功状态信息,将所述待处理状态的消息记录的标记状态变更为成功状态;所述同步成功状态信息用于指示所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据已写入所述区块链的账本。
在第一方面第一种可能的实现方式中,所述方法还包括:
对业务数据进行操作;
向所述消息表中插入与操作后的业务数据相关联的消息记录;
将与所述操作后的业务数据相关联的消息记录的标记状态设置为初始化状态;所述初始化状态用于指示与所述操作后的业务数据相关联的消息记录为待处理状态的消息记录。
在第一方面第二种可能的实现方式中,所述方法还包括:
判断预定时长内是否接收到所述同步成功状态信息;
如果预定时长内未接收到所述同步成功状态信息,将所述待处理状态的消息记录的标记状态变更为失败状态;所述失败状态用于指示需要再次向区块链发送所述同步信息。
在第一方面第三种可能的实现方式中,所述从消息表中获取待处理状态的消息记录,包括:
采用异步线程定时轮询的方式扫描所述消息表,得到所述待处理状态的消息记录。
在第一方面第四种可能的实现方式中,所述对业务数据进行操作,包括:
将新增的业务数据存储在关系型数据库中;
或者,对关系型数据库中存储的业务数据进行修改。
在第一方面第五种可能的实现方式中,所述方法还包括:
接收所述区块链发送的业务数据传输请求;所述业务数据传输请求用于当所述区块链的账本中不存在所述待处理状态的消息记录的主键ID时,指示关系型数据库向所述区块链发送与所述待处理状态的消息记录相关联的业务数据;
向所述区块链发送与所述业务数据传输请求相匹配的业务数据。
第二方面,本申请提供一种数据同步方法,包括:
接收关系型数据库发送的同步信息,所述同步信息包括合约的调用请求和待处理状态的消息记录的主键ID;所述待处理状态的消息记录与待写入区块链的账本的业务数据相关联;
使用所述合约判断区块链的账本中是否存在所述待处理状态的消息记录的主键ID;
如果所述区块链的账本中不存在所述待处理状态的消息记录的主键ID,将所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据写入所述区块链的账本;
向所述关系型数据库反馈同步成功状态信息;所述同步成功状态信息用于指示所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据已写入所述区块链的账本。
在第二方面第一种可能的实现方式中,如果区块链的账本中存在所述待处理状态的消息记录的主键ID,向所述关系型数据库反馈所述同步成功状态信息。
在第二方面第二种可能的实现方式中,所述方法还包括:
如果所述区块链的账本中不存在所述待处理状态的消息记录的主键ID,向所述关系型数据库发送业务数据传输请求;所述业务数据传输请求用于指示所述关系型数据库向所述区块链发送与所述待处理状态的消息记录相关联的业务数据;
接收所述关系型数据库发送的与所述业务数据传输请求相匹配的业务数据。
第三方面,本申请提供一种数据同步装置,包括:
记录获取模块,用于从消息表中获取待处理状态的消息记录;所述消息表用于保存与业务数据相关联的消息记录;所述消息记录记载有合约调用信息、标记状态和用于标识所述消息记录的主键ID;所述待处理状态的消息记录与待写入区块链的账本的业务数据相关联;
合约确定模块,用于根据所述待处理状态的消息记录的合约调用信息,确定需要调用的合约;
第一发送模块,用于向区块链发送同步信息,所述同步信息包括所述合约的调用请求和所述待处理状态的消息记录的主键ID;
状态设置模块,用于如果接收到所述区块链反馈的同步成功状态信息,将所述待处理状态的消息记录的标记状态变更为成功状态;所述同步成功状态信息用于指示所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据已写入所述区块链的账本。
在第三方面第一种可能的实现方式中,所述装置还包括业务数据操作模块和记录插入模块:
所述业务数据操作模块,用于对业务数据进行操作;
所述记录插入模块,用于向所述消息表中插入与操作后的业务数据相关联的消息记录;
则状态设置模块,还用于将所述操作后的业务数据相关联的消息记录的标记状态设置为初始化状态;所述初始化状态用于指示与所述操作后的业务数据相关联的消息记录为待处理状态的消息记录。
在第三方面第二种可能的实现方式中,其特征在于,所述状态设置模块还用于:
判断预定时长内是否接收到所述同步成功状态信息;
如果预定时长内未接收到所述同步成功状态信息,将所述待处理状态的消息记录的标记状态变更为失败状态;所述失败状态用于指示需要再次向区块链发送所述同步信息。
在第三方面第三种可能的实现方式中,所述记录获取模块还用于:
采用异步线程定时轮询的方式扫描所述消息表,得到所述待处理状态的消息记录。
在第三方面第四种可能的实现方式中,所述业务数据操作模块包括;
业务数据新增子模块,用于将新增的业务数据存储在关系型数据库中;
或者,业务数据修改子模块,用于对关系型数据库中存储的业务数据进行修改。
在第三方面第五种可能的实现方式中,所述装置还包括;
第一接收模块,用于接收所述区块链发送的业务数据传输请求;所述业务数据传输请求用于指示关系型数据库向所述区块链发送与所述待处理状态的消息记录相关联的业务数据;
第二发送模块,用于向所述区块链发送与所述业务数据传输请求相匹配的业务数据。
第四方面,本申请提供一种数据同步装置,包括:
第二接收模块,用于接收关系型数据库发送的同步信息,所述同步信息包括合约的调用请求和待处理状态的消息记录的主键ID;所述待处理状态的消息记录与待写入区块链的账本的业务数据相关联;
判别模块,用于使用所述合约判断区块链的账本中是否存在所述待处理状态的消息记录的主键ID;
数据写入模块,用于如果所述区块链的账本中不存在所述待处理状态的消息记录的主键ID,将所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据写入所述区块链的账本;
反馈模块,用于向所述关系型数据库反馈同步成功状态信息;所述同步成功状态信息用于指示所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据已写入所述区块链的账本。
在第四方面第一种可能的实现方式中,所述反馈模块还用于:
如果区块链的账本中存在所述待处理事项中的消息记录的主键ID,向所述关系型数据库反馈同步成功状态信息。
在第四方面第二种可能的实现方式中,所述装置还包括:
第三发送模块,用于如果所述区块链的账本中不存在所述待处理状态的消息记录的主键ID,向所述关系型数据库发送业务数据传输请求;所述业务数据传输请求用于指示所述关系型数据库向所述区块链发送与所述待处理状态的消息记录的主键ID相关联的业务数据;
第三接收模块,用于接收关系型数据库发送的与所述业务数据传输请求相匹配的业务数据。
第五方面,本申请提供一种电子设备,包括:
处理器;以及
存储器,用于存储程序指令;
其中,所述处理器被配置为调用并执行所述存储器中的程序指令,执行第一方面所述的数据同步方法。
第六方面,本申请提供一种电子设备,包括:
处理器;以及
存储器,用于存储程序指令;
其中,所述处理器被配置为调用并执行所述存储器中的程序指令,执行第二方面所述的数据同步方法。
第七方面,本申请提供一种存储介质,所述存储介质中存储有计算机程序,所述计算机程序被处理器执行时,实现第一方面所述的数据同步方法。
第八方面,本申请提供一种存储介质,所述存储介质中存储有计算机程序,所述计算机程序被处理器执行时,实现第二方面所述的数据同步方法。
本申请提供的数据同步方法、装置、电子设备及存储介质,可以分为在关系型数据库端进行的数据同步方法,以及,在区块链端进行的数据同步方法。对于关系型数据库端,预先在关系型数据库中创建一个消息表,每次业务数据操作成功后,都会向消息表中插入与业务数据相关联的消息记录,并且每个消息记录都记载有全局唯一的主键ID,用于后续合约准确判定数据同步是否具有幂等性。
消息表中记载合约调用信息,用于确定在区块链中调用的合约;消息记录中还记载有标记状态,标记状态用于识别消息记录是否为待处理状态的消息记录,比如标记状态为非成功状态的消息记录。从消息表中获取待处理状态的消息记录后,确定区块链需要调用的合约,这里所述的合约可以是智能合约或链码等,并向区块链发送同步信息,同步信息包括合约的调用请求和待处理状态的消息记录的主键ID,以使区块链可以使用合约和主键ID进行幂等性判断,并将具有幂等性的业务数据写入区块链的账本。如果区块链端,待处理状态的消息记录的主键ID及与其相关联的业务数据已写入区块链的账本,则说明数据同步已成功,区块链会向关系型数据库端反馈同步成功状态信息。当接收到区块链反馈的同步成功状态信息后,需要将待处理状态的消息记录的标记状态变更为成功状态,则成功状态的消息记录以后将不再作为待处理状态的消息记录,从而确保业务数据不会反复写入区块链的账本中。
对于区块链端,当接收到关系型数据库端发送的合约的调用请求以及待处理状态的消息记录的主键ID后,需要调用合约,即由合约判断区块链的账本中是否存在待处理状态的消息记录的主键ID,如果不存在,则说明数据同步具备幂等性,则可以将待处理状态的消息记录的主键ID以及与待处理状态的消息记录相关联的业务数据写入区块链的账本,然后向关系型数据库反馈同步成功状态信息,从而完成关系型数据库与区块链之间的数据同步,可以避免区块链的账本反复写入同一业务数据,保证数据同步时不会产生非幂等的问题。
此外,由于合约的方法具备原子性,业务数据与待处理状态的消息记录的主键ID写入区块链的账本时,必定会同时成功或同时失败,即便数据同步失败后重新调用合约,仍能保证合约执行的幂等性。本申请能够保证关系型数据库与区块链数据的一致性,不会因重复调用合约而出现脏数据,并且可以在关系型数据库中提前对待上链的业务数据进行校验操作,确保提交至区块链的业务数据的准确性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请中数据同步方法的应用场景图;
图2为本申请实施例一示出的一种数据同步方法流程图;
图3为本申请实施例一示出的消息记录示意图;
图4为本申请实施例二示出的一种数据同步方法流程图;
图5为本申请实施例三示出的一种数据同步方法流程图;
图6为本申请实施例四示出的一种数据同步方法流程图;
图7为本申请实施例四示出的一种数据同步的交互逻辑图;
图8为本申请实施例五示出的一种数据同步装置的结构框图;
图9为本申请实施例六示出的一种数据同步装置的结构框图;
图10为本申请实施例六示出的业务数据操作模块的结构框图;
图11为本申请实施例七示出的一种数据同步装置的结构框图;
图12为本申请实施例八示出的一种数据同步装置的结构框图;
图13为本申请实施例八示出的另一种数据同步装置的结构框图;
图14为本申请实施例九示出的电子设备的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示的应用场景图,本申请实施例所述的数据同步方法、装置、电子设备及存储介质,是将关系型数据库2和区块链3作为数据同步的交互对象,对于一些终端1,比如智能手机、平板、电脑等,其内应用类软件/APP产生的业务数据,首先存储在关系型数据库2中,然后将关系型数据库2中的数据同步到区块链3。本申请中,关系型数据库是建立在关系模型基础上的数据库,即由若干相互联接的二维行列表格组成的数据库。关系型数据库可选择Oracle数据库、DB2数据库、PostgreSQL数据库、Microsoft SQL Server、MicrosoftAccess或者MySQL数据库等,本申请对此不作限定。另外,本申请应用于集成了合约的区块链,例如IBM超级账本等。所述合约是指各方达成共识并部署在区块链上的可以运行的代码,在以太坊中这类合约称之为智能合约,在超级账本中这类合约也被称为链码。一旦触发合约中的条款,代码即自动执行相关程序。因此对于本领域技术人员来说,将不同类型的关系型数据库和区块链进行组合时,均可采用以下各实施例所述方案进行数据同步,以完成业务数据的上链。
如图2所示,本申请实施例一提供一种数据同步方法,应用于关系型数据库端,所述方法包括:
步骤S101,从消息表中获取待处理状态的消息记录。所述消息表用于保存与业务数据相关联的消息记录;所述消息记录记载有合约调用信息、标记状态和用于标识所述消息记录的主键ID;所述待处理状态的消息记录与待写入区块链的账本的业务数据相关联。
在关系型数据库中可以对业务数据进行新增、修改或者删除等操作,但是由于区块链具有不可篡改的特点,如果在关系型数据库中对某一业务数据进行删除,那么对应同步到区块链中的该业务数据也不可删除,因此如果关系型数据库进行业务数据删除操作,则关系型数据库与区块链无法同步。因此这里所述的对业务数据进行操作,是指对业务数据进行新增或修改,即将新增的业务数据存储在关系型数据库中,或者,对关系型数据库中存储的业务数据进行修改。
预先在关系型数据库中创建一个消息表,消息表只需创建一次,用于存储多项消息记录,每条消息记录都唯一关联一项业务数据。每次对业务数据操作成功后,关系型数据库对操作后的业务数据进行存储,并向消息表中插入一条与操作后的业务数据相关联的消息记录。图3为本实施例示出的消息记录示意图,消息记录记载的主键ID具有全局唯一性,即消息表中每条消息记录的主键ID都不同,主键ID是识别消息记录的唯一标识。消息记录中还应记载合约调用信息,所述合约调用信息可以包括类型(type)、调用次数(invokecount)、调用参数(params)等,其中调用参数为调用合约时所需的参数,“类型”用于指示合约被调用后将执行哪些程序步骤。通过合约调用信息,可以确定需要在区块链端调用的合约,并通过使用合约完成数据同步的相关程序。
消息记录中还记载有标记状态(state),标记状态用于识别消息记录是否为待处理状态的消息记录,标记状态可以为成功状态或非成功状态,成功状态说明与该消息记录相关联的业务数据已经同步至区块链中,也就是说成功状态的消息记录将不再作为待处理状态的消息记录,待处理状态的消息记录为消息表中为非成功状态的消息记录。
消息记录中还可一并记载其他与业务数据相关的信息,比如场景(scene)、用户ID(userid)、生成时间(createtime)和修改时间(modifytime)等。图3仅提供了一种示例性的消息记录,消息记录的格式、页面显示形式以及具体记载的内容、信息或参数等,可根据实际应用需要具体设定,因此不限于本实施例所示。
假设用户在终端1上进行一笔交易,从而产生了一项业务数据A,关系型数据库2获取新增的业务数据A,并生成主键ID为ID-1,然后对业务数据A进行存储。关系型数据库2将业务数据A存储成功后,在消息表中插入一个消息记录,该消息记录与业务数据A相关联,将ID-1输入消息记录中,根据所需调取的合约,在消息记录中定义合约调用信息,然后输入其他相关信息后,则与业务数据A相关联的消息记录成功插入消息表中。
当对关系型数据库2中已存储的业务数据A进行修改时,由于数据发生改变,也相当于“新增了一项业务数据A′”,业务数据A′在区块链账本中并未写入,因此需要将业务数据A′同步至区块链3中。这时可以重新生成一个主键ID为ID-2,并插入一个新的消息记录,新的消息记录与修改后的业务数据A相关联,并在新的消息记录中输入ID-2和生成时间等参数。或者,也可选择将与原业务数据A相关联的消息记录中的ID-1替换为ID-2,并输入修改时间等参数,并将修改后的消息记录与修改后的业务数据A相关联。
步骤S102,根据所述待处理状态的消息记录的合约调用信息,确定需要调用的合约。
在确定区块链端需要调用的合约前,先从消息表中获取待处理状态的消息记录,所述待处理状态的消息记录可以是新插入的消息记录、修改后的消息记录,以及与同步失败需要重新调用合约的业务数据相关联的消息记录,这些消息记录的共同点就是相关联的业务数据没有被成功写入区块链账本。当获取待处理状态的消息记录后,根据待处理状态的消息记录记载的合约调用信息,确定需要调用的合约,并生成合约的调用请求,以使区块链响应所述合约的调用请求,使用合约执行预定义的规则和条款,完成幂等性判定和业务数据的同步。
步骤S103,向区块链发送同步信息。所述同步信息包括所述合约的调用请求和所述待处理状态的消息记录的主键ID。
区块链接收同步信息后,即接收到所述合约的调用请求和所述待处理状态的消息记录的主键ID后,响应所述合约的调用请求,由合约首先执行幂等性判定。使用合约判断区块链的账本中是否存在待处理状态的消息记录的主键ID,如果不存在,说明与待处理状态的消息记录相关联的业务数据之前未写入过区块链的账本,即具有幂等性,此时需要将待处理状态的消息记录的主键ID以及与待处理状态的消息记录相关联的业务数据写入区块链的账本,从而完成业务数据的同步。反之,如果区块链的账本中存在待处理状态的消息记录的主键ID,说明与待处理状态的消息记录相关联的业务数据之前已写入区块链的账本,即与待处理状态的消息记录相关联的业务数据已经同步成功,这种情况不具备幂等性。
步骤S104,如果接收到所述区块链反馈的同步成功状态信息,将所述待处理状态的消息记录的标记状态变更为成功状态。所述同步成功状态信息用于指示所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据已写入所述区块链的账本。
如果合约判断数据同步具有幂等性,则将待处理状态的消息记录的主键ID及其相关联的业务数据写入区块链的账本,然后由区块链向关系型数据库端发送同步成功状态信息;如果合约判断数据同步不具有幂等性,则无需将待处理状态的消息记录的主键ID及其相关联的业务数据写入区块链的账本,而是直接向关系型数据库反馈同步成功状态信息。当关系型数据库端接收到区块链反馈的同步成功状态信息后,需要对当前待处理状态的消息记录的标记状态进行变更,变更为成功状态,从而保证该消息记录以后不会再作为待处理状态的消息记录。
比如,假设业务数据A为关系型数据库2从终端1新获取的业务数据,其对应的消息记录为M1,主键ID为ID-1;业务数据B对应的消息记录为M2,主键ID为ID-2,业务数据B同步至区块链时,业务数据B和ID-2已经成功写入区块链的账本,由于存在网络IO异常,关系型数据库未接收到区块链反馈的同步成功状态信息,这时认为业务数据B同步失败。因此,从消息表中获取可获取待处理状态的消息记录为M1和M2。然后发送合约调用请求、ID-1和ID-2。调用合约后,合约判断区块链的账本中不存在ID-1,说明具备幂等性,可以将业务数据A和ID-1写入区块链的账本中,然后区块链向关系型数据库反馈同步成功状态信息1。
由于合约的方法是原子性的,待处理状态的消息记录的主键ID和与待处理状态的消息记录相关联的业务数据写入区块链的账本时,必定会同时成功或同时失败,也就是说,不存在业务数据A写入但ID-1未写入,以及ID-1写入但业务数据A未写入这两种情况,即便数据同步失败后重新调用合约,仍能保证合约执行的幂等性。本申请能够保证关系型数据库与区块链数据的一致性,不会因重复调用智能合约而出现脏数据,并且可以在关系型数据库中提前对待上链的业务数据进行校验操作,确保提交至区块链的业务数据的准确性。对于下一个待处理状态的消息记录M2,合约判断区块链的账本中存在ID-2,说明业务数据B之前已经写入区块链的账本,不具备幂等性,则无需再次将业务数据B和ID-2写入区块链的账本,由于重新调用合约后,已经消除了网络IO异常,因此关系型数据库可以接收到区块链反馈的同步成功状态信息2。关系型数据库接收到同步成功状态信息1和同步成功状态信息2后,将消息记录M1和消息记录M2的标记状态变更为成功状态,则M1和M2将不再作为待处理状态的消息记录,从而避免数据同步时出现非幂等的问题。
当合约判断区块链的账本中不存在待处理状态的消息记录的主键ID时,说明与待处理状态的消息记录相关联的业务数据未写入区块链的账本,那么需要关系型数据库向区块链发送待处理状态的消息记录相关联的业务数据。在具体实现中,对于关系型数据库端,接收区块链发送的业务数据传输请求,所述业务数据传输请求用于指示关系型数据库向区块链发送与待处理状态的消息记录相关联的业务数据,然后向区块链发送与业务数据传输请求相匹配的业务数据。
例如,合约判断区块链的账本中不存在ID-1,则区块链向关系型数据库发送业务数据传输请求,关系型数据库端接收业务数据传输请求,ID-1对应的待处理状态的消息记录为M1,与消息记录M1相关联的业务数据为业务数据A,则业务数据A即为与业务数据传输请求相匹配的业务数据,关系型数据库需要将业务数据A发送给区块链,以使区块链将ID-1和业务数据A一并写入账本,从而实现业务数据A的同步。合约判断区块链的账本中存在ID-2,说明不具备幂等性,则不需要对业务数据B再进行同步操作,因此无需发送与业务数据B对应的业务数据传输请求,这样区块链就不会接收业务数据B,避免业务数据B重复写入区块链的账本中,使关系型数据库只传输需要同步的业务数据,从而提高数据同步的效率。
为准确获取待处理状态的消息记录,并且准确获知与各消息记录相关联的业务数据的同步处理状态,消息记录记载的标记状态可细化为初始化状态、失败状态和成功状态。初始化状态表明业务数据进行操作后,尚未进行过数据同步,即之前从未向区块链发送过与初始化状态的消息记录有关的同步信息,因此初始化状态用于指示与操作后的业务数据相关联的消息记录应作为待处理状态的消息记录;失败状态表明在进行数据同步时,由于存在某些异常情况,比如合约调用异常或网络IO异常等,导致数据同步工作无法正常进行,关系型数据库端无法接收到区块链发送的同步成功状态信息,因此失败状态用于指示需要再次向区块链发送与失败状态的消息记录有关的同步信息,如果多次失败,则需要进行多次重试,直至接收到区块链反馈的同步成功状态信息;;成功状态表明数据同步成功,待处理状态的消息记录的主键ID以及与待处理状态的消息记录相关联的业务数据已写入区块链账本。因此,所述待处理状态的消息记录的标记状态为初始化状态或者失败状态,成功状态的消息记录不再作为待处理状态的消息记录。
如图4所示,实施例二提供的数据同步方法包括如下程序步骤:
步骤S105,对业务数据进行操作。
所述对业务数据进行操作包括:将新增的业务数据存储在关系型数据库中;或者,对关系型数据库中存储的业务数据进行修改。
步骤S106,向消息表中插入与操作后的业务数据相关联的消息记录。
步骤S107,将与操作后的业务数据相关联的消息记录的标记状态设置为初始化状态。
每次对业务数据操作完成后,都将操作后的业务数据与消息记录相关联,并且将消息记录的标记状态设置为初始化状态,初始化状态的消息记录将会作为待处理状态的消息记录。由于消息表中的消息记录的积累,以及各消息记录的标记状态的变更,因此需要定时从消息表中获取待处理状态的消息记录。
步骤S101,从消息表中获取待处理状态的消息记录;所述消息表用于保存与业务数据相关联的消息记录;所述消息记录记载有合约调用信息、标记状态和用于标识所述消息记录的主键ID;所述待处理状态的消息记录与待写入区块链的账本的业务数据相关联,即待处理状态的消息记录为初始化状态的消息记录或者失败状态的消息记录。
步骤S102,根据所述待处理状态的消息记录的合约调用信息,确定需要调用的合约。
步骤S103,向区块链发送同步信息。所述同步信息包括所述合约的调用请求和所述待处理状态的消息记录的主键ID。
步骤S108,判断预定时长内是否接收到同步成功状态信息。所述同步成功状态信息用于指示所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据已写入所述区块链的账本。如果预定时长内接收到同步成功状态信息,则执行步骤S1041;反之,则执行步骤S109。
步骤S1041,是在预定时长内接收到所述区块链反馈的同步成功状态信息的情况下,将所述待处理状态的消息记录的标记状态变更为成功状态。成功状态的消息记录以后将不会作为待处理状态的消息记录。
步骤S109,是在预定时长内未接收到所述同步成功状态信息的情况下,将所述待处理状态的消息记录的标记状态变更为失败状态。调用合约时,可能出现某些异常情况,导致关系型数据库无法接收到同步成功状态信息,也就无法获知与待处理状态的消息记录相关联的业务数据是否成功写入区块链的账本,这时需要重试,即重新向区块链发送同步信息,使区块链重新调用合约,在消除异常情况的同时,确保关系型数据库中的业务数据不遗漏地同步到区块链中,且区块链的合约会进行幂等性的判断,可以避免业务数据被重复写入区块链的账本,保证数据同步的一致性和准确性。
步骤S102中,可以采用异步定时轮询的方式扫描消息表,通过识别消息表中各消息记录的标记状态,获取待处理状态的消息记录。以上方法执行完毕后,基于异步线程定时轮询,定时循环执行步骤S101及其后的方法步骤,以完成每一轮的数据同步。
比如,假设业务数据A为关系型数据库2从终端1新获取的业务数据,其对应的消息记录为M1,主键ID为ID-1,则消息记录中的标记状态设置为初始化状态;初始化状态的消息记录M1被扫描出,作为待处理状态的消息记录。根据消息记录M1中的合约调用信息,确定需要调用的合约,并将包括合约的调用请求和ID-1的同步信息发送至区块链。区块链接收同步信息后,调用相应的合约,由合约进行幂等性判断以及在具备幂等性时写入待同步的业务数据。如果预定时长内没有接收到区块链反馈的同步成功状态信息,说明合约调用时可能存在异常状态,则将与ID-1对应的消息记录M1的标记状态由初始化变更为失败。
标记状态为失败的消息记录M1仍作为待处理状态的消息记录,需要重试,即再次向区块链发送与消息记录M1有关的同步信息,合约判断区块链的账本中是否存在ID-1,假设判断结果为存在,说明在前次数据同步时,虽然关系型数据库未接收到同步成功状态信息,但业务数据A和ID-1实际已写入区块链的账本,因此无需再进行数据同步,而是由区块链直接反馈同步成功状态信息,然后将与ID-1对应的消息记录M1的标记状态由失败变更为成功,则标记状态为成功的消息记录M1以后将不再作为待处理状态的消息记录,从而保证业务数据A不会反复写入区块链账本,有效地解决了数据同步时的费幂等性问题,保证关系型数据库与区块链数据的一致性。
本实施例中,利用异步线程实现业务数据的异步上链,可以提高对外接口的性能,屏蔽区块链目前存在的响应时间长的问题。通过设置定时轮询,每隔一定时间,轮询扫描消息表,从消息表中查找标记状态为初始化状态或失败状态的消息记录,从而得到待处理状态的消息记录,通过业务数据操作以及数据同步的处理结果,对消息记录的标记状态进行更新,便于掌握关系型数据库中每项业务数据的同步处理状态,并且准确获取待处理状态的消息记录,保证数据同步的准确性,以及关系型数据库与区块链之间的数据一致性,还有利于提高上链效率。
对于步骤S105至步骤S107,消息表的创建、业务数据的操作以及插入消息记录可以选择人为手动操作,也可以通过程序自动执行;步骤S101-步骤S103,可以通过关系型数据库配备的线程池来执行。比如从消息表中获取待处理状态的消息记录的步骤,可以通过异步轮询线程来执行;步骤S102、步骤S103、步骤S108、步骤S104和步骤S109可由合约调用线程来执行,异步轮询线程查找出待处理状态的消息记录,反馈给合约调用线程,合约调用线程根据待处理状态的消息记录的合约调用信息,来调用相应的合约,异步轮询线程和合约调用线程集成在同一个线程池中。合约调用线程将区块链反馈的同步成功状态信息返回给关系型数据库中,使关系型数据库能够及时更新消息记录的标记状态。
如果业务数据操作成功,但未插入相关联的消息记录,则无法基于消息记录执行后续幂等性判断和数据同步等操作,业务数据无法上链至区块链,导致区块链和关系型数据库中的数据不一致。如果业务数据操作不成功,但插入了对应的消息记录,则即便具备幂等性,也无法将未操作成功的业务数据写入区块链账本。可见,在关系型数据库中,需要保证业务数据操作和消息记录插入,或者同时成功。或者同时失败。
关系型数据库具有事务,事务是将一组读写操作组合在一起形成的一个逻辑单元,事务具备的一个重要特性是操作具有原子性,即事务中的操作或者全部执行成功,或者全部中止失败,失败后程序可以安全地重试,分析原因等。相反,如果没有事务的支持,数据库可能持久化很多中间状态,留下无法解释的业务,事务是为了简化编程,可以保证业务数据的安全、正确性和一致性。事务是用户定义的一个数据库操作序列,在关系型数据库中,一个事务可以是一条SQL(Structured Query Language,结构化查询语言)语句,也可以是多条SQL语句。
针对关系型数据库的特点,在实施例二所述方法的基础上,如图5所示,在对业务数据进行操作以及插入相关联的消息记录时,本申请实施例三还进一步提供关系型数据库中事务操作的方法:
步骤S110,生成主键ID。
步骤S111,开启关系型数据库的事务。
步骤S105,对业务数据进行操作。
步骤S106,向消息表中插入与操作后的业务数据相关联的消息记录。插入的消息记录中记载步骤S110生成的主键ID。
步骤S107,将与操作后的业务数据相关联的消息记录的标记状态设置为初始化状态。
步骤S112,提交事务。
本实施例中,开启关系型数据库的事务后,对业务数据进行操作,如果业务数据操作成功,则执行步骤S106,如果业务数据还未操作成功,则回滚事务。当消息记录中的信息设定完成,并成功插入消息记录后,则可以提交事务,如果消息记录尚未插入完成,则回滚事务。提交事务完成后,说明业务数据相关操作流程结束,操作成功后的业务数据,其相关联的消息记录的标记状态为初始化,在轮询扫描消息表时,该消息记录将作为待处理状态的消息记录,准备同步至区块链。
业务数据操作和插入消息记录是在同一事务中进行,由于事务具有原子性的,可以保证每次业务数据操作成功后,必有一条与其相关联的消息记录插入消息表中,不会出现业务数据操作成功但未插入消息记录,以及消息记录插入但业务数据未操作成功这两种情况,从而保证后续数据同步的准确性。通过关系型数据库事务和合约的原子性,可以保证关系型数据库和区块链之间同步操作的一致性、准确性和高效性。
如图6所示,与前述各实施例相对应地,本申请实施例四提供一种数据同步方法,应用于区块链端,所述方法包括:
步骤S201,接收关系型数据库发送的同步信息。所述同步信息包括合约的调用请求和待处理状态的消息记录的主键ID;所述待处理状态的消息记录与待写入区块链的账本的业务数据相关联。
步骤S202,判断区块链的账本中是否存在待处理状态的消息记录的主键ID。使用合约来执行步骤S202。如果所述区块链的账本中不存在所述待处理状态的消息记录的主键ID,则执行步骤S203;反之,则执行步骤S204。
步骤S203,将所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据写入所述区块链的账本。
步骤S204,向所述关系型数据库反馈同步成功状态信息。所述同步成功状态信息用于指示所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据已写入所述区块链的账本。
本实施例中,根据步骤S202和步骤S203,是对合约中的规则和条款进行设定,以使得调用合约时,由合约自动执行步骤S202和步骤S203的程序步骤。在进行数据同步时,如果区块链的账本中不存在待处理状态的消息记录的主键ID,说明与待处理状态的消息记录相关联的业务数据之前未写入区块链的账本,数据同步具备幂等性,需要将待处理状态的消息记录的主键ID以及与待处理状态的消息记录相关联的业务数据均写入区块链的账本中,因此可以利用区块链的账本中存储的各个主键ID和待处理消息记录的主键ID,来确认每次业务数据同步时是否具备幂等性。
当待处理状态的消息记录的主键ID以及与待处理状态的消息记录相关联的业务数成功写入区块链的账本,说明针对待处理状态的消息记录进行的数据同步过程已经完成,需要向关系型数据库反馈同步成功状态信息,以使关系型数据库接收到同步成功状态信息后,将待处理状态的消息记录的标记状态变更为成功状态,保证这一待处理状态的消息记录,已经处理完成,以后将不再作为待处理状态的消息记录。如果区块链的账本中存在待处理状态的消息记录的主键ID,则不具备幂等性,说明其相关联的业务数据之前已经成功写入区块链的账本,无需再进行数据同步,执行步骤S204,直接向关系型数据库反馈同步成功状态信息即可。
如果区块链的账本中不存在待处理状态的消息记录的主键ID,即具备幂等性时,需要请求关系数据库发送与待处理状态的消息记录相关联的业务数据。在具体实现中,当合约判断出区块链的账本中不存在待处理状态的消息记录的主键ID时,向关系型数据库发送业务数据传输请求,所述业务数据传输请求用于指示关系型数据库向区块链发送与待处理状态的消息记录相关联的业务数据。关系型数据库接收并响应业务数据传输请求后,将与业务数据传输请求相匹配的业务数据发送至区块链,区块链将接收的待同步的业务数据写入区块链的账本,同时将待处理状态的消息记录的主键ID一并写入区块链账本,并反馈同步成功状态信息,则针对待处理状态的消息记录的数据同步过程执行完毕。
图7为数据同步的交互逻辑图,终端产生业务数据时,生成与该业务数据唯一对应的主键ID,然后在关系型数据库中开启事务,在事务中完成业务数据的操作并插入消息记录,提交事务,然后可以由关系型数据库向终端反馈事务操作结果,比如事务操作成功或失败。利用关系型数据库配备的线程池定时轮询扫描消息表,从消息表中查找出标记状态为初始化状态或失败状态的消息记录,从而获取待处理状态的消息记录,然后向区块链发送同步信息,同步信息包括合约的调用请求和待处理状态的消息记录的主键ID。区块链根据调用请求,来调用合约,由合约利用接收的主键ID进行幂等性判定及同步数据的相关操作,然后由区块链向线程池反馈同步成功状态信息,并在关系型数据库中,将待处理状态的消息记录的标记状态变更为成功状态。如果规定时长内关系型数据库未接收到同步成功状态信息,则将待处理状态的消息记录的标记状态变更为失败状态。
如图8所示,本申请实施例五提供一种数据同步装置,所述装置用于执行实施例一所述的数据同步方法,所述装置包括:
记录获取模块10,用于从消息表中获取待处理状态的消息记录;所述消息表用于保存与业务数据相关联的消息记录;所述消息记录记载有合约调用信息、标记状态和用于标识所述消息记录的主键ID;所述待处理状态的消息记录与待写入区块链的账本的业务数据相关联;
合约确定模块11,用于根据所述待处理状态的消息记录的合约调用信息,确定需要调用的合约;
第一发送模块12,用于向区块链发送同步信息,所述同步信息包括所述合约的调用请求和所述待处理状态的消息记录的主键ID;
状态设置模块13,用于如果接收到所述区块链反馈的同步成功状态信息,将所述待处理状态的消息记录的标记状态变更为成功状态;所述同步成功状态信息用于指示所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据已写入所述区块链的账本。
对于关系型数据库端,预先在关系型数据库中创建一个消息表,每次业务数据操作成功后,都会向消息表中插入与业务数据相关联的消息记录,并且每个消息记录都记载有全局唯一的主键ID,用于后续合约准确判定数据同步是否具有幂等性。消息表中记载合约调用信息,用于确定在区块链中调用的合约;消息记录中还记载有标记状态,标记状态用于识别消息记录是否为待处理状态的消息记录,比如标记状态为非成功状态的消息记录。从消息表中获取待处理状态的消息记录后,确定区块链需要调用的合约,这里所述的合约可以是智能合约或链码等,并向区块链发送同步信息,同步信息包括合约的调用请求和待处理状态的消息记录的主键ID,以使区块链可以使用合约和主键ID进行幂等性判断,并将具有幂等性的业务数据写入区块链的账本。如果区块链端,待处理状态的消息记录的主键ID及与其相关联的业务数据已写入区块链的账本,则说明数据同步已成功,区块链会向关系型数据库端反馈同步成功状态信息。当接收到区块链反馈的同步成功状态信息后,需要将待处理状态的消息记录的标记状态变更为成功状态,则成功状态的消息记录以后将不再作为待处理状态的消息记录,确保业务数据不会反复写入区块链的账本中,从而保证数据同步的一致性、准确性和高效性。
如图9所示,本申请实施例六提供一种数据同步装置,用于实现实施例二所述的数据同步方法,在实施例五所述装置的基础上,所述装置还包括业务数据操作模块14、记录插入模块15、第一接收模块16和第二发送模块17。
业务数据操作模块14,用于对业务数据进行操作。如图10所示,所述业务数据操作模块包括;
业务数据新增子模块141,用于将新增的业务数据存储在关系型数据库中;
或者,业务数据修改子模块142,用于对关系型数据库中存储的业务数据进行修改。
记录插入模块15,用于向所述消息表中插入与操作后的业务数据相关联的消息记录;
则状态设置模块13,还用于将所述操作后的业务数据相关联的消息记录的标记状态设置为初始化状态;所述初始化状态用于指示与所述操作后的业务数据相关联的消息记录为待处理状态的消息记录。
状态设置模块13,还用于判断预定时长内是否接收到所述同步成功状态信息;如果预定时长内未接收到所述同步成功状态信息,将所述待处理状态的消息记录的标记状态变更为失败状态;所述失败状态用于指示需要再次向区块链发送所述同步信息。
记录获取模块10,还用于采用异步线程定时轮询的方式扫描所述消息表,得到所述待处理状态的消息记录。待处理状态的消息记录的标记状态为初始化状态或者失败状态。
第一接收模块16,用于接收所述区块链发送的业务数据传输请求;所述业务数据传输请求用于指示关系型数据库向所述区块链发送与所述待处理状态的消息记录相关联的业务数据。
第二发送模块17,用于向所述区块链发送与所述业务数据传输请求相匹配的业务数据。
本实施例中,每次对业务数据操作完成后,将与操作后的业务数据相关联的消息记录的标记状态设置为初始化,以表明相关联的业务数据未进行过数据同步处理,即业务数据及与其相关联的消息记录的主键ID之前未被写入区块链的账本。在向区块链发送合约的调用请求和待处理状态的消息记录的主键ID后,区块链调用合约,由合约判断是否具备幂等性,如果具备幂等性,则将待处理状态的消息记录的主键ID和与待处理状态的消息记录相关联的业务数据写入区块链的账本,然后接收区块链反馈的同步成功状态信息,以便对待处理状态的消息记录的标记状态进行变更。如果规定时长内未收到同步成功状态信息,则将待处理状态的消息记录的标记状态变更为失败状态。通过在消息记录中增设标记状态,可以准确获取关系型数据库中各项业务数据的处理状态,准确筛选出待处理状态的消息记录,确保关系型数据库中的业务数据不遗漏地同步到区块链,同时保证数据同步时的幂等性。
如图11所示,本申请实施例七提供一种数据同步装置,用于实现实施例三所述的数据同步方法,在实施例六所述装置的基础上,所述装置还包括主键ID生成模块18以及事务处理模块19;
主键ID生成模块18,用于在对业务数据进行操作之前,生成主键ID;
事务处理模块19,用于在对业务数据进行操作之前,开启关系型数据库的事务;以及,当与操作后的业务数据相关联的消息记录成功插入消息表,并将标记状态设置为初始化状态后,提交所述事务。
由于关系型数据库具有事务,且事务具有原子性,即事务中的所有操作要么都执行,要不然就都不执行。将业务数据操作与插入消息记录设在同一个事务中,可以确保业务数据操作与消息记录的插入是同时成功或同时失败,每次业务数据操作成功,都会插入一条相关联的消息记录,从而保证关系型数据库与区块链之间的一致性。
如图12所示,本申请实施例八提供一种数据同步装置,所述装置用于实现实施例四所述的数据同步方法,所述装置包括:
第二接收模块20,用于接收关系型数据库发送的同步信息,所述同步信息包括合约的调用请求和待处理状态的消息记录的主键ID;所述待处理状态的消息记录与待写入区块链的账本的业务数据相关联;
判别模块21,用于使用所述合约判断区块链的账本中是否存在所述待处理状态的消息记录的主键ID;
数据写入模块22,用于如果所述区块链的账本中不存在所述待处理状态的消息记录的主键ID,将所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据写入所述区块链的账本;
反馈模块23,用于向所述关系型数据库反馈同步成功状态信息;所述同步成功状态信息用于指示所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据已写入所述区块链的账本。
上述判别模块21和数据写入模块22用来执行区块链合约的规则或条款。所述反馈模块还用于:如果区块链的账本中存在所述待处理事项中的消息记录的主键ID,向所述关系型数据库反馈同步成功状态信息。
进一步地,如图13所示,所述装置还包括:
第三发送模块24,用于如果所述区块链的账本中不存在所述待处理状态的消息记录的主键ID,向所述关系型数据库发送业务数据传输请求;所述业务数据传输请求用于指示所述关系型数据库向所述区块链发送与所述待处理状态的消息记录的主键ID相关联的业务数据;
第三接收模块25,用于接收关系型数据库发送的与所述业务数据传输请求相匹配的业务数据。
需要说明的是,本申请实施五到实施例八,可以根据上述各方法实施例对数据同步装置进行功能模块的划分,例如,可以对应各个功能划分各功能模块,也可以将两个或两个以上的功能模块集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。实施例五到实施例八中对模块的划分是示例性的,仅为一种逻辑功能划分,实际实现时可以有其他划分方式。
本申请实施例九提供一种电子设备,如图14所示,所述电子设备30的硬件结构包括存储器301和处理器302,存储器301用于存储程序指令,处理器302被配置为调用并执行存储器301中的程序指令,以执行指定的方法步骤。基于本实施例所述的电子设备硬件结构,通过设定存储器301中的程序指令,可使处理器302执行实施例一至实施例三中任一实施例所述的基于关系型数据库端的数据同步方法中的各个程序步骤。或者,通过设定存储器301中的程序指令,使处理器302执行实施例四所述的基于区块链端的数据同步方法中的各个程序步骤。
电子设备30中还可设置相应的I/O接口,存储器301和处理器302可以集成一体,或者通过总线连接。本实施例中,处理器302可以是中央处理单元(Central ProcessingUnit,CPU),其他通用处理器、数字信号处理器(Digital Signal Processing,DSP)、或者专用集成电路等。存储器301可以为高速RAM存储器、磁盘存储器、只读存储器、U盘、硬盘、快闪存储器或者非易失性存储器等。本申请各实施例所涉及的方法步骤,可以直接体现为硬件处理器执行完成,或者利用处理器中的硬件及软件模块组合执行完成。
本领域的技术人员可以清楚地了解到本申请实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。具体实现中,本申请还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本申请提供的数据同步方法、装置、电子设备各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(英文:read-only memory,简称:ROM)或随机存储记忆体(英文:random access memory,简称:RAM)等。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,并不构成对本发明保护范围的限定。本发明的真正范围和精神由所附的权利要求指出。
本说明书中各个实施例之间相同相似的部分互相参照即可。
Claims (22)
1.一种数据同步方法,其特征在于,包括:
从消息表中获取待处理状态的消息记录;所述消息表用于保存与业务数据相关联的消息记录;所述消息记录记载有合约调用信息、标记状态和用于标识所述消息记录的主键ID;所述待处理状态的消息记录与待写入区块链的账本的业务数据相关联;所述合约调用信息包括类型、调用次数和调用参数,所述类型用于指示合约被调用后执行的程序,所述调用参数为调用合约时所需的参数;
根据所述待处理状态的消息记录的合约调用信息,确定需要调用的合约;
向区块链发送同步信息,所述同步信息包括所述合约的调用请求和所述待处理状态的消息记录的主键ID;所述主键ID用于在区块链端调用所述合约时判别数据同步的幂等性;
如果接收到所述区块链反馈的同步成功状态信息,将所述待处理状态的消息记录的标记状态变更为成功状态;所述同步成功状态信息用于指示所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据已写入所述区块链的账本。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
对业务数据进行操作;
向所述消息表中插入与操作后的业务数据相关联的消息记录;
将与所述操作后的业务数据相关联的消息记录的标记状态设置为初始化状态;所述初始化状态用于指示与所述操作后的业务数据相关联的消息记录为待处理状态的消息记录。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
判断预定时长内是否接收到所述同步成功状态信息;
如果预定时长内未接收到所述同步成功状态信息,将所述待处理状态的消息记录的标记状态变更为失败状态;所述失败状态用于指示需要再次向区块链发送所述同步信息。
4.根据权利要求1所述的方法,其特征在于,所述从消息表中获取待处理状态的消息记录,包括:
采用异步线程定时轮询的方式扫描所述消息表,得到所述待处理状态的消息记录。
5.根据权利要求2所述的方法,其特征在于,所述对业务数据进行操作,包括:
将新增的业务数据存储在关系型数据库中;
或者,对关系型数据库中存储的业务数据进行修改。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收所述区块链发送的业务数据传输请求;所述业务数据传输请求用于当所述区块链的账本中不存在所述待处理状态的消息记录的主键ID时,指示关系型数据库向所述区块链发送与所述待处理状态的消息记录相关联的业务数据;
向所述区块链发送与所述业务数据传输请求相匹配的业务数据。
7.一种数据同步方法,其特征在于,包括:
接收关系型数据库发送的同步信息,所述同步信息包括合约的调用请求和待处理状态的消息记录的主键ID;所述主键ID用于在区块链端调用所述合约时判别数据同步的幂等性;所述待处理状态的消息记录与待写入区块链的账本的业务数据相关联;
使用所述合约判断区块链的账本中是否存在所述待处理状态的消息记录的主键ID;
如果所述区块链的账本中不存在所述待处理状态的消息记录的主键ID,将所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据写入所述区块链的账本;
向所述关系型数据库反馈同步成功状态信息;所述同步成功状态信息用于指示所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据已写入所述区块链的账本;
其中,所述合约是关系型数据库根据待处理状态的消息记录中包括的合约调用信息确定的,所述合约调用信息包括类型、调用次数和调用参数,所述类型用于指示合约被调用后执行的程序,所述调用参数为调用合约时所需的参数。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
如果区块链的账本中存在所述待处理状态的消息记录的主键ID,向所述关系型数据库反馈所述同步成功状态信息。
9.根据权利要求7所述的方法,其特征在于,所述方法还包括:
如果所述区块链的账本中不存在所述待处理状态的消息记录的主键ID,向所述关系型数据库发送业务数据传输请求;所述业务数据传输请求用于指示所述关系型数据库向所述区块链发送与所述待处理状态的消息记录相关联的业务数据;
接收所述关系型数据库发送的与所述业务数据传输请求相匹配的业务数据。
10.一种数据同步装置,其特征在于,包括:
记录获取模块,用于从消息表中获取待处理状态的消息记录;所述消息表用于保存与业务数据相关联的消息记录;所述消息记录记载有合约调用信息、标记状态和用于标识所述消息记录的主键ID;所述待处理状态的消息记录与待写入区块链的账本的业务数据相关联;所述合约调用信息包括类型、调用次数和调用参数,所述类型用于指示合约被调用后执行的程序,所述调用参数为调用合约时所需的参数;
合约确定模块,用于根据所述待处理状态的消息记录的合约调用信息,确定需要调用的合约;
第一发送模块,用于向区块链发送同步信息,所述同步信息包括所述合约的调用请求和所述待处理状态的消息记录的主键ID;所述主键ID用于在区块链端调用所述合约时判别数据同步的幂等性;
状态设置模块,用于如果接收到所述区块链反馈的同步成功状态信息,将所述待处理状态的消息记录的标记状态变更为成功状态;所述同步成功状态信息用于指示所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据已写入所述区块链的账本。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括业务数据操作模块和记录插入模块:
所述业务数据操作模块,用于对业务数据进行操作;
所述记录插入模块,用于向所述消息表中插入与操作后的业务数据相关联的消息记录;
则状态设置模块,还用于将所述操作后的业务数据相关联的消息记录的标记状态设置为初始化状态;所述初始化状态用于指示与所述操作后的业务数据相关联的消息记录为待处理状态的消息记录。
12.根据权利要求10所述的装置,其特征在于,所述状态设置模块还用于:
判断预定时长内是否接收到所述同步成功状态信息;
如果预定时长内未接收到所述同步成功状态信息,将所述待处理状态的消息记录的标记状态变更为失败状态;所述失败状态用于指示需要再次向区块链发送所述同步信息。
13.根据权利要求10所述的装置,其特征在于,所述记录获取模块还用于:
采用异步线程定时轮询的方式扫描所述消息表,得到所述待处理状态的消息记录。
14.根据权利要求11所述的装置,其特征在于,所述业务数据操作模块包括;
业务数据新增子模块,用于将新增的业务数据存储在关系型数据库中;
或者,业务数据修改子模块,用于对关系型数据库中存储的业务数据进行修改。
15.根据权利要求10所述的装置,其特征在于,所述装置还包括;
第一接收模块,用于接收所述区块链发送的业务数据传输请求;所述业务数据传输请求用于指示关系型数据库向所述区块链发送与所述待处理状态的消息记录相关联的业务数据;
第二发送模块,用于向所述区块链发送与所述业务数据传输请求相匹配的业务数据。
16.一种数据同步装置,其特征在于,包括:
第二接收模块,用于接收关系型数据库发送的同步信息,所述同步信息包括合约的调用请求和待处理状态的消息记录的主键ID;所述主键ID用于在区块链端调用所述合约时判别数据同步的幂等性;所述待处理状态的消息记录与待写入区块链的账本的业务数据相关联;
判别模块,用于使用所述合约判断区块链的账本中是否存在所述待处理状态的消息记录的主键ID;
数据写入模块,用于如果所述区块链的账本中不存在所述待处理状态的消息记录的主键ID,将所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据写入所述区块链的账本;
反馈模块,用于向所述关系型数据库反馈同步成功状态信息;所述同步成功状态信息用于指示所述待处理状态的消息记录的主键ID以及与所述待处理状态的消息记录相关联的业务数据已写入所述区块链的账本;
其中,所述合约是关系型数据库根据待处理状态的消息记录中包括的合约调用信息确定的,所述合约调用信息包括类型、调用次数和调用参数,所述类型用于指示合约被调用后执行的程序,所述调用参数为调用合约时所需的参数。
17.根据权利要求16所述的装置,其特征在于,所述反馈模块还用于:
如果区块链的账本中存在所述待处理事项中的消息记录的主键ID,向所述关系型数据库反馈同步成功状态信息。
18.根据权利要求16所述的装置,其特征在于,所述装置还包括:
第三发送模块,用于如果所述区块链的账本中不存在所述待处理状态的消息记录的主键ID,向所述关系型数据库发送业务数据传输请求;所述业务数据传输请求用于指示所述关系型数据库向所述区块链发送与所述待处理状态的消息记录的主键ID相关联的业务数据;
第三接收模块,用于接收关系型数据库发送的与所述业务数据传输请求相匹配的业务数据。
19.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储程序指令;
其中,所述处理器被配置为调用并执行所述存储器中的程序指令,执行权利要求1-6任一项所述的数据同步方法。
20.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储程序指令;
其中,所述处理器被配置为调用并执行所述存储器中的程序指令,执行权利要求7-9任一项所述的数据同步方法。
21.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,所述计算机程序被处理器执行时,实现权利要求1-6任一项所述的数据同步方法。
22.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,所述计算机程序被处理器执行时,实现权利要求7-9任一项所述的数据同步方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811626766.5A CN109815291B (zh) | 2018-12-28 | 2018-12-28 | 数据同步方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811626766.5A CN109815291B (zh) | 2018-12-28 | 2018-12-28 | 数据同步方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109815291A CN109815291A (zh) | 2019-05-28 |
CN109815291B true CN109815291B (zh) | 2021-08-20 |
Family
ID=66602740
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811626766.5A Active CN109815291B (zh) | 2018-12-28 | 2018-12-28 | 数据同步方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109815291B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110535661B (zh) * | 2019-09-03 | 2022-10-11 | 中国建设银行股份有限公司 | 基于区块链的业务处理方法、装置、电子设备和存储介质 |
CN110706797B (zh) * | 2019-09-16 | 2022-03-04 | 重庆华医康道科技有限公司 | 一种医疗机构的医疗数据实时上链的方法 |
CN110737537B (zh) * | 2019-09-24 | 2022-09-30 | 贝壳技术有限公司 | 一种合同消息处理方法、装置、电子设备和存储介质 |
CN110837536B (zh) * | 2019-10-08 | 2021-05-04 | 北京海益同展信息科技有限公司 | 一种信息处理方法、装置和存储介质 |
CN111368327A (zh) * | 2020-02-27 | 2020-07-03 | 中国联合网络通信集团有限公司 | 数据共享方法、装置、电子设备及可读存储介质 |
CN112380219B (zh) * | 2020-11-18 | 2021-10-08 | 南威软件股份有限公司 | 一种定义区块链上链数据业务规约及应用业务规约的方法 |
CN113472856A (zh) * | 2021-06-08 | 2021-10-01 | 北京城市网邻信息技术有限公司 | 一种消息推送处理方法、装置、电子设备及存储介质 |
CN113794794B (zh) * | 2021-10-08 | 2023-01-06 | 北京俩撇科技有限公司 | 一种基于区块链添加联系人的方法、装置、设备和存储介质 |
CN114896258B (zh) * | 2022-04-26 | 2022-12-16 | 北京科杰科技有限公司 | 事务数据的同步方法、装置、计算机设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004341878A (ja) * | 2003-05-16 | 2004-12-02 | Toshiba Corp | リアルタイムos及びデッドロック検知方法 |
CN103020304A (zh) * | 2012-12-31 | 2013-04-03 | 中国工商银行股份有限公司 | 一种数据处理方法及设备 |
CN103064976A (zh) * | 2013-01-14 | 2013-04-24 | 浙江水利水电专科学校 | 基于主动数据库技术的同异构dbms间数据交换方法 |
CN107590207A (zh) * | 2017-08-24 | 2018-01-16 | 阿里巴巴集团控股有限公司 | 数据同步方法及装置、电子设备 |
CN107665234A (zh) * | 2017-07-25 | 2018-02-06 | 平安科技(深圳)有限公司 | 业务处理方法、装置、服务器和存储介质 |
CN108280150A (zh) * | 2018-01-05 | 2018-07-13 | 宝付网络科技(上海)有限公司 | 一种分布式异步业务分发方法及系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108171603A (zh) * | 2017-12-15 | 2018-06-15 | 深圳智盾信息技术有限公司 | 一种基于区块链的积分管理系统 |
CN111899004A (zh) * | 2018-05-29 | 2020-11-06 | 创新先进技术有限公司 | 基于区块链的交易处理方法及装置、电子设备 |
-
2018
- 2018-12-28 CN CN201811626766.5A patent/CN109815291B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004341878A (ja) * | 2003-05-16 | 2004-12-02 | Toshiba Corp | リアルタイムos及びデッドロック検知方法 |
CN103020304A (zh) * | 2012-12-31 | 2013-04-03 | 中国工商银行股份有限公司 | 一种数据处理方法及设备 |
CN103064976A (zh) * | 2013-01-14 | 2013-04-24 | 浙江水利水电专科学校 | 基于主动数据库技术的同异构dbms间数据交换方法 |
CN107665234A (zh) * | 2017-07-25 | 2018-02-06 | 平安科技(深圳)有限公司 | 业务处理方法、装置、服务器和存储介质 |
CN107590207A (zh) * | 2017-08-24 | 2018-01-16 | 阿里巴巴集团控股有限公司 | 数据同步方法及装置、电子设备 |
CN108280150A (zh) * | 2018-01-05 | 2018-07-13 | 宝付网络科技(上海)有限公司 | 一种分布式异步业务分发方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109815291A (zh) | 2019-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109815291B (zh) | 数据同步方法、装置、电子设备及存储介质 | |
CN108228814B (zh) | 数据同步方法及装置 | |
CN107220142B (zh) | 执行数据恢复操作的方法及装置 | |
CN109255056B (zh) | 区块链的数据引用处理方法、装置、设备及存储介质 | |
CN104809201A (zh) | 一种数据库同步的方法和装置 | |
CN112084161B (zh) | 基于数据库的数据处理方法、装置以及可读存储介质 | |
CN107870982B (zh) | 数据处理方法、系统和计算机可读存储介质 | |
CN110650164B (zh) | 文件的上传方法、装置、终端以及计算机存储介质 | |
CN109842621B (zh) | 一种减少token存储数量的方法及终端 | |
CN110019873B (zh) | 人脸数据处理方法、装置及设备 | |
CN108121774B (zh) | 一种数据表备份方法及终端设备 | |
CN110968478A (zh) | 日志采集方法、服务器及计算机存储介质 | |
CN110727724A (zh) | 数据抽取方法、装置、计算机设备和存储介质 | |
CN112650753A (zh) | 一种日志管理方法、装置、系统、设备及可读存储介质 | |
CN113407551A (zh) | 数据一致性确定方法、装置、设备及存储介质 | |
CN111240891A (zh) | 基于数据库多表间数据一致性的数据恢复方法及装置 | |
CN115495527A (zh) | 一种数据同步管理系统和方法 | |
WO2019019701A1 (zh) | 一种空白发票的回收处理方法、存储介质和服务器 | |
US9380109B2 (en) | Resource synchronization control method, device, and system | |
CN112631839A (zh) | 一种实现数据备份的方法、装置及设备 | |
CN115866017A (zh) | 消息处理方法、装置、通信设备及存储介质 | |
CN115858668A (zh) | 分布式事务处理方法、装置、电子装置及存储介质 | |
CN115237629A (zh) | 一种保证复杂业务场景下接口幂等性的方法 | |
CN114371870A (zh) | 代码扫描、提交方法及代码扫描服务器、客户端和服务端 | |
CN110221952B (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 |