我有超過10億項約1000列(矩陣)。但是對於95%列的唯一值比率小於百分之一,所以這個數據可以被歸類爲稀疏數據。Java:如何有效地存儲稀疏數據
什麼是在Java中存儲這樣的數據的高效且便於使用的解決方案?
我有超過10億項約1000列(矩陣)。但是對於95%列的唯一值比率小於百分之一,所以這個數據可以被歸類爲稀疏數據。Java:如何有效地存儲稀疏數據
什麼是在Java中存儲這樣的數據的高效且便於使用的解決方案?
嗯,我想HashTable
將這樣做最好的選擇... key-value
對是高效的爲同一value
即一個key
多個value
秒。
不知道你是否想過這件事。如果你真的有數十億行,即使你找到一種機制來有效地存儲你的稀疏矩陣,你仍然可能會在內存中保存那麼多的數據。
但是,您可以使用一個簡單的地圖,其關鍵字爲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<>();
這將使用接近最小的存儲空間,但不一定能解決您的問題。
您需要對此數據執行哪些操作? – 2014-11-24 11:14:57
那麼,使用稀疏文件? – fge 2014-11-24 11:15:27
@DavidSoroko商店和retrive。而已。無論如何,其他一切都是通過索引完成的 – 2014-11-24 11:16:43