2014-05-22 19 views
0

假设我有一堆用户节点,它有一个名为性别的属性,可以是男性或女性。现在为了根据性别对用户进行分组,我有两种结构选择:在Neo4j中,更快的聚类结构

1)为gender属性添加一个索引,并使用WHERE选择性别下的用户。

2)创建一个男性节点和一个女性节点,并将它们链接到相关用户。然后每次查询性别时,我都会使用模式,比如说:(男性) - [] - >(:用户)。

我的问题是,哪一个更好?

回答

1

指数永远不能替代图中的东西。

索引对于查找唯一值以及在某些情况下查看值组很有用;然而,随着Neo4j可以做的缓存(以及对域的建模的可扩展性)。

只有使用两个(给定或带入)属性对属性进行索引并不是索引的最佳用法,并且考虑到每个属性值的结果数量,可能不会过多地提高性能。

这就是说,使用选项#2可以创建超节点,瓶颈问题,根据您的模型,这可能会成为头痛的问题。

也许考虑使用标签(例如男性和女性),因为它们本质上是“模式索引”。另外请记住,您可以为每个节点使用多个标签,因此您可以拥有(用户:用户:男性)等。它还有助于避免超级节点,同时不创建经典或“传统”索引。

HTH

+0

所以标签会自动编入索引?所以我可以像MATCH(:User:Male)一样查询高效? – HanXu

+0

是的。如果您需要进一步的性能,可以为给定标签的特定属性创建附加索引。但是,如果你这样做,请记住创建有效索引的规则。 – BtySgtMajor

+0

明白了,谢谢! – HanXu