Конечная точка GeoDjango работает очень медленно
Я пытаюсь работать со списком из 1.100 строк, загруженных в PostgreSQL с расширением PostGIS. Каждый ряд имеет следующие поля:
- code (целое число)
- name (char)
- mpoly (мультиполигон)
Идея состоит в том, чтобы иметь конечную точку, которая будет вызываться из приложения VueJS для печати каждой геоданных в карте, управляемой Leaflet.
При сериализации запрос выполняется очень медленно. Как его можно оптимизировать?
Я думал о том, чтобы иметь файл geojson, но каждая строка связана с таблицей manytomany, которая указывает на некоторые группы, к которым она принадлежит.
В прошлом у меня была похожая проблема, поэтому я могу поделиться некоторыми вещами, которые я делаю, например:
- можно ли выбрать только необходимые поля, которые вам действительно нужны. Получение ненужных данных может повлиять на производительность. Для этого хорошо подходит метод Django only().
- также вы можете упростить геометрию с помощью метода simplify() в GeoDjango - это уменьшает количество вершин и может ускорить рендеринг .
- Как вы упоминаете GeoJSON, вместо того, чтобы сериализовать каждую строку по отдельности, вы можете создать коллекцию GeoJSON-функций, содержащую все ваши геометрии. Сериализуйте всю коллекцию один раз и передайте ее в качестве единого ответа вашему приложению VueJS.
- Кэшируете ли вы результаты? Можете ли вы реализовать кэширование, чтобы избежать повторных запросов? Можно ли хранить сериализованные данные GeoJSON в кэше.
- Думаю, вы уже сделали это, но можете ли вы оптимизировать БД?
Надеюсь, это поможет.