Запрос производительности записи на neo4j с py2neo - PullRequest
0 голосов
/ 12 ноября 2018

В настоящее время я изо всех сил пытаюсь найти эффективный способ, выполняя несколько запросов с py2neo. Моя проблема в том, что у меня большой список запросов на запись в python, которые нужно записать в neo4j.

Я пробовал несколько способов решить проблему прямо сейчас. Лучший рабочий подход для меня был следующий:

from py2neo import Graph
queries = ["create (n) return id(n)","create (n) return id(n)",...] ## list of queries
g = Graph()
t = graph.begin(autocommit=False)
for idx, q in enumerate(queries):
    t.run(q)
    if idx % 100 == 0:
        t.commit()
        t = graph.begin(autocommit=False)
t.commit()

Это все еще занимает много времени для написания запросов. Я также попытался запустить многие из apoc безуспешно, запрос не был завершен. Я также попробовал тот же метод записи с автоматической фиксацией. Есть лучший способ сделать это? Существуют ли уловки, например, сначала удаление индексов, а затем добавление их после вставки данных?

- Изменить: Дополнительная информация:

Я использую Neo4j 3.4, Py2neo v4 и Python 3.7

1 Ответ

0 голосов
/ 15 ноября 2018

Возможно, вы захотите прочитать советы и рекомендации Майкла Хангера по быстрым пакетным обновлениям .

Ключевой трюк использует UNWIND для преобразования элементов списка в строки, а затем для каждой строки выполняются последующие операции.

Существуют вспомогательные функции, которые могут легко создавать списки для вас, например range () .

Например, если вы хотите создать 10k узлов и добавить свойство name, а затем вернуть имя узла и его идентификатор графа, вы можете сделать что-то вроде этого:

UNWIND range(1, 10000) as index
CREATE (n:Node {name:'Node ' + index})
RETURN n.name as name, id(n) as id

Аналогичным образом, если у вас есть достаточный объем данных для импорта, вы можете создать список карт параметров, вызвать запрос, а затем ОТКЛЮЧИТЬ список для одновременной обработки каждой записи, аналогично тому, как мы обрабатываем файлы CSV с помощью LOAD CSV .

...