图数据库解决的是图数据的查询问题,图计算框架解决的是图计算的问题,首先我们要搞清楚二者如何区分,再讨论如何结合。
图查询:主要面向的是路径查询。比如从一点出发的两跳邻居;再如从点A出发3跳内和B点的路径;
图计算:对全图节点进行迭代运算。比如PageRank,需要每一个节点从一开始就要参与计算;再如计算图中存在的联通子图;再如计算图中度数大于一百万的节点。
图计算实际上是迭代计算,因此图计算框架实际上是迭代计算框架,其核心工作是对所有节点进行多次迭代。
因此,目前的图计算框架基本与底层存储脱离是有其合理性的,因为迭代计算必须要和磁盘脱离,否则IO极高导致集群性能急剧下降,而把数据全部load到内存中相当于重新构建了新的集群。相应的优化点有:1)计算之前需要把整个图load到计算框架对应的节点中,这样带来的问题就是更新的数据不能被感知到,如何实现增量更新;2)BSP框架的超步同步,需要等待所有节点完成才能进行下一步,延迟较高导致吞吐率降低。如何去掉。
其他问题:
1、GC问题。如何优化,仅仅在使用层面?;
2、数据切分模型。GraphX有多种数据分配模型,用户可以自己选择,有没有更好的方式;
3、如何添加辅助索引加快遍历过程。
从上面可以看出,图计算框架并不合适图遍历,那么基于图遍历的计算有哪些呢?比如计算两点间最短路径,如果使用Gremlin的接口是可以实现的,但是效率上有些问题。