簡體   English   中英

使用Java存儲和檢索大型數據集的最佳方法

[英]Best way to store and retrieve large data sets with Java

我目前正在開發一個Java項目,我必須在一個非常大的數據集上執行幾個信息檢索和分類任務。 一個小集合將有10K文件。 從每個文檔大約100個150維向量的雙打。 因此,大約有150個雙打或150個雙打的1M矢量。 存儲后我需要回憶所有這些或它們的百分比並執行聚類(例如KMEANS)。 實際的集合有更多的文檔(我目前正在處理200K文檔)。

當然我已經多次處理過OutOfMemoryError了,我問題的最后一個解決方案是存儲10個總大小> 5GB的巨大XML文件。 文件必須是10,因為DOM Writer的內存已滿。 為了閱讀,我使用SAX Parser完成了這項工作,而沒有將它們加載到內存中。 另外,將double存儲到任何類型的文本中會使其實際大小倍增,並增加解析和轉換的計算成本。 最后,聚類算法通常是迭代的,因此它們將一次又一次地需要相同的數據。 我的方法沒有緩存任何東西,它只是從磁盤讀取多次。

我現在正在尋找一種更緊湊的方式來存儲二進制格式的任何數據量(數據庫,原始二進制文件等)以及一種有效的讀取方式。 有人提出任何想法嗎?

嵌入式數據庫或鍵值存儲。 它們很多,例如JDBM3 以xml格式存儲多么奇怪的想法? 您可以使用標准序列化技術將數組轉儲到文件上。

我對你的情況不太確定,但對於我們的“大數據處理”需求,我們使用noSQL DB並且它工作得非常好。

不要將Derby用於此目的。 存儲超過500k條目非常慢並且使用太多內存

內存中的Datagrids可以解決您的問題。 有幾種開源解決方案可用(Hazelcast,Infinispan)。

我只使用了hazelcast - 所以不能告訴你關於其他的事情。

Hazelcast通過多個節點傳播數據。 查詢也分布在集群中的所有節點上。

暫無
暫無

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

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