51

关于在哪里使用标签 vs 节点属性 vs 关系 + 节点的任何经验法则。

举个例子,假设我有一家商店,我想把我的产品放在 neo4j 中。他们的标识符是产品 sku,我也想对他们进行分类,就像这个是衣服、食品、电子产品一样,你明白了。我将在我的图表上进行免费搜索,就像用户可以搜索任何内容一样,我会返回与该搜索字符串相关的所有内容。

使用会更好:

  1. 我有一个带有 的节点sku 001,我将它标记为Food.
  2. 我有一个节点sku 001,并且在这个节点上有一个名为category:"Food"
  3. 我有一个与 的节点sku 001,我将为 和创建另一个节点Food,并将创建一个“ category”关系来关联它们。

我已经读过,如果您要查找属性,最好作为关系+节点,因为遍历比查找节点的属性要快得多。

TIA

4

2 回答 2

64

是否应该为类别使用属性、标签或节点取决于您将如何查询数据。

(我在这里假设您有一组相当小、相当固定的类别。)

如果您不按类别查询,请使用属性,而只需要返回通过其他方式找到的节点的类别。(例如:带有 的项目的类别是什么sku 001?)

如果您需要按类别查询,请使用标签。(例如:所有价格低于 10 美元的食物有哪些?)

如果您需要在不知道类别是什么的情况下遍历类别,请使用节点。(例如:与用户选择的同一类别中最受欢迎的十个项目是什么?)

于 2014-03-13T09:26:42.413 回答
11

由于它包含的基准,这篇博文也可能会有所帮助。

我以 4 种不同的方式对“关系”进行建模……</p>

  • 使用特定的关系类型(node)-[:HAS_ADDRESS]->(address)
  • 使用通用关系类型,然后按端节点标签过滤(node)-[:HAS]->(address:Address)
  • 使用通用关系类型,然后按关系属性过滤(node)-[:HAS {type:“address”}]->(address)
  • 使用通用关系类型,然后按端节点属性过滤(node)-[:HAS]->(address {type: “address”})

<...>

总而言之……特定关系#ftw!

于 2016-12-05T10:49:43.687 回答