1

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

  1. 如果 N 节点不存在,则创建它
  2. 如果关系 N-[rel:rel_type]->X 不存在,则创建它
  3. 增加相对重量

使用 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

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

4

1 回答 1

3

要检查传入节点是否存在并与其他节点有关系,您可以使用创建唯一语法。

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
于 2013-03-11T08:05:30.280 回答