2015-05-29 45 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关系,它通常是不需要的。 –