Как разделить создание узла в Java с использованием Neo4J на более мелкие транзакции, используя CALL {} IN TRANSACTIONS?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как разделить создание узла в Java с использованием Neo4J на более мелкие транзакции, используя CALL {} IN TRANSACTIONS?

Сообщение Anonymous »

Я разрабатываю приложение Java, используя Neo4j версии 5.20.0 (

Код: Выделить всё

implementation "org.neo4j:neo4j:5.20.0"
), и я хочу сохранить список объектов Person в базе данных.
В настоящее время у меня есть метод создания узлов, использующий одну большую транзакцию:

Код: Выделить всё

private void saveNodes(List
 people) {
try (Transaction tx = graphDb.beginTx()) {
for (Person person : people) {
Node node = tx.createNode(NodeLabel.Person);
node.setProperty("id", person.getId().toString());
// 10+ properties
}
tx.commit();
}
}
Однако я сохраняю большое количество узлов и во время операции сталкиваюсь со следующей ошибкой:

Код: Выделить всё

Caused by: org.neo4j.memory.MemoryLimitExceededException: The allocation of an extra 2.0 MiB would use more than the limit 11.1 GiB. Currently using 11.1 GiB. dbms.memory.transaction.total.max threshold reached
Я понимаю, что это связано с объемом данных и размером транзакции.
Моя цель — разбить этот процесс на более мелкие транзакции, чтобы избежать подобных проблем. . Я знаю, что в Cypher есть оператор CALL { ... } IN TRANSACTIONS, который позволяет обрабатывать данные пакетно.
Можно ли реализовать подобную логику в Java-коде? Если да, то как я могу это сделать?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ns-using-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»