Neo4J Загрузить CSV из Cypher выдает "Неизвестная ошибка" или DeadlockDetected
Я оцениваю использование Neo4J Community 2.1.3 для хранения списка концепций и отношений между ними. Я пытаюсь загрузить свои образцы тестовых данных (файлы CSV) в Neo4J, используя Cypher из веб-интерфейса, как описано в интерактивном руководстве.
Мои данные выглядят примерно так:
concepts.csv
id,concept
1,tree
2,apple
3,grapes
4,fruit salad
5,motor vehicle
6,internal combustion engine
relationships.csv
sourceid,targetid
2,1
4,2
4,3
5,6
6,5
И так далее... Для моего примера у меня есть ~17K концепций и ~16M отношений. Следуя инструкции, я запустил сервер Neo4J и ввел его в Cypher:
LOAD CSV WITH HEADERS FROM "file:///data/concepts.csv" AS csvLine
CREATE (c:Concept { id: csvLine.id, concept: csvLine.concept })
Это работало нормально и загрузило мои концепции. Затем я попытался загрузить свои отношения.
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///data/relationships.csv" AS csvLine
MATCH (c1:Concept { id: csvLine.sourceid }),(c2:Concept { id: csvLine.targetid })
CREATE (c1)-[:RELATED_TO]->(c2)
Это будет работать в течение часа или около того, но всегда останавливается с помощью:
- "Неизвестная ошибка" (другой информации нет!), Или
- "Neo.TransientError.Transaction.DeadlockDetected" с подробным сообщением типа "LockClient[695] не может ожидать ресурс RWLock[RELATIONSHIP(572801), hash=267423386], поскольку => LockClient[695] <- [: HELD_BY] - RWLock [NODE (4145), hash = 1224203266] <- [: WAITING_FOR] - LockClient [691] <- [: HELD_BY] - RWLock[RELATIONSHIP(572801), hash=267423386] "
Это остановится после загрузки, может быть, 200-300K отношений. Я выполнил "sort | uniq" на сайте relationss.csv, поэтому я почти уверен, что дубликатов нет. Я посмотрел на файлы журнала в data / log, но не нашел сообщения об ошибке.
Кто-нибудь видел это раньше? Кстати, я не против потерять небольшую часть отношений, поэтому я буду рад, если смогу просто отключить ACID-транзакции. Я также хочу избежать написания кода (для использования Java API) на этом этапе. Я просто хочу загрузить свои данные, чтобы попробовать. Есть какой-либо способ сделать это?
В моем полном наборе данных будут миллионы концепций и, возможно, сотни миллионов взаимосвязей. Кто-нибудь знает, может ли Neo4J обрабатывать такое количество данных?
Спасибо.
1 ответ
Вы делаете это правильно. Используете ли вы neo4j-shell или браузер?
Ты сделал: create index on :Concept(id);
?
Если у вас нет индекса, поиск концепций займет экспоненциально больше времени, так как он должен сканировать все узлы этой метки на предмет этого id-значения. Вы должны / могли бы также проверить через префикс вашего запроса с PROFILE
если он использует индекс для обоих совпадений.
Никогда раньше не видел этот тупик, несмотря на импорт миллионов отношений. Можете ли вы поделиться полной трассировкой стека? Если вы используете оболочку, вы можете сделать export STACKTRACES=true
Вы можете использовать USING PERIODIC COMMIT 1000
?