2014-01-22 52 views
2

我正在考慮通過關係上的參數進行過濾。 例如:關於在Neo4j關係上過濾的性能分支

如果我有一個包含

Create (n:Car)-[r:DRIVES_ON {side: 'left'}]->(m:Country {Name: 'England'}) return n,m; 

我想用

Match (n:Car)-[r:DRIVES_ON]-(m:Country) where r.side ='left' return r; 

這是由於性能原因,一個壞主意,提取的圖形?

回答

4

由於只有兩個選擇,我只想有兩個獨立的關係:

(Car)-[:DRIVES_ON_LEFT]->(Country) 
(Car)-[:DRIVES_ON_RIGHT]->(Country) 

但它會很高興能夠了解更多關於您的域名。

+0

這是一個人爲的例子。我想知道的是 - 關於過濾關係的性能處罰(因爲數據存儲在磁盤/內存中的方式) – joe

4

妮可是正確的,

財產數據是目前從磁盤上的關係分開存放,而類型存儲在關係記錄。因此只檢查類型的速度要快得多,因爲沒有屬性需要加載(延遲加載)。因此,在高性能遍歷情況下加載屬性可能會傷害(在冷高速緩存上)並使用更多內存來填充高速緩存。 ESP。因爲所有屬性都一次加載,至少是適合屬性記錄的屬性。默認情況下,只有較大的數組和較大的字符串不會被加載,而是懶惰地訪問。

+0

感謝您的回答Michael。 – joe

+0

我應該期待什麼樣的表現下降?關係類型的所有數據是按順序存儲在磁盤上的嗎?如果情況是這樣,'磁盤會在單次提取中獲取所需的所有數據嗎?'顯然,這將徹底改變查詢的性能 – joe