2012-12-03 42 views
1

我有一个60000项目在MySQL数据集,我试图把它插入到neo4j。插入过程正在进行,但需要很长时间(每3秒约10-15次)。有什么办法可以加快速度吗?也有什么办法,我可以给neo4j中的独特密钥等东西,所以重复索引不会被索引?我是neo4j的新手。如何加速从mysql中插入neo4j?

我用PHP Everyman驱动程序使用neo4j 1.8。

+0

你能更具体地了解这个操作吗?据我所知,你不能让Neo4j'解析'MySQL文件;这意味着,您必须先从MySQL中提取数据,然后将其存储在Neo4j中,其次,性能取决于这两个步骤。你使用BatchInserter吗? – raina77ow

+0

数据是从mysql中使用select查询提取的,我不使用batchinserter。由于我是新手,我正在遵循jadell的示例(https://github.com/jadell/neo4jphp/blob/master/examples/bacon.php)。有没有更好的方法来做到这一点? – hablema

+0

您引用的php代码为每个节点创建和属性设置执行单个http操作,这应该至少是休息批处理,在cypher(也是rest-batched)中执行得更好,或者使用其中一个导入器工具完成 –

回答

1

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

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

这取决于你想使用,大量的从Java通过JRuby和远程通过红宝石,PHP,Python的嵌入式期权的语言。

您希望在适当规模的交易中批量处理您的请求(例如,每tx 10k个项目)。

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

+0

Can你给我一个例子,数据从MySQL传输到neo4j在PHP?这真的会帮助我。 – hablema

+0

Neo4j在插入过程中总是很慢。我能达到的最大值是每秒100个节点,并且批量插入。有没有什么方法可以插入,我有大约2M节点从我的MySQL数据库中创建,然后将它们联系起来。 – hablema

+0

这似乎不是neo4j直接相关的。我从来没有这么慢的插入时间,我做了很多psql-> neo4j导入。我想你正在查询来自mysql的数据 - 尝试首先查询数据并将它们插入到graphML或geoff xml格式中。那么只需使用一些内置函数,如gremlins g.loadGraphML('mysqlexport.xml') - http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html#rest-api-load-a示例图 – ulkas

1

如上所述,优选选项是批量导入程序。

如果你需要通过PHP客户端,在这里我已经把一个使用REST API批次的例子: http://phpfiddle.org/main/code/mu3-sgk

您可以测试的行/批什么最适合你的系统。 对于我的笔记本电脑它是750,对于我的测试服务器它是1250. 发生的json_decode在CPU上很重。