定時從一個資料庫表中的資料儲存到另外一個資料庫中的表,而且怎麼處理重複的資料?...

weixin_34054866發表於2014-12-17

原文: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上。 

這裡,說明一下,需要同步的表是每隔一段時間會重新建立的,比如天表、月表等,所以一個表不會超級大,達到記憶體無法消化的地步,所以這個記憶體資料庫的臨時表也是有一定的容量的。 

可能還有更好的方式,不過,中間表或中間檔案記錄應該還是要的。
 
 

相關文章