簡述
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" 類型多種,則會導緻位點擷取或者斷點續傳出問題。