OpenStreetMap — тайловый сервер — ускоряемся

Про тайловый сервер я писал в другой статье, по этому повторяться не буду. Тут другая проблема возникла — скорость работы прям удручает…

Карта мира

В чем причина?

Если долго разбираться, то в итоге проблема обнаруживается в СУБД. Скорость выполнения запроса 10 секунд — многовато. Когда тайлы начинают складываться, то карта жутко медленно загружается. Значит нужно что-то с ними сделать.

Что получилось?

Немного поотлавливав запросы в логах, я начал находить запросы, которые выполнялись по 3-4 секуды, а некоторые вообще 10-25 секунд. Это слишком много, даже если мы закэшируем все возможные варианты, ждать придется долго. В итоге у меня получился такой набор индексов:


CREATE INDEX idx_planet_osm_polygon_1 ON planet_osm_polygon (way_area DESC, name, boundary, admin_level, osm_id);
CREATE INDEX idx_planet_osm_polygon_2 ON planet_osm_polygon (way_area DESC, building, landuse, "natural");
CREATE INDEX idx_planet_osm_polygon_3 ON planet_osm_polygon USING gist(way) WHERE
(
(landuse = ANY (ARRAY['forest'::text, 'farmland'::text, 'residential'::text, 'commercial'::text, 'retail'::text, 'industrial'::text, 'meadow'::text, 'grass'::text, 'village_green'::text, 'vineyard'::text, 'orchard'::text]))
OR ("natural" = ANY (ARRAY['wood'::text, 'wetland'::text, 'mud'::text, 'sand'::text, 'scree'::text, 'shingle'::text, 'bare_rock'::text, 'heath'::text, 'grassland'::text, 'scrub'::text]))
)
AND building IS NULL;
CREATE INDEX idx_planet_osm_polygon_4 ON planet_osm_polygon (way_area DESC);

CREATE INDEX idx_planet_osm_point_osm_id ON planet_osm_point(osm_id);
CREATE INDEX idx_planet_osm_polygon_osm_id ON planet_osm_polygon(osm_id);
CREATE INDEX idx_planet_osm_line_osm_id ON planet_osm_line(osm_id);

Одни запросы сократились до 700мс, некоторые другие примерно 3,5 секунды. Это уже интереснее и гораздо быстрее, чем было ранее.

Нужно больше индексов

В директории openstreetmap-carto я наткнулся еще на один файла: indexes.sql. Соответственно создал индексы из него, но не проверял на сколько там стало лучше.

Что в итоге?

В итоге генерация тайлов прям ожила на глазах. Сотрудник прям оценил по сравнению с предыдущим этапом. С такой картой уже можно работать!

Поделиться
Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий

Вы должны быть авторизованы, чтобы разместить комментарий.