2014-11-24 63 views
5

我有超過10億項約1000列(矩陣)。但是對於95%列的唯一值比率小於百分之一,所以這個數據可以被歸類爲稀疏數據Java:如何有效地存儲稀疏數據

什麼是在Java中存儲這樣的數據的高效且便於使用的解決方案?

+0

您需要對此數據執行哪些操作? – 2014-11-24 11:14:57

+0

那麼,使用稀疏文件? – fge 2014-11-24 11:15:27

+0

@DavidSoroko商店和retrive。而已。無論如何,其他一切都是通過索引完成的 – 2014-11-24 11:16:43

回答

0

嗯,我想HashTable將這樣做最好的選擇... key-value對是高效的爲同一value即一個key多個value秒。

1

不知道你是否想過這件事。如果你真的有數十億行,即使你找到一種機制來有效地存儲你的稀疏矩陣,你仍然可能會在內存中保存那麼多的數據。

但是,您可以使用一個簡單的地圖,其關鍵字爲Pair,該地圖包含數據的行和列。

public class Pair<P, Q> { 

    public final P p; 
    public final Q q; 

    public Pair(P p, Q q) { 
     this.p = p; 
     this.q = q; 
    } 

    // TODO: Implement equals and hashCode. 
} 

class Datum { 
} 
// My sparse database. 
Map<Pair<Integer, Integer>, Datum> data = new HashMap<>(); 

這將使用接近最小的存儲空間,但不一定能解決您的問題。