简述
MongoDB 是一种宽泛应用的文档型数据库,对于 schema 弱要求、可扩展性强让其在很多场景广泛实用。
本文次要介绍如何应用 CloudCanal 疾速构建一条稳固高效运行的 MongoDB 到 MongoDB 数据同步链路,示例中 MongoDB 均为 ReplicationSet (正本集) 。
技术点
MongoDB 源端增量技术
MongoDB 增量数据能够通过 local 库的 oplog.rs collection 获取增量变更数据(须要搭正本集)。
其中事件蕴含以下子 Document (不同版本 MongoDB 有些许差别), CloudCanal 通过解析事件记录同步增量数据
子 document 名字 | 数据含意 |
---|---|
op | 操作类型, CloudCanal反对的类型包含:c (管制操作) , i (INSERT) , u (UPDATE),d (DELETE) |
ns | 命名空间(namespace) , 格局为 dbName.collectionName , 其中 collectionName 能够为 $cmd , 则示意在对应数据库上的操作 |
ts | 执行操作的事件戳,单位秒 |
o | 变更的数据,对应 INSERT/UPDATE 后镜像数据,DELETE 为前镜像数据,须要留神的是,MongoDB 4.x 版本和其余版本在这个 Document 有所不一样 |
o2 | 只在 UPDATE 事件中有值,能够认为是主键或者定位数据的标识符 |
MongoDB 的数据类型反对
CloudCanal 从 2021 年 8 月份反对 MongoDB 开始,经验多个版本迭代,逐渐丰盛了对 MongoDB 数据类型的反对。
无论间接从 MongoDB 做全量迁徙,还是生产 oplog 进行增量同步,类型转换对自定义代码解决和上游数据源写入都有重要意义。
从 MongoDB 全量读取反对的类型包含: null,ObjectId,Date,Number,String
从 MongoDB oplog 增量同步反对的类型包含:ObjectId,Date,Number,String,Integer,Long,BigInteger,Double,BigDecimal
以上类型并不是起点,随着越来越多用户应用,一直扩大中 。
操作示例
前置条件
- 登陆 CloudCanal SaaS版,应用参见疾速上手文档
- 筹备好 2 个 MongoDB 实例(本例应用阿里云 MongoDB 4.2 和 5.0 ,模仿用户 MongoDB 实例版本升级)
登录 CloudCanal 平台 ,增加 MongoDB
- 创立一条 MySQL -> MongoDB 链路作为增量数据起源
工作创立
- 工作治理->工作创立
- 测试链接并抉择 源 和 指标 数据库
点击下一步
抉择 数据同步,并勾选 全量数据初始化, 其余选项默认
抉择须要迁徙同步的 collection
确认创立工作
工作主动做构造迁徙、全量迁徙、增量同步
校验数据
程序造数据,采纳 MySQL -> MongoDB -> MongoDB
- 工作失常运行一段时间后,进行造数据
点击 MongoDB -> MongoDB 工作详情,更多 > 创立类似工作 ,第二步抉择 数据校验
数据校验 OK
常见问题
目前对 sharding 版本的 MongoDB 反对如何?
CloudCanal 反对 MongoDB sharding 版本,如果作为源端,须要一一配置底下正本集实例,也就是迁徙同步工作存在多个,作为对端,则将 sharding 实例当作单个实例写入即可。
单个 collection 蕴含多种主键数据怎么办?
CloudCanal 全量迁徙是通过 "id" 进行分页扫描进行,所以如果 "id" 类型多种,则会导致位点获取或者断点续传出问题。
后续针对这种状况,咱们思考应用无主键形式进行解决。
反对其余对端数据源么?
目前凋谢 MongoDB 到 Kafka , MySQL,TiDB, MongoDB,如果各位有需要,能够在社区反馈给咱们。
总结
本文简略介绍了如何应用 CloudCanal 进行 MongoDB -> MongoDB 数据迁徙同步。各位读者敌人,如果你感觉还不错,请点赞、评论加转发吧。