首页 > 解决方案 > 如何打印日志和测量执行时间

问题描述

目前,我正在尝试导入一个包含大约 200 万行的 CSV 文件。每条线对应一个节点。我正在使用 neo4j 浏览器。注意:我也尝试过neo4j 导入工具,但它也以某种方式运行得更慢。

我尝试使用标准密码查询来运行脚本,例如

USING PERIODIC COMMIT 500 LOAD CSV FROM 'file:///data.csv' AS r 
WITH toInteger(r[0]) AS ID, toInteger(r[1]) AS national_id, toInteger(r[2]) as passport_no, toInteger(r[3]) as status, toInteger(r[4]) as activation_date 
MERGE (p:Customer {ID: ID}) SET p.national_id = national_id, p.passport_no = passport_no, p.status = status, p.activation_date = activation_date

这工作非常缓慢。

后来我试过了。

CALL apoc.periodic.iterate('CALL apoc.load.csv(\'file:/data.csv\') yield list as r return r','WITH toInteger(r[0]) AS ID, toInteger(r[1]) AS national_id, toInteger(r[2]) as passport_no, toInteger(r[3]) as status, toInteger(r[4]) as activation_date MERGE (p:Customer {ID: ID}) SET p.national_id = national_id, p.passport_no = passport_no, p.status = status, p.activation_date = activation_date',
{batchSize:10000, iterateList:true, parallel:true});

这个选项似乎工作得更快,因为parallel选项是true. 我想测量一批的执行时间。

我如何在 neo4j 浏览器上打印一些东西?

我如何测量一批的执行时间?

标签: neo4jcyphergraph-databases

解决方案


  1. 您的第一个查询使用 500 的批量大小,而您的第二个查询使用大 20 倍的批量大小。您需要使用相同的批量大小来进行有效比较。

  2. 由于您的查询需要大量批次(至少 200 个),因此将总时间除以批次数应该是每批次平均时间的合理近似值。

  3. 您是否在上创建了索引:Customer(ID)?这应该有助于加快您的查询速度。

  4. 您应该考虑是否应该在子句中使用ON CREATE表达式。MERGE现在,该SET子句总是被执行,即使节点已经存在。


推荐阅读