2014-05-22 22 views
0

假設我有一堆用戶節點,它有一個名爲性別的屬性,可以是男性或女性。現在爲了根據性別對用戶進行分組,我有兩種結構選擇:在Neo4j中,更快的聚類結構

1)爲gender屬性添加一個索引,並使用WHERE選擇性別下的用戶。

2)創建一個男性節點和一個女性節點,並將它們鏈接到相關用戶。然後每次查詢性別時,我都會使用模式,比如說:(男性) - [] - >(:用戶)。

我的問題是,哪一個更好?

回答

1

指數永遠不能替代圖中的東西。

索引對於查找唯一值以及在某些情況下查看值組很有用;然而,隨着Neo4j可以做的緩存(以及對域的建模的可擴展性)。

只有使用兩個(給定或帶入)屬性對屬性進行索引並不是索引的最佳用法,並且考慮到每個屬性值的結果數量,可能不會過多地提高性能。

這就是說,使用選項#2可以創建超節點,瓶頸問題,根據您的模型,這可能會成爲頭痛的問題。

也許考慮使用標籤(例如男性和女性),因爲它們本質上是「模式索引」。另外請記住,您可以爲每個節點使用多個標籤,因此您可以擁有(用戶:用戶:男性)等。它還有助於避免超級節點,同時不創建經典或「傳統」索引。

HTH

+0

所以標籤會自動編入索引?所以我可以像MATCH(:User:Male)一樣查詢高效? – HanXu

+0

是的。如果您需要進一步的性能,可以爲給定標籤的特定屬性創建附加索引。但是,如果你這樣做,請記住創建有效索引的規則。 – BtySgtMajor

+0

明白了,謝謝! – HanXu