2014-01-09 113 views
0

在我的遍歷期間,我查看一個屬性。 但似乎所有的屬性都加載,這使得遍歷速度變慢。 有沒有辦法爲我不想看的屬性配置延遲加載?Neo4j遍歷不加載所有屬性

TraversalDescription td = Traversal.description().evaluator(Evaluators.atDepth(1)); 
for (Path p : td.traverse(myNode)) { 
    String nodeName = (String) p.endNode().getProperty("name"); 
    // do some stuff 
} 

我只發現了線索here ...

謝謝!

===

編輯:我的目標是通過名稱節點

+1

只有「光」屬性加載屬性的第一個訪問。像長字符串或數組這樣的重型屬性只在訪問時加載。 –

+1

請記住,您的查詢通常在高速緩存中的熱數據集上執行,因此不會發生額外的負載。 –

回答

2

在一個節點或關係的所有屬性的任何屬性的首次訪問進行排序,例如電影......被加載到內存,見http://docs.neo4j.org/chunked/stable/performance-guide.html#_neo4j_primitives_lifecycle

高性能遍歷的最佳實踐是以遍歷過程中不必觸碰屬性的方式更改圖形模型。根據您的域名,您可以通過例如使用更詳細的關係類型或Neo4j 2.0中標籤的使用。

您的代碼片段使用了棄用的遍歷,您應該遷移您的代碼以使用Traversal API,如http://docs.neo4j.org/chunked/stable/tutorial-traversal-java-api.html中所述。

+0

感謝您的回覆。 不幸的是,我不明白我該如何改變我的圖形模型。 我的目標是按名稱排序節點。 例如,對電影名稱進行排序。 在這種情況下,電影名稱不應該是類型或標籤,我錯了嗎? – jimmy

+0

不知道你的使用案例,但是如果你經常需要按照名稱排序的電影,你可能需要使用'previous'和/或'next'關係將它們組織在一個鏈表中。 –

+0

最後,我將其遷移到2.0以享受標籤。 它不適合我的模型100%,但它有幫助。謝謝! – jimmy