2012-06-19 49 views
0

我有一個超過20000個項目的大名單,從數據庫中提取並每天在一個簡單的基於控制檯的Java應用程序中處理它。在Java中處理來自數據庫的大列表

什麼是最好的方法來做到這一點。我是否應該以小集合的形式獲取列表並處理它,或者是否應該將完整列表提取到數組中並處理它。保持數組意味着巨大的內存需求。

注意:只有一列要處理。

處理手段,我必須將該列中的字符串作爲SOAP請求傳遞到其他位置。 20000項是長度爲15的字符串。

回答

1

這取決於。 20000並不是一個真正的大數字。如果您只處理20000個短字符串或數字,則內存要求不會太大。但是,如果它是20000的圖像有點大。

總是有一個折衷。多個數據塊意味着多次訪問數據庫。但單次旅行意味着更多的記憶。哪一個對你更重要?你的數據也可以分塊嗎?或者您是否需要例如記錄1才能夠處理記錄1000.

這些都是要考慮的事情。希望他們能幫助你找到最適合你的設計。

+0

20000長度爲15的字符串。多次旅行不是問題。數據可以被分塊,因爲所有數據都是獨立的。 –

+1

16位(2字節)*每個字符串15個字符* 20000個字符串只有大約600kb –

+0

@AkhilKNambiar在您的案例中,數據大小不夠大,無法讓您流汗。只需將其堵塞在適當的數據結構中,例如ArrayList。我寧願避免多次旅行。 – Shahzeb

0

糾正我如果我錯了,一點一點地取出它,並且還爲它提供回滾操作。

0

如果可以在數據庫級別完成工作,我會使用SQL sripts來完成工作,如果這不可能,我可以推薦您加載包含兩列的小部分數據,如ID列和需要的列待處理。

這將使你在這個過程中獲得更好的性能,如果你有任何崩潰,你不會丟失所有處理過的數據,但是在崩潰的情況下,你需要知道哪些數據集被處理,哪些不是,這可以完成使用第三欄或每輪保存最後處理的ID。