Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 14, 2010 11:19:10

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

ZODB как бороться с распуханием при добавлении в btree?

проблема:
выполняю много добавлений элементов в OOBtree примерно так

btree=root["Mytree"]
for ...
btree[datetime_now]=rec
transaction.commit()
при этом файл базы очень сильно пухнет (становится в сотни раз больше количества добавленных данных).
Борюсь тем что делаю периодически db.pack() и делаю commit не после каждого добавления.
Это конечно полумеры. commits по хорошему должны быть после каждого добавления.
Что делается не так?



Офлайн

#2 Ноя. 16, 2010 13:04:21

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

ZODB как бороться с распуханием при добавлении в btree?

Никак. Насколько я понимаю, при каждом commit'е у тебя получается новая (обновлённая конечно) копия дерева в базе.
Возможно zope.bforest поможет, не пробовал.

..bw



Офлайн

#3 Авг. 1, 2011 20:29:44

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

ZODB как бороться с распуханием при добавлении в btree?

Случайно наткнулся на старую ветку:
Проблема была в том, что rec не был производным от Persistent. Причем размер данных был десятки килобайт. При commit копировались и данные и дерево. Этого не происходит если объект уже в базе. Тогда копируются только указатели на объекты и распухание намного меньше.

Вот - может кому пригодятся знания.



Отредактировано (Авг. 1, 2011 20:30:19)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version