Я обслуживаю векторные плитки с помощью TileStache , у меня все настроено так, как я хочу. Мои данные хранятся в Postgres, и я использую провайдер VecTiles для обслуживания плиток GeoJSON .
Я хочу кэшировать все свои тайлы, чтобы они быстрее работали. Я использую tilestache-seed.py для заполнения моего кэша. Я использую кафель на нескольких машинах. Tilestache-seed работал очень хорошо до 13-го уровня масштабирования, но после этого кеширование занимает слишком много времени. Только для Zoom Level 16 у меня есть 5023772 тайлов для кэширования, и я получаю только 100k-200k тайлов в день на каждой машине.
Как я могу ускорить кеширование тайлов ? Есть ли способ точной настройки tilestache-seed.py и сделать его быстрее?
Обновление: я попытался создать пространственные индексы для своих таблиц (для столбца геометрии и столбцов, используемых для фильтрации данных с помощью предложения where), и до сих пор не наблюдал значительного увеличения скорости листов. При такой скорости только Zoom 17 займет у меня месяц, и это время будет увеличиваться только в геометрической прогрессии, когда я перейду к Zoom 21
Обновление 2: я также попытался создать материализованные представления, и никаких заметных изменений в производительности не произошло, поэтому оптимизация базы данных не работает. Я думаю, что мне нужно будет оптимизировать сам файл tilestache-seed.py или разработать новый способ кэширования плиток.
Информация об оборудовании Я запускаю процессы кэширования на 8 разных компьютерах, один из которых - i7 с оперативной памятью 32 ГБ, а другой - i3 с оперативной памятью 4 ГБ, но они оба дают мне почти одинаковую скорость кэширования (примерно 100 000 плиток в день)
источник
По умолчанию shp2pgsql НЕ создает индексы. Вам нужно пройти,
-I
чтобы он генерировал пространственный индекс. http://postgis.net/docs/manual-1.3/ch04.html#id435762Проверьте, имеет ли ваша таблица индекс, запустив
\d tablename
в psql. В списке индексов должна быть строка с «gist» (если вы не выбрали другой индекс) и именем вашего столбца геометрии.Вы можете добавить один после факта, см. Http://postgis.net/docs/manual-1.3/ch03.html#id434676 (не позволяйте заметке о потерях пугать вас):
Поскольку вы, вероятно, также используете непространственные столбцы в своих запросах, вы обычно хотите создать индексы для каждого столбца, который используется для поиска. Если, например, у вас есть запрос типа «
SELECT * FROM roads WHERE priority = 3;
то», тоpriority
добавление индекса для него значительно ускорит процесс:CREATE INDEX idx_roads_priority ON roads(priority);
,источник
Еще одна вещь, которую можно попробовать, если вы используете стандартный запрос, - это создание материализованного представления из запроса и построение ваших плиток из этого: http://www.postgresql.org/docs/9.3/static/sql-creatematerializedview.html.
Что это сделает, так это сделает вас таблицей, в которой хранится запрос (чтобы вы могли его обновить в будущем). Убедитесь, что у вас есть пространственные индексы на дочерних MV, и тогда вы будете как можно быстрее.
Может случиться так, что у вас есть пространственный индекс, но затем вы выбираете только некоторые данные, что означает, что вы больше не используете пространственный индекс ...
источник