2012-12-03 38 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上很重。