Есть ли способ оптимизировать большой набор данных для быстрой загрузки в Django

У меня есть модель с более чем 6 миллионами объектов, и каждый раз, когда я обращаюсь к странице объекта на странице администратора, она загружается очень медленно, иногда даже срабатывает тайм-аут, и то же самое происходит с моим представлением, поэтому я хотел бы получить помощь, если есть какие-либо рекомендации, которые я могу использовать для решения этой проблемы. Проект размещен в AWS elastic beanstalk.

Конфигурация базы данных прикреплена к посту

Заранее спасибо 🙂

Конфигурация базы данных Объект базы данных

Я увеличил ресурсы базы данных, но все равно то же самое.

От db.t2.medium К db.t3.medium

Одной из начальных и обязательных практик является использование пагинации в вашем API, который получает данные административной страницы из вашей модели, содержащей большое количество записей

Медленная пагинация в Django Admin

Интерфейс Django Admin может страдать от проблем с производительностью при работе с большими наборами данных. Это связано с тем, что для определения общего количества записей в таблице он часто использует запрос COUNT, который может быть медленным для миллионов записей.

Определение узкого места

Чтобы точно определить проблему, вы можете:

  1. Запустите свой проект локально: Создайте локальную среду разработки (с копией данных вашей большой таблицы) и запустите ваше Django-приложение.
  2. Установите панель инструментов Django Debug Toolbar: Этот полезный инструмент дает представление о запросах к базе данных и времени их выполнения. Django Debug Toolbar: https://django-debug-toolbar.readthedocs.io/
  3. .
  4. Inspect Query Performance: Используйте панель отладки, чтобы узнать, сколько времени занимает выполнение запроса COUNT.

Оптимизация пагинации

Если вы испытываете низкую производительность из-за запроса COUNT, подумайте об использовании пагинации на основе курсора. Это избавит вас от необходимости подсчитывать все записи заранее и может значительно повысить производительность для больших таблиц.

Лично я использую пакет django-admin-cursor-paginator (https://pypi.org/project/django-admin-cursor-paginator/) в своем проекте для таблицы с более чем 30 тыс. записей.

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