Как написать полмиллиарда записей в neo4j за разумное время (менее 1 дня)? - PullRequest
0 голосов
/ 13 января 2019

Я обрабатываю большое количество данных электронной почты и хотел бы загрузить все в базу данных neo4j.

Идея состоит в том, чтобы выделить узел для каждого адреса, и ребра для каждого электронного письма отправлялись между двумя или более адресами.

from py2neo import Graph,Node,Relationship,authenticate
graph = Graph()
tx = graph.begin()

# doing the following in batches of 100 and then commit
a = Node("E-mail_subject", name=str(num))
b = Node("Address", name=dest_addr)
tx.merge(a, "E-mail_subject", "name")
tx.merge(b, "Address", "name")
ba = Relationship(b, "WAS_ON", a, time=t, name=num, weight=w, _id=tx_hash)
tx.create(ba)

# commit every 100 relations
tx.commit()

Для загрузки 500 миллионов электронных писем в neo4j требуется много времени. Любое предложение, как сделать это быстрее?

1 Ответ

0 голосов
/ 13 января 2019

почему бы не использовать импорт CSV. будет чертовски быстрее!

USING PERIODIC COMMIT 1000 LOAD CSV FROM EMAIL_CSV_FILE  as line merge
(:E-mail_subject{name:line[0]}) 

USING PERIODIC COMMIT 1000 LOAD CSV FROM ADDRESS_CSV_FILE  as line
merge (:Address{name:line[0]}) 

USING PERIODIC COMMIT 1000 LOAD CSV FROM WAS_CSV_FILE  as line merge 
(:E-mail_subject{name:line[0]}) -[:WAS_ON{time=line[2], name=line[3],
weight=line[4], _id=line[5]}]-(:Address{name:line[1]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...