Сравнение возможностей разных "ГеоБД"
PostgreSQL с POSTGIS особо не буду упоминать, для Highload систем она не подойдет из-за отсутствия горизонтального масштабирования из под "коробки".
Геопоиск по радиусу:
- Elasticsearch (есть возможность группировать ответ, например, 0-100, 100-500, >500 км)
- Manticoresearch
- Redis
- MongoDb
- Cassandra + GeoMesa (поддержка гео-запросов)
Геопоиск по полигону:
- Elasticsearch
- Manticoresearch
- В Redis ТОЛЬКО по прямоугольнику можно искать “BYBOX”.
- MongoDb
- Cassandra + GeoMesa (поддержка гео-запросов)
Нахождение расстояния между точками:
Все эти БД умеют в запросах определять расстояние от координат пользователя до хранящихся точек на заданном полигоне/радиусе.
Но именно находить расстояние между двумя точками:
- Redis (GEODIST - на основе хранящихся ключей)
- Manticoresearch (GEODIST - на основе точных координат)
Если нужно построение оптимальных маршрутов:
- POSTGIS + pgRouting (добавляет функционал маршрутизации) + OpenStreetMap (бесплатная дорожная карта)
Из-за PostgreSQL не будет горизонтального масштабирования, для большой системы не подойдет. - Elasticsearch/Manticoresearch/Redis/MongoDb/Cassandra (любая БД поддерживаемая геопоиск) + OSRM/GraphHopper/valhalla (маршрутизация) + OpenStreetMapТакая комбинация подойдет для геопоиска в распределённой БД (с учетом поддержки горизонтального масштабирования) и построение маршрутов до нужной точки.
- Есть еще какие-то локальные решения для корпората.
Оптимальная доставка в логистике с учетом: вес, габариты, вместимость фуры.
Например, Яндекс.Маршрутизация
Для геоаналитики больших данных:
- ClickHouse (OLAP) + S2 – она не заменяет все выше перечисленные БД, а просто дополняет их.
Примерная схема для высоконагруженной гео-системы, которая будет строить маршрут в зависимости от нахождения пользователя до какой-то найденной точки на карте:
- Elasticsearch + Redis, для быстрого поиска “сущностей” на карте
- Инструменты для построения маршрутов (например, valhalla)
- Сохранение маршрута для истории (можно взять Cassandra из-за горизонтальной масштабируемости, также она оптимизирована для частых вставок данных)
- ClickHouse, для последующей аналитики, например, данных с GPS-трекера.
Возможно построение маршрута в каких-то местах можно оптимизировать, если пользователь решил отклониться от нашего маршрута.