Neo4j中Label和Property有什么区别?

12
我对Neo4j比较陌生,但在关系型数据库设计和开发方面经验丰富。试图理解Neo4j中标签(Label)和属性(Property)的区别。我读过的所有内容似乎都没有区分这两个术语,事实上,我发现这些术语经常可以互换使用。我猜想一定存在差异,否则Neo4j的聪明人们不会同时创建两者...
谢谢您的帮助!
1个回答

11
一个属性是一个键值对,它是关系或节点的一部分。 标签是您为一个或多个节点分配的名称/标签/类别。 请注意,带有相似标签的节点不一定共享相同的属性键和/或属性值类型。 约束和索引定义在标签上。 (尽管遗留的索引API——它们是v2之前的,即标签之前的——仅使用属性工作。) 从文件系统的角度来看,正常情况下,标签查找比属性查找更快,因为标签被存储并规范化在自己的文件中(即“标签存储”)中,而不像属性那样在所有相应节点中分散和重复。

标签就像您想要将节点放入的标记或类别,它们还允许我们附加元数据到节点(例如索引、约束等)。 - Michael Hunger
4
非常感谢您的回复,我很感激。自从我发表这个问题以来,我也做了更多的阅读,对它们之间的差异有了更好的理解。但是我仍然困惑它们似乎是冗余的。当然,我可以创建一个带有"Person"标签的节点,以及另一个带有"Vehicle"标签的节点,但我是否可以通过在一个节点上创建一个名为"Type"的属性,并在另一个节点上赋值为"Person"和"Vehicle"来实现同样的效果呢?似乎标签只是一种特殊类型的属性(键-值对),其中你基本上拥有一个"无键"的值。 - David
1
另外,我的理解是您可以将索引、约束等分配给标签和属性,那么将某个定义为标签与属性相比有何优势? - David
1
@David:从文件系统的角度来看,标签有自己的“存储”,这意味着标签已经规范化,并且比常规属性查找更快。约束和(新的)索引是针对标签(和某些属性)定义的。 - fbiville
谢谢Rolf。这就是我在寻找的区别所在。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接