2012-02-01 87 views
4

在我們的堆棧中,我們使用neo4j並且遇到了經典的性能問題:一旦它需要來自neo4j的數據,應用程序就會很慢。什麼可能導致neo4j的這種糟糕的表現?

只聽我的勇氣(雙關語意)我開始JVisualVM並完成應用程序分析。

此應用程序託管在JavaEE服務器(Glassfish)中,並使用由Empire-RDFBlueprintsneo4j組成的準語義堆棧。訪問neo4j由JCA neo4j-connector提供。

像這樣的截圖表明,有強有力的證據表明neo4j數據檢索存在瓶頸。

Interesting fragments of a profiling session

我的問題是雙重的,但簡單。

  1. 性能水平是否正常? (我猜不是)
  2. 我該怎麼做才能改善這些表演?

編輯這裏有關於測試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

+0

到目前爲止,Neo4J已經取得了不錯的成績。我們只是簡單地使用它。您是否在郵件列表中將這個問題指向了其他人? – Eelco 2012-02-01 21:44:22

+0

我認爲這是一個問題,使用neo4j作爲圖形數據庫,你會得到很好的性能。但是,當你試圖阻塞世界上的RDF視圖時,就會遇到麻煩。 SPARQL非常重要,對於像Empire這樣能夠生成相當複雜的查詢的東西,那些非本地設計用於高效地執行這些連接的東西將會遇到很多麻煩。 – Michael 2012-02-02 20:10:29

+0

您能否提供更多信息:圖形的版本,大小和結構,您要執行哪些操作,您的gremlin代碼,jvm-memory設置,neo4j設置(mmio),操作系統,以及如果只有0.2%的性能分析時間花在neo4j我不知道這是否真的是問題? – 2012-02-02 21:11:49

回答

3

好的,結束這個笑話的時候了,謝謝Mike幫助過我。

性能問題不是neo4J 1.5錯,也不是Empire,既不是藍圖,也不是我對自己持久堆棧的理解。

你還記得我說過用過的neo4j實例是從JCA連接器獲得的嗎?

那麼,我使用該連接器的版本0.2,它與neo4j 1.4一起工作...是的,1.4!

幸運的是,我已經準備升級該版本,允許我直接向neo4j發送參數(如設置cache_type)。所以I finished that upgrade,捆綁它,將它部署到我的本地存儲庫,將其集成到我的域,測試,並......成功! a x20性能的提升!

+0

很高興聽到它出現問題,你可能會分享你的連接器的升級,並且關於這個堆棧的博客文章會很棒! – 2012-02-04 22:54:23

3

我最後一次使用neo4j Sail時,對演出非常失望。插入,甚至是批量插入,速度慢得令人難以接受,除了最簡單的查詢以外,任何類型的面向用戶的界面都太慢。當然,這大概是在兩年前,所以它的性能可能與我上次查看它的性能不同(可能甚至更好),但當時它遠遠落後於所有專用的RDF數據庫,不要想象他們已經趕上了。

如果您將neo4j作爲圖庫使用,neo4j很不錯,但我認爲它不太適合RDF。使用真正的RDF數據庫會更好。既然你使用的是Empire,假設你不依賴neo4j/Blueprints特定的任何東西,那麼它應該很容易放在大多數其他RDF數據庫中,並且看看它是如何影響性能的。如果是這樣的話,Stardog包含藍圖的綁定,這可能值得一看。