有您的問題的關注的兩個層次:
這兩個數據庫之間的交易:
這很重要,因爲您會從源數據庫中刪除數據庫。必須確保只有在數據庫已成功存儲到Y時才從X中刪除數據。另一方面,您必須確保從X中刪除數據必須成功,以防止將相同的數據重新插入Y.
傳輸數據的表現:
如果X數據庫有每當傳入的數據,這是一個在線數據庫,它是不是一個好的做法,只是收集數據,商店Y,並刪除它們。計劃批量的大小時,程序會啓動該批次的事務;重複運行程序,直到X中的數據數量小於批量大小。
在這兩個數據庫中,您都應該添加一個表來記錄批處理。 處理中有三種狀態。
INIT - The start of batch, this value should be synchronized between two databases
COPIED - In database Y, the insertion of data and the update of this status should be in one transaction.
FINISH - In database X, the deletion of data and the update of this status should be in on transaction.
當編程運行時,它首先檢查「INIT」或「COPIED」狀態的批次,並重新啓動以處理該會話。
- 如果X有一個「INIT」記錄和Y不這樣做,只是插入相同INIT記錄到Y,然後執行插入到Y
- 如果Y中的記錄被「複製」和X是「INIT」,只需將X的狀態更新爲「COPIED」,然後執行X的刪除即可。
- 如果X中的記錄是「FINISH」且Y中的相應記錄是「COPIED」,只需更新Y的狀態爲「完成」。
總之,批量處理數據會讓您有機會優化兩個數據庫之間的這種傳輸。批量大小的數量決定了轉換的效率,並取決於兩個因素:其他操作同時使用的數據庫以及數據庫的調整參數。在一般情況下,Y的寫吞吐量可能是處理的瓶頸。
爲什麼不從第一個數據庫導出數據並將其導入到第二個數據庫? – 2010-12-23 12:30:14