記錄一次千萬列表 5 分鐘、15 GB 資料庫半小時的異構遷移實戰,架構採「雙執行端 + 單接收端」,解決編碼、效能與一致性難題。
cpan DBD::mysql # 或 yum install perl-DBD-MySQL
yum install unixODBC unixODBC-devel freetds freetds-devel
# /etc/odbcinst.ini 註冊 FreeTDS 驅動
# /etc/odbc.ini 定義 DSN 指向 SQL Server
繞過 SQL 層直接存取 InnoDB,寫入延遲極低。編譯 MySQL 時需 -DWITH_HANDLERSOCKET=1 或另行編譯 plugin。
datetime→DATETIME、uniqueidentifier→CHAR(36)、GIS 欄位轉 WKB)。| 資料量 | 耗時 | 備註 |
|---|---|---|
| 1,000 萬列單表 | ~5 分鐘 | 4 執行端平行 |
| 3 GB 整庫 | ~30 分鐘 | |
| 15 GB 整庫 | ~5 小時 | 含索引建立 |
text/ntext/image → MySQL TEXT/BLOB,需分塊讀寫防止記憶體暴增。ALTER TABLE ... AUTO_INCREMENT=最大值+1。INSERT ... ON DUPLICATE KEY UPDATE。此架構在「異構、大量、低延遲」三重約束下經過生產驗證,可作為類似遷移專案的參考藍圖。