我有一个巨大的图(例如300000个节点和1000000条边(,我正在Ubuntu机器上使用Python进行分析,该机器有32GB的RAM和4个CPU核心。
我发现图形工具是测量介数中心性的一个非常有效的工具(加权版本(,比Networkx快得多。然而,问题是在内存中加载如此巨大的图会导致我的应用程序(内存不足(死亡。
出于这个原因,我正在考虑切换到Neo4j,以存储图并计算介数中心性。
你能帮我回答以下问题吗?
- Neo4j是否允许我直接计算加权介数中心性(最短路径是在考虑边缘权重的情况下计算的(,并有可能将每个节点的结果传递给Python
- 使用Neo4j进行计算会让我免于内存不足的杀戮吗?还是这个问题会持续下去
- 我找不到任何性能比较。在图形工具中还是在Neo4j中计算介数更快?差多少
- 有没有一个我没有考虑过的更好的办法来解决我的问题
由于您需要在大型图上重新加权介数中心性算法,因此您可能对GraphScope感兴趣。这是描述:
GraphScope是一个统一的分布式图形计算平台,通过用户友好的Python接口,为在计算机集群上执行各种图形操作提供了一站式环境。GraphScope结合了阿里巴巴的几项重要技术,使计算集群上大规模图形数据的多阶段处理变得简单:分别用于分析、交互和图形神经网络(GNN(计算的GRAPE、GraphCompute和GraphLearn(GL(。
以下是GraphScope:的快速启动
# install graphscope by pip
pip3 install graphscope
>>> import graphscope
>>> graphscope.set_option(show_log=True)
>>>
>>> # load graph
>>> from graphscope.dataset import load_p2p_network
>>> g = load_p2p_network()
>>>
>>> # run betweenness_centrality algorithm
>>> pg = g.project(vertices={"host": []}, edges={"connect": []})
>>> c = graphscope.flash.betweenness_centrality(pg, source=1)
有关更多信息,请参阅如何在本地运行和开发GraphScope和GraphScope文档。