Neo4j关系设计

时间:2015-08-03 09:20:12

标签: neo4j cypher

久违后重新访问Neo4j。我已经阅读了很多文章,但仍然发现我有几个问题要让我再去......

  1. 双向关系 我有一个“连接到”类型的场景,其中2个节点相互连接。实际上,这个想法是模拟一种流动。但是,两个方向的流量并不总是相同。我不确定使用的最佳方法:1个与2个属性或2个不同关系的关系?
  2. 前者感觉就像是一个舒适的选择,但在建模实际事实方面感觉并不自然 - 例如:什么称为属性,因为从每个节点的角度来看,FlowIn和FlowOut都没有意义。在这种情况下,我也想知道属性与关系的表现 - 这些值需要更新。

    1. 代表时间 现在我想更进一步,在特定时间或更准确地说,在特定时间之间表示节点之间的流量。所以在下午2点到3点之间,#1和#2之间的流量将是x。
    2. 如何以最佳方式完成?每个连接的每个时间帧的关系似乎...... .verbose。表示为节点的时间帧是否有价值?!

      1. 那里有Cypher的最大流量样本吗? 特别感兴趣的是push-relabel最大流量问题解决。
      2. 感谢您提供任何可能提供的建议。

1 个答案:

答案 0 :(得分:1)

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

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

  

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

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

  

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

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