原文:http://www.iteye.com/problems/77856
定時從一個資料庫表中的資料儲存到另外一個資料庫中的表,而且怎麼處理重複的資料?
表結構肯定是不能破壞,但是臨時表如果是自己的資料庫還行,問題是這個Oracle資料庫是客戶的資料庫呢,你不能在他的資料庫做任何多餘的操作吧?還有別的更好的方法嗎?
這個真的是比較困難。
首先,你要從客戶機oracle取資料,因為這1分鐘間隔之內不知道使用者機新增加了哪些資料(大部分情況下是使用者使用別的系統插入資料,而你又沒有這個系統的程式介面),所以你只能全部取出來,依靠自己的程式去同步資料。
我見過的做法是:
假設使用者機是A(Oracle),你的java應用部署在B機器上,sybase資料庫在C機器上。
(1)B機器上安裝一個記憶體資料庫(有一個開源的H2記憶體資料庫)
(2)獲取A(Oracle)的全部資料,如果B機器的記憶體不大,那麼分批獲取也可以,與B機器上的記憶體資料庫中的臨時儲存表Temp做hash join,得到增量資料。
(3)把增量資料同步到B機器的記憶體資料庫和C機器的sybase上。
這裡,說明一下,需要同步的表是每隔一段時間會重新建立的,比如天表、月表等,所以一個表不會超級大,達到記憶體無法消化的地步,所以這個記憶體資料庫的臨時表也是有一定的容量的。
可能還有更好的方式,不過,中間表或中間檔案記錄應該還是要的。
這個真的是比較困難。
首先,你要從客戶機oracle取資料,因為這1分鐘間隔之內不知道使用者機新增加了哪些資料(大部分情況下是使用者使用別的系統插入資料,而你又沒有這個系統的程式介面),所以你只能全部取出來,依靠自己的程式去同步資料。
我見過的做法是:
假設使用者機是A(Oracle),你的java應用部署在B機器上,sybase資料庫在C機器上。
(1)B機器上安裝一個記憶體資料庫(有一個開源的H2記憶體資料庫)
(2)獲取A(Oracle)的全部資料,如果B機器的記憶體不大,那麼分批獲取也可以,與B機器上的記憶體資料庫中的臨時儲存表Temp做hash join,得到增量資料。
(3)把增量資料同步到B機器的記憶體資料庫和C機器的sybase上。
這裡,說明一下,需要同步的表是每隔一段時間會重新建立的,比如天表、月表等,所以一個表不會超級大,達到記憶體無法消化的地步,所以這個記憶體資料庫的臨時表也是有一定的容量的。
可能還有更好的方式,不過,中間表或中間檔案記錄應該還是要的。