我正在寻找一个能够以最佳方式处理大数据集的Java库,无论是内存还是性能。
这是我的要求。这是最终图形必须包含的其中一个节点的内容的早期描述:
public final class CategoryNode {
private int nbPages;
private int nbSubCats;
private String label;
CategoryNode(String label) {
this.label = label;
}
/** Getters/Setters **/
public int getNbPages() {
return nbPages;
}
public void setNbPages(int nbPages) {
this.nbPages = nbPages;
}
//
public int getNbSubCats() {
return nbSubCats;
}
public void setNbSubCats(int nbSubCats) {
this.nbSubCats = nbSubCats;
}
//
public String getLabel() {
return label;
}
@Override
public int hashCode() {
return label.hashCode();
}
@Override
public boolean equals(Object o) {
return ((CategoryNode) o).getLabel().equals(label);
}
}
最终图表将包含至少180万个节点,以及至少2亿个边缘。该图是有向无值图,并且不允许平行边。该图表将完全存储在RAM中。
两个主要操作如下:
1)按标签
检索节点2)检索每个节点的后继者和前任
如果可能,对于操作1),我想使用库的内置组件而不是外部集,这在内存方面非常昂贵。
我已经尝试过:
A)仅使用本机java集合( HashSet 和 HashMap ),但没有太大成功:创建的内存结构太大了访问时间不是最佳的。
B)使用 Koloboke (对于侧面索引)和 Guava图表。仍然使用了大量内存,我宁愿不必在项目中添加太多依赖项。
C)仅使用番石榴图。 ImmutableMap不是我想要的,它不是这个问题的最佳设置。
我对所有建议持开放态度。