Есть ли способ оптимизировать большой набор данных для быстрой загрузки в Django
У меня есть модель с более чем 6 миллионами объектов, и каждый раз, когда я обращаюсь к странице объекта на странице администратора, она загружается очень медленно, иногда даже срабатывает тайм-аут, и то же самое происходит с моим представлением, поэтому я хотел бы получить помощь, если есть какие-либо рекомендации, которые я могу использовать для решения этой проблемы. Проект размещен в AWS elastic beanstalk.
Конфигурация базы данных прикреплена к посту
Заранее спасибо 🙂
Конфигурация базы данных Объект базы данных
Я увеличил ресурсы базы данных, но все равно то же самое.
От db.t2.medium К db.t3.medium
Одной из начальных и обязательных практик является использование пагинации в вашем API, который получает данные административной страницы из вашей модели, содержащей большое количество записей
Медленная пагинация в Django Admin
Интерфейс Django Admin может страдать от проблем с производительностью при работе с большими наборами данных. Это связано с тем, что для определения общего количества записей в таблице он часто использует запрос COUNT, который может быть медленным для миллионов записей.
Определение узкого места
Чтобы точно определить проблему, вы можете:
- Запустите свой проект локально: Создайте локальную среду разработки (с копией данных вашей большой таблицы) и запустите ваше Django-приложение.
- Установите панель инструментов Django Debug Toolbar: Этот полезный инструмент дает представление о запросах к базе данных и времени их выполнения. Django Debug Toolbar: https://django-debug-toolbar.readthedocs.io/ .
- Inspect Query Performance: Используйте панель отладки, чтобы узнать, сколько времени занимает выполнение запроса COUNT.
Оптимизация пагинации
Если вы испытываете низкую производительность из-за запроса COUNT, подумайте об использовании пагинации на основе курсора. Это избавит вас от необходимости подсчитывать все записи заранее и может значительно повысить производительность для больших таблиц.
Лично я использую пакет django-admin-cursor-paginator (https://pypi.org/project/django-admin-cursor-paginator/) в своем проекте для таблицы с более чем 30 тыс. записей.