Neo4j分区

时间:2015-07-07 19:39:10

标签: neo4j partitioning

是否可以在neo4j分区之间进行物理分离? 意味着以下查询将转到node1:

Match (a:User:Facebook)

虽然此查询将转到另一个节点(可能托管在docker上)

Match (b:User:Google)

情况如此: 我想在neo4j下存储几个客户端的数据,希望它们很多。 现在,我不确定什么是最好的设计,但它必须满足几个条件:

  1. 不应该从密码查询返回混合数据(很难确定,没有开发人员会在密码查询中忘记“:Partition1”(例如))
  2. 1客户端的性能不应该影响另一个客户端,例如,如果一个客户端有大量数据,另一个客户端有少量数据,或者如果一个客户端的“重”查询当前正在运行,我不会希望其他客户的其他“精简”查询遭受慢速缓慢的性能
  3. 换句话说,当我拥有更多客户端时,将所有内容存储在1个节点之下,在未来的某个时刻,我认为,将会出现可扩展性问题。

    顺便说一下,几乎没有集群?

    还有什么分区优势为每个客户创建不同的Label?例如:Users_client_1,Users_client_2等

1 个答案:

答案 0 :(得分:8)

简答:不,没有。

Neo4j有high availability (HA) clusters,您可以在许多机器上复制整个图形,然后快速为该副本提供许多请求,但它们不会对一个非常大的图形进行分区,因此会存储一些图形。这里,其他一些部分,然后通过一个查询机制连接。

更详细的答案:图形分区是一个难题,需要不断研究。您可以阅读有关它的更多信息over at wikipedia,但要点是,当您创建分区时,您将图形拆分为多个不同的位置,然后需要处理跨越分区的关系的复杂性。交叉分区是一项昂贵的操作,因此分区时的真正问题是,如何进行分区,以便在查询中跨越分区的需求尽可能不频繁出现?

这是一个非常难的问题,因为它不仅取决于数据模型,还取决于可能发生变化的访问模式。

情况有多糟糕(引用被盗):

  

通常,图分区问题属于NP-hard的范畴   问题。通常使用来解决这些问题   启发式和近似算法。[3]但是,统一图表   可以显示分区或平衡图分区问题   NP完全逼近任何有限因子。[1]即使是   特殊的图表类,如树和网格,没有合理的   除非P = NP,否则存在近似算法[4]。网格是一个   特别有趣的情况,因为他们模拟了图表   来自有限元模型(FEM)模拟。不仅仅是数字   组件之间的边缘近似,但也是大小   组件,可以证明没有合理的完全多项式   这些图存在算法。

不要给你留下太多的厄运和阴郁,很多人已经划分了大图。 Facebook和Twitter每天都会这样做,因此您可以read about FlockDB on the twitter sideavail yourself of relevant facebook research。但总结并切入追逐,这取决于您的数据和大多数人分区设计自定义分区策略,这不是软件为他们做的事情。

最后,其他架构(例如Apache Giraph)可以在某些意义上进行自动分区;如果你在hadoop上存储一个图形,并且hadoop已经在一个集群中自动扩展,那么从技术上讲,这就是为你自动划分你的图形。很酷,对吗?好吧......很酷,直到你意识到你仍然需要在整个地方执行图遍历操作,由于所有这些分区都必须遍历,你通常会尝试的性能情况,这可能表现得非常糟糕。首先要明智地避免分区。