一机大图处理

问题描述

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

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

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

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

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

解决方法

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

假设顶点可以放入内存并且边驻留在磁盘上。程序每次将边缘的一个分区加载到内存中,计算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