Невозможно выполнить итерацию по всем объектам в таблице с помощью objects.all()

Я пишу скрипт миграции, который будет перебирать все объекты модели cassandra (Cats). В модели Cat имеется более 30000 объектов, но, используя Cats.objects.all(), я могу выполнить итерацию только над 10000 объектами.

qs = Cats.objects.all()

print(qs.count()) # returns 30000
print(len(qs)) # returns 10000

Модель:

from django_cassandra_engine.models import DjangoCassandraModel


class Cats(DjangoCassandraModel):
    ...

Используется бэкенд Касснадры: django-Cassandra-engine версия 1.6.2

По умолчанию размер выборки (он же размер страницы) составляет 10K, поэтому вы получите только первые 10K строк. Если вы действительно хотите получить все записи в таблице, вам нужно переопределить параметры сессии по умолчанию:

        'cassandra': {
            ...
            'OPTIONS': {
                ...
                'session': {
                    ...
                    'default_fetch_size': 10000
                }
            }
        }

Но будьте осторожны с установкой очень высокого значения, поскольку это может перегрузить узел-координатор запроса и повлиять на производительность вашего кластера.

Вместо этого вам следует перебирать результаты на странице, затем запрашивать следующую страницу, пока не достигнете конца. Будьте здоровы!

Вернуться на верх