Основные данныеМобильность

Геопространственный поиск

Находите ближайших водителей, магазины или устройства в радиусе или прямоугольнике с живыми позициями, обновляемыми каждые несколько секунд.

или прямоугольник
Радиус
единицы
км, мили, м, футы
обновления позиций
Живые
Шаг 1 из 4
Водители сообщают позиции

Каждое обновление заменяет прежнюю позицию водителя.

Пример сеансаplaying
# Водители сообщают позиции
hotkv> GEOADD drivers:berlin 13.4050 52.5200 driver:17 13.3889 52.5170 driver:23
(integer) 0

Анимированная демонстрация с настоящими командами HotKV и примерами ответов. Нажмите на любой шаг, чтобы перейти к нему. Команды и ответы остаются на английском, ровно так, как вы вводите и видите их в HotKV.

Проблема

Подбор пассажиру ближайшего водителя или клиенту ближайшего магазина с товаром требует свежей картины тысяч движущихся позиций и ответа за миллисекунды. Реляционная база данных с пространственными индексами не справляется с таким числом обновлений в секунду.

Как с этим справляется HotKV

Позиции хранятся в геопространственном индексе. Каждый водитель обновляет свою позицию каждые несколько секунд через GEOADD, а GEOSEARCH возвращает всех в радиусе или прямоугольнике, начиная с ближайшего, вместе с расстоянием. Тот же индекс отвечает на запросы поиска магазинов и зон доставки.

Шаг за шагом

Что происходит, команда за командой

  1. 01

    Водители сообщают позиции

    Каждое обновление заменяет прежнюю позицию водителя.

    GEOADD drivers:berlin 13.4050 52.5200 driver:17 13.3889 52.5170 driver:23
  2. 02

    Пассажир просит машину

    Найдите пять ближайших водителей в пределах 3 км, начиная с ближайшего.

    GEOSEARCH drivers:berlin FROMLONLAT 13.4000 52.5190 BYRADIUS 3 km ASC COUNT 5 WITHDIST
  3. 03

    Предлагаем поездку

    Заблокируйте водителя, чтобы две поездки не достались одной машине.

    SET offer:driver:17 rider:42 NX EX 15
  4. 04

    Расстояние до места посадки

    Расстояние между двумя участниками индекса.

    GEODIST drivers:berlin driver:17 driver:23 km
Где это уместно

Реальные сценарии

Такси и вызов машин

Ближайшие водители находятся за миллисекунды, а блокировка предложения исключает двойное бронирование.

Платформы доставки

Курьеры рядом с рестораном подбираются, когда заказы готовы.

Поиск магазинов

Клиенты видят ближайшие магазины в прямоугольнике вокруг видимой области карты.

Встроено

Что вы получаете

Живые позиции

GEOADD добавляет или обновляет участников по долготе и широте.

GEOADD

Поиск по радиусу и прямоугольнику

Вокруг точки или участника, сортировка по расстоянию, ограничение по количеству.

GEOSEARCHGEOSEARCHSTORE

Расстояния и позиции

Между участниками, в выбранной вами единице.

GEODISTGEOPOS

Внутри обычные отсортированные множества

Удаляйте участников и считайте их знакомыми командами отсортированных множеств.

ZREMZCARD
Справочник:GEOADDGEOSEARCHGEODIST

Частые вопросы

Как удалить водителя, который ушёл офлайн?

Геопространственный индекс - это отсортированное множество, поэтому ZREM удаляет участника.

Можно ли искать в прямоугольнике?

Да. GEOSEARCH BYBOX принимает ширину и высоту вокруг точки или участника.

Какие единицы поддерживаются?

Метры, километры, футы и мили.

Связанные сценарии

Попробуйте на своей нагрузке

HotKV понимает протокол Redis, поэтому вы можете подключить к нему существующий клиент и выполнить те же команды.