2013-03-12 58 views
3

重點是暗號參加一個很有趣的教程後,我愉快地Cypher支架查詢語言的declarativeness感到驚訝。在我看來,這是從Neo4J中檢索數據的一種非常自然的方式。一般暗號性能

在此之前,我只使用了原生API。雖然這不太明確,但你稍後會習慣它。複雜的結構都非常相似,只是在具體項目的細節上有所不同。

儘管如此,Cypher支架看上去更自然的我,所以我考慮構建我的應用程序的第二個版本,主要的Cypher查詢到我的數據庫進行交互。但是我遇到了一個問題。

有許多方法,以我的應用程序轉換成Cypher和嘗試過幾種可能的查詢後,所有期望的結果,似乎即使是最快的查詢仍比原生API慢20倍。

現在,我不介意放棄對declarativeness一些性能,但時間是20一點點多,我在這已經有表現掙扎的應用程序。有沒有解決這個問題的方法,還是我只需要堅持原生API?

+0

你能分享一些你的疑問嗎?也許你的數據集?很想看看它,它不應該那麼慢。您使用的是哪個Neo4j版本? – 2013-03-14 12:21:36

+0

由於數據集取決於用戶上傳的文件,因此數據集不盡相同。我使用1.9.M05 atm,但我也嘗試過最新的穩定版本。我今晚會發布我的一些疑問,但問題是Cypher中我無法具體說明問題。通過使用Core API,我可以精心控制每一步,並且瞭解我的數據庫結構,這意味着我不必走過大量無用的關係,這在Cypher中是必須的。 – 2013-03-18 13:00:20

回答

2

你的結論聽起來很熟悉。當我一起使用Neo4j和Spring Data Neo4j時,我也遇到了性能問題。在性能真正重要的部分,我切換到核心Traversal API,它現在比一般的Cypher查詢快得多。這與處理查詢和控制遍歷的每個方面都有很大關係。 Cypher只能猜測最優策略是什麼。我確信它會在未來的(未來)獲得加速,但如果性能真的很重要,我會堅持使用核心API。

此外,如果您是使用Java和春天數據Neo4j的,可以考慮使用先進的映射模式(AspectJ的),這是很多比簡單的映射模式快。

+0

實際上,基於我做的一些測試,Spring Data的附加層也減慢了我的應用程序的速度。所以我創建了我自己的界面,以針對特定應用程序以最有效的方式直接與數據庫交談。我想將該接口的實現轉換爲Cypher,但我不知道這會破壞我的性能。 – 2013-03-13 09:50:17

+0

雖然Cypher可能總是比使用核心API慢,但您可以嘗試調整您的Cypher語句。這是一個很好的資源,幫助我很多:http://thought-bytes.blogspot.in/2013/01/optimizing-neo4j-cypher-queries.html – tstorms 2013-03-13 10:32:20

+1

這是另一個偉大的閱讀:http://www.rene -pickhardt.de/get-the-full-neo4j-power-by-using-the-core-java-api-for-traversing-your-graph-data-base-instead-of-cypher-query-language/。它比較了核心API,遍歷API和多個Cypher版本的速度。 – tstorms 2013-03-13 10:33:35