Итерация узлов в Neo4j с использованием py2neo

Я работаю над использованием Neo4j с py2neo для анализа данных Twitter. Я новичок во всем этом, поэтому вопрос может быть довольно простым. Но я не смог найти ответ ни в одной документации. У меня есть два CSV-файла, один со 100 подписчиками, другой с примерно 22000 твитов. Для твита у меня есть информация, что это ответ на другой твит и другие пользователи, которые были упомянуты в этом твите.

Я хочу добавить подписчиков и твиты в качестве узлов, а затем, используя поля reply_to и упоминаний_пользователя твитов, добавить связи между твитами (reply_to) и твитом и пользователем (упоминания).

Добавление узлов хорошо работает с пакетной обработкой. Однако, когда я хочу перебрать все твиты, используя py2neo, чтобы добавить отношения, я получаю OutOfMemoryError: пространство кучи Java.

Я пытаюсь перебрать твиты следующим образом:

for tweet in graph.find("Tweet")

Теперь у меня вопросы: а) Есть ли в py2neo другой способ перебирать (много) узлов? б) Немного шире: я читал в документации py2neo, что лучше использовать шифрованные транзакции, чем пакетные. Должен ли я это сделать и может ли это также помочь для а)?

Заранее благодарю за любую помощь! КММ


person KMM    schedule 16.12.2014    source источник


Ответы (1)


Конечно, существуют способы эффективной загрузки больших объемов данных, но этот конкретный метод (поиск всех элементов определенного «типа») не использует преимущества графовой структуры базы данных и, следовательно, не будет хорошо масштабироваться.

Вы, конечно, можете увеличить размер кучи Java, если это одноразовое действие, и вам это может сойти с рук. Но лучше всего, вероятно, изучить операцию LOAD CSV: http://neo4j.com/docs/stable/query-load-csv.html

person Nigel Small    schedule 16.12.2014