【问题标题】:Neo4j Relationship designNeo4j 关系设计
【发布时间】:2015-08-03 09:20:12
【问题描述】:

久违的 Neo4j 重温。我已经阅读了很多文章,但仍然发现我有几个问题要让我重新开始......

  1. 双向关系 我有一个“连接到”类型的场景,其中 2 个节点相互连接。事实上,这个想法是对一种流进行建模。然而,两个方向的流量并不总是相同的。我不确定使用的最佳方法:1 个关系与 2 个属性或 2 个不同的关系?

前者感觉像是一个舒适的选择,但在对实际事实建模时感觉不自然 - 例如:如何调用属性,因为从每个节点的角度来看,FlowIn 和 FlowOut 没有意义.我还想知道在这种情况下属性与关系的性能——这些值需要更新。

  1. 表示时间 现在我想更进一步,代表特定时间节点之间的流动,或者更准确地说,特定时间之间的流动。所以在下午 2 点到 3 点之间,#1 和 #2 之间的流量将为 x。

这应该如何以最佳方式完成?每个连接的每个时间框架的关系似乎......冗长。将时间范围表示为节点是否有价值?!

  1. 是否有任何带有 Cypher 的最大流量示例? 对 push-relabel 最大流量问题的解决特别感兴趣。

感谢您提供的任何建议。

【问题讨论】:

  • 如果关系携带不同的数据,它们可能应该是不同的关系。你是定向查询吗?一种关系可以双向发展,所以如果你只想要“与东西相关的东西”,那么一种关系可能会更好。如果按方向查询,最好有两个。
  • 您是想用 Cypher 解决最大流量问题还是简单地在 Neo4j 中建模最大流量?

标签: neo4j cypher


【解决方案1】:

虽然您确实已经考虑过您的问题,但问题有点不清楚。这似乎是关于图形数据模型的问题。您想知道如何最好地组织模型来表示复杂的关系。如果您尝试跟踪两个节点之间的“流”,则将权重属性分配给单向边。

应仔细考虑双向关系。 Neo4j 可以像处理单向关系一样快地处理它们。 graphaware 中关于使用双向关系的引用:

Neo4j 中的关系可以以相同的速度在两个方向上遍历。此外,方向可以完全忽略。因此,如果一个隐含另一个,则无需在节点之间创建两种不同的关系。

我相信通过更好地了解 Graph 数据模型可以缓解您的问题。在这一点上,查看几个不同的模型并理解其中的原因将比理解密码语法更有帮助。我可以建议阅读智利大学两位教授的this survey,标题为“图数据库模型调查”。您可能对第 21 页上的“超节点”模型特别感兴趣,因为这听起来像是您正在尝试对复杂的循环对象进行建模。从第 21 页开始;

超节点可用于表示简单(平面)和复杂对象(分层、复合和循环)以及映射和记录。一个关键特性是它固有的封装信息的能力。

希望这些信息可以帮助您建立复杂关系的模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多