2011-05-17 92 views
4

我們有一個從各種外部系統更新的源表。我需要目標表(在不同的服務器上)與此源表同步。目標表不是源表的精確副本,因此在將數據插入/更新到目標表之前必須完成一些數據處理。用java同步兩臺不同服務器的方法

我已經想好了下面的邏輯

我們每次運行的地方獲取比以前的更新所造成的時間戳和存儲在CachedRowSet記錄這個Java代碼消費的15分鐘。並使用CachedRowSet作爲參數調用存儲過程,其中數據處理已完成,並將數據插入/更新到目標表中。

你相信上面提到的是一種有效的方式,因爲每次更新都要處理超過一百萬條記錄嗎?

另外當一個記錄在源表中被刪除時將不會被上面的方法複製!你能建議在這種情況下怎麼做

+1

當你這樣做基於時間戳的同步,你應該確保兩個服務器也從同一(NTP)服務器同步的時鐘...我寧願設置一個主 - 從設備,複製遠程位置上的數據,根據需要處理它(存儲便宜,並且可以將所有同步問題留給數據庫本身),然後將處理後的數據存儲在單獨的桌子。 – wimvds 2011-05-17 08:34:00

回答

1

一些類似於數據庫用於保存點和回滾的技術。 每當源表格發生一些變化時,例如CRUD。根據目標表所需的格式保留更改的腳本。您可以定期將這些更改推送到目標服務器。由於您的源表由各種外部系統更新,因此您需要在源表上使用觸發器來保留腳本日誌。

0

你可能想從Maatkit工具檢查出MK-表同步:

http://www.maatkit.org/doc/mk-table-sync.html

你需要是在你的桌子差異小心。

+0

mk-table-sync是一個Perl實現。從尋找基於JAVA的解決方案的問題用戶。 – Azi 2012-11-19 06:30:33

+0

Java可以調用命令行腳本。給出使用開源工具的選擇,或者從頭開始重寫,我想我想知道這個工具。這看起來比較棘手。 – 2012-11-19 14:27:01