Комментарии 4
queryset.filter() — возвращает ленивый объект QuerySet, запрос к базе не выполняется, считать скорость выполнения бессмысленно.
Сравнивать различные запросы к бд и замерять курлом время получения ответа так же некорректно, т.к. гораздо больше времени будет затрачено на миддлвари/сериализацию данных.
0
Он не выполняется только если это было первое объявление queryset, у меня его специально нет. Да и время выполнения скрипта было бы меньше, чем в Postgres (при первой попытке у меня так и получилось, пока я не вчитался в документацию), если бы запрос не выполнялся. Но это не так.
Отсюда docs.djangoproject.com/en/3.0/ref/models/querysets:
Курл — только для проверки адекватности полученных данных и для понимания того времени, сколько ответ будет идти до клиента.
Я же это объясняю здесь:
Если у Вас есть предложение — каким образом можно это корректнее посчитать, то излагайте, я скорректирую.
Отсюда docs.djangoproject.com/en/3.0/ref/models/querysets:
A QuerySet is iterable, and it executes its database query the first time you iterate over it. For example, this will print the headline of all entries in the database:
for e in Entry.objects.all(): print(e.headline)
Курл — только для проверки адекватности полученных данных и для понимания того времени, сколько ответ будет идти до клиента.
Я же это объясняю здесь:
Выбор метрик
Изначально я подумал, что считать время фильтрации в питоне получится, используя таймер для получения времени исполнения скрипта, и дополнительной метрикой должно было стать время исполнения запроса через curl, поскольку это показывает приблизительное время, за которое отфильтрованные данные дойдут до конечного пользователя. Кроме этого, следует сравнивать это время с эталонным (прямым исполнением соответствующих запросов в БД).
Если у Вас есть предложение — каким образом можно это корректнее посчитать, то излагайте, я скорректирую.
0
Он не выполняется только если это было первое объявление queryset, у меня его специально нет. Да и время выполнения скрипта было бы меньше, чем в Postgres, если бы запрос не выполнялся. Но это не так.
Документация же говорит об обратном:
docs.djangoproject.com/en/3.0/topics/db/queries/#querysets-are-lazy
docs.djangoproject.com/en/3.0/ref/models/querysets/#when-querysets-are-evaluated
Вы можете сколько угодно раз создавать / фильтровать запросы, выполнены они будут только при реальном обращении к данным.
Для подсчета времени выполнения функции лучше использовать time.perf_counter или что-то из модуля timeit
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Сравнение разных django filter на примере демо базы PostgreSQL