Neo4j索引 - 我应该索引什么来加速CSV加载?

时间:2017-06-20 14:51:48

标签: neo4j

我使用CSV文件中的单个标签导入大约6m个节点。 Neo4J Web UI建议创建一个索引来加快速度,但我不确定索引是什么。每个节点都有5个属性 - 一个是唯一的,所以我已经将该字段编入索引,但值得为其他人编制索引吗?

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///impressions.csv" AS row
MERGE (i:Impression { id: row._id, advertId: row.advertId, contentId: 
row.contentId, deviceId: row.deviceId });

数据最初来自Mongo,因此id字段是保证唯一的。

2 个答案:

答案 0 :(得分:1)

RE

您应该为标记展示的字段ID创建唯一约束:CREATE CONSTRAINT ON (n:Impression) ASSERTS n.id IS UNIQUE

您还应该通过以下方式更改查询:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///impressions.csv" AS row
MERGE (i:Impression { id: row._id,})
  ON CREATE SET i.advertId=row.advertId, i.contentId=
row.contentId, i.deviceId=row.deviceId

干杯

答案 1 :(得分:1)

如果您正在导入,并且您知道正在导入的节点尚不存在,并且该标签的每个节点的ID都不存在(例如,如果没有:要开始的Impression节点),在导入之前省略约束可能会快一些,并使用CREATE而不是MERGE(具有所有属性)。导入完成后,您可以创建唯一约束。

索引(包括来自唯一约束的索引)使得查找更快,例如MATCH和MERGE的匹配部分,但它在写入数据时会产生影响,因为索引必须更新,和节点创建测试的唯一约束。因此,如果您正在批量加载并且您绝对确定这些都是新节点,并且在唯一属性上没有重复,请使用一种方法使您的写入速度更快,然后添加您的唯一约束。