imposm3 (инструмент импорта OSM->PostgreSQL+PostGIS) на нашем форуме незаслуженно обойден вниманием.
Вторая версия imposm была написана на Python и не позволяла делать апдейты базы, что сразу ограничивало область применения.
imposm3 переписан на Go. Декларируется возможность обновления базы (сам я не проверял).
Чем интересна программа:
- Скорость импорта значительно выше чем у osm2pgsql.
- Импорт diff несоизмеримо быстрее, чем у osm2pgsql.
Это стало возможным благодаря тому, что сырые точки, линии и отношения хранятся на диске во встроенной базе данных LevelDB, а объекты вставляются в БД группами (bulk insert).
- Настраиваемое количество таблиц.
- Автоматическая генерализация в отдельные таблицы, идеально для рендеринга.
- Продуманные таблицы relation для рендеринга маршрутов, associatedStreet, границ и т.д. Теги на геометрию можно брать как с линий, так и с отношений.
- Импорт происходит в схему import. После того как вы убедитесь, что всё прошло гладко - новые таблицы запускаются в схему public (т.е. в production) одной транзакцией. Т.е. базу можно переимпортировать в онлайне.
Оверхед из-за дублирования некоторых геометрий с лихвой компенсируется компактными таблицами, которые хранят исключительно те теги, которые для них настроены, и быстрой выборкой. Опциональный hstore.
Немногочисленные дискуссии imposm vs osm2pgsql можно свести к краткому итогу:
- osm2pgsql это довольно низкоуровневый импорт, он универсальнее и лучше подходит для общего анализа данных ОСМ. Традиции - наше всё.
- imposm/imposm3 заточен под рендеры и ГИС.
Исходники
https://github.com/omniscale/imposm3
Документация (не поленитесь почитать, там всего несколько страниц)
https://imposm.org/docs/imposm3/latest/mapping.html
ИМО конфигурировать удобнее в YML, хотя изначальная поддержка JSON тоже осталась.
Форк для Windows x64 (конфигурацию брать в исходниках, ключи запуска в документации)
https://github.com/gaspardle/imposm3/releases
По моим тестам размер базы + закешированных данных для будущего обновления примерно в 2-3 раза меньше osm2pgsql с настройкми по-умолчанию, что актуально при использовании дисков SSD. Это при том что во время импорта создаются дополнительные генерализованные таблицы. Думаю основная разница набегает именно из-за хранения сырых данных в базе LevelDB, а не PostgreSQL. Более точное соотношение возможно определить только сделав полностью идентичные конфигурации.
(added)
нашел записи, в среднем место на диске
- osm2pgsql = размер pbf x29.5
- imposm3 = размер pbf x 9.8