Neo4J 节点与关系实体

Posted

技术标签:

【中文标题】Neo4J 节点与关系实体【英文标题】:Neo4J Nodes vs Relationship Entities 【发布时间】:2014-03-08 18:52:11 【问题描述】:

我正在研究 Spring Data 书中的 NEO4J 示例。

 Nodes         - Product, Person, Order

 Relationships - (Order) Items (Product), (person) Reviewed (product)

我正在设计我的第一个 Neo4J 数据库,并且遇到了这样一种情况:评论可能更适合作为节点而不是关系。

这样评论现在可以有 COVERS 关系

 Review COVERED Order , Review COVERED Product 

从某种意义上说,这条评论将跨越多个 COVERED 关系。

对于创建节点实体与节点关系有什么想法吗? Neo4J 看起来非常灵活......如果我改变主意,我似乎可以稍后修改它,是吗?

在关系中跨多个节点重复基本相同的评论文本似乎很奇怪......相反,为了节省计算空间并创建一个评论节点

 Review Node Entity
   - String comments
   - int stars

【问题讨论】:

【参考方案1】:

在设计时,首要的事情是在白板上记下一个粗略的模型,它可以让人们深入了解想要实现的目标。

在这种情况下,如果您将REVIEW 节点分开,实际上会创建额外的节点和关系,而不是减少计算空间。

(PERSON)-[:GIVEN]->(REVIEW)-[:COVERED]->(PRODUCT)

所以考虑提出一个问题(用例)让我对产品 A 进行评论?

图表首先需要检查所有REVIEW 节点通过关系类型COVERED 连接到COVERED,然后再次必须回溯到PERSON 节点以获取谁给出了评论。

但如果你这样做(PERSON)-[:REVIEWED]->(PRODUCT)

您只需要查询一次所有关系类型REVIEWEDPRODUCT A 节点传入PRODUCT Acommentsstars 可以存储为关系属性。

所以我认为通过REVIEWEDREVIEWED 上的attribs 直接连接将是更简洁的设计和更简单

【讨论】:

所以你建议将评论数据加倍,分成两个关系? Neo4j 2.0 允许在关系上存储属性。因此,您可以将评论数据保存为 REVIEWED 关系上的属性 我知道这个事实......但是如果审查涵盖两个节点......我需要编写两个关系......这似乎效率低下,因为我现在存储的数据量增加了一倍。 我认为每个产品都有自己单独的评论权。将不同产品的评论分开是不是很理想,这样如果您想回溯特定的产品评论会更容易。无论如何,如果审查涵盖了两个节点..如果您创建一个单独的节点..根据我的回答中的匹配模式 1,将有 2 个关系 COVERED 和 1 个 REVIEW 节点和 1 个 GIVEN 关系。根据我回答中的匹配模式 2,只有 2 个 REVIEWED 关系。 每个产品的单一评论不适用于我正在使用的数据。我会尝试两个实例。一个是评论是具有多个关系的节点……另一个是评论加倍关系

以上是关于Neo4J 节点与关系实体的主要内容,如果未能解决你的问题,请参考以下文章

Neo4j 密码查询以获取与特定其他节点没有关系的所有节点

Neo4j 第二篇:图形数据库

使用 Cypher 在 Neo4j 中通过模式移动与其他节点的关系

Neo4j_02了解图数据库

neo4j-高效的原因(节点关系属性存储)

neo4j - 标签 vs 属性 vs 关系 + 节点