2

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

我只是想知道 graphDBs 如何跨不同集群对图进行分片,以及它们的查询接口如何支持对分片图的查询,例如查找两个节点之间的最短路径。

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

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

我知道 Neo4j 反对分片,正如我之前提出的问题所建议的那样。

4

1 回答 1

8

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

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

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

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

  1. 随机分区:顶点及其共同定位的入射边分布在集群中。也就是说,一个顶点和它的入射边形成一个“数据束”并一起存在于一台机器上。随机分区确保集群适当平衡,因此没有一台机器维护所有数据。一种通常有效的简单分发策略。
  2. 用户导向的分区:一个顶点(及其关联边)被分配给一个分区(这个分区最终代表一台机器——尽管由于复制和多台机器上存在相同的数据而不完全正确)。用户导向的分区对于了解其域拓扑的应用程序很有用。例如,您可能知道不同大学的人之间的边缘比同一大学的人之间的边缘少。因此,智能分区将基于大学。这确保了正确的顶点-顶点共置并减少了希望解决遍历的多机。缺点是您要确保您的集群不是太不平衡(一个分区上的所有数据)。

归根结底,整个故事都是关于同一地点的。你能确保共同检索的数据在物理空间中接近吗?

最后,请注意 Titan 允许使用 Faunus ( http://faunus.thinkaurelius.com ) 进行并行读取(和写入)。因此,如果您有一个需要扫描整个图的 OLAP 问题,那么 Titan 的协同定位模型作为顶点很方便,它的边是从磁盘顺序读取的。再一次,故事保持不变——空间中的共同定位与时间上的共同检索一致。

于 2013-11-28T19:36:26.463 回答