我是graph databases
,尤其是cypher
的新手。我正在从我的csv
导入数据。下面是我为一些country data
提取的示例,并添加了cities
和states
。现在我正在为areas
推送数据
LOAD CSV WITH HEADERS FROM
"file:///X:/loc.csv" as csvRow
MATCH (ct:city {poc:csvRow.poc})
MERGE (loc:area {eoc: csvRow.eoc, name:csvRow.loc_nme, name_wr:replace(csvRow.loc_nme," ","")})
MERGE (loc)-[:exists_inside]->(ct)
我已经使用相同的查询推送了城市和国家数据,并在它们之间建立了一个关系。
但是,当我试图在areas
中创建city
时,它只会继续前进,它是不会停止的。(15分钟已经过去)。
在我从互联网上得到的数据中,有7000座城市,以及这些城市内的90000个区域。
只是需要时间还是我搞砸了查询。
更新后的
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM
"file:///X:/loc.csv" as csvRow
MATCH (ct:city {poc:csvRow.poc})
MERGE (loc:area {eoc: csvRow.eoc, name:csvRow.loc_nme, name_wr:replace(csvRow.loc_nme," ","")})
MERGE (loc)-[:exists_inside]->(ct)
发布于 2018-03-15 04:29:13
好的,您的查询计划显示NodeByLabelScans和过滤器正在用于查找节点,这意味着每次您匹配或合并到一个节点时,它都必须扫描所有具有给定标签的节点,并对所有节点执行属性访问,以找到您要查找的节点。
您需要对相关的标签/属性组合进行添加索引 (或唯一约束,取决于字段是否应该是唯一的),以便快速查找。
因此,您需要一个on :city(poc),可能还需要on :area(eoc),假设这些属性是指唯一的属性。
编辑
我最初忽略的另一件大事是,您需要在加载CSV之前添加USING PERIODIC COMMIT
,这样加载就会对db的写入进行批处理,这应该可以在这里完成。
https://stackoverflow.com/questions/49290900
复制相似问题