コアデータモビリティ

地理空間検索

数秒ごとに更新されるライブの位置情報から、半径内や矩形内にいる最寄りのドライバー、店舗、デバイスを見つけます。

または矩形で検索
半径
単位
km, mi, m, ft
位置の更新
ライブ
ステップ 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 km以内で最も近い5人のドライバーを、近い順に見つけます。

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

    配車を提示

    2人の乗客が同じ車を取れないように、ドライバーをロックします。

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

    乗車地点までの距離

    インデックス内の2つのメンバー間の距離です。

    GEODIST drivers:berlin driver:17 driver:23 km
活用シーン

実際のシナリオ

配車サービスとタクシー

近くのドライバーをミリ秒で見つけ、配車提示のロックで二重予約を防ぎます。

配達プラットフォーム

注文の準備ができると、レストランの近くにいる配達員とマッチングします。

店舗検索

顧客には、地図の表示範囲を囲む矩形の中で最も近い店舗が表示されます。

標準搭載

得られるもの

ライブの位置

GEOADDは経度と緯度でメンバーを追加または更新します。

GEOADD

半径と矩形の検索

地点またはメンバーの周囲を、距離順に、件数を限定して検索します。

GEOSEARCHGEOSEARCHSTORE

距離と位置

メンバー間の距離を、選んだ単位で取得します。

GEODISTGEOPOS

内部は通常のソート済みセット

おなじみのソート済みセットのコマンドで、メンバーの削除や件数の取得ができます。

ZREMZCARD
リファレンス:GEOADDGEOSEARCHGEODIST

よくある質問

オフラインになったドライバーを削除するには?

地理空間インデックスはソート済みセットなので、ZREMでメンバーを削除できます。

矩形で検索できますか?

はい。GEOSEARCH BYBOXは、地点またはメンバーを中心とした幅と高さを受け取ります。

どの単位に対応していますか?

メートル、キロメートル、フィート、マイルです。

関連するユースケース

ご自身のワークロードで試してみましょう

HotKVはRedisプロトコルに対応しているため、既存のクライアントを向けるだけで、これらと同じコマンドを実行できます。