Я пытаюсь загрузить довольно большой (~ 200 миллионов строк) файл в neo4j, используя LOAD CSV
, например,
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM
'file:///home/manu/citation.csv.gz' AS line
MATCH (origin:`publication` {`id`: line.`cite_from`})
MATCH (destination:`publication` {`id`: line.`cite_to`})
MERGE (origin )-[rel:CITES ]->(destination );
, но продолжаю видеть ошибки памяти, такие как
raise CypherError.hydrate(**metadata)
neo4j.exceptions.TransientError: There is not enough memory to perform
the current task. Please try increasing 'dbms.memory.heap.max_size' in
the neo4j configuration (normally in 'conf/neo4j.conf' or, if you you
are using Neo4j Desktop, found through the user interface) or if you
are running an embedded installation increase the heap by using '-Xmx'
command line flag, and then restart the database.
при запуске кода и на сервере
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "neo4j.StorageMaintenance-14"
2018-12-05 15:44:32.967+0000 WARN Java heap space
java.lang.OutOfMemoryError: Java heap space
2018-12-05 15:44:32.968+0000 WARN Unexpected thread death: org.eclipse.jetty.util.thread.QueuedThreadPool$2@b6328a3 in QueuedThreadPool[qtp483052300]@1ccacb0c{STARTED,8<=8<=14,i=1,q=0}[ReservedThreadExecutor@f5cbd17{s=0/1,p=0}]
Exception in thread "neo4j.ServerTransactionTimeout-6" Exception in thread "neo4j.TransactionTimeoutMonitor-11" java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap
Конечно, я пытался установить эту вещь dbms.memory.heap.max_size
(до 24 ГБ ... выше этого, мой 32-ГБ компьютер не будет дажебыть в состоянии начать neo4j), но я все еще получаю те.Я не совсем понимаю, какова цель части USING PERIODIC COMMIT
, если (кажется) neo4j пытается загрузить все сразу?Глядя на руководство или, например, эту ветку , вы думаете, что USING PERIODIC COMMIT
- это решение именно той проблемы, с которой я столкнулся.
Есть какие-нибудь подсказки?Единственный обходной путь, который приходит на ум, - это разделить файл на несколько частей, но это не выглядит элегантным решением (также, если это работает ... не мог бы neo4j сделать это для меня прозрачно?)
РЕДАКТИРОВАТЬ: план запроса, используя EXPLAIN
Cheers.