簡體   English   中英

如何處理大型數據列表

[英]how to handle large lists of data

我們有一個應用程序,其中,說的一部分,它需要超過內存限制的數據量巨大閱讀時間的20%。 雖然我們可以增加內存限制,但我們不願意這樣做,因為它需要在大多數情況下都沒有必要時進行高分配。

當我們達到這樣的峰值負載時,我們正在考慮使用自定義的java.util.List實現來假脫機到磁盤,但在較輕的情況下將保留在內存中。

數據一次加載到集合中,隨后迭代並處理,然后丟棄。 它不需要在集合中進行排序。

有沒有人對這種方法有利弊?

是否有一個開源產品提供這樣的List impl?

謝謝!

更新:

  • 不是厚顏無恥,而是“巨大”,我的意思是超出我們願意分配的內存量,而不會干擾同一硬件上的其他進程。 你需要什么其他細節?
  • 該應用程序本質上是一個批處理器,它從多個數據庫表中加載數據並在其上執行廣泛的業務邏輯。 列表中的所有數據都是必需的,因為聚合操作是完成邏輯的一部分。
  • 我剛剛看到這篇文章提供了一個非常好的選擇: STXXL相當於Java

你真的需要使用List嗎? 編寫Iterator的實現(可能有助於擴展AbstractIterator ),而不是逐步執行數據。 然后,您可以使用該迭代器來使用這些有用的實用程序。 這些都不會導致大量數據急切地加載到內存中 - 相反,只有在迭代器處於高級狀態時才會從源中讀取記錄。

如果您正在處理大量數據,則可能需要考慮使用數據庫。

將其備份到數據庫並對項目進行延遲加載。

ORM框架可能是有序的。 這取決於您的使用情況。 這可能是相當直接的,或者是你最糟糕的噩夢很難從你所描述的內容中分辨出來。

我很樂觀,我認為使用ORM框架(如Hibernate)可以在大約3-5天內解決您的問題

在將數據讀入集合時是否正在進行排序/處理? 從哪里讀取?

如果它已經從磁盤讀取,是否可以直接從磁盤批量處理它,而不是完全將其讀入列表然后迭代? 數據如何相互依賴?

我還想問為什么你需要加載內存中的所有數據來處理它。 通常,您應該能夠在加載時進行處理,然后使用結果。 這將使實際數據保持在內存中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM