我使用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字段是保证唯一的。
答案 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的匹配部分,但它在写入数据时会产生影响,因为索引必须更新,和节点创建测试的唯一约束。因此,如果您正在批量加载并且您绝对确定这些都是新节点,并且在唯一属性上没有重复,请使用一种方法使您的写入速度更快,然后添加您的唯一约束。