Каков рекомендуемый эффективный способ памяти для массового обновления свойств? - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть база данных Neo4j с более чем 30 миллионами узлов. Мне интересно, какой может быть самый эффективный (в отношении памяти и скорости) подход для массового обновления возвращаемого шаблона в свойстве узла с использованием только оболочки Cypher.

Например: наличие узла с меткой ПОЛЬЗОВАТЕЛЬ с именем свойства типа String, например:

'Peter_Test'

Если я хочу избавиться от всех подчеркиваний в массовом обновлении, каков наилучший способ добиться этого без необходимости выбирать каждый из 30 миллионов узлы в одной транзакции, обновить содержимое и записать его обратно в одно и то же свойство?

Выбор всех узлов USER авансом и последующее UNWIND для каждой записи в выборке плюс обновление определенно приведет к проблемам с памятью .

Какой совет для выполнения такой задачи?

1 Ответ

1 голос
/ 22 февраля 2020

Вы можете использовать для этого процедуру apo c apo c .periodi c .iterate,

CALL apoc.periodic.iterate( "MATCH (o:Order) WHERE o.date > '2016-10-13' RETURN o", "MATCH (o)-[:HAS_ITEM]->(i) WITH o, sum(i.value) as value SET o.value = value", {batchSize:100})

Это пример в документации. Там, где вы возвращаете узлы, которые должны быть обновлены в первом запросе, и выполняете обновление во втором запросе. Здесь вы не будете загружать все 30 миллионов узлов одновременно. Вы можете настроить его, используя размер пакета.

Проверьте документация здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...