Java:如何高效地存储稀疏数据

5

我有超过10亿个项目,大约有1000列(矩阵)。但是对于95%的列,唯一值比率小于1%,因此可以将这些数据归类为稀疏数据

在Java中,存储这样的数据的有效且已准备就绪的解决方案是什么?


你需要对这些数据执行哪些操作? - David Soroko
使用稀疏文件吗? - fge
@DavidSoroko 存储和检索。没有其他的了。其他所有操作都是通过索引完成的。 - Denis Kulagin
你能把整个东西加载到堆上吗? - David Soroko
2个回答

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<>();

这将使用接近最小的存储空间,但不一定解决您的问题。

0

我认为哈希表是实现此目的的最佳选择... 键值对对于相同的非常有效,即一个对应多个


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接