Добавить в корзинуПозвонить
Найти в Дзене

Сравнение возможностей разных "ГеоБД"

PostgreSQL с POSTGIS особо не буду упоминать из-за отсутствия горизонтального масштабирования из под "коробки". Геопоиск по радиусу: Геопоиск по полигону: Нахождение расстояния между точками: Все эти БД умеют в запросах определять расстояние от координат пользователя до хранящихся точек на заданном полигоне/радиусе.
Но именно находить расстояние между двумя точками: Если нужно построение оптимальных маршрутов: Для геоаналитики больших данных: Примерная схема для высоконагруженной гео-системы, которая будет строить маршрут в зависимости от нахождения пользователя до какой-то найденной точки на карте:

PostgreSQL с POSTGIS особо не буду упоминать из-за отсутствия горизонтального масштабирования из под "коробки".

Геопоиск по радиусу:

  • 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 не подойдет, если нужно справляться с нагрузкой, либо придется покопаться в Citus или других "инструментах" для горизонтального масштабирования.
  • Elasticsearch/Manticoresearch/Redis/MongoDb/Cassandra (любая БД поддерживаемая геопоиск) + OSRM/GraphHopper/valhalla (маршрутизация) + OpenStreetMap
    Такая комбинация подойдет для геопоиска в распределённой БД (с учетом поддержки горизонтального масштабирования) и построение маршрутов до нужной точки.
  • Есть еще какие-то локальные решения для корпората.
    Оптимальная доставка в логистике с учетом: вес, габариты, вместимость фуры.
    Например, Яндекс.Маршрутизация

Для геоаналитики больших данных:

  • ClickHouse (OLAP) + S2 – она не заменяет все выше перечисленные БД, а просто дополняет их.

Примерная схема для высоконагруженной гео-системы, которая будет строить маршрут в зависимости от нахождения пользователя до какой-то найденной точки на карте:

  • Elasticsearch + Redis, для быстрого поиска “сущностей” на карте
  • Инструменты для построения маршрутов (например, valhalla)
  • Сохранение маршрута для истории (можно взять Cassandra из-за горизонтальной масштабируемости, также она оптимизирована для частых вставок данных)
  • ClickHouse, для последующей аналитики, например, данных с GPS-трекера.
    Возможно построение маршрута в каких-то местах можно оптимизировать, если пользователь решил отклониться от нашего маршрута.