是否可以在neo4j分区之间进行物理分离? 意味着以下查询将转到node1:
Match (a:User:Facebook)
虽然此查询将转到另一个节点(可能托管在docker上)
Match (b:User:Google)
情况如此: 我想在neo4j下存储几个客户端的数据,希望它们很多。 现在,我不确定什么是最好的设计,但它必须满足几个条件:
换句话说,当我拥有更多客户端时,将所有内容存储在1个节点之下,在未来的某个时刻,我认为,将会出现可扩展性问题。
顺便说一下,几乎没有集群?还有什么分区优势为每个客户创建不同的Label?例如:Users_client_1,Users_client_2等
答案 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 side或avail yourself of relevant facebook research。但总结并切入追逐,这取决于您的数据和大多数人分区设计自定义分区策略,这不是软件为他们做的事情。
最后,其他架构(例如Apache Giraph)可以在某些意义上进行自动分区;如果你在hadoop上存储一个图形,并且hadoop已经在一个集群中自动扩展,那么从技术上讲,这就是为你自动划分你的图形。很酷,对吗?好吧......很酷,直到你意识到你仍然需要在整个地方执行图遍历操作,由于所有这些分区都必须遍历,你通常会尝试的性能情况,这可能表现得非常糟糕。首先要明智地避免分区。