CN113407638A - 实现实时关系型数据库数据同步的方法 - Google Patents
实现实时关系型数据库数据同步的方法 Download PDFInfo
- Publication number
- CN113407638A CN113407638A CN202110805505.5A CN202110805505A CN113407638A CN 113407638 A CN113407638 A CN 113407638A CN 202110805505 A CN202110805505 A CN 202110805505A CN 113407638 A CN113407638 A CN 113407638A
- Authority
- CN
- China
- Prior art keywords
- library
- deleting
- modifying
- slave
- increasing
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种实现实时关系型数据库数据同步的方法,该方法包括以下步骤:同步过程:对主库数据进行增删改操作时,Java应用层抓取对主库进行增删改的操作,对主库执行所述增删改操作,并异步发送所述增删改的操作到消息队列,同步进程到从库中,所述从库执行所述增删改的操作;补偿进程:设定定时检查时间,定时检查,若发现有超过预定时间还未能同步到所述从库的增删改操作,则重新将未同步到从库的数据的增删改操作同步到从库中直至从库中数据更新完成,本发明可支持所有关系型数据库、主从表结构可以不一致、从库可以不是严格的只读库、可多线程处理、可双向同步且容错性高。
Description
技术领域
本发明属于数据存储技术领域,具体涉及一种实现实时关系型数据库数据同步的方法。
背景技术
读写分离是一种常见的解决关系型数据库性能的技术。如图1所示,需要读写的应用访问主库,只需要读数据的应用访问从库。主库、从库之间通过数据复制进行数据上的同步,保证主从库数据一致。此处数据同步是读写分离的关键技术。
目前,业界常用的方式是通过关系型数据库的日志机制,将主库的数据库日志发送到从库,在从库中回放执行实现。这个方法存在以下几个缺点:
1、日志同步需要数据库底层支持,对于商用数据库往往需要商用软件支持,需要增加成本。
2、通常要求主从库表结构一致。
3、通常要求从库严格只读。
4、通常单线程同步,同步性能受限。
发明内容
本发明是为了解决上述问题而进行的,目的在于提供一种可支持所有关系型数据库、主从表结构可以不一致、从库可以不是严格的只读库、可多线程处理、可双向同步且容错性高的实现实时关系型数据库数据同步的方法。
本发明提供了一种实现实时关系型数据库数据同步的方法,其特征在于,包括以下步骤:
同步过程:对主库数据进行增删改操作时,Java应用层抓取对主库进行增删改的操作,对主库执行所述增删改操作,并异步发送所述增删改的操作到消息队列,同步进程到从库中,所述从库执行所述增删改的操作;
补偿进程:设定定时检查时间,定时检查,若发现有超过预定时间还未能同步到所述从库的增删改操作,则重新将未同步到从库的数据的增删改操作同步到从库中直至从库中数据更新完成。
进一步,在本发明提供的实现实时关系型数据库数据同步的方法中,还可以具有这样的特征:抓取主库更新的数据时是Java应用程序通过ORM层插件抓取。
进一步,在本发明提供的实现实时关系型数据库数据同步的方法中,还可以具有这样的特征:所述消息队列为Kafka。
进一步,在本发明提供的实现实时关系型数据库数据同步的方法中,还可以具有这样的特征:当Java应用层抓取到对主库进行增删改的操作后,将抓取到的增删改操作的同步状态修改为“待同步”/“待删除”,所述从库执行所述增删改的操作并同步完成后返回同步结果,同步结果包括“已同步”/“同步失败”/“删除失败”,根据同步结果更新同步状态,
当Java应用层抓取到对主库进行增删改的操作后,同时将系统当前时间添加到抓取的增删改的操作中作为最后修改时间。
进一步,在本发明提供的实现实时关系型数据库数据同步的方法中,还可以具有这样的特征:当需要同步到多个从库时,将同步状态的字段改为变长字段,其中所述变长字段中每一位代表一个从库的更新状态。
进一步,在本发明提供的实现实时关系型数据库数据同步的方法中,还可以具有这样的特征:所述补偿进程发现有未能同步到所述从库的增删改操作是通过同步状态、最后修改时间和当前时间确定的。
进一步,在本发明提供的实现实时关系型数据库数据同步的方法中,还可以具有这样的特征:当对从库进行更新操作时,更新的数据的时间要晚于从库中对应数据的时间,否则,将该条更新数据抛弃;在更新从库数据时,若从库中不存在对应的记录,则将更新操作转换为插入操作对从库中增加该条记录。
进一步,在本发明提供的实现实时关系型数据库数据同步的方法中,还可以具有这样的特征:若Java应用层抓取对主库进行增删改的操作是删除操作,则对主库执行的删除操作改为更新操作,并更新同步状态为“待删除”,在同步进程将该删除操作在从库中执行完成后,再对主库进行删除操作,否则更新同步状态为“删除失败”。
进一步,在本发明提供的实现实时关系型数据库数据同步的方法中,还可以具有这样的特征:若对主库进行的增删改操作不是通过Java应用层抓取的对主库进行增删改的操作进行的,则在对主库进行的增删改操作中增加同步状态和执行增删改操作的时间。
进一步,在本发明提供的实现实时关系型数据库数据同步的方法中,还可以具有这样的特征:该方法还包括异常监控进程查询步骤,当从库中执行增删改操作产生错误时,更新同步状态为“同步失败”,异常监控进程查询主库,如果存在同步失败的数据则报警,排除异常后,由补偿进程对从库进行再次同步,使从库中完成数据同步。
本发明的优点如下:
1、通过Java应用层实现,与具体数据库类型无关,可支持所有关系型数据库。
2、主从表结构可以不一致,可以实现只同步部分字段。
3、从库可以不是严格的只读库,比如某些字段可以不同步在从库上。
4、同步进程、补偿进程均可以多线程处理。
5、可以增加更灵活的业务级别的额外处理,例如:数据过滤(同步过程中过滤某些行);数据映射(同步过程中进行某些数据映射转换);数据校验清洗;分表同步(将主库大表按某种规则进行从库的表拆分)等等。
6、可以实现双向同步。
7、容错性高:无论消息队列或同步进程产生故障,恢复后可通过补偿进程自动继续同步,保证最终数据一致。
附图说明
图1是现有技术中关系型数据库数据同步的方法。
图2是本发明中同步过程的流程图。
图3是本发明中补偿过程的流程图。
具体实施方式
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,以下实施例结合附图对本发明的实现实时关系型数据库数据同步的方法作具体阐述。
实现实时关系型数据库数据同步的方法包括以下步骤:
如图2所示,同步过程:对主库数据进行增删改操作时,Java应用层抓取对主库进行增删改的操作,即SQL(INSERT/UPDATE/DELETE),对主库执行该增删改操作,并异步发送该增删改的操作到消息队列,同步进程到从库中,所述从库执行该增删改的操作。
在本实施例中,抓取主库更新的数据时是Java应用程序通过ORM层插件抓取的。以JPA为例:增加事件监听PostInsertEventListener/PostUpdateEventListener/PostDeleteEventListen er,抓取对主库进行增删改的操作命令。消息队列为Kafka。
如图3所示,补偿进程:设定定时检查时间,定时检查,若发现有超过预定时间(例如1分钟)还未能同步到所述从库的增删改操作,则重新将未同步数据的增删改操作同步到从库中直至从库中更新完成。补偿进程用于防止同步过程中产生消息丢失、消息队列故障,导致部分数据无法同步到从库。通过补偿进程能够保证将这些数据最终都同步到从库。
在本实施例中,当Java应用层抓取到对主库进行增删改的操作后,将抓取到的增删改操作的同步状态修改为“待同步”/“待删除”,所述从库执行所述增删改的操作并同步完成后返回同步结果,同步结果包括“已同步”/“同步失败”/“删除失败”,根据同步结果更新同步状态,更新后的同步状态为“已同步”/“同步失败”/“删除失败”。
当Java应用层抓取到对主库进行增删改的操作后,同时将系统当前时间添加到抓取的增删改的操作中作为最后修改时间。添加系统时间到增删改的操作中的作用有两个:1、用于补偿过程判断长时间未能同步的数据。2、用于防止同步时顺序错乱。
当对从库进行更新操作时,本专利中,更新操作为SQL中的UPDATE,即增删改操作中的改。更新的数据的时间要晚于从库中对应数据的时间,否则,将该条更新数据抛弃;在更新从库数据时,若从库中不存在对应的记录,则将更新操作转换为插入操作对从库中增加该条记录。用于解决消息重复、顺序错乱的问题。
在本实施例中,补偿进程发现有未能同步到从库的增删改操作是通过同步状态、最后修改时间和当前时间确定的。同步状态为“待同步”/“待删除”且最后修改时间和当前时间大于预定的同步超时时间,则判断为未能同步到从库的增删改操作。
在本实施例中,当需要同步到多个从库时,将同步状态的字段改为变长字段,其中变长字段中每一位代表一个从库的更新状态。
在本实施例中,若Java应用层抓取对主库进行增删改的操作是删除操作,则对主库执行的删除操作改为更新操作,并更新同步状态为“待删除”,在同步进程将该删除操作在从库中执行完成后,再对主库进行删除操作,否则更新同步状态为“删除失败”。
在本实施例中,若对主库进行的增删改操作不是通过Java应用层抓取的对主库进行增删改的操作进行的,有些场合可能直接通过最初发出的增删改操作的命令执行的,则在对主库进行的增删改操作中增加同步状态和执行增删改操作的时间。
在本实施例中,实现实时关系型数据库数据同步的方法还包括异常监控进程查询步骤,当从库中执行增删改操作产生错误时,更新同步状态为“同步失败”,异常监控进程查询主库,如果存在同步失败的数据则报警,排除异常后,由补偿进程对从库进行再次同步,使从库中完成数据同步。具体的,在异常排除后将同步状态从“同步失败”更新为“待同步”,由补偿进程对从库进行再次同步。
上述实施方式为本发明的优选案例,并不用来限制本发明的保护范围。
Claims (10)
1.一种实现实时关系型数据库数据同步的方法,其特征在于,包括以下步骤:
同步过程:对主库数据进行增删改操作时,Java应用层抓取对主库进行增删改的操作,对主库执行所述增删改操作,并异步发送所述增删改的操作到消息队列,同步进程到从库中,所述从库执行所述增删改的操作;
补偿进程:设定定时检查时间,定时检查,若发现有超过预定时间还未能同步到所述从库的增删改操作,则重新将未同步到从库的数据的增删改操作同步到从库中直至从库中数据更新完成。
2.根据权利要求1所述的实现实时关系型数据库数据同步的方法,其特征在于:
抓取主库更新的数据时是Java应用程序通过ORM层插件抓取。
3.根据权利要求1所述的实现实时关系型数据库数据同步的方法,其特征在于:
所述消息队列为Kafka。
4.根据权利要求1所述的实现实时关系型数据库数据同步的方法,其特征在于:
当Java应用层抓取到对主库进行增删改的操作后,将抓取到的增删改操作的同步状态修改为“待同步”/“待删除”,所述从库执行所述增删改的操作并同步完成后返回同步结果,同步结果包括“已同步”/“同步失败”/“删除失败”,根据同步结果更新同步状态,
当Java应用层抓取到对主库进行增删改的操作后,同时将系统当前时间添加到抓取的增删改的操作中作为最后修改时间。
5.根据权利要求4所述的实现实时关系型数据库数据同步的方法,其特征在于:
当需要同步到多个从库时,将同步状态的字段改为变长字段,其中所述变长字段中每一位代表一个从库的更新状态。
6.根据权利要求4所述的实现实时关系型数据库数据同步的方法,其特征在于:
所述补偿进程发现有未能同步到所述从库的增删改操作是通过同步状态、最后修改时间和当前时间确定的。
7.根据权利要求4所述的实现实时关系型数据库数据同步的方法,其特征在于:
当对从库进行更新操作时,更新的数据的时间要晚于从库中对应数据的时间,否则,将该条更新数据抛弃;在更新从库数据时,若从库中不存在对应的记录,则将更新操作转换为插入操作对从库中增加该条记录。
8.根据权利要求1所述的实现实时关系型数据库数据同步的方法,其特征在于:
若Java应用层抓取对主库进行增删改的操作是删除操作,则对主库执行的删除操作改为更新操作,并更新同步状态为“待删除”,在同步进程将该删除操作在从库中执行完成后,再对主库进行删除操作,否则更新同步状态为“删除失败”。
9.根据权利要求1所述的实现实时关系型数据库数据同步的方法,其特征在于:
若对主库进行的增删改操作不是通过Java应用层抓取的对主库进行增删改的操作进行的,则在对主库进行的增删改操作中增加同步状态和执行增删改操作的时间。
10.根据权利要求1所述的实现实时关系型数据库数据同步的方法,其特征在于,还包括:
异常监控进程查询步骤,当从库中执行增删改操作产生错误时,更新同步状态为“同步失败”,异常监控进程查询主库,如果存在同步失败的数据则报警,排除异常后,由补偿进程对从库进行再次同步,使从库中完成数据同步。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110805505.5A CN113407638A (zh) | 2021-07-16 | 2021-07-16 | 实现实时关系型数据库数据同步的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110805505.5A CN113407638A (zh) | 2021-07-16 | 2021-07-16 | 实现实时关系型数据库数据同步的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113407638A true CN113407638A (zh) | 2021-09-17 |
Family
ID=77686957
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110805505.5A Pending CN113407638A (zh) | 2021-07-16 | 2021-07-16 | 实现实时关系型数据库数据同步的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113407638A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115599797A (zh) * | 2022-11-29 | 2023-01-13 | 广东通莞科技股份有限公司(Cn) | 基于操作日志的双向同步方法、装置和电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105989123A (zh) * | 2015-02-13 | 2016-10-05 | 阿里巴巴集团控股有限公司 | 一种数据同步方法、装置和系统 |
CN111046036A (zh) * | 2019-11-05 | 2020-04-21 | 深信服科技股份有限公司 | 数据同步方法、装置、系统及存储介质 |
CN111414403A (zh) * | 2020-03-20 | 2020-07-14 | 腾讯科技(深圳)有限公司 | 数据访问方法和装置、数据存储方法和装置 |
WO2020147392A1 (zh) * | 2019-01-16 | 2020-07-23 | 平安科技(深圳)有限公司 | 数据库之间的数据同步方法和系统 |
CN111797121A (zh) * | 2020-07-02 | 2020-10-20 | 中国工商银行股份有限公司 | 读写分离架构业务系统的强一致性查询方法、装置及系统 |
-
2021
- 2021-07-16 CN CN202110805505.5A patent/CN113407638A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105989123A (zh) * | 2015-02-13 | 2016-10-05 | 阿里巴巴集团控股有限公司 | 一种数据同步方法、装置和系统 |
WO2020147392A1 (zh) * | 2019-01-16 | 2020-07-23 | 平安科技(深圳)有限公司 | 数据库之间的数据同步方法和系统 |
CN111046036A (zh) * | 2019-11-05 | 2020-04-21 | 深信服科技股份有限公司 | 数据同步方法、装置、系统及存储介质 |
CN111414403A (zh) * | 2020-03-20 | 2020-07-14 | 腾讯科技(深圳)有限公司 | 数据访问方法和装置、数据存储方法和装置 |
CN111797121A (zh) * | 2020-07-02 | 2020-10-20 | 中国工商银行股份有限公司 | 读写分离架构业务系统的强一致性查询方法、装置及系统 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115599797A (zh) * | 2022-11-29 | 2023-01-13 | 广东通莞科技股份有限公司(Cn) | 基于操作日志的双向同步方法、装置和电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11914572B2 (en) | Adaptive query routing in a replicated database environment | |
US11327958B2 (en) | Table replication in a database environment | |
US20200356449A1 (en) | Transaction commit protocol with recoverable commit identifier | |
EP3413215B1 (en) | Dynamic snapshot isolation protocol selection | |
CN109992628B (zh) | 数据同步的方法、装置、服务器及计算机可读存储介质 | |
US7490113B2 (en) | Database log capture that publishes transactions to multiple targets to handle unavailable targets by separating the publishing of subscriptions and subsequently recombining the publishing | |
US9542468B2 (en) | Database management system and method for controlling synchronization between databases | |
EP2790112B1 (en) | Method and system for data synchronization and data access apparatus | |
CN105868343B (zh) | 数据库迁移方法及系统 | |
JP2022511084A (ja) | ブロックチェーン技術を用いてデータベースアプリケーションを増強するためのシステムおよび方法 | |
CN106776121B (zh) | 一种数据灾备装置、系统及方法 | |
CN109933632B (zh) | 一种数据库的数据迁移方法、装置及设备 | |
WO2021184679A1 (zh) | 持续数据保护系统及方法 | |
CN107391634B (zh) | 数据迁移方法及装置 | |
WO2022134876A1 (zh) | 数据同步方法、装置、电子设备、存储介质 | |
CN113391885A (zh) | 一种分布式事务处理系统 | |
KR102038529B1 (ko) | 인-메모리 데이터베이스의 실시간 데이터 변경 처리 시스템 | |
CN115794499B (zh) | 一种用于分布式块存储集群间双活复制数据的方法和系统 | |
CN115438122A (zh) | 数据异构同步系统 | |
CN113407638A (zh) | 实现实时关系型数据库数据同步的方法 | |
CN108038163B (zh) | 主备控制中心数据库同步系统 | |
US8918364B1 (en) | Online mirror state transitioning in databases | |
JPH0561748A (ja) | データベース・アクセスにおける同期確認の自動化方式 | |
CN118093721A (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
CN117076554A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210917 |
|
RJ01 | Rejection of invention patent application after publication |