3 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果你不想改動(dòng)數(shù)據(jù)的話。
你可以在數(shù)據(jù)庫表上部署觸發(fā)器,通過觸發(fā)器將CUD操作的數(shù)據(jù)捕獲并保存到到臨時(shí)中間表,每條記錄需要有操作屬性,Insert Delete Update .
然后通過間隔調(diào)度任務(wù)讀取中間表變化數(shù)據(jù) 封裝為JMS消息,進(jìn)行傳輸。
如果你連觸發(fā)器和掃描增量表的的任務(wù)代碼你都不愿意寫。
那我推薦你使用kettle+ActiveMQ 組合方案。
kettle開源的ETL工具,負(fù)責(zé)增強(qiáng)變化數(shù)據(jù)提取,并通過內(nèi)置的調(diào)度任務(wù)執(zhí)行,封裝數(shù)據(jù)為JMS消息。交給ActiveMQ 的隊(duì)列通道進(jìn)行路由傳輸

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊
建議的方式是使用專門的數(shù)據(jù)同步中間件,因?yàn)榭绲赜颉C(jī)房的同步涉及到很多的問題:網(wǎng)絡(luò)、安全、傳輸速度、數(shù)據(jù)沖突等。
我在做選型的時(shí)候看過這樣幾個(gè):
1、tungsten-replicator:有點(diǎn)類似于MySQL的主從同步,雙向同步可能是不支持的;
2、SymmetricDS:基于觸發(fā)器&SQL方式監(jiān)控變更;
3、阿里的Otter&Canal:基于BinLog或RedoLog的方式進(jìn)行數(shù)據(jù)復(fù)制,功能比較強(qiáng)大,但是最好閱讀下源代碼再用。
對(duì)比了之后還是覺得Otter更好用一些,No.1和.2自己都需要做很多額外的工作,并且Otter的同步效率比較高(大概是MySQL主從同步效率的十幾倍)。監(jiān)控、管理、最小同步單位可以控制到列、對(duì)數(shù)據(jù)沖突處理也有相應(yīng)的支持(但是這塊沒有測(cè)試過)、異構(gòu)數(shù)據(jù)庫也是可以的。 但是開源的版本貌似是不支持Oracle的。。。。。
總體上看有兩種思路:
1、框架思路:即在框架上做文章,應(yīng)用A使用框架X的時(shí)候,X同時(shí)負(fù)責(zé)發(fā)送一份數(shù)據(jù)給目標(biāo)節(jié)點(diǎn);
2、數(shù)據(jù)庫同步思路:即框架是不限制的,只是控制數(shù)據(jù)庫層面的復(fù)制工作
如果No.2有成形的產(chǎn)品,還是No.2簡(jiǎn)單一些,No.1需要處理的工作更復(fù)雜,且對(duì)應(yīng)用有一定的侵入,但是好處是適應(yīng)性比較好(比如可以同步數(shù)據(jù)庫以外的數(shù)據(jù),如緩存)

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果是用hibernate的話,可以看看hibernate的事件監(jiān)聽,例如保存(提交前)事件!
這樣只要在這個(gè)事件中調(diào)用MQ發(fā)送消息!
如果不是用hibernate的話,可以看看有沒有類似的監(jiān)聽器可以使用!
- 3 回答
- 0 關(guān)注
- 179 瀏覽
添加回答
舉報(bào)