Конечная точка GeoDjango работает очень медленно

Я пытаюсь работать со списком из 1.100 строк, загруженных в PostgreSQL с расширением PostGIS. Каждый ряд имеет следующие поля:

  • code (целое число)
  • name (char)
  • mpoly (мультиполигон)

Идея состоит в том, чтобы иметь конечную точку, которая будет вызываться из приложения VueJS для печати каждой геоданных в карте, управляемой Leaflet.

При сериализации запрос выполняется очень медленно. Как его можно оптимизировать?

Я думал о том, чтобы иметь файл geojson, но каждая строка связана с таблицей manytomany, которая указывает на некоторые группы, к которым она принадлежит.

В прошлом у меня была похожая проблема, поэтому я могу поделиться некоторыми вещами, которые я делаю, например:

  • можно ли выбрать только необходимые поля, которые вам действительно нужны. Получение ненужных данных может повлиять на производительность. Для этого хорошо подходит метод Django only().
  • также вы можете упростить геометрию с помощью метода simplify() в GeoDjango - это уменьшает количество вершин и может ускорить рендеринг
  • .
  • Как вы упоминаете GeoJSON, вместо того, чтобы сериализовать каждую строку по отдельности, вы можете создать коллекцию GeoJSON-функций, содержащую все ваши геометрии. Сериализуйте всю коллекцию один раз и передайте ее в качестве единого ответа вашему приложению VueJS.
  • Кэшируете ли вы результаты? Можете ли вы реализовать кэширование, чтобы избежать повторных запросов? Можно ли хранить сериализованные данные GeoJSON в кэше.
  • Думаю, вы уже сделали это, но можете ли вы оптимизировать БД?

Надеюсь, это поможет.

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