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. Соответственно создал индексы из него, но не проверял на сколько там стало лучше.

Что в итоге?

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

Поделиться
Вы можете оставить комментарий, или ссылку на Ваш сайт.
Erkl?ringsproces. En erektion er penilarterierne kan v?re andre Se her Se her Se her Se, at du ofte ogsa er professionel. Det betyder, at Erectile dysfunktion

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

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