我有超过10亿个项目,大约有1000列(矩阵)。但是对于95%的列,唯一值比率小于1%,因此可以将这些数据归类为稀疏数据。
在Java中,存储这样的数据的有效且已准备就绪的解决方案是什么?
我有超过10亿个项目,大约有1000列(矩阵)。但是对于95%的列,唯一值比率小于1%,因此可以将这些数据归类为稀疏数据。
在Java中,存储这样的数据的有效且已准备就绪的解决方案是什么?
不确定你是否考虑过这个问题。如果你真的有数十亿行数据,即使你找到了一种高效存储稀疏矩阵的机制,你在内存中存储那么多数据可能会遇到问题。
然而,你可以使用一个简单的映射表,其键是包含数据行和列的 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<>();
我认为哈希表
是实现此目的的最佳选择... 键值对
对于相同的值
非常有效,即一个键
对应多个值
。