简述
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 数据迁移同步。各位读者朋友,如果你觉得还不错,请点赞、评论加转发吧。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。