[英]how to handle large lists of data
我們有一個應用程序,其中,說的一部分,它需要超過內存限制的數據量巨大閱讀時間的20%。 雖然我們可以增加內存限制,但我們不願意這樣做,因為它需要在大多數情況下都沒有必要時進行高分配。
當我們達到這樣的峰值負載時,我們正在考慮使用自定義的java.util.List實現來假脫機到磁盤,但在較輕的情況下將保留在內存中。
數據一次加載到集合中,隨后迭代並處理,然后丟棄。 它不需要在集合中進行排序。
有沒有人對這種方法有利弊?
是否有一個開源產品提供這樣的List impl?
謝謝!
更新:
你真的需要使用List嗎? 編寫Iterator的實現(可能有助於擴展AbstractIterator ),而不是逐步執行數據。 然后,您可以使用該迭代器來使用這些有用的實用程序。 這些都不會導致大量數據急切地加載到內存中 - 相反,只有在迭代器處於高級狀態時才會從源中讀取記錄。
如果您正在處理大量數據,則可能需要考慮使用數據庫。
將其備份到數據庫並對項目進行延遲加載。
ORM框架可能是有序的。 這取決於您的使用情況。 這可能是相當直接的,或者是你最糟糕的噩夢很難從你所描述的內容中分辨出來。
我很樂觀,我認為使用ORM框架(如Hibernate)可以在大約3-5天內解決您的問題
在將數據讀入集合時是否正在進行排序/處理? 從哪里讀取?
如果它已經從磁盤讀取,是否可以直接從磁盤批量處理它,而不是完全將其讀入列表然后迭代? 數據如何相互依賴?
我還想問為什么你需要加載內存中的所有數據來處理它。 通常,您應該能夠在加載時進行處理,然后使用結果。 這將使實際數據保持在內存中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.