2017-06-28 43 views
0

處理一個小例子,其中必須從 teradata數據庫將數百萬條記錄複製到Oracle數據庫。將具有數百萬條記錄的拷貝表從一個數據庫遷移到另一個數據庫 - Spring Boot + Spring JDBC

環境:春天引導+春JDBC(的JdbcTemplate)+ REST春春+ +計劃+ Maven的甲骨文+ Teradata的

使用Spring JDBC的BATCHUPDATE將數據插入到目標數據庫Oracle。

在源數據庫的SQL查詢中使用teradata的「top 1000」。

fecthDataResults = repository.queryForList(
       "select top 1000 A, B, C, D, E from " + schemaName + ".V_X"); 

從視圖「V_X」查詢。

這個視圖有4000萬條記錄,如果它運行,spring啓動應用程序將會窒息。

也插入目標Oracle DB中的2個表(主要和備份)。

什麼是最好的方式來獲取和加載/複製4000萬記錄,確保複製成功完成到2個表。

Spring Scheduler在指定的時間/間隔安排批量複製。 春季休息手動調用複製 - 這兩個都是實現的。

任何建議,將不勝感激。

謝謝。

+2

我會將它委託給原生的'imp/exp'腳本......但如果您需要在Java中執行此操作,則可以選擇Spring Batch + Spring JDBC操作('將頂部X選擇到Y')。 –

+0

從Teradata導出數據(CSV或其他格式) - > transform - >直接導入到oracle(使用SQL * Loader實用程序等工具)爲您提供一個選項?這樣你繞過彈簧應用 – Srinivas

+0

謝謝@Carlos。將Top X(1000)用於Y本身。現在必須檢查如何處理3600萬條記錄。 – Manish

回答

0

在您提供的信息和跟隨選定的堆棧的基礎上,我認爲您有兩種可能性,首先創建一個項目,另外使用彈簧批處理管理器或彈簧集成來處理休息以及spring batch。第二個實際上使用大數據概念中的第一個解決方案,使用Spring XD我建議您使用分析器儘可能地加快性能。

2

有不同的方法可以解決此:

  1. Logstash方法 - 指定您的源和目標數據和數據加載到這兩個目標的DB。它具有cron支持,並且logstash可以基於計劃運行。它比較快。您可以指定每次要提取的行數。

  2. 使用ETL工具。如果確實擁有生態系統,則可以使用任何開源版本。 Talend是一個很好的候選人,你可以設計你的工作並作爲可運行Jar導出。您可以使用您選擇的任何組件來安排此時間。

  3. Spring Batch。請參考這個問題。 Spring RESTful web services - High volume data processing

  4. 春季雲數據流或春天啓動了MQ作爲您的數據源之間的中間存儲。您可能必須引入消息隊列來處理故障轉移,回退機制。非常可靠,可以以異步方式實施。

我的個人意見是使用Logstash。如果你覺得上述任何解決方案都有意義。如果你願意,我可以詳細闡述它們。

相關問題