CN113760920A - 一种数据同步方法、装置、电子设备和存储介质 - Google Patents

一种数据同步方法、装置、电子设备和存储介质 Download PDF

Info

Publication number
CN113760920A
CN113760920A CN202010845636.1A CN202010845636A CN113760920A CN 113760920 A CN113760920 A CN 113760920A CN 202010845636 A CN202010845636 A CN 202010845636A CN 113760920 A CN113760920 A CN 113760920A
Authority
CN
China
Prior art keywords
data
message
unique identifier
synchronous message
information
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.)
Pending
Application number
CN202010845636.1A
Other languages
English (en)
Inventor
朱铎辉
程志良
林德强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Wodong Tianjun Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN202010845636.1A priority Critical patent/CN113760920A/zh
Publication of CN113760920A publication Critical patent/CN113760920A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1805Append-only file systems, e.g. using logs or journals to store data
    • G06F16/1815Journaling file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例公开了一种数据同步方法、装置、电子设备和存储介质。该方法包括从数据库的日志文件中读取数据更新事件信息;将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;其中,各所述行数据分别包含一项数据更新操作数据;生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储,以使业务端在从所述存储单元中获取所述同步消息后根据所述同步消息中的唯一性标识确定所述同步消息是否为重复消息。通过本发明实施例的技术方案,使业务处理不需要幂等操作也可以实现消息精准去重,减小了业务端操作的复杂度,并且提升了消息去重的准确性。

Description

一种数据同步方法、装置、电子设备和存储介质
技术领域
本发明实施例涉及数据操作技术,尤其涉及一种数据同步方法、装置、电子设备和存储介质。
背景技术
互联网业务中有一些业务场景需要将数据库(比如MySQL)中的数据变化同步给业务端。基于binlog的数据同步是MySQL实时同步数据变化常用的方式。具体实现方式是同步服务实时抽取MySQL的binlog事件,解析后将消息发送到一个流式存储单元比如消息队列(MQ)中,下游业务通过消费流式存储单元中的消息获取数据变化。
在实现本发明的过程中,发明人发现现有技术中至少存在如下问题:
对于有些业务,需要保证一个消息只被业务端处理一次,因此需要一种消息去重的方法。目前的去重方式大概有两种:第一种是业务端采用幂等去重方案来实现,这种方式在业务端需要增加额外的幂等处理操作,增加了业务实现的难度。第二种是通过binlog文件名和binlog文件偏移去重,具体是同步服务发送给MQ的消息中携带binlog文件名和binlog文件偏移,业务端从MQ获取到各条消息后可以缓存其中携带的binlog文件名和binlog文件偏移,如果当前消息中携带的binlog文件名和binlog文件偏移已经存在于缓存中,则认为当前消息已经被处理过,不再对当前消息进行处理。采用这种方式实现消息去重的准确度较低。
发明内容
本发明实施例提供了一种数据同步方法、装置、电子设备和存储介质,以提升消息去重的准确性。
第一方面,本发明实施例提供了一种数据同步方法,该方法包括:
从数据库的日志文件中读取数据更新事件信息;
将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;其中,各所述行数据分别包含一项数据更新操作数据;
生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储,以使业务端在从所述存储单元中获取所述同步消息后根据所述同步消息中的唯一性标识确定所述同步消息是否为重复消息。
第二方面,本发明实施例还提供了一种数据同步方法,该方法包括:
从存储单元中获取同步消息;其中,所述同步消息是服务端对从数据库的日志文件中读取的数据更新事件信息进行解析,获得至少一个行数据,并为各所述行数据分别分配唯一性标识后,生成的至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息;各所述行数据分别包含一项数据更新操作数据;
对所述同步消息进行解析,获得唯一性标识,确定缓存单元中是否保存有所述唯一性标识;
若是,则确定所述同步消息为重复消息,放弃对所述同步消息进行处理;否则,确定所述同步消息不为重复消息,对所述同步消息进行处理,并将所述唯一性标识保存至所述缓存单元。
第三方面,本发明实施例还提供了一种数据同步装置,该装置包括:
信息读取模块,用于从数据库的日志文件中读取数据更新事件信息;
信息解析模块,用于将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;其中,各所述行数据分别包含一项数据更新操作数据;
信息确定模块,用于生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储,以使业务端在从所述存储单元中获取所述同步消息后根据所述同步消息中的唯一性标识确定所述同步消息是否为重复消息。
第四方面,本发明实施例还提供了一种电子设备,所述电子设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明任意实施例提供的数据同步方法。
第五方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任意实施例提供的数据同步方法。
第六方面,本发明实施例还提供了一种数据同步系统,该系统包括:
服务端,用于从数据库的日志文件中读取数据更新事件信息;将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储;其中,各所述行数据分别包含一项数据更新操作数据;
业务端,用于从所述存储单元中获取所述同步消息;对所述同步消息进行解析,获得唯一性标识,确定缓存单元中是否保存有所述唯一性标识;若是,则确定所述同步消息为重复消息,放弃对所述同步消息进行处理;否则,确定所述同步消息不为重复消息,对所述同步消息进行处理,并将所述唯一性标识保存至所述缓存单元。
上述发明中的实施例具有如下优点或有益效果:
本发明实施例通过从数据库的日志文件中读取数据更新事件信息;将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;其中,各所述行数据分别包含一项数据更新操作数据;生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储,以使业务端在从所述存储单元中获取所述同步消息后根据所述同步消息中的唯一性标识确定所述同步消息是否为重复消息,从而实现消息的精准去重。解决了现有技术中业务处理需要幂等操作难度大和因为相同binlog文件名和偏移可能对应多个MQ消息导致消息去重准确度低的问题,实现了减小业务端操作的复杂度,并且提升消息去重的准确性的效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一提供的数据同步方法的流程示意图;
图2是本发明实施例一提供的MySQL实例的数据库表示意图;
图3是本发明实施例一提供的业务端消息消费示意图;
图4为本发明实施例二提供的数据同步方法的流程图;
图5为本发明实施例三提供的数据同步方法的流程图;
图6为本发明实施例四提供的数据同步装置的结构示意图;
图7为本发明实施例五提供的电子设备的结构示意图;
图8为本发明实施例七提供的数据同步系统的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一中的数据同步方法的流程图,本实施例可以适用于需要将数据库(比如MySQL)中的数据变化同步给业务端的情况,该方法可以由数据同步的装置执行,该数据同步装置可以采用软件和/或硬件的方式实现,如图1所示,该方法具体包括:
S110、从数据库的日志文件中读取数据更新事件信息。
在互联网业务中,一些业务场景需要实时同步数据库的数据操作,例如MySQL中的实时备份、业务cache刷新、和价格变化库存变化等重要业务。可选的,可以采用基于binlog的数据同步实现MySQL实时同步数据变化。
在本发明实施例中,从数据库的日志文件中读取数据更新事件信息,具体可以由数据库中的reader模块完成。可选的,数据库可以为MySQL数据库,日志文件可以为binlog日志文件。可选的,可以通过调用JDK(Java Development Kit,Java开发工具包)提供的Socket编程接口,实现远程读取MySQL数据库中binlog日志。其中,binlog日志是MySQL数据库的二进制日志,用于记录用户对数据库操作的SQL语句(除了数据查询语句)信息。在本发明实施例中,binlog日志中包含对MySQL数据库中的存储数据执行更新操作的数据更新事件信息,即binlog事件。具体的,更新操作包括数据插入操作(insert)、数据删除操作(delete)、数据修改操作(update)。可选的,也可以根据实际情况采用具体的方式获取数据更新事件信息,本实施例对此不加以限制。
S120、将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;其中,各所述行数据分别包含一项数据更新操作数据。
在本发明实施例中,采用远程方式读取binlog事件,并且根据预设解析协议对binlog事件进行解析,将binlog事件解析为具体的行数据。其中,每个行数据包含对数据表中的一条记录的一个操作的数据,即包含一项数据更新操作数据。可选的,为各行数据分配唯一性标识,比如可以是唯一序号MID(Message ID)。其中,MID是正整数,并且每个行数据都有对应的唯一序号MID。具体的,当每当解析出一行数据,就为该行数据按预设排序规则分配唯一序号MID。可选的,binlog事件中解析出的任一行数据包含数据插入操作(insert)、数据删除操作(delete)、或数据修改操作(update)。可选的,一个binlog事件中包含有至少一项数据更新操作,因此对一个binlog事件进行解析可获得至少一个行数据。具体的,如图2所示,BEGIN和COMMIT之间的数据是一个binlog事务数据,该binlog事务数据中包含至少一个binlog事件,每个binlog事件可包含至少一个行数据。本发明实施例中只探讨数据操作中的插入操作(insert)、数据删除操作(delete)、数据修改操作(update)。具体的,图2中第一列是binlog日志文件名、第二列是binlog日志偏移起始位置、第三列是binlog事件类型、第四列是服务器ID,第五列是binlog日志偏移结束位置、第六列是binlog事件信息,xid是事务id。参考图2可以得知:第一个数据更新操作是insert,包含两行数据,MID是0和1;第二个数据更新操作是insert,包含4行数据,MID为2、3、4、5;第三个数据更新操作是update,包含1行数据,MID是6,第四个数据更新操作是insert,包含3行数据,MID是7、8、9。因为reader模块是单线程顺序操作,因此MID的分配与MySQL的binlog事件顺序一致。当然,上述实施例只是作为可选实施例,本实施例对其余实施方式不加以限制。
S130、生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储。
在本发明实施例中,经reader模块将binlog事件进行解析,并为binlog事件中各行数据分配唯一的序号MID,由sender模块根据binlog事件中的行数据的数量转换为一个或多个同步消息,即MQ(Message Queue,消息队列)消息,并发送至存储单元比如MQ中进行存储。其中,任一行数据转换的同步消息都有与各行数据对应的唯一性标识MID。可选的,可以采用消息队列中间件将具有唯一标识的同步消息发送至MQ。具体的,消息队列中间件是分布式系统中重要的组件,把待传输的各行数据转换的具有唯一标识的同步消息发送至MQ中,用队列机制来实现将同步消息发送至MQ。可选的,当同步消息发送成功后,MQ会向sender模块回传确认(ack)消息,其中,ack消息中包含有同步消息发送成功的信息。可选的,sender模块会采用并行发送的方式将同步消息发送至MQ。具体的,一个MySQL实例的消息由多个线程负责发送,由于MID是由reader模块负责解析,因此,即使sender模块采用多线程发送,在提高同步消息发送速率的同时同步消息中MID的顺序和唯一性也能够得到保证。
S140、业务端在从所述存储单元中获取所述同步消息后根据所述同步消息中的唯一性标识确定所述同步消息是否为重复消息。
在本发明实施例中,不同的业务端通过消费MQ中存储的同步消息来获取同步MySQL的数据,因为MQ是保证至少一次的语义,因此相同的同步消息可能会收到多次,但是相同的同步消息中的MID相同,因此只需要缓存已经处理的MID就可以进行去重处理。可选的,由业务端的consumer模块获取由sender发送至MQ的同步消息并进行消费。可选的,consumer模块可以到指定队列拉取消息,consumer模块也可以订阅相应的队列,由MQ服务端给consumer模块推送消息。具体的,当consumer模块消费到MQ中任一条同步消息时,采用预设解析协议对该同步消息进行解析,获得binlog事件的数据和该同步消息对应的唯一性标识MID。可选的,依据该同步消息对应的唯一性标识MID确定预设的缓存单元中是否保存有该唯一性标识;若是,则确定该同步消息为重复消息,放弃对该同步消息进行处理;否则,确定该同步消息不为重复消息,对该同步消息进行处理,并将该唯一性标识保存至所述缓存单元。其中,预设缓存单元中存储有已处理过的同步消息的唯一性标识MID。可选的,为了保证缓存单元中缓存数据不溢出,预先设定预设时间内进行缓存清理;可选的,可以根据时间进行清理,例如清理预设时间以前的缓存数据;还可以将缓存单元中缓存数据全部清除,当然,上述实施例只是作为可选实施例,也可以根据实际情况进行具体设置,本发明实施例对此不加以限制。示例性的如图3所示,当业务端第一次消费到msg8时,解析得到MID为7,当查询缓存查不到该MID时,将MID为7加入缓存;当业务端第二次消费到msg8时,解析得到MID为7,因为MID为7的消息已经处理过,因此本条消息忽略不进行处理。可选的,业务端可以同时存在多个consumer模块进行同步消息的消费。
本发明实施例通过从数据库的日志文件中读取数据更新事件信息;将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储,以使业务端在从所述存储单元中获取所述同步消息后根据所述同步消息中的唯一性标识确定所述同步消息是否为重复消息,从而实现消息的精准去重。解决现有技术中业务处理需要幂等操作难度大和因为相同binlog文件名和偏移可能对应多个MQ消息导致消息去重准确度低的问题,实现减小业务端操作的复杂度,并且提升消息去重的准确性的效果。
实施例二
图4为本发明实施例二提供的数据同步方法的流程图,本实施例在上述各实施例的基础上,进一步增加了定时将当前发送至所述存储单元的同步消息中包含的行数据在日志文件中的位置标识信息、以及所述行数据对应的唯一性标识作为一条快照信息保存在快照文件中。其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图4,本实施例提供的数据同步方法包括:
S210、从数据库的日志文件中读取数据更新事件信息。
S220、将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;其中,各所述行数据分别包含一项数据更新操作数据。
S230、生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储,以使业务端在从所述存储单元中获取所述同步消息后根据所述同步消息中的唯一性标识确定所述同步消息是否为重复消息。
S240、定时将当前发送至所述存储单元的同步消息中包含的行数据在日志文件中的位置标识信息、以及所述行数据对应的唯一性标识作为一条快照信息保存在快照文件中。
在本发明实施例中,为了保证在任务重启或者主动回退位点的情况下不丢失数据,保证从重启或者退回位点的位置继续同步,可以预先设定快照文件,其快照文件中定时保存发送至MQ中存储的同步消息中的快照信息。可选的,可以预设定时间隔对快照信息进行保存,具体的,预设定时间隔可以是100ms、500ms或者1s等。其中,快照信息包括同步消息中的行数据在日志文件中的位置标识信息、以及包含数据对应的唯一性标识MID。具体的,位置标识信息包括但不限于数据库的主机地址、数据库的名称、数据表的名称、binlog日志文件的名称、以及当前发送的同步消息中的行数据在binlog日志文件中的位置偏移值。
S250、当接收到任务重启请求时,从预先设定的快照文件中读取保存的最后一条快照信息;确定该最后一条快照信息中的位置标识信息在binlog日志文件中的对应位置,从该对应位置处开始继续读取binlog日志文件中的binlog时间,并根据所述最后一条快照信息中的唯一性标识MID为继续读取的binlog事件对应的行数据分配唯一性标识。
在本发明实施例中,按照预设定时间隔将快照信息保存于快照文件中。示例性的,当确定接收到请求为任务重启的请求时,从预先设定的快照文件中读取最后一条快照信息,并依据该条快照信息中的唯一性标识MID和位置标识信息与binlog日志文件中数据信息进行匹配,确定该条数据在binlog日志文件中的对应位置,并根据所述最后一条快照信息中的唯一性标识MID为继续读取的binlog事件对应的行数据分配唯一性标识;例如当确定最后一条快照信息中的唯一性标识MID为7,则继续读取的binlog事件对应的行数据分配唯一性标识则可以按照排序分配为8。
S260、当接收到回退位点请求时,根据该回退位点请求中的回退时间从预先设定的快照文件中读取该回退时间对应的目标快照信息;确定所述目标快照信息中的位置标识信息在所述日志文件中的对应位置,从该对应位置处开始继续读取bonlog日志文件中的binlog时间,并根据所述目标快照信息中的唯一性标识MID为继续读取的binlog事件对应的行数据分配唯一性标识。
在本发明实施例中,按照预设定时间隔将快照信息快照文件中进行保存。示例性的,当确定接收到请求为回退位点的请求时,确定该回退位点的回退时间,根据该回退位点请求中的回退时间从预先设定的快照文件中读取该回退时间对应的目标快照信息;并依据该条快照信息中的唯一性标识MID和位置标识信息与binlog日志文件中数据信息进行匹配,确定该条数据在binlog日志文件中的对应位置,并根据目标快照信息中的唯一性标识MID为继续读取的binlog事件对应的行数据分配唯一性标识;例如当确定目标快照信息中的唯一性标识MID为7,则继续读取的binlog事件对应的行数据分配唯一性标识则可以按照排序分配为8。
需要说明的是,此处不限定步骤S260执行时的执行顺序。比如执行步骤S260时,其可以在步骤250之后顺序执行,也可以在步骤250之前执行。
本发明实施例通过从数据库的日志文件中读取数据更新事件信息;将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储,以使业务端在从所述存储单元中获取所述同步消息后根据所述同步消息中的唯一性标识确定所述同步消息是否为重复消息,从而实现同步消息的精准去重。在同步消息去重的过程中也需要定期将binlog事件的位置标示信息和MID保存在快照文件中,以保证当任务重启或者主动回退位点时需要从存储中恢复需要处理的binlog事件的位置标示信息,并且从该位置继续处理。在解决现有技术中业务处理需要幂等操作难度大和因为相同binlog文件名和偏移可能对应多个MQ消息导致消息去重准确度低的问题,实现减小业务端操作的复杂度,并且提升消息去重的准确性的效果的基础上,实现在出现意外时可以恢复到意外前的一致位置继续处理同步消息。
实施例三
图5为本发明实施例三中的数据同步方法的流程图,本实施例可以由数据同步的装置执行,该数据同步装置可以采用软件和/或硬件的方式实现,如图5所示,该方法具体包括:
S310、从存储单元中获取同步消息;其中,所述同步消息是服务端对从数据库的日志文件中读取的数据更新事件信息进行解析,获得至少一个行数据,并为各所述行数据分别分配唯一性标识后,生成的至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息;其中,各所述行数据分别包含一项数据更新操作数据。
在本发明实施例中,不同的业务端通过消费MQ中存储的同步消息来获取同步MySQL的数据,可选的,由业务端的consumer模块获取由sender发送至MQ的同步消息并进行消费。可选的,consumer模块可以到指定队列拉取消息,consumer模块也可以订阅相应的队列,由MQ服务端给consumer模块推送消息。
S320、对所述同步消息进行解析,获得唯一性标识,确定缓存单元中是否保存有所述唯一性标识;若是,则执行步骤S330;若否,则执行步骤S340。
在本发明实施例中,当业务端的consumer模块消费到MQ中任一条同步消息时,采用预设解析协议对该同步消息进行解析,获得binlog事件的数据和该同步消息对应的唯一性标识MID。可选的,依据该同步消息对应的唯一性标识MID确定预设的缓存单元中是否保存有该唯一性标识。
S330、确定所述同步消息为重复消息,放弃对所述同步消息进行处理。
S340、确定所述同步消息不为重复消息,对所述同步消息进行处理,并将所述唯一性标识保存至所述缓存单元。
本发明实施例通过从存储单元中获取同步消息,对所述同步消息进行解析,获得唯一性标识,确定缓存单元中是否保存有所述唯一性标识;若是,则确定所述同步消息为重复消息,放弃对所述同步消息进行处理;否则,确定所述同步消息不为重复消息,对所述同步消息进行处理,并将所述唯一性标识保存至所述缓存单元。解决了现有技术中处理数据同步消息时因需要幂等操作难度大和因为相同binlog文件名和偏移可能对应多个MQ消息导致消息去重准确度低的问题,实现了减小业务端操作的复杂度,并且提升消息去重的准确性的效果。
以下是本发明实施例提供的数据同步装置的实施例,该装置与上述各实施例的数据同步方法属于同一个发明构思,在数据同步装置的实施例中未详尽描述的细节内容,可以参考上述数据同步方法的实施例。
实施例四
图6为本发明实施例四提供的数据同步装置的结构示意图,本实施例可适用于本实施例可以适用于需要将数据库(比如MySQL)中的数据变化同步给业务端的情况,该装置的具体结构如下:
信息读取模块410,用于从数据库的日志文件中读取数据更新事件信息;
信息解析模块420,用于将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;其中,各所述行数据分别包含一项数据更新操作数据;
信息确定模块430,用于生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储,以使业务端在从所述存储单元中获取所述同步消息后根据所述同步消息中的唯一性标识确定所述同步消息是否为重复消息。
可选的,所述信息确定模块430包括:
同步消息获取单元,用于业务端从所述存储单元中获取所述同步消息;
唯一性标识确定单元,用于对所述同步消息进行解析,获得所述唯一性标识,确定缓存单元中是否保存有所述唯一性标识;若是,则确定所述同步消息为重复消息,放弃对所述同步消息进行处理;否则,确定所述同步消息不为重复消息,对所述同步消息进行处理,并将所述唯一性标识保存至所述缓存单元。
可选的,所述信息确定模块430包括:
同步消息发送单元,用于通过多个线程将生成的至少一个同步消息,并行发送至存储单元中进行存储。
可选的,所述数据同步装置还包括:
快照信息保存模块,用于定时将当前发送至所述存储单元的同步消息中包含的行数据在日志文件中的位置标识信息、以及所述行数据对应的唯一性标识作为一条快照信息保存在快照文件中。
可选的,所述位置标识信息包括:数据库的主机地址、数据库的名称、数据表的名称、所述日志文件的名称、以及当前发送的同步消息中的行数据在所述日志文件中的位置偏移值。
可选的,所述快照信息保存模块包括:
第一快照信息读取单元,用于在接收到任务重启请求时,从所述快照文件中读取保存的最后一条快照信息;
第一快照信息应用单元,用于确定所述最后一条快照信息中的位置标识信息在所述日志文件中的对应位置,从该对应位置处开始继续读取所述日志文件中的数据更新事件信息,并根据所述最后一条快照信息中的唯一性标识为继续读取的数据更新事件信息对应的行数据分配唯一性标识。
可选的,所述快照信息保存模块包括:
第二快照信息读取单元,用于在接收到回退位点请求时,根据所述回退位点请求中的回退时间从所述快照文件中读取所述回退时间对应的目标快照信息;
第二快照信息应用单元,用于确定所述目标快照信息中的位置标识信息在所述日志文件中的对应位置,从该对应位置处开始继续读取所述日志文件中的数据更新事件信息,并根据所述目标快照信息中的唯一性标识为继续读取的数据更新事件信息对应的行数据分配唯一性标识。
本发明实施例所提供的数据同步装置可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。
值得注意的是,上述数据同步装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
实施例五
图7是本发明实施例五中的电子设备的结构示意图。图7示出了适于用来实现本发明实施方式的示例性电子设备512的框图。图7显示的电子设备512仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图7所示,电子设备512以通用计算电子设备的形式表现。电子设备512的组件可以包括但不限于:一个或者多个处理器或者处理单元516,系统存储器528,连接不同系统组件(包括系统存储器528和处理单元516)的总线518。
总线518表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
电子设备512典型地包括多种计算机系统可读介质。这些介质可以是任何能够被电子设备512访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器528可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)530和/或高速缓存存储器532。电子设备512可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统543可以用于读写不可移动的、非易失性磁介质(图7未显示,通常称为“硬盘驱动器”)。尽管图7中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线518相连。存储器528可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块542的程序/实用工具540,可以存储在例如存储器528中,这样的程序模块542包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块542通常执行本发明所描述的实施例中的功能和/或方法。
电子设备512也可以与一个或多个外部电子设备514(例如键盘、指向电子设备、显示器524等)通信,还可与一个或者多个使得用户能与该设备512交互的设备通信,和/或与使得该设备512能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口522进行。并且,设备512还可以通过网络适配器520与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器520通过总线518与设备512的其它模块通信。应当明白,尽管图7中未示出,可以结合设备512使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元516通过运行存储在系统存储器528中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的数据同步方法,该方法包括:
从数据库的日志文件中读取数据更新事件信息;
将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;其中,各所述行数据分别包含一项数据更新操作数据;
生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储,以使业务端在从所述存储单元中获取所述同步消息后根据所述同步消息中的唯一性标识确定所述同步消息是否为重复消息。
实施例六
本发明实施例六还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例所提供的数据同步方法,该方法包括:
从数据库的日志文件中读取数据更新事件信息;
将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;其中,各所述行数据分别包含一项数据更新操作数据;
生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储,以使业务端在从所述存储单元中获取所述同步消息后根据所述同步消息中的唯一性标识确定所述同步消息是否为重复消息。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或设备上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
实施例七
图8是本发明实施例七中的数据同步系统的结构示意图。本实施例可以适用于需要将数据库(比如MySQL)中的数据变化同步给业务端的情况,如图8所示,该系统包括服务端710和业务端720,其中:
服务端710,用于从数据库的日志文件中读取数据更新事件信息;将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;其中,各所述行数据分别包含一项数据更新操作数据;生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储。
业务端720,用于从所述存储单元中获取所述同步消息;对所述同步消息进行解析,获得唯一性标识,确定缓存单元中是否保存有所述唯一性标识;若是,则确定所述同步消息为重复消息,放弃对所述同步消息进行处理;否则,确定所述同步消息不为重复消息,对所述同步消息进行处理,并将所述唯一性标识保存至所述缓存单元。
本发明实施例所提供的数据同步系统可执行本发明任意实施例所提供的方法,因此具备执行方法相应的功能模块和有益效果。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (11)

1.一种数据同步方法,其特征在于,包括:
从数据库的日志文件中读取数据更新事件信息;
将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;其中,各所述行数据分别包含一项数据更新操作数据;
生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储,以使业务端在从所述存储单元中获取所述同步消息后根据所述同步消息中的唯一性标识确定所述同步消息是否为重复消息。
2.根据权利要求1所述的方法,其特征在于,将所述同步消息发送至存储单元中进行存储,包括:
通过多个线程将生成的至少一个同步消息,并行发送至存储单元中进行存储。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
定时将当前发送至所述存储单元的同步消息中包含的行数据在日志文件中的位置标识信息、以及所述行数据对应的唯一性标识作为一条快照信息保存在快照文件中。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在接收到任务重启请求时,从所述快照文件中读取保存的最后一条快照信息;
确定所述最后一条快照信息中的位置标识信息在所述日志文件中的对应位置,从该对应位置处开始继续读取所述日志文件中的数据更新事件信息,并根据所述最后一条快照信息中的唯一性标识为继续读取的数据更新事件信息对应的行数据分配唯一性标识。
5.根据权利要求3所述的方法,其特征在于,所述快照信息中还包括时间信息;所述方法还包括:
在接收到回退位点请求时,根据所述回退位点请求中的回退时间从所述快照文件中读取所述回退时间对应的目标快照信息;
确定所述目标快照信息中的位置标识信息在所述日志文件中的对应位置,从该对应位置处开始继续读取所述日志文件中的数据更新事件信息,并根据所述目标快照信息中的唯一性标识为继续读取的数据更新事件信息对应的行数据分配唯一性标识。
6.根据权利要求3-5中任一项所述的方法,其特征在于,所述位置标识信息包括:数据库的主机地址、数据库的名称、数据表的名称、所述日志文件的名称、以及当前发送的同步消息中的行数据在所述日志文件中的位置偏移值。
7.一种数据同步方法,其特征在于,包括:
从存储单元中获取同步消息;其中,所述同步消息是服务端对从数据库的日志文件中读取的数据更新事件信息进行解析,获得至少一个行数据,并为各所述行数据分别分配唯一性标识后,生成的至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息;各所述行数据分别包含一项数据更新操作数据;
对所述同步消息进行解析,获得唯一性标识,确定缓存单元中是否保存有所述唯一性标识;
若是,则确定所述同步消息为重复消息,放弃对所述同步消息进行处理;否则,确定所述同步消息不为重复消息,对所述同步消息进行处理,并将所述唯一性标识保存至所述缓存单元。
8.一种数据同步装置,其特征在于,包括:
信息读取模块,用于从数据库的日志文件中读取数据更新事件信息;
信息解析模块,用于将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;其中,各所述行数据分别包含一项数据更新操作数据;
信息确定模块,用于生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储,以使业务端在从所述存储单元中获取所述同步消息后根据所述同步消息中的唯一性标识确定所述同步消息是否为重复消息。
9.一种电子设备,其特征在于,所述电子设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的数据同步方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的数据同步方法。
11.一种数据同步系统,其特征在于,包括:
服务端,用于从数据库的日志文件中读取数据更新事件信息;将所述数据更新事件信息进行解析,获得至少一个行数据,为各所述行数据分别分配唯一性标识;生成至少一个包含所述行数据和所述行数据对应的唯一性标识的同步消息,将所述同步消息发送至存储单元中进行存储;其中,各所述行数据分别包含一项数据更新操作数据;
业务端,用于从所述存储单元中获取所述同步消息;对所述同步消息进行解析,获得唯一性标识,确定缓存单元中是否保存有所述唯一性标识;若是,则确定所述同步消息为重复消息,放弃对所述同步消息进行处理;否则,确定所述同步消息不为重复消息,对所述同步消息进行处理,并将所述唯一性标识保存至所述缓存单元。
CN202010845636.1A 2020-08-20 2020-08-20 一种数据同步方法、装置、电子设备和存储介质 Pending CN113760920A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010845636.1A CN113760920A (zh) 2020-08-20 2020-08-20 一种数据同步方法、装置、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010845636.1A CN113760920A (zh) 2020-08-20 2020-08-20 一种数据同步方法、装置、电子设备和存储介质

Publications (1)

Publication Number Publication Date
CN113760920A true CN113760920A (zh) 2021-12-07

Family

ID=78785623

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010845636.1A Pending CN113760920A (zh) 2020-08-20 2020-08-20 一种数据同步方法、装置、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN113760920A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116821245A (zh) * 2023-07-05 2023-09-29 贝壳找房(北京)科技有限公司 分布式场景下数据聚合同步方法及存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104657364A (zh) * 2013-11-18 2015-05-27 华为技术有限公司 一种日志结构数据库系统查询请求消息处理方法及装置
CN104809200A (zh) * 2015-04-24 2015-07-29 联动优势科技有限公司 一种数据库同步的方法和装置
WO2015138581A1 (en) * 2014-03-11 2015-09-17 Iex Group, Inc. Techniques for message retransmission mechanism
CN108228756A (zh) * 2017-12-21 2018-06-29 江苏瑞中数据股份有限公司 基于日志解析技术的PG数据库到Hadoop平台的数据同步复制方法
CN108769172A (zh) * 2018-05-21 2018-11-06 杭州有赞科技有限公司 一种数据同步方法及系统
CN109145060A (zh) * 2018-07-20 2019-01-04 腾讯科技(深圳)有限公司 数据处理方法及装置
CN110807067A (zh) * 2019-09-29 2020-02-18 北京淇瑀信息科技有限公司 关系型数据库和数据仓库的数据同步方法、装置及设备
CN111552735A (zh) * 2020-03-27 2020-08-18 深圳壹账通智能科技有限公司 基于数据链路的数据同步方法、装置、计算机设备和介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104657364A (zh) * 2013-11-18 2015-05-27 华为技术有限公司 一种日志结构数据库系统查询请求消息处理方法及装置
WO2015138581A1 (en) * 2014-03-11 2015-09-17 Iex Group, Inc. Techniques for message retransmission mechanism
CN104809200A (zh) * 2015-04-24 2015-07-29 联动优势科技有限公司 一种数据库同步的方法和装置
CN108228756A (zh) * 2017-12-21 2018-06-29 江苏瑞中数据股份有限公司 基于日志解析技术的PG数据库到Hadoop平台的数据同步复制方法
CN108769172A (zh) * 2018-05-21 2018-11-06 杭州有赞科技有限公司 一种数据同步方法及系统
CN109145060A (zh) * 2018-07-20 2019-01-04 腾讯科技(深圳)有限公司 数据处理方法及装置
CN110807067A (zh) * 2019-09-29 2020-02-18 北京淇瑀信息科技有限公司 关系型数据库和数据仓库的数据同步方法、装置及设备
CN111552735A (zh) * 2020-03-27 2020-08-18 深圳壹账通智能科技有限公司 基于数据链路的数据同步方法、装置、计算机设备和介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
庞丽萍, 陈宝利: "基于相互独立检查点的MPI消息日志系统", 华中科技大学学报(自然科学版), no. 08, 30 August 2004 (2004-08-30) *
邰宇;: "基于海量数据消息队列的性能比较及其优化", 科技传播, no. 03, 10 February 2018 (2018-02-10) *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116821245A (zh) * 2023-07-05 2023-09-29 贝壳找房(北京)科技有限公司 分布式场景下数据聚合同步方法及存储介质

Similar Documents

Publication Publication Date Title
CN111339186B (zh) 工作流引擎数据同步方法、装置、介质及电子设备
CN112162965B (zh) 一种日志数据处理的方法、装置、计算机设备及存储介质
CN110019873B (zh) 人脸数据处理方法、装置及设备
CN108170832B (zh) 一种面向工业大数据的异构数据库的监控系统及监控方法
CN110740145A (zh) 消息消费方法、装置、存储介质及电子设备
CN112163038A (zh) 跨集群数据同步方法、装置、设备及存储介质
CN111737564A (zh) 一种信息查询方法、装置、设备及介质
CN111338834B (zh) 数据存储方法和装置
CN112612850A (zh) 数据同步方法及装置
CN115408391A (zh) 一种数据库表变更方法、装置、设备和存储介质
CN109347899B (zh) 在分布式存储系统中写入日志数据的方法
CN114676199A (zh) 一种同步方法、同步系统、计算机设备和存储介质
CN113760920A (zh) 一种数据同步方法、装置、电子设备和存储介质
CN113377863B (zh) 数据同步方法、装置、电子设备及计算机可读存储介质
CN111581059A (zh) 一种Spark应用监控方法、系统、设备和存储介质
CN113761052A (zh) 数据库同步方法和装置
CN109067649B (zh) 节点处理方法及装置、存储介质和电子设备
CN111679892A (zh) 分布式事务的处理方法、装置、设备及介质
CN113760950B (zh) 指标数据查询方法、装置、电子设备以及存储介质
CN115454666A (zh) 消息队列集群间的数据同步方法和装置
CN114282968A (zh) 一种流水号的获取方法、装置、服务器和存储介质
CN111405015B (zh) 一种数据处理方法、装置、设备及存储介质
CN114356925A (zh) 标识生成方法、装置、电子设备及存储介质
CN109189746B (zh) 通用流式Shuffle引擎的实现方法、装置、设备及存储介质
CN113761051A (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