@Zete 提到了agens graph,个人关注这个项目也有一段时间了,确实非常不错,基于pg良好的可扩展性和近一年来逐渐成熟的open cypher。这其实反应了图数据库多个分支的一个,即基于关系型数据库构建图数据库。微软的GraphView也是这一派。每年都有一些论文讨论这个话题,主要的动机还是关系型数据库有几十年的工程积累,非常成熟。比如今年SIGMOD的这篇:All-in-One: Graph Processing in RDBMSs Revisited。
另一派是以neo4j为代表的所谓native图数据库,主要特点是查一个点的边或者边上的端点时,不需要再走一次B+树索引,而是直接指针指向下一度的物理地址。它的十字链表结构在内存够大,或者有SSD盘的情况下性能还是不错的。但是因为编程语言(neo4j是java实现)和工程累积的关系,在内存完全容纳的了数据的情况下,性能比pg要差。
在有一派呢,就是以Titan/JanusGraph为代表的使用nosql存储的分布式图数据库。目前社区看到的产品还相当naive的,只是在分布式nosql上封装了一层逻辑的图,存储和查询严重分离,性能提升的空间十分巨大。微软也有GraphView项目,基于SQL Server封装,但是目前项目不太活跃。
那么那一派代表未来的趋势呢?我觉得都不是。
想想图的本质难题是什么?是数据的高度关联带来的严重的随机访问。所以,传统的关系型数据库解决不了这个问题,因为他们仍然是面向磁盘优化,尽可能利用磁盘顺序读写的优势。neo4j这种数据结构在数据落到磁盘上的时候,随机访问比关系型数据库多更多,性能衰减想当厉害。那么分布式nosql的路子呢?网络是瓶颈。完美的最小割图分区算法是NP难题,而且在数据写入的情况下还要面临动态调整的难题。如果使用naive的分区算法,网络通讯的开销是想当大的。
所以,个人浅见,只有靠新硬件来解决问题。更廉价的大内存、NVRAM、RDMA高速网络、随机读写更强的SSD磁盘、有硬件事务支持的CPU等。