Я оцениваю использование Neo4J Community 2.1.3 для хранения списка понятий и отношений между ними. Я пытаюсь загрузить свои тестовые данные (файлы CSV) в Neo4J, используя Cypher из веб-интерфейса, как описано в онлайн-руководстве.Neo4J Загрузка CSV из Cypher выбрасывает «Неизвестную ошибку» или DeadlockDetected
Мои данные выглядит примерно так:
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] since => LockClient [695] < - [: HELD_BY] - RWLock [NODE (4145) , hash = 1224203266] < - [: WAITING_FOR] - LockClient [691] < - [: HELD_BY] - RWLock [RELATIONSHI P (572801), hash = 267423386] "
После прекращения загрузки возможно 200-300K отношений. Я сделал «sort | uniq» в отношении relationss.csv, поэтому я уверен, что дубликатов нет. Я просмотрел файлы журнала в data/log, но не нашел сообщения об ошибке.
Кто-нибудь видел это раньше? Кстати, я не против потерять небольшую часть отношений, поэтому буду рад, если я могу просто отключить транзакции ACID. Я также хочу избежать написания кода (для использования Java API) на данном этапе. Я просто хочу загрузить свои данные, чтобы попробовать. Есть какой-либо способ сделать это?
Мой полный набор данных будет иметь миллионы концепций и, возможно, сотни миллионов отношений. Кто-нибудь знает, может ли Neo4J обрабатывать этот объем данных?
спасибо.
Я использую браузер. Я не создавал индекс. Однако даже без этого я мог бы успешно запросить эти понятия по id и следовать тем отношениям, которые удалось добавить. Я могу попробовать это, а также оболочку завтра. Является ли 1000 периодическим фиксацией по умолчанию? Спасибо за советы. – alexycyap
Обновлен мой ответ –
Я добавил уникальное ограничение для Concept (id), которое автоматически также добавило индекс и использовало ИСПОЛЬЗОВАНИЕ PERIODIC COMMIT 1000. В результате все мои отношения загружаются намного быстрее и без ошибок. Не уверен, какой бит исправил его, но спасибо, что помогли мне решить эту проблему. – alexycyap