我的公司從Cerner Multum獲取Microsoft Access數據庫,這需要根據我們的生產後端(即Sybase(12.0.1.3924))進行區分。雖然我意識到現成的數據庫差異工具(http://www.diffkit.org/,http://www.liquibase.org/),但似乎沒有一個符合我的需要 - 因此,我決定編寫一個Java工具來執行作爲概念驗證的工作。多線程數據庫比較的正確方法
目前的情況是,該工具目前正在按設計,和這裏的程序:
- 獲取表的列表從一個配置文件
- 顯示差異,建立雙方後端連接
- 確保在配置文件中的表可以針對這兩個MS訪問和Sybase
- 如果是這樣相匹配,使用diff進行:
- 對於每個表:
- 獲取從MS Access一排,通過反射實例化對象
- 遍歷行中的每一列中,填充數據到新創建的「訪問」 POJO
- 使用訪問POJO,構建用於Sybase的查詢
- 查詢的Sybase:
- 如果結果集爲空,在Sybase 插入一條記錄
- 如果結果集不爲空,實例化另一個POJO和東西Sybase數據進去。
- 比較兩個POJO:
- 如果POJO匹配:不執行任何操作,請轉到下一行。
- 如果POJO的不匹配:使用從訪問POJO
- 對於每個表:
現在的規定,這是目前完成工作的數據在一個非常執行更新到Sybase,儘管程序,單線程方式,其中有我的問題:以多線程的方式來區分兩個數據庫(這恰好是不相關的)的正確方法是什麼?
我有一些多線程的經驗,但我不確定正確的方法,因爲我從來沒有排隊插入/更新。這就是說,我並不完全確定排隊是正確的方法 - 那麼批量更新/插入是如何呢?
在這方面有一些經驗的人會提供一些關於如何解決這個問題的高層次的見解?就目前來看,我在大約2個小時內攪動了1.5m行,大約200 TPS。非常慢。任何指導將不勝感激,如果有必要,我會很樂意提供更多信息。
另請參閱http://stackoverflow.com/a/29502316/32453 – rogerdpack