本文是“图计算系统发展简史”系列文章的第五篇也是最后一篇,将介绍之前没有提及的图计算系统相关或是细分领域的一些工作。
图计算语言
之前我们提到的所有图计算系统都需要用户使用如C++、Java等程序设计语言来描述计算过程,很多时候不得不写比较长的代码,并且不同的系统通常有不同的API,可移植性非常低。因此,一个很自然的想法出现了:为什么不创建一套专门面向图计算的领域专用语言呢?
Green-Marl是首个这样的尝试,并且已被Oracle采纳用于部分产品/场景。除了编程语言所需的基本元素,Green-Marl补充了很多图计算需要的特定功能,例如顶点/边的描述,基于DFS/BFS的算子等等。根据用户的需要,同一个Green-Marl程序可以经由不同的编译器变成不同的可执行程序。
GraphIt与Green-Marl类似,但是将图计算程序分成了两个部分:计算和调度。计算部分描述图计算过程;调度部分用于对部分变量/算子使用可选的优化来提高计算效率。
SociaLite的目标则有较大不同,旨在用DataLog——一种描述式的逻辑编程语言来表达图计算过程;Grail与SociaLite有些类似,但是描述的语言换成了SQL,从而让用户可以使用关系型数据库进行图计算,无需再部署专门的图计算系统和学习相应的编程接口[1]。
[1] 需要注意的是,使用SQL描述的图计算过程会不可避免地涉及大量表与表之间的Join操作,尽管关系型数据库对此有了相当深入的优化,其效率依然无法与最先进的图计算系统相比。
动态图计算
很多时候,我们需要分析和处理的图数据并不是一成不变的:顶点和边上的属性会发生变化;拓扑结构也会发生改变。这种场景下&