用于处理大数据集的图表库

时间:2018-05-18 16:08:35

标签: java bigdata guava graph-algorithm hashset

我正在寻找一个能够以最佳方式处理大数据集的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不是我想要的,它不是这个问题的最佳设置。

我对所有建议持开放态度。

0 个答案:

没有答案