2017-06-20 73 views
1

我使用CSV文件中的单个标签导入了大约600万个节点。 Neo4J Web用户界面建议创建一个索引来加快速度,但我不知道要索引什么。每个节点都有5个属性 - 其中一个是唯一的,所以我已经提前将这个字段编入索引,但是值得索引其他字段吗?Neo4j索引 - 我应该索引什么来加速CSV加载?

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

你能给我们你的密码加载csv查询吗? – logisima

回答

1

重新

您应该创建标签印象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 

干杯

+0

阿哈如此只创建索引字段,然后再设置其他字段。这很有道理,谢谢! – rjcoupe

1

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

索引(包括来自唯一约束的索引)使查找更快,例如MATCH和MERGE的匹配部分,但在写入数据时可能会产生影响,因为索引必须更新,以及通过节点创建测试的唯一约束。所以,如果你是批量加载,并且你绝对肯定这些都是新节点,并且在独特属性上没有重复,那么采用一种方法可以使你的写入更加快速,然后在之后添加唯一的约束。