假设我有一个很大的无向非加权图(从数以亿计的顶点开始,每个顶点约有10个边),非分布式并仅由单线程处理,并且我想对其进行广度优先搜索。我期望它们是I/O绑定的,因此我需要一个好的BFS磁盘页面布局,磁盘空间不是问题。搜索可以以相等的概率在每个顶点开始。直观地说,这意味着最小化不同磁盘页面顶点之间的边数,这是一个图分区问题。在磁盘/流图分区算法中存储非常大的图?
该图本身看起来像一个意大利面条,想到任意随机连接的点的集合,有一些偏向于较短的边缘。
问题是,一个分区图怎么这么大?我发现可用的图形分割器只适用于内存。我找不到任何流式图分区算法的描述和实现。
或者,也许有另一种分区图来获得与BFS良好配合的磁盘布局?
现在作为一个近似我使用的事实是,顶点有空间坐标附加到他们,并把顶点在希尔伯特排列顺序在磁盘上。这样,空间上靠近的顶点落在同一页面上,但它们之间边缘的存在或不存在完全被忽略。我可以做得更好吗?
作为一种替代方法,我可以使用希尔伯特排序顺序将图分割为多个顶点,划分子图,将它们缝合并接受缝隙上的不良分区。
有些事情,我都看着已经:
- How to store a large directed unweighted graph with billions of nodes and vertices
- http://neo4j.org/ - 我发现它是如何做图形布局上盘
分区实现零信息(除非我错误,他们都需要将图表合并到内存中):
- http://glaros.dtc.umn.edu/gkhome/views/metis
- http://www.sandia.gov/~bahendr/chaco.html
- http://staffweb.cms.gre.ac.uk/~c.walshaw/jostle/
- http://www.cerfacs.fr/algor/Softs/MESHPART/
编辑:上图的样子和BFS随处启动信息。 编辑:划分子图的想法
感谢您提供有趣想法的详细解答。我会尝试使用邻域方法,但是我不知道我能否从中获得更多的结果,因为在我的案例中,图形拓扑结构相当“敌对”。无论如何,应该是对我目前希尔伯特排序方法的改进。 – 2010-02-01 10:25:12
如果拓扑过于敌对,那么可以做的事情就不多了:链接本质上会带你到数据中的一个随机位置,并且没有巧妙的分页可以提供帮助。最好只是有一个很好的方法来找到磁盘上/文件中的那个点。或者,如果查询倾向于重复,请考虑缓存以前的结果。 – 2010-02-01 13:59:31