【问题标题】:how to speed up insertion in neo4j from mysql?如何加快从 mysql 插入 neo4j 的速度?
【发布时间】:2012-12-03 15:52:00
【问题描述】:

我在 mysql 中有一个包含 60000 个项目的数据集,我正在尝试将其插入 neo4j。插入正在进行,但需要很长时间(大约每 3 秒 10-15 次)。有什么办法可以加快速度吗?还有什么办法我可以在neo4j中给出诸如唯一键之类的东西,这样重复索引就不会被索引?我是 neo4j 的新手。

我正在使用带有 PHP Everyman 驱动程序的 neo4j 1.8。

【问题讨论】:

  • 您能更具体地介绍一下这个操作吗?据我所知,您不能只制作 Neo4j 的“解析”MySQL 文件;这意味着,您必须首先从 MySQL 中提取数据,并将其存储在 Neo4j 中,其次:性能取决于这两个步骤。你使用 BatchInserter 吗?
  • 数据是使用选择查询从 mysql 中提取的,我不为此使用批处理插入器。由于我是新手,因此我正在遵循 jamell (github.com/jadell/neo4jphp/blob/master/examples/bacon.php) 中的示例。有没有更好的方法?
  • 您提到的 php 代码为每个节点创建和属性设置执行单个 http 操作,这应该至少是 rest-batched,最好在 cypher 中完成(也是 rest-batched),或者使用完成进口商工具之一

标签: mysql nosql neo4j graph-databases


【解决方案1】:

Max De Marzi 有一个很好的演示,关于 ETL 到 Neo4j。

见:http://www.slideshare.net/maxdemarzi/etl-into-neo4j

这取决于您要使用哪种语言,通过 jruby 嵌入的 java 以及通过 ruby​​、php、python 远程嵌入的许多选项。

您可能希望在适当大小的交易中批量处理您的请求(例如,每笔交易 10k 个项目)。

可以使用我的batch-importer 或通过 Neo4j 服务器的BATCH REST API 将 CSV 文件直接导入数据库文件。

【讨论】:

  • 你能给我一个例子,在php中数据从mysql传输到neo4j吗?这对我很有帮助。
  • Neo4j 在插入过程中总是很慢。通过批量插入,我可以达到的最大值是每秒 100 个节点。有什么方法可以插入吗,我有大约 2M 节点可以从我的 MySQL 数据库中创建,然后将它们关联起来。
  • 这似乎与 neo4j 没有直接关系。我从来没有这么慢的插入时间,我做了很多 psql->neo4j 导入。我猜您正在随时随地从 mysql 查询数据 - 尝试首先查询数据并将它们插入 graphML 或 geoff xml 格式。然后只需使用一些内置函数,例如 gremlins g.loadGraphML('mysqlexport.xml') - docs.neo4j.org/chunked/snapshot/…
  • neo 每秒最多可以导入 1M 节点 :) 使用提到的批处理插入器之类的东西,它只需要 csv 文件,即使使用 php,您也可以从 mysql 轻松生成。
【解决方案2】:

如上所述,首选选项是批量导入器。

如果你需要通过 PHP 客户端,这里我举了一个使用 REST 批处理 api 的例子: http://phpfiddle.org/main/code/mu3-sgk

您可以测试最适合您的系统的行/批次。 我的笔记本电脑是 750,我的测试服务器是 1250。 发生的 json_decode 对 CPU 的负担很重。

【讨论】:

    猜你喜欢
    • 2013-08-29
    • 2018-03-14
    • 1970-01-01
    • 2017-11-19
    • 2013-04-03
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多