在我們的堆棧中,我們使用neo4j並且遇到了經典的性能問題:一旦它需要來自neo4j的數據,應用程序就會很慢。什麼可能導致neo4j的這種糟糕的表現?
只聽我的勇氣(雙關語意)我開始JVisualVM並完成應用程序分析。
此應用程序託管在JavaEE服務器(Glassfish)中,並使用由Empire-RDF,Blueprints和neo4j組成的準語義堆棧。訪問neo4j由JCA neo4j-connector提供。
像這樣的截圖表明,有強有力的證據表明neo4j數據檢索存在瓶頸。
我的問題是雙重的,但簡單。
- 性能水平是否正常? (我猜不是)
- 我該怎麼做才能改善這些表演?
編輯這裏有關於測試procdure應該開導你們倆一些信息。
對我而言,我的圖形結構是未知的:因爲我在藍圖/芝麻/ Neo4J上使用Empire-RDF,所以我只知道我正在操作的Java對象,它們是十個相互關聯的類,它們不幸的是在我們的業務的核心,所以我不能透露他們。
考慮到,爲了這個例子,他們創建了一個鏈接到表示URI目標的實體的可視元素樹。我有一個運行讀/寫操作組合的maven測試(我會說有20到50個JPA操作涉及到)。這個maven測試運行在300 秒。
在一個較低的水平,
- 應用程序在Windows-7和Mac OS X 10.6上運行,與Java 1.6的各個子版本。
- 應用程序託管在Glassfish 3.1.1上
- neo4j DB是版本1.5,通過neo4j-connector訪問JCA(沒有對默認設置進行自定義)。
- 芝麻2.6.0
- 藍圖版本是1.1版
- 帝國RDF是版本0.7
作爲最後的世界,潛入jVisualVM採樣揭示了大多數的應用時間是花在那些致電NodeManager#getNodeForProxy
。
到目前爲止,Neo4J已經取得了不錯的成績。我們只是簡單地使用它。您是否在郵件列表中將這個問題指向了其他人? – Eelco 2012-02-01 21:44:22
我認爲這是一個問題,使用neo4j作爲圖形數據庫,你會得到很好的性能。但是,當你試圖阻塞世界上的RDF視圖時,就會遇到麻煩。 SPARQL非常重要,對於像Empire這樣能夠生成相當複雜的查詢的東西,那些非本地設計用於高效地執行這些連接的東西將會遇到很多麻煩。 – Michael 2012-02-02 20:10:29
您能否提供更多信息:圖形的版本,大小和結構,您要執行哪些操作,您的gremlin代碼,jvm-memory設置,neo4j設置(mmio),操作系統,以及如果只有0.2%的性能分析時間花在neo4j我不知道這是否真的是問題? – 2012-02-02 21:11:49