neo4j在很多合并请求上应该很慢吗?

时间:2015-05-29 16:51:58

标签: performance neo4j lucene

我遇到一个非常缓慢的 neo4j htop 显示它吃了服务器上所有CPU的 lucene

我主要是写数据,每秒尝试50-500 cypher 请求,每个都是

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

所有3个请求生成器都在https://github.com/PublicRadio/VK_graph_reflector/tree/master/lib/reflectors(是的,JavaScript ES2015)

由于MERGE请求,我开始怀疑lucene会减慢一切,我是对的吗?这可能是原因吗? 如果我正确的话,我怎样才能优化所有这些?

1 个答案:

答案 0 :(得分:0)

您可以分享您的视觉查询计划吗?

只需接受查询,并在浏览器中为PROFILE添加前缀。

我认为有很多事情:

  1. 使用cypher参数而非字符串替换
  2. 尝试仅合并具有约束(或索引)的单个属性
  3. 如果您不需要合并使用MATCH,即数据已经存在!
  4. 如果您不需要独特的关系,请使用CREATE,即当您知道只需要将新节点连接到现有节点时。
  5. 类似的东西:

    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)