公司 A 需將數據寫入公司 B,雙方表結構不一致(字段名、類型、粒度均可能不同),需建立映射轉換層完成遷移。
PreparedStatement.addBatch / 臨時表 + LOAD DATA)。mappings:
- source: "a.user_table"
target: "b.client_table"
fields:
- {src: "uid", tgt: "client_id", type: "long"}
- {src: "nick_name", tgt: "name", type: "string", transform: "trim"}
- {src: "reg_time", tgt: "created_at", type: "timestamp", transform: "toMillis"}
SELECT / INSERT SQL,便於維護與擴展。| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| 純 Java JDBC + 批處理 | 零依賴、完全可控 | 開發量大、需自行處理斷點續傳 | 數據量 < 100 萬、規則簡單 |
| Spring Batch | 框架級支援:Chunk、重試、監聽、分區 | 學習曲線陡峭 | 企業級定時遷移、大數據量 |
| DataX (阿里開源) | 插件化 Reader/Writer、分布式、Web UI | 部署相對複雜 | 異構數據源同步、生產級 ETL |
| Kettle (PDI) | 可視化拖拽、豐富轉換組件 | 引擎較重、調試不便 | BI 團隊主導、非程序員維護 |
ON DUPLICATE KEY UPDATE / MERGE,支援重跑;updated_at / version 字段,配合水位線表實現增量抽取;「直接在數據庫操作」雖快但難維護,**配置驅動 + 成熟 ETL 框架** 是長遠之計。小項目可用 Spring Batch,大規模異構同步首選 DataX。