PSW平行式滑动窗口

GraphChi 由卡内基梅隆大学的 Aapo Kyrola 博士生开发,是GraphLab项目的一个分支。该框架能够在单机上完成大数据的图计算。GraphChi 借鉴 GraphLab 和 Pregel 两个项目,采用基于以顶点为中心的计算模型。GraphChi 的核心是名为 Parallel Sliding Windows (并行式滑动窗口,简称PSW)的模型,能够异步处理存储在硬盘上的可变图数据。

1. PSW模型1

PSW模型算法分为三个阶段:从硬盘载入数据、更新顶点和边、将更新写入到磁盘。作者对在介绍PSW时,以边权重可变的图作为示例,给定有向图G=(V, E)

载入数据阶段:顶点集V被分为P个不相交的子集 interval(i)。每个子集 intervals(i) 关联一个存储边信息的分区 shard,边的目标节点属于且仅属于子集 intervals(i),存储顺序按照源节点排序。shard 的大小以一次能够完全载入内存为最佳,可以通过设置 interval 个数进行调整。

GraphChi分区示意图

GraphChi 每次取一个节点子集 interval(i) ,根据子集中的点信息构造子图进行计算。例如,假设总共有P个分区,对于第p个节点子集,首先将分区 shard(p) 载入内存,该分区包含了关联 interval(p) 中节点的入边,然后在其他 P-1 个分区中读入关联 interval(p) 中节点的出边(注意,由于在 shard(i) 中存储的边按源节点排序,所以在每个分区 interval(i) 中与节点关联的出边都是连续存储的)。进行第p次操作后,更新的边/节点信息会在第p+1次操作时使用。直观上看,PSW算法执行完P个节点子集,就像在每个shard上进行滑动窗口操作。

滑动分区

并行更新节点:第p次操作所需的子图数据载入后,PSW对每个节点并行地执行用户定义的更新函数。此时,相邻节点进行更新操作时,可能会造成冲突。作者采用如下机制避免冲突的发生:如果一条边的两个端点在同一个子集中,则该端点将被标记。被标记的顶点将顺序执行更新操作,未被标记的顶点能够并行执行更新操作。顺序更新时,前一次更新的结果会作为下一次更新的输入。

将更新写入磁盘:PSW每次更新是对内存中的数据项性能更新,在对一个节点子集完成更新后,PSW将修改的块文件写入磁盘。

下图显示了GraphChi的执行流程

GraphChi执行流程图

2. PSW模型2

作者对上述模型进行修改使得PSW支持在图中增加/删除边的操作。

作者将每个分区shard分解为P个逻辑部分,part(j)包含以interval(j)中的顶点为源的边。作者增加了一个edge-buffer(p,j)结果关联 part(j) 和 shard(p)。当一个边被加入到图中,它首先加入到相应的edge-buff中。对于buff的管理包括写磁盘,切片等。

为了保证一致性,对于会影响当前interval的节点增删操作将在执行结束时更新。

posted @ 2012-08-26 18:25  asdffdas  阅读(858)  评论(0编辑  收藏  举报