mapreduce - GraphDB 查询和分片

标签 mapreduce neo4j bigdata orientdb titan

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

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

我知道 Gremlin 实现了 Mapreduce pattern因为它的 groupby 功能。

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

我知道 Neo4j 反对分片,正如 previous question 所建议的那样我问过了。

最佳答案

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

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

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

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

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

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

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

关于mapreduce - GraphDB 查询和分片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20267047/

相关文章:

performance - 无法重现/验证图形数据库中的性能声明和行动书中的 neo4j

python - 从数组中选择元素以最小化内存使用

java - MapReduce:Mapper和Reducer可以共享变量吗?

functional-programming - 原始函数式语言中的 MapReduce 的可扩展性如何?

neo4j - 如何在 Spring Data Neo4j (SDN4) 中进行集成测试

node.js - Neo4J 单个查询中的多个匹配语句

javascript - 挑战 : Aggregate Second Element from Input Element

apache - Hadoop JobTracker内存使用率增加v

hadoop - 使用 Apache Oozie 编排 Apache Spark

java - Apache Phoenix-sqlline.py与sqlline-think.py-有什么区别?