2014-07-08 57 views
1

在我們的應用程序devoloped在java-j2ee中,我們需要從客戶端上傳的文件中導入記錄。文件內容如下:上傳服務器上有數十億條記錄的文件,並在數據庫中插入記錄

id,email,name,last-name,text 
1,[email protected],John,Lives in LA 

......億萬文件中的這樣的記錄。

當上傳過程正在進行時,客戶端必須定期更新過程進度。

我們可以正確地上傳文件,但是插入其中的所有記錄也完成了。但現在我們希望它發生的時間最短。

建議的方法是,

    • 使用多線程叉加入
    • 多個線程
  • JMS

請建議。

回答

3

如果你想真正最短的時間內,在以塊的文件複製到服務器與數據庫(也許使用Java SCP實現,如果它是可用的),然後做你的數據庫的版本的LOAD DATA INFILE(這是MySQL的味道)。

更明智的做法是做批量插入。

建議的方法是,使用多線程,JMS

可能不會幫助。 JMS並沒有解決這個問題,並且當IO限制時(並非管道的大小或磁盤的速度真的是你所得到的),並行將無濟於事。

編輯:你可能如果你有一個讀取線程讀取文件和另一個執行數據庫訪問的寫入器線程(生產者/消費者),那麼看到多線程的好處。這可以幫助你的原因是你總是在閱讀,而你總是在寫作。如果你寫得對,你可以產生多個插入線程,所以你可以嘗試並行運行,看看它是否有幫助。

相關問題