Эффективная миграция данных в большой таблице django

Мне нужно добавить новый столбец в большую (5-метровую) таблицу django. У меня есть схема миграции на юг , которая создает новый столбец. Сейчас я пишу сценарий datamigration для заполнения нового столбца. Это выглядит так. (Если вы не знакомы с южными миграциями, просто игнорируйте orm. перед названием модели.)

print "Migrating %s articles." % orm.Article.objects.count()
cnt = 0
for article in orm.Article.objects.iterator():            
    if cnt % 500 == 0:
        print "    %s done so far" % cnt
    # article.newfield = calculate_newfield(article)
    article.save()
    cnt += 1

Я переключился с objects.all на objects.iterator для уменьшения требований к памяти. Но что-то все еще занимает огромную память, когда я запускаю этот скрипт. Даже с действительно полезной строкой, закомментированной, как указано выше, сценарий все равно вырастает до использования 10+ ГБ оперативной памяти, прежде чем продвинуться очень далеко по таблице, и я отказываюсь от этого.

Похоже, что-то держится за эти объекты в памяти . Как мне запустить это, чтобы не потреблять много памяти?

FWIW, я использую python 2.6, django 1.2.1, south 0.7.2, mysql 5.1.

7
задан Leopd 8 June 2011 в 17:40
поделиться