2014-08-28 2 views
1

Я оцениваю использование 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 обрабатывать этот объем данных?

спасибо.

ответ

0

Вы делаете это правильно. Вы используете оболочку neo4j или браузер?

Вы сделали: create index on :Concept(id);?

Если у вас нет индекса, поиск концепций займет экспоненциально длиннее, так как он должен проверять все узлы этой метки для этого значения id. Вы должны/могли также проверить с помощью префикса вашего запроса PROFILE, если он использует индекс для обоих совпадений.

Никогда не видел этот тупик, несмотря на импорт миллионов отношений. Можете ли вы поделиться полной трассировкой стека?Если вы используете shell, возможно, вы захотите сделать export STACKTRACES=true

Вы можете использовать USING PERIODIC COMMIT 1000?

+0

Я использую браузер. Я не создавал индекс. Однако даже без этого я мог бы успешно запросить эти понятия по id и следовать тем отношениям, которые удалось добавить. Я могу попробовать это, а также оболочку завтра. Является ли 1000 периодическим фиксацией по умолчанию? Спасибо за советы. – alexycyap

+0

Обновлен мой ответ –

+0

Я добавил уникальное ограничение для Concept (id), которое автоматически также добавило индекс и использовало ИСПОЛЬЗОВАНИЕ PERIODIC COMMIT 1000. В результате все мои отношения загружаются намного быстрее и без ошибок. Не уверен, какой бит исправил его, но спасибо, что помогли мне решить эту проблему. – alexycyap

Смежные вопросы