首页 > 解决方案 > 一台机器上的大图处理

问题描述

在普通用户计算机(通常为 8-16 GB RAM)上处理大图的算法是什么。

有一项任务是处理足够大的图(计算 PageRank),该图在给定条件下不完全适合操作内存。

我想知道为此存在哪些算法,或者从哪个方向开始学习更好?据我了解,分割图的算法可以帮助我解决这个问题,但目前还不是很清楚,因为不可能一次在程序中构建整个图。

也许有一些算法可以计算图表的每个单独部分的 PageRank,然后组合计数结果。

UPD:更具实质性。Pagerank在大图上计算存在问题。计数在Python程序中完成。基于使用的数据构建图表,networkx并将使用相同的数据执行 PageRank 计算networkx。问题是存在 RAM 限制,整个图不适合内存。所以我想知道是否有任何算法可以让我计算比原始图更小的图(子图?)的 PageRank?

标签: algorithmgraphnetworkxgraph-algorithmpagerank

解决方案


一般来说,如果图太大而无法放入内存,则必须将其划分为多个分区。

假设顶点可以放入内存并且边驻留在磁盘上。程序每次将边缘的一个分区加载到内存中,计算PageRank,然后再加载另一个分区。xstream 为这种情况提供了一个很好的解决方案:http: //sigops.org/s/conferences/sosp/2013/papers/p472-roy.pdf

一个更复杂的情况是顶点和边都无法放入内存,那么它们都需要多次加载到内存中。网格图很好地解决了这种情况:https ://www.usenix.org/system/files/conference/atc15/atc15-paper-zhu.pdf


推荐阅读