数据库同步有哪些方式?【怎么保障目标和源数据一致性】

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 数据库同步有哪些方式?【怎么保障目标和源数据一致性】

摘要

数据库同步有3大难题:

1是如何保障目标和源数据一致性;

2是异构数据库如何做数据类型转换,导致数据同步失败的原因常常是因为数据类型不一样;

3是在数据越实时越有价值的背景下,同步过程中能否做到实时同步。

一、几种主流的数据库同步方式

方式一:基于无侵入的日志模式(如Oracle redo、Mysql binlog)

基于日志的采集方式无需在源库端部署任务代理程序(Agent)及建任何表,对源数据库无侵入和影响压力;


方式二:基于时间戳

同步过程通过特定属性(如时间戳、自增序列)来识别新插入的数据,该方式实现最简单,但无法记录删除和更新,也不具备实时的能力;


方式三:基于触发器

基于数据库的触发器机制,当执行DML相关语句时,执行动作来捕获数据,该方式会降低系统能,因此大多数场景下,生产系统不允许添加触发器。


方式四:基于快照

基于快照的方式,可以通过比较源表和快照表来获得数据变化,但需要消耗大量存储空间和计算资源。


方式五:基于离线批处理

通过jdbc查询来批量获取数据,会进行数据表的大范围扫描和数据提取,会对数据库产生大量开销。


本文主要探讨无侵入的CDC模式,并以运用这种模式的数据库同步云工具 Tapdata Cloud 举例,你要问我为啥用它举例,原因只有一个:永久免费。


二、架构及工作原理

Tapdata Cloud包含两部分:


Tapdata Cloud Manager,TCM是Tapdata Cloud的管理端,负责agent实例的安装,同步任务的配置、分发、任务状态监测。

Tapdata agent,是Tapdata Cloud数据同步服务的执行实例,负责从TCM获取任务信息,通过流式技术从源系统获取数据、处理转换数据并发送到目标系统,并在任务执行过程中监测并上报任务状态至TCM。


9688e55b6b7043128398f942aabddbbb.png


有朋友可能会担心这个云平台会不会把我要同步的数据泄露出去?


从Tapdata Cloud 工作原理上可以看出:


同步实例节点单向连接管控端运行服务。 Tapdata agent实例节点对外不主动暴露网络信息,只会连接 TCM管理端服务,获取任务信息、上报状态信息。

用户部署的Tapdata agent实例节点和 TCM 通信链路采用 HTTPS 协议。

自建模式下,所有数据流转均发生在受用户管理的服务器和网络环境。

可见,数据同步过程中数据泄露的问题大可不必担忧。


三、全量同步和实时增量同步机制


Tapdata Cloud 这款云同步工具支持全量同步和实时增量同步,实现的过程如下图所示:


7ea6e5d5446843b9bd58e077c057ff37.png


四、源和目标

据 Tapdata Cloud 最新版本,目前支持了:


image.png


五、举例:Oracle 数据实时同步到 Elasticsearch

一般需要做全文检索的时候,会将 Oracle 数据实时同步到 Elasticsearch。


第一步:配置 Oracle 连接


点击 Tapdata Cloud 操作后台左侧菜单栏的【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,然后选择Oracle

76be2ff6316e470daf88ce2d7bd73a05.png

在打开的连接信息配置页面依次输入需要的配置信息


c918e064282c46e493c9ca165ebbe339.png



【连 接 名 称】:设置连接的名称,多个连接的名称不能重复

【数据库地址】:数据库 IP / Host

【端 口】:数据库端口

【数据库名称】:tapdata 数据库连接是以一个 db 为一个数据源。这里的 db 是指一个数据库实例中的 database,而不是一个 schema。

【账 号】:可以访问数据库的账号

【密 码】:数据库账号对应的密码

【时 间 时 区】:默认使用该数据库的时区;若指定时区,则使用指定后的时区设置


第二步:配置 Elasticsearch 连接


同第一步操作,点击左侧菜单栏的【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,然后选择Elasticsearch

10f19b0056dc4948a8bc65512f5a04ba.png


在打开的连接信息配置页面依次输入需要的配置信息,配置完成后测试连接保存即可。


e7ed762bc31a40bf8c05d10095c0f7db.png


第三步:建立同步任务,以全量+增量同步举例

进入Tapdata Cloud 操作后台任务管理页面,点击添加任务按钮进入任务设置流程

d921b4503f2e41eb98b85b914356ddcb.png


根据刚才建好的连接,选定源端与目标端。

271dcd1e2e414888965f8fc1bcf5797f.png




根据数据需求,选择需要同步的库、表,如果你对表名有修改需要,可以通过页面中的表名批量修改功能对目标端的表名进行批量设置.


62fade17b81c4dc7a2f1cf3b99145c2a.png


在以上选项设置完毕后,点击下方的全量+增量选项并点击确定按钮即可完成本次全量同步任务的配置,在点击确定后将自动返回任务管理页面,在任务管理页面中,点击右侧的启动按钮即可使Tapdata Agent 开始执行本次任务。在全量任务执行完毕后,Tapdata Agent 会自动进入增量同步状态。在该状态中,Tapdata Agent 会持续监听源端的数据变化(包括:写入、更新、删除),并实时的将这些数据变化写入目标端。

be3179b0cd0847a3b7332a6262f4adc6.png

点击任务监控可以打开任务执行详情页面,可以查看任务执行的具体信息。

f0b40d75595c41509e1edb658cd59258.png


同理,其他数据库的同步操作也跟上面步骤一致,比如几个常用的场景是:

• 从业务数据库到缓存数据库的实时同步

• 不停机迁移数据库

• 将主业务中心的数据实时同步至次业务中心

• 构建只读实例

• 构建异地灾备中心

• 构建异地多活


六、目标和源数据一致性


很多人都担心同步的数据可能没法和源数据一致,Tapdata Cloud 提供了数据校验功能,包括快速count校验、表全字段值校验和关联字段值校验三种校验方式。

• 快速count:仅对源表和目标表的行数进行count校验,速度极快,但是不会展示差异的具体字段内容。

• 全表字段值校验:会对源表和目标表的全部字段进行逐行校验,能查出所有字段的差异,但是速度慢。

• 关联字段值校验:只对源表和目标表的关联字段的值进行比对校验,速度快于全表字段值校验模式。

校验操作步骤

进入数据校验菜单,点击新建校验任务创建数据校验。

【选择任务】:选择一个历史同步任务

【校验类型】:可选 快速count校验、表全字段值校验和关联字段值校验

【校验任务名】:默认与选择的同步任务名字一样

【校验频次】:设置您的校验的执行频次

【单次校验】:只执行一次校验

【重复校验】:设置校验任务重复执行,支持设置校验执行的起止时间和校验间隔

【错误数据保存条数】:当出现校验不一致的数据时,不一致数据保存的最大条数。该数值会影响到差异校验,当错误数据条数超出设置的保存条数时,将无法进行差异校验。

【校验条件】:添加需要进行校验的表。点击自动添加会自动将任务下的所有表全部添加进来。


快速count校验


创建快速count校验时只需要选择到要校验的表,无需设置关联条件。


dccbe4ab167442c38bab4c44b85697dd.png


表全字段值校验

除了要选择待校验表外,还需要针对每一个表设置索引字段。

d4e5439b12f54553a8737dfdd5f864e4.png

在进行表全字段值校验时,还支持进行高级校验。通过高级校验可以添加JS校验逻辑,对源和目标的数据进行校验。

ba21a3cc90dc43f495e8fdc1485ba6b3.png

完整示例:以MongoDB查询示例

JavaScript

function validate(sourceRow){
    // 第1步
    var targetRow = target.executeQuery({database: "target",collection: "USER",filter: {USER_ID: sourceRow.USER_ID}});
    // 第2步
    if(sourceRow.USER_ID === targetRow[0].USER_ID){
        // 第3步
        return {result: 'passed',message: "",data: ""}
    }else{
        return {result: 'failed',message: "记录不一致",data: targetRow}
    }
}

78608353dcb14977971a7c2120e4fa59.png


关联字段值校验

创建关联字段值校验时,除了要选择待校验表外,还需要针对每一个表设置索引字段。

01f25e1be6684d31913ed8f8d54dd033.png

七、异构数据类型转换


在异构数据库之间做同步,类型转换是一大难题,也是导致数据同步失败的重要原因,Tapdata Cloud 类型映射功能,在系统推演的基础上,提供了人工调整的能力,这一点比其他数据同步工具都更方便使用。

86a211daa36343e5a2a77b61eefe3098.png


八、总结

为了达到数据实时要求,并且不对源库造成干扰,首选 CDC 模式。

现在市面上已经陆续出现了一些数据同步工具,完全没有必要自己撸代码了,免费的用起来不香吗?

希望上文的实操图文,对你的数据库同步有帮助,有数据库相关的问题可以随时跟我交流!

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
1月前
|
存储 缓存 数据库
解决缓存与数据库的数据一致性问题的终极指南
解决缓存与数据库的数据一致性问题的终极指南
134 63
|
2月前
|
消息中间件 canal 缓存
项目实战:一步步实现高效缓存与数据库的数据一致性方案
Hello,大家好!我是热爱分享技术的小米。今天探讨在个人项目中如何保证数据一致性,尤其是在缓存与数据库同步时面临的挑战。文中介绍了常见的CacheAside模式,以及结合消息队列和请求串行化的方法,确保数据一致性。通过不同方案的分析,希望能给大家带来启发。如果你对这些技术感兴趣,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!
136 6
项目实战:一步步实现高效缓存与数据库的数据一致性方案
|
2月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
3月前
|
运维 监控 NoSQL
【MongoDB 复制集秘籍】Secondary 同步慢怎么办?深度解析与实战指南,让你的数据库飞速同步!
【8月更文挑战第24天】本文通过一个具体案例探讨了MongoDB复制集中Secondary成员同步缓慢的问题。现象表现为数据延迟增加,影响业务运行。经分析,可能的原因包括硬件资源不足、网络状况不佳、复制日志错误等。解决策略涵盖优化硬件(如增加内存、升级CPU)、调整网络配置以减少延迟以及优化MongoDB配置(例如调整`oplogSize`、启用压缩)。通过这些方法可有效提升同步效率,保证系统的稳定性和性能。
84 4
|
6天前
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
15天前
|
算法 大数据 数据库
云计算与大数据平台的数据库迁移与同步
本文详细介绍了云计算与大数据平台的数据库迁移与同步的核心概念、算法原理、具体操作步骤、数学模型公式、代码实例及未来发展趋势与挑战。涵盖全量与增量迁移、一致性与异步复制等内容,旨在帮助读者全面了解并应对相关技术挑战。
26 3
ly~
|
1月前
|
存储 安全 网络安全
云数据库的安全性如何保障?
云数据库的安全性可通过多种方式保障,包括多因素身份验证、基于角色的访问控制及最小权限原则,确保仅有授权用户能访问所需数据;采用SSL/TLS加密传输和存储数据,加强密钥管理,防止数据泄露;定期备份数据并进行异地存储与恢复演练,确保数据完整性;通过审计日志、实时监控及安全分析,及时发现并应对潜在威胁;利用防火墙、入侵检测系统和VPN保护网络安全;选择信誉良好的云服务提供商,确保数据隔离及定期安全更新。
ly~
93 1
|
2月前
|
消息中间件 缓存 NoSQL
15)如何保证缓存和数据库之间的数据一致性
15)如何保证缓存和数据库之间的数据一致性
55 1
|
3月前
|
消息中间件 Kafka 数据库
深入理解Kafka的数据一致性原理及其与传统数据库的对比
【8月更文挑战第24天】在分布式系统中,确保数据一致性至关重要。传统数据库利用ACID原则保障事务完整性;相比之下,Kafka作为高性能消息队列,采用副本机制与日志结构确保数据一致性。通过同步所有副本上的数据、维护消息顺序以及支持生产者的幂等性操作,Kafka在不牺牲性能的前提下实现了高可用性和数据可靠性。这些特性使Kafka成为处理大规模数据流的理想工具。
73 6
|
3月前
|
C# 开发者 Windows
全面指南:WPF无障碍设计从入门到精通——让每一个用户都能无障碍地享受你的应用,从自动化属性到焦点导航的最佳实践
【8月更文挑战第31天】为了确保Windows Presentation Foundation (WPF) 应用程序对所有用户都具备无障碍性,开发者需关注无障碍设计原则。这不仅是法律要求,更是社会责任,旨在让技术更人性化,惠及包括视障、听障及行动受限等用户群体。
79 0