Я використовую pgrouting на базі даних postgis, створеній через osm2pgrouting. Він працює дуже добре на обмеженому наборі даних (3,5 к. Способів, усі найкоротші A * шляху пошуку <20 мс).
Однак, оскільки я імпортував більшу обмежувальну скриньку (122 тис. Шляхів) з europe.osm, продуктивність значно знизилася (найкоротший шлях коштує близько 900 мс).
Я думаю, що за допомогою A * більшість цих країв ніколи не будуть відвідуватися, оскільки вони не в дорозі.
Що я зробив поки що, намагаючись поліпшити швидкість:
- Поставте індекс на стовпчик геометрії (жодного помітного ефекту)
- Збільшив пам'ять з 8 ГБ до 16 ГБ
- Змініть налаштування пам’яті postgresql (спільні_буфери, ефективні_cache_size) з (128MB, 128MB) на (1GB, 2GB) (жодного помітного ефекту)
У мене таке відчуття, що більша частина роботи проводиться в бібліотеці C Boost, де робиться графік, так що оптимізація postgresql не дасть мені кращих результатів. Оскільки я вношую незначні зміни до набору рядків, які я вибираю для A * для кожного пошуку, я трохи боюся, що бібліотека boost не може кешувати мій графік і повинна кожного разу перебудовувати всі 122 кромки (хоча вона буде використовувати лише дуже обмежений підмножина кожного запиту). І я поняття не маю, скільки витрачено на це, порівняно з фактично найкоротшим пошуком шляху.
Чи використовує хто-небудь із вас програвання на базі даних 122k або більше OSM? Якої продуктивності слід очікувати? Які налаштування найбільше впливають на продуктивність?