【问题标题】:Batch insertion neo4j - best option?批量插入 neo4j - 最佳选择?
【发布时间】:2014-06-10 13:23:38
【问题描述】:

我一直在尝试将一个相对较大的数据集导入 neo4j...大约 5000 万个有关系的节点。

我首先通过 py2neo 尝试了 Cypher -> 确实有效,但如果您需要使用 CREATE UNIQUE 或 MERGE,它会变得非常慢。

我现在正在研究其他批量导入方法,我想知道是否有关于这些方法中哪种方法最适合一般工作流程和速度的建议:

  • Neo4j 文档提到了一个 batch insertion facility,它似乎是 Java 并且是 Neo4j 发行版的一部分;
  • 还有 Michael Hunger 在 github 上的 batch inserter,我不确定这与发行版中包含的相似或不同;
  • 还有load2neo,我目前正在测试;
  • 然后是作为 Neo v2 CYPHER 一部分的 load from CSV 功能,但我不确定它是否主要是一个便利因素,以及它的性能是否类似于仅执行 Cypher 查询,例如 40 000 批通过 Cypher 交易。

对于这些选项之间的功能、工作流程和速度差异,我将不胜感激。

【问题讨论】:

  • 不管怎样,我目前正在使用 Nigel Small 的 load2neo,它似乎运行良好且快速。在我看来,geoff 格式的文本文件比所有属性都作为列标题等的 CSV 文件更容易构建。
  • 我正在考虑使用 load2neo 而不是 CSV 批量导入器。它们的性能相似吗?

标签: python neo4j batch-processing batch-insert


【解决方案1】:

如果您可以使用最新版本的 Neo4j,推荐的方法是使用 Cypher 中新的 LOAD CSV 语句:http://docs.neo4j.org/chunked/stable/cypherdoc-importing-csv-files-with-cypher.html

【讨论】:

  • 您知道 LOAD CSV 语句在性能方面是否与batch CSV importer 实用程序有很大不同?
  • 我的猜测是批处理导入器要快得多,因为它是只写的,而且比使用整个密码语言灵活得多。我个人在大约 40 分钟内使用批量导入器加载了大约 1 亿个节点和关系。尚未尝试使用 LOAD CSV 进行相同的规模。我认为这实际上取决于数据量、操作所需的灵活性(您始终可以进行预处理),以及是否需要在应用程序生命周期内重复(应该是一次性批量导入)。
猜你喜欢
  • 2012-11-29
  • 2016-09-26
  • 2018-04-24
  • 1970-01-01
  • 2013-04-11
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多