Neo4j分区

4
有没有一种方法可以在neo4j分区之间进行物理分离? 这意味着以下查询将转到node1:
Match (a:User:Facebook)

虽然这个查询将会被发送到另一个节点(可能是托管在Docker上)

Match (b:User:Google)

这是一个案例: 我想在Neo4j中存储多个客户的数据,希望有很多客户。现在,我不确定什么是最佳设计,但它必须满足几个条件:
  1. cypher查询不应返回混合数据(确保开发人员不会在cypher查询中忘记“:Partition1”(例如)非常困难)
  2. 一个客户端的性能不应影响另一个客户端,例如,如果一个客户端有大量数据,而另一个客户端有少量数据,或者如果一个客户端的“重量”查询正在运行,我不希望另一个客户端的“轻量级”查询受到缓慢的性能影响
换句话说,将所有内容存储在一个节点下,在将来的某个时候,可能会出现可扩展性问题,当我有更多的客户时。
顺便问一下,拥有几个群集是常见的吗?
此外,分区比为每个客户创建不同的标签有什么优势?例如:Users_client_1,Users_client_2等。

你为什么需要它呢? - Michael Hunger
@MichaelHunger 我已经编辑了帖子,以提供使用案例。 - Lior Goldemberg
分区并不能解决问题(因为这只是将数据分割到多台机器上),你需要的是多个独立的数据库。你可以通过运行具有不同数据目录的多个Neo4j实例来轻松实现这一点。虽然在路线图上支持一个实例中的多个数据库。 - Michael Hunger
感谢@MichaelHunger,但是由于我当前已经将neo4j分配了总RAM的70%,所以配置会变得复杂。如果我有5-10个实例,重新为所有实例分配资源将会很困难。(或者我漏掉了什么?)顺便问一下,您对不同的标签名称有什么看法?例如:Users_client_1,Users_client_2。根据您的经验,这样可以吗? - Lior Goldemberg
关于你的评论@MichaelHunger _(因为这只是将数据分割到多台机器上)_,我认为neo4j不支持数据分片,只支持作为备份的HA和查询负载均衡。谢谢! - Lior Goldemberg
有趣的是:联合搜索是一种信息检索技术,它允许同时搜索多个可搜索资源。 - Guy Coder
1个回答

11

简短回答:没有。

Neo4j有高可用性(HA)集群,您可以将整个图形副本放在许多计算机上,并快速为其服务,但它们不会将真正庞大的图形分区存储到这里、存储到那里,然后通过一个查询机制连接起来。

更详细的答案:图形分区是一个难题,需要进行持续研究。您可以在wikipedia上了解更多信息,但要点是,当您创建分区时,您正在将您的图形分成多个不同的位置,然后需要处理跨越分区的关系复杂性。跨分区是一项昂贵的操作,因此,在分区时真正的问题是,如何分区,使得需要在查询中跨分区的情况尽可能少出现?

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

以下是情况有多糟糕(引用别人的话):

通常,图分区问题属于NP难问题的范畴。这些问题的解通常使用启发式和近似算法推导得出。然而,均匀图分区或平衡图分区问题可以被证明在任何有限因子内近似是NP完全的。即使对于树和网格等特殊图类,也不存在合理的近似算法,除非P=NP。网格是一个特别有趣的案例,因为它们模拟了由有限元模型(FEM)模拟产生的图形。当不仅近似组件之间的边数,而且还近似组件的大小时,可以证明对于这些图形不存在合理的完全多项式算法。

不要让你感到太沮丧,很多人都对大型图进行了分区。Facebook和Twitter每天都在这样做,所以你可以阅读Twitter方面的FlockDB查看相关的Facebook研究。但总结起来,这取决于你的数据,大多数进行分区设计的人都会采用自定义的分区策略,而不是由软件为他们完成。

最后,其他架构(如Apache Giraph)在某种意义上可以自动分区;如果你将一个图存储在Hadoop之上,而Hadoop已经自动地跨集群扩展,那么从技术上讲,这就是自动为你分区的。很酷,对吧?好吧...直到你意识到你仍然需要在各个地方执行图遍历操作,这可能会因为必须遍历所有这些分区而表现得非常糟糕,这正是你通常通过明智地分区来避免的性能问题。


最后一句话:我认为neo4j有一个名叫Jim Webber(http://jimwebber.org/)的人正在思考这些与neo4j相关的问题。他可能有更新的消息(或者来自neo的其他人员)。虽然“自动分区”可能不是一个合理的目标,但可能会有许多其他的辅助工具在开发中;如果有的话,希望有人能介入。 - FrobberOfBits
非常感谢您详细的回答,我一定会仔细阅读。我已经编辑了原帖并添加了用例。 - Lior Goldemberg
看起来分区现在可用了,但只适用于企业版!Neo4j是完全面向企业的,我真的怀疑开源版本是否有用。这样其他基础架构项目如Cassandra、Kafka、ES都更好、更美好!! - user1870400
图形分区和数据库分区是不同的概念。即使在分区图中边缘被最小化,也不能保证它最小化了数据库查询的跨分区数据访问操作。后者必须考虑并行执行计划。分区策略涉及经验数据甚至政策搜索。我认为说一个问题是另一个问题的简化/放松版本是不正确的,它们只是不同的问题。 - jerryIsHere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接