关于使用标签与节点属性与关系+节点的位置的任何经验法则。
我们有一个例子,说我有一个商店,我想把我的产品放在neo4j。他们的标识符是产品sku,我也希望对它们进行分类,就像这个用于衣服,食品,电子产品,你就明白了。我将在我的图表上进行免费搜索,就像用户可以搜索任何内容一样,并且我将返回与该搜索字符串相关的所有内容。
使用是否更好:
sku 001
的节点,我会将其标记为Food
。sku 001
的节点,并且在此节点上拥有名为category:"Food"
sku 001
的节点,我将为Food
创建另一个节点,并创建一个“category
”关系来关联它们。我已经读过,如果你要查找属性,最好将它作为关系+节点,因为遍历比查找节点属性要快得多。
TIA
答案 0 :(得分:53)
是否应该使用属性,标签或类别的节点取决于您将如何查询数据。
(我在这里假设你有一套相当小的,相当固定的类别。)
如果您不按类别查询,则使用属性,但只需要返回通过其他方式找到的节点的类别。 (例如:具有sku 001
的项目的类别是什么?)
如果您需要按类别查询,请使用标签。 (例如:所有食品的价格都低于10美元?)
如果您需要遍历该类别而不知道它是什么,请使用节点。 (例如:与用户选择的同一类别中十个最受欢迎的项目是什么?)
答案 1 :(得分:8)
This blog post因其包含的基准而可能也会有所帮助。
我用4种不同的方式塑造了'关系'......
- 使用特定关系类型
(node)-[:HAS_ADDRESS]->(address)
- 使用通用关系类型,然后按端节点标签
进行过滤(node)-[:HAS]->(address:Address)
- 使用通用关系类型,然后按关系属性
进行过滤(node)-[:HAS {type:“address”}]->(address)
- 使用通用关系类型,然后按端节点属性
进行过滤(node)-[:HAS]->(address {type: “address”})
< ...>
总结......特定关系#ftw!