【发布时间】:2017-08-03 07:41:56
【问题描述】:
我有一个 pairs 流,其中 id 是节点的数字 id,而 ids 是相邻节点的 id 列表。 我使用此查询从此类流中更新节点:
WITH ${ids.mkString("[", ",", "]")} as ids
UNWIND ids as u2id
MERGE (u1:User {Id:${id}})
MERGE (u2:User {Id:u2id})
CREATE UNIQUE p = (u1) - [:FRIEND] -> (u2)
我在 ID 标签上有索引
CREATE INDEX ON :User(Id)
ids列表的长度平均在100-200左右。
现在有大约 6000 万个节点和 mil。数据库中的边数。更新插入的速度约为每秒 pairs。 Neo4j 在配备 Core i5、28Gb RAM 和 2Tb WD Black 的专用机器上运行。
我想知道如何优化 upserting 查询或改进硬件的任何提示。
【问题讨论】:
-
几个问题... 1) 流是否恒定(不是说您可以在 CSV 文件中包含所有更新并执行 LOAD CSV)? 2) User(Id) 仅仅是索引还是唯一约束? 3)您实际上是否也在创建新用户(MERGE 暗示)? 4) 你能添加一个这样的执行的 PROFILE 的扩展图像吗?
-
抱歉回答迟了,1) 是的,它是真正的流 2) 索引 3) 是的,正在创建 4) 不幸的是,目前无法访问数据库
标签: scala neo4j query-optimization