Performance 使用多个合并优化neo4j查询

Performance 使用多个合并优化neo4j查询,performance,neo4j,cypher,query-optimization,Performance,Neo4j,Cypher,Query Optimization,我需要做什么 对于每个查询,我需要按设备id查找用户,如果不存在,则创建一个新节点。对于每一行,如果行s包含某些属性,我需要更新/创建一些边。负载很重(约20k/秒),neo4j速度减慢。每批大小正好是20k。我的问题是: UNWIND {batch} as row MERGE (m:User {device_id: row.device_id}) FOREACH (ignore IN CASE WHEN row.type IS NOT NULL THEN [1] ELSE [] END |

我需要做什么

对于每个查询,我需要按设备id查找用户,如果不存在,则创建一个新节点。对于每一行,如果
s包含某些属性,我需要更新/创建一些边。负载很重(约20k/秒),neo4j速度减慢。每批大小正好是20k。我的问题是:

UNWIND {batch} as row 
MERGE (m:User {device_id: row.device_id})
FOREACH (ignore IN CASE WHEN row.type IS NOT NULL THEN [1] ELSE [] END |
    MERGE (e:Event {type: row.type}) 
    MERGE (m) -[r:REL]-> (e) 
    SET r.count = ( CASE r.count WHEN NULL THEN 1 ELSE r.count + 1 END) 
)
FOREACH (ignore IN CASE WHEN row.country IS NOT NULL THEN [1] ELSE [] END | 
    MERGE (c:Country {id: row.country}) 
    MERGE (m) -[:Belongs]-> (c) 
)
WITH m, ( CASE row.user_id WHEN NULL THEN m.user_id ELSE row.user_id END) AS user_id 
SET m.user_id = user_id 

我通过将批处理大小减少到5k并在提交之前并行运行事务中的一些批处理来解决这个问题

索引呢?@stdob i对设备\u id Event.type和国家/地区有唯一的限制