Я использую pgrouting в базе данных postgis, созданной с помощью osm2pgrouting. Он работает очень хорошо на ограниченном наборе данных (3,5 тыс. Путей, поиск по кратчайшему пути A * <20 мс).
Однако, так как я импортировал большую ограничительную рамку (122 тыс. Путей) из europe.osm, производительность сильно упала (самый короткий путь стоит около 900 мс).
Я думаю, что при использовании A * большинство этих ребер никогда не будут посещаться, поскольку они находятся вне пути.
Что я сделал до сих пор в попытке улучшить скорость:
- Поместить индекс в столбец геометрии (без заметного эффекта)
- Увеличил мою память с 8 ГБ до 16 ГБ
- Измените параметры памяти postgresql (shared_buffers ,ffective_cache_size) с (128 МБ, 128 МБ) на (1 ГБ, 2 ГБ) (без заметного эффекта)
У меня такое ощущение, что большая часть работы выполняется в библиотеке C Boost, где создается график, поэтому оптимизация postgresql не даст мне намного лучших результатов. Поскольку я делаю небольшие изменения в наборе строк, которые я выбираю для A * для каждого поиска, я немного боюсь, что библиотека boost не сможет кэшировать мой график и должна каждый раз перестраивать все ребра 122k (хотя она будет использовать только очень ограниченное подмножество каждого запроса). И я понятия не имею, сколько потрачено на это по сравнению с реальным поиском по кратчайшему пути.
Кто-нибудь из вас использует pgrouting в наборе данных OSM 122k или выше? Какую производительность мне ожидать? Какие настройки влияют на производительность больше всего?