简述
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 数据迁徙同步。各位读者敌人,如果你感觉还不错,请点赞、评论加转发吧。