Найти - Пользователи
Полная версия: djanfo mptt копирование 500 000 элементов
Начало » Django » djanfo mptt копирование 500 000 элементов
1
legi0ner
Всем привет.

Для работы с иерархической структурой использую django mptt.
Возникла проблема при копировании элементов. Так как тут не работает bulk create, не знаем будущего идентификатора объекта, приходиться создавать элементы в цикле.
Чем больше данных, тем больше времени, ресурсов используется.
Знаю, что нет 100% правильного решения. Может есть какие либо варианты с помощью которых можно ускорить работу копирования.

сейчас это выглядит упрощенно вот так

def copy_node(node, parent):
new_node = TreeStructure(
parent=parent
name=node.name
)
new_node.save()

for child in node.children.all():
self.copy_node(child, new_node)
return new_node


with transaction.atomic():
with TreeStructure.tree.delay_mptt_updates():
new_node = self.copy_node(node, parent)
scidam
С большими объемами данных с mptt не работал, но он сохраняет структуру древовидную в обычной таблице со вспомогательными колонками lft, rght – которые и характеризуют положение элемента в иерархии. До конца, однако, задача мне не ясна, но если бы lft и rght можно вычислить заранее в вашей задаче, то можно использовать и bulk_create, чтобы сразу создать много записей в таблице…
code_ua
как вариант, во время такого копирования не использовать или отключить модель mptt, а потом перестроить ключи через rebuild() https://django-mptt.github.io/django-mptt/models.html#rebuild
code_ua
отключать можно так: https://django-mptt.github.io/django-mptt/mptt.managers.html#mptt.managers.TreeManager.disable_mptt_updates
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB