GraphDB查询和分片

Mik*_*ike 2 mapreduce bigdata neo4j orientdb titan

我最近一直在测试Titan-Cassandra和OrientDB,我想到了一个问题.

我只是想知道graphDBs如何在不同的集群中分片图形,以及它们的查询接口如何支持在分片图形上查询,例如在两个节点之间找到最短路径.

我知道Gremlin 为其groupby函数实现了Mapreduce模式.

但我想更深入地了解查询分片的关系以及两个DB如何处理分片图上的查询.特别是,我对OrientDB的SQL接口如何支持跨分片图的查询感兴趣.

我知道Neo4j反对根据我之前提出的问题所建议的分片.

Mar*_*uez 8

请参阅以下关于Titan的两篇帖子(http://titan.thinkaurelius.com):

通常,当您开始开发图形应用程序时,您使用的是单个计算机.在此模型中,整个图形在一台机器上.如果图表很小(数据大小明智)且事务负载较低(不是大量的读/写),那么当您投入生产时,只需添加复制以实现高可用性.使用非分布式复制,数据将完全复制到其他计算机,如果任何一台计算机出现故障,其他计算机仍可用于处理请求.再次注意,在这种情况下,您的数据不会被分区/分发,只是复制.

接下来,随着图形的增大(超出单个机器的内存和HD空间),您需要开始考虑分发.通过分发,您可以在多机群集上划分图形并(以确保高可用性)确保您具有一些数据冗余(例如复制因子3).

目前Titan中有两种分区数据的方法:

  1. 随机分区:顶点及其共同定位的事件边缘分布在群集中.也就是说,顶点及其入射边缘形成"数据包"并且一起存在于机器上.随机分区可确保群集得到适当平衡,因此没有一台计算机可以维护所有数据.一种通常有效的简单分配策略.
  2. 用户定向分区:顶点(及其事件边缘)被分配给一个分区(该分区最终代表一台机器 - 虽然由于复制和多台机器上存在相同的数据而不完全正确).用户定向分区对于了解其域拓扑的应用程序非常有用.例如,您可能知道不同大学的人与同一所大学的人之间的边缘很少.因此,智能分区将基于大学.这确保了正确的顶点 - 顶点共置并减少了多机器希望来解决遍历问题.缺点是您希望确保您的群集不太平衡(一个分区上的所有数据).

在一天结束时,整个故事是关于共址.您能确保共同检索的数据在物理空间中很近吗?

最后,请注意Titan允许使用Faunus(http://faunus.thinkaurelius.com)进行并行读取(和写入).因此,如果您有一个需要扫描整个图形的OLAP问题,那么Titan的共址模型可以作为顶点使用,其边缘是从磁盘读取的顺序.同样,故事仍然是相同的 - 根据时间的共同检索在空间中共处.