【问题标题】:neo4j - labels vs properties vs relationship + nodeneo4j - 标签 vs 属性 vs 关系 + 节点
【发布时间】:2014-04-15 22:27:10
【问题描述】:

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

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

使用会更好吗:

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

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

TIA

【问题讨论】:

    标签: modeling node-neo4j neo4j


    【解决方案1】:

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

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

    使用属性如果你不会按类别查询,而只需要返回通过其他方式找到的节点的类别。 (例如:sku 001的商品属于什么类别?)

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

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

    【讨论】:

      【解决方案2】:

      This blog post 可能也有帮助,因为它包含基准测试。

      我用 4 种不同的方式对“关系”进行建模……

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

      <...>

      总之……具体的关系#ftw!

      【讨论】:

      • 基准测试给出了一个很好的指示——但它们表明使用特定关系比使用通用关系更快。他们决定使用属性、标签和节点仍然取决于查询本身。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多