Neo4j有条件批量导入

时间:2013-03-11 07:47:25

标签: neo4j batch-processing

数据以300-500 TPS的速率连续进入系统。我需要使用以下方案将其导入neo4j:

  1. 如果N节点不存在,请创建
  2. 如果关系N [rel:rel_type] - > X不存在,请创建
  3. 增量rel.weight
  4. 使用REST批处理似乎无法解决问题。 不同的密码查询太长,因为它们会产生许多小事务。

    Gremlin工作得更快。我在数组中收集gremlin脚本的参数并作为批处理执行。但即使我很难达到300 TPS的速度。

    我应该提一下,除了会有一个查询流~500 TPS:

    START N=node(...) MATCH N-[rel:rel_type]->X return rel.weight,X.name;
    

    堆大小设置为5 Gb。其他选项:

    -XX:MaxPermSize=1G -XX:+CMSClassUnloadingEnabled -XX:+UseParallelGC -XX:+UseNUMA
    

    导入此类数据的最佳方式和配置是什么?

1 个答案:

答案 0 :(得分:3)

要检查传入节点是否存在并且是否具有其他节点的rel,您可以使用create unique syntax。

START n=node:node_index(newNode={N})
CREATE UNIQUE n-[:REL_TYPE]->x ;

自动增加关系的权重,我会假设这样的事情(但对此没有保证,可能有更快的方法):

START n=node:node_index(newNode={N})
CREATE UNIQUE n-[rel:REL_TYPE]->x
SET rel.weight = coalesce(rel.weight?,0) +1