2014-10-03 67 views
0

說我有一個龐大的用戶和其他類型的節點圖。每種類型都有一個標籤,有些可能有多個標籤。由於我正在定義用戶及其對節點的訪問,因此用戶和節點之間存在一種關係類型:CAN_ACCESS。在其他對象之間,存在不同的關係類型,但是出於訪問控制的目的,當我們從用戶開始時,每件事都涉及CAN_ACCESS關係。Neo4j標籤,關係類型和密碼匹配性能

我從來沒有使用標籤來執行匹配,所以我的意圖和希望是,通過匹配標籤來排除我的User節點中存在一個嚴重使用關係類型的性能缺點。顯然,這場比賽可能會變得凌亂:

MATCH (n:`User`)-[r1:`CAN_ACCESS`]->(n2) 

但我永遠不會那樣做。我應該這樣做:

MATCH (n:`User`)-[r1:`CAN_ACCESS`]->(n2:`LabelX`) 

我的問題,則是本場比賽的目標端標籤的用法是否實際上等同於具有User和任何給定的標籤之間的專用關係類型。換句話說,這是否:

MATCH (n:`User`)-[r1:`CAN_ACCESS`]->(n2:`LabelX`) 

給我相同的性能,這一點:

MATCH (n:`User`)-[r1:`CAN_ACCESS_LABEL_X`]->(n2) 

如果CAN_ACCESS_LABEL_X總是去(N:`User`) - >(N:`LabelX`) ?

+1

馬克剛剛寫了一篇關於此的好博客文章,表現並不完全一樣,但足夠好:http://www.markhneedham.com/blog/2014/09/30/neo4j-genericvague-relationship-names/ – 2014-10-03 22:30:47

+0

哇!這確實是一個很好的時機。我開始研究基於此的應用程序代碼,並在此過程中發現了Neo4j.rb中的一個錯誤。謝謝! – subvertallchris 2014-10-04 13:57:08

回答

0

正如Michael Hunger的評論所指出的,Mark Needham的博客文章here表明,當您使用專用關係類型而不是依賴標籤時,性能最好。