2014-10-29 65 views
1

我想導入csv文件與約4000萬行到neo4j。爲此,我嘗試使用https://github.com/jexp/batch-import中的「批量輸入器」。 也許這是一個問題,我提供自己的ID。這是例子neo4j batchimporter與大ID很慢

nodes.csv

我:ID L:標籤

315041100人

201215100人

315041200人

RELS。 csv:

開始 端 類型 relart

315041100 201215100 HAS_RELATION 30006

315041200 315041100 HAS_RELATION 30006

的batch.properties的內容:

use_memory_mapped_buffers=true 
neostore.nodestore.db.mapped_memory=1000M 
neostore.relationshipstore.db.mapped_memory=5000M 
neostore.propertystore.db.mapped_memory=4G 
neostore.propertystore.db.strings.mapped_memory=2000M 
neostore.propertystore.db.arrays.mapped_memory=1000M 
neostore.propertystore.db.index.keys.mapped_memory=1500M 
neostore.propertystore.db.index.mapped_memory=1500M 
batch_import.node_index.node_auto_index=exact 


./import.sh graph.db nodes.csv rels.csv 

將被正確處理,但大約需要60秒!

Importing 3 Nodes took 0 seconds 
Importing 2 Relationships took 0 seconds 
Total import time: 54 seconds 

當我使用較小的標識 - 例如3150411,而不是315041100 - 它需要僅需1秒!

Importing 3 Nodes took 0 seconds 
Importing 2 Relationships took 0 seconds 
Total import time: 1 seconds 

其實我會帶10個數字更大的ID。我不知道我做錯了什麼。任何人都可以看到錯誤?

  • JDK 1.7
  • batchimporter 2.1.3(與Neo4j的2.1.3)
  • OS:ubuntu的14.04
  • 設備:8核-Intel的CPU,RAM 16GB

回答

1

我認爲問題在於批量導入程序正在將這些ID解釋爲磁盤上的實際物理ID。所以時間花在文件系統上,將商店文件擴大到可以適應這些高IDS的大小。

您給出的ID是打算成爲批量導入的「內部」,或者?雖然我不確定如何告訴批量進口商。

@ michael-hungry有沒有什麼輸入?

0

問題是這些ID在Neo4j內部,它們代表磁盤記錄標識。如果您在那裏提供較高的值,Neo4j將創建很多空記錄,直到它到達您的ID。

因此,無論您是從0開始創建節點標識,並將您的標識存儲爲常規節點屬性。 或者你不提供節點ID都只有查找節點的通過他們的「業務ID值」

i:id id:long l:label 
0 315041100 Person 
1 201215100 Person 
2 315041200 Person 

start:id end:id type relart 
0 1 HAS_RELATION 30006 
2 0 HAS_RELATION 30006 

,或者您必須配置和使用索引:

id:long:people l:label 
315041100 Person 
201215100 Person 
315041200 Person 

id:long:people id:long:people type relart 
0 1 HAS_RELATION 30006 
2 0 HAS_RELATION 30006 

HTH邁克爾

或者,你也可以只寫一個小的java或groovy程序來導入你的數據,如果處理批處理導入這些ID太棘手。 參見:http://jexp.de/blog/2014/10/flexible-neo4j-batch-import-with-groovy/