【问题标题】:How to write a more efficient import query in Neo4j using APOC如何使用 APOC 在 Neo4j 中编写更高效的导入查询
【发布时间】:2020-05-11 17:45:17
【问题描述】:

我有一个大型数据库,当我尝试执行我的查询时:

https://textuploader.com/1cduz

完成需要超过 4 天。

你能帮我建立一个可能正在使用 APOC 的新系统吗?

【问题讨论】:

  • 你能分享一下csv文件有多大吗?有多少条记录?
  • 所有字段都是可选的是不寻常的。每个领域都需要COALESCE吗?
  • @Raj 有 1010252 条记录,文件大小为 1,2 gb。
  • @cybersam 我认为是的,因为如果我不设置它,则会显示空值消息
  • 好的,但肯定不是每个字段都可以有缺失值。此外,您应该评估您的 CSV 数据以确定缺少某些字段的原因、处理每个此类字段的正确方法(例如,跳过整条记录)以及文件的生成方式是否存在问题(例如,并非所有记录具有预期的字段数)。换句话说,正确清理传入数据非常重要,这样您的数据库才能获得可靠且一致的数据。简单地用一些任意值替换所有缺失数据的字段可能会产生不可靠的数据库。

标签: neo4j cypher neo4j-apoc load-csv


【解决方案1】:

我认为您没有使用约束(或索引)。

根据您的查询,workId 似乎是一个唯一键。 您应该在其上创建唯一约束,以便在 MERGE 子句中更快地搜索。

CREATE CONSTRAINT unique_work_id
ON (n:Work)
ASSERT n.workId IS UNIQUE

您还可以查看其他几个tips on faster data load in this answer

【讨论】:

  • 不幸的是,它花费的时间太长了
  • 1M 记录不是一个大数字,应该不会花太多时间。您能否分享您尝试了哪些步骤以及更新后的查询?
  • 另外,如果您可以用少量记录分析查询并在此处共享查询计划
  • 我使用了一个只有几条记录的示例文件,我只是使用了您的约束查询,应用了 2:parameters 查询(用于 COALESCE),然后使用了我在上面发布的相同查询。这里是来自 Profiling 的截图链接:drive.google.com/open?id=1T0jvkC6bd_3w4h7POo3Ou_c_VLe4Angs
  • 您只需单击“导出”图标(看起来像指向收件箱的向下箭头)并选择“导出 PNG”选项,即可为计划生成单个 PNG 文件。查看计划没有约束也将非常有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
相关资源
最近更新 更多