Почему итерация большого Django QuerySet потребляет огромное количество памяти?

Рассматриваемая таблица содержит примерно десять миллионов строк.

for event in Event.objects.all():
    print event

Это приводит к неуклонному увеличению использования памяти до 4 ГБ или около того, после чего строки печатаются быстро. Длительная задержка перед печатью первой строки меня удивила - я ожидал, что она будет распечатана почти мгновенно.

Я также попробовал Event.objects.iterator () , который вел себя точно так же.

Я не делаю » Я не понимаю, что Django загружает в память или почему он это делает. Я ожидал, что Django будет перебирать результаты на уровне базы данных, что означало бы, что результаты будут выводиться примерно с постоянной скоростью (а не все сразу после длительного ожидания).

Что я неправильно понял?

(Не знаю, актуально ли это, но я использую PostgreSQL.)

104
задан davidchambers 19 November 2010 в 04:49
поделиться