【问题标题】:Neo4j and relationships creation: bad performanceNeo4j 和关系创建:表现不佳
【发布时间】:2017-08-06 11:12:18
【问题描述】:

您好,提前感谢您的帮助。

我正在使用 Neo4jver. 3.2.1,在 Windows 10 上)导入 2 个 CSV 文件并在它们之间创建图表像往常一样,具有相同字段的不同数据。

第一次导入产生 1 百万 个节点 (Label_1),第二次导入 100000 个节点 (Label_2 )。

我已经导入文件并成功创建节点;我尝试用一​​个简单的查询来连接节点,但它太慢了,每分钟约 100 个关系:

MATCH (c:Label_1) WITH c,
c.label_1_key AS currentid
MATCH (g:Label_2) 
WHERE g.label_2_key = currentid
CREATE (g)-[:rel]->(c);

创建 2 个索引(一个在 label_1_key 上,另一个在 label_2_key 上)似乎并没有提高性能。

加速关系创建阶段的最佳方法是什么?

(如果这些信息可以提供帮助,我正在使用 Intel i3 1.9 Ghz 和 8GB RAM 的笔记本电脑)

【问题讨论】:

  • 此查询是否有效/完成?需要多长时间?
  • 是的,它有效。我在 7 小时后停止了这个过程(因为我决定寻找更好的解决方案......并在这里寻求帮助 ^^")

标签: database performance database-design graph neo4j


【解决方案1】:

试试这个:

1) 创建唯一索引:

CREATE CONSTRAINT ON (l1:Label_1) ASSERT l1.label_1_key IS UNIQUE;
CREATE CONSTRAINT ON (l2:Label_2) ASSERT l2.label_2_key IS UNIQUE;

2) 加载 CSV 以创建节点(我从您的解释中假设它是两个单独的文件,因此是两个不同的负载)。由于索引的原因会稍微慢一些,但仍然应该很快。

3) 使用第二个文件(最小的)再做一个 LOAD CSV。

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///second_file.csv" as line
MATCH (l1:Label1 {label_1_key: line.whatevertheheaderofthekeyis})
MATCH (l2:Label2 {label_2_key: line.whatevertheheaderofthekeyis})
MERGE (l1)-[:REL]->(l2);

由于您只有 100000 个关系要创建(同样,根据您的解释做出的假设),这应该很快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-01
    • 2014-08-27
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    相关资源
    最近更新 更多