tencent cloud

数据传输服务

动态与公告
产品动态
公告
产品简介
产品概述
数据迁移功能描述
数据同步功能描述
数据订阅(Kafka 版)功能描述
产品优势
支持的地域
规格说明
购买指南
计费概述
变更配置说明
欠费说明
退费说明
快速入门
数据迁移操作指导
数据同步操作指导
数据订阅操作指导(Kafka 版)
准备工作
业务评估
网络准备
添加 DTS IP 地址至对接数据库白名单
DTS 服务权限准备
数据库及权限准备
配置自建 MySQL 系的 Binlog
数据迁移
数据迁移支持的数据库
云数据库跨账号实例间迁移
迁移至 MySQL 系列
迁移至 PostgreSQL
迁移至 MongoDB
迁移至 SQL Server
迁移至腾讯云分布式缓存数据库
任务管理
数据同步
数据同步支持的数据库
云数据库跨账号实例间同步
同步至 MySQL 系列
同步至 PostgreSQL
同步至 MongoDB
同步至 Kafka
任务管理
数据订阅(Kafka 版)
数据订阅支持的数据库
MySQL 系列数据订阅
TDSQL PostgreSQL 数据订阅
MongoDB 数据订阅
任务管理
消费管理
前置校验不通过处理方法
检查项汇总
割接说明
监控与告警
支持的监控指标
告警通知功能
通过控制台配置指标告警和事件告警
通过 API 配置指标告警和事件告警
运维管理
配置系统维护时间
任务状态扭转说明
实践教程
本地数据库同步上云
构建双向同步数据结构
构建多对一同步数据结构
构建多活数据中心
数据同步冲突策略如何选择
使用 CLB 代理将其他账号下的数据库迁移至本账号下
通过云联网方式迁移自建数据库至腾讯云数据库
DTS 性能调优最佳实践
常见问题
数据迁移
数据同步
数据订阅 Kafka 版常见问题
数据订阅正则表达式
错误处理
常见错误处理
连通性测试不通过
校验项结果不通过或者出现警告
云联网接入配置源数据时无法选择子网
迁移慢或者进度卡住
数据同步有延时
数据订阅延迟过高
数据消费异常
API 文档
History
Introduction
API Category
Making API Requests
(NewDTS) Data Migration APIs
Data Sync APIs
Data Consistency Check APIs
(NewDTS) Data Subscription APIs
Data Types
Error Codes
DTS API 2018-03-30
相关协议
服务等级协议
文档数据传输服务实践教程数据同步冲突策略如何选择

数据同步冲突策略如何选择

PDF
聚焦模式
字号
最后更新时间: 2024-07-08 15:51:28

操作场景

DTS 支持多对一、一对多、联级单向、双向同步、联级双向同步等复杂拓扑结构,在复杂拓扑结构中,多个节点同时进行数据写入,可能会发生主键冲突问题,DTS 支持对主键冲突进行检测,并提供如下主键冲突的处理机制。
主键冲突策略
说明
冲突处理时 SQL 语句改写
冲突报错
同步任务中,源库插入(INSERT)主键数据与目标库存在冲突时,任务报错并暂停,需要用户手动处理后才能继续。
任务报错,不做 SQL 改写。
冲突忽略
同步任务中检测到源库的主键插入(INSERT)数据与目标库发生冲突时,忽略源库的主键插入数据,以目标库的内容为准。
INSERT 主键冲突时,将 INSERT 改写为 INSERT IGNORE。
冲突覆盖
同步任务中检测到源库的主键更新(INSERT 和 UPDATE)数据与目标库发生冲突时,用源库的主键数据覆盖目标的主键数据。
INSERT 主键冲突时,将 INSERT 改写为 REPLACE INTO;UPDATE 主键冲突时,将 UPDATE 改写为 DELETE + REPLACE INTO。

冲突策略应用示例

主键冲突策略仅对 INSERT 主键冲突和 UPDATE 主键冲突进行干预,其他不冲突的场景不干预,应用冲突策略后可以使任务报错提醒给用户或者继续运行。如下将为您示例这两种主键冲突场景,在设置不同的冲突策略后的结果。

INSERT 主键冲突

构建 A > B 的单向同步,ID 为主键数据。INSERT 主键后,数据同步到 B 上引起冲突,DTS 按照设置的冲突策略进行干预处理。



设置不同的冲突策略,最终同步后 B 上的结果如下。
冲突报错:任务报错,B 上的数据保持不变 (ID=1, Price=10)。
冲突忽略:忽略 A 的主键数据,B 上的数据保持不变(ID=1, Price=10)。
冲突覆盖:用 A 的主键数据覆盖 B 上的主键数据,B 上的结果为 (ID=1, Price=20)。

UPDATE 主键冲突

在某些场景下,用户可能会修改主键数据引起主键冲突,如下在 A 上 UPDATE 主键后(ID=1 -> ID=2),与 B 上本身的 ID 为2的主键数据冲突。

设置不同的冲突策略,最终同步后 B 上的结果如下。
冲突报错:任务报错,B 上的数据保持不变。
冲突忽略:任务报错,B 上的数据保持不变。请特别注意,这种情况下 DTS 不会进行干预。
冲突覆盖:用 A 的主键数据覆盖 B 上的主键数据,B 上仅存在主键为2的数据 (ID=2, Price=10)。

冲突策略与数据一致性

在两地三中心,异地多活等复杂数据架构中,会有三个或三个以上节点需要同时进行数据写入,保证多个节点的一致性至关重要。许多用户误以为可以通过主键冲突策略来保证数据以某一个节点为准进行更新,这是不合理。
例如在下图的双向同步场景中,A > B,B > A 都设置为冲突覆盖,在 A,B 节点上同时 INSERT 主键为1的数据,最终的结果是 A、B 上主键1的数据发生交换。

实际场景中要实现多节点数据一致性,一般通过划分主键分区,引入额外的协调机制(例如给数据增加版本号,实现按版本号覆盖的机制)等方法,单独靠冲突策略无法达到这一诉求。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈