2015-05-29 44 views
1

我遇到一個非常緩慢的Neo4j的HTOP顯示它的Lucene的誰吃了服務器上所有CPU。neo4j應該在很多合併請求上很慢嗎?

我主要寫數據,試圖每秒50-500 暗號請求,每個就像

FOREACH (id in {ids} | MERGE (:Community {id: id})) 

所有3請求生成在這裏https://github.com/PublicRadio/VK_graph_reflector/tree/master/lib/reflectors(是的,JavaScript的ES2015)

我開始懷疑lucene會因MERGE請求而放慢速度,對嗎?這是原因嗎? 如果我是對的,我該如何優化所有這些東西?

+0

你能分享您所查詢的視覺查詢計劃?只需在配置文件 –

+0

的前面加上前綴即可:所有活動索引和約束與:瀏覽器中的模式 –

+0

真棒!謝謝,我的朋友!我發現了一些限制,現在我在本地機器上每分鐘創建大約3萬個節點,這是令人難以置信的!我很快就會在服務器上嘗試它,並會檢查它是如何發生的,但它會大大提高性能! – Jabher

回答

0

你可以分享你的視覺查詢計劃嗎?

只需查詢並在瀏覽器中以PROFILE作爲前綴即可。

我認爲這是一個許多事情:

  1. 使用暗號參數不是字符串替換
  2. 嘗試合併只對具有約束(或指數)
  3. 如果你不這樣做單一性質需要合併使用MATCH,即如果數據已經存在!
  4. 如果您不需要唯一關係,請使用CREATE,即當您知道您只需將新節點連接到現有節點時。

是這樣的:

MATCH (group:VK_Group {id: {group_id} }) 
MERGE (post:VK_Wall_Post { id: {post_id}}) ON CREATE SET post.date={post_date} 
CREATE UNIQUE (group)-[:Published]-(post) 
FOREACH (track IN {tracks} | 
    MERGE (trackNode:VK_Track {id: track.id}) 
    ON CREATE SET trackNode.title=track.title, 
        trackNode.duration=track.duration 
    MERGE (artist:Artist {name: track.artist}) 
    MERGE (trackNode)<-[:Performed]-(artist) 
    MERGE (post)-[:Attached]->(trackNode) 
) 

或者能夠使用匹配的循環:

MATCH (group:VK_Group {id: {group_id} }) 
MERGE (post:VK_Wall_Post { id: {post_id}}) ON CREATE SET post.date={post_date} 
CREATE UNIQUE (group)-[:Published]-(post) 
UNWIND {tracks} as track 
MERGE (trackNode:VK_Track {id: track.id}) 
     ON CREATE SET trackNode.title=track.title, 
        trackNode.duration=track.duration 
MERGE (artist:Artist {name: track.artist}) 
MERGE (trackNode)<-[:Performed]-(artist) 
MERGE (post)-[:Attached]->(trackNode) 
+0

1,2.好吧,拿到它 3,4。我真的需要獨特的條目和(我認爲至少)與唯一ID的關係,這是一個點 – Jabher

+0

不與唯一的ID關係,它通常是不需要的。 –