DynamoDB は地理空間クエリをサポートしていますか?
ネイティブにはサポートしていません。DynamoDB には地理空間データ型がなく、距離やバウンディングボックスの演算子もありません。地理空間クエリは代わりにモデリングパターンです。近接する点が一緒にソートされるように geohash や S2 セル ID をキーに格納し、検索エリアをカバーするセルをクエリし、その後アプリケーションで正確な距離によって絞り込みます。
geohash パターン
geohash(または AWS の Geo Library for DynamoDB で使われる S2 セル ID)は、緯度/経度を、その_プレフィックス_がグリッドセルを識別する文字列または数値にエンコードします。そして重要なことに、近接する点はプレフィックスを共有します。パーティションキーまたはソートキーとして格納すると、「自分の近くの点」が通常のキー範囲クエリになります。
- ボックスクエリ — 長方形をカバーするセルを計算し、各セルを
Queryして結果をマージする。 - 半径クエリ — 同様に、円をカバーするセルに対して行い、その後クライアント側で正確な距離によってフィルターする。
解像度が重要です。ほとんどの検索が対象セルとその近傍セルのみに触れるようなセルサイズを選びましょう。
ライブラリとツール
AWS は S2 ベースのパターンを実演する Geo Library for Amazon DynamoDB(Java)を公開しており、他の言語向けのコミュニティポート(Node.js 向けの dynamodb-geo など)も存在します。採用する前にメンテナンス状況を確認してください。パターン自体は直接実装できるほどシンプルです。
代わりに検索エンジンを使うべき場合
豊富な地理述語(ポリゴン、距離によるソート、地理と全文検索の組み合わせ)のためには、テーブルを専用のインデックスにレプリケートしましょう。全文検索を扱うゼロ ETL の OpenSearch 統合と同じものが、ネイティブの地理空間クエリを持つ検索エンジンも提供します。DynamoDB vs Elasticsearch が、そのデータベースとインデックスの分離を余さず比較検討します。
さらに詳しく
このパターンは本質的にソートキーの技法です。ソートキー戦略ガイドがその道具箱を解説し、Expression Builder がセルクエリで使う begins_with/BETWEEN 条件を生成し、DynoTable で実際のアイテムのエンコードされたキーを調べられます。
参考資料
- Geo Library for Amazon DynamoDB – Part 1: Table Structure — AWS Mobile Blog
- Implementing geohashing at scale in serverless web applications — AWS Compute Blog
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。