DynamoDB supporta le query geospaziali?
Non in modo nativo. DynamoDB non ha un tipo di dato geospaziale né operatori di distanza o di bounding box. Le query geospaziali sono invece un pattern di modellazione: memorizza un geohash o un ID di cella S2 nella chiave così i punti vicini si ordinano insieme, interroga le celle che coprono la tua area di ricerca, poi affina per distanza esatta nella tua applicazione.
Il pattern del geohash
Un geohash (o un ID di cella S2, come usato dalla Geo Library for DynamoDB di AWS) codifica latitudine/longitudine in una stringa o un numero il cui prefisso identifica una cella della griglia — e, cosa cruciale, i punti vicini condividono i prefissi. Memorizzato come chiave di partizione o di ordinamento, questo trasforma "punti vicino a me" in normali query per intervallo di chiave:
- Query a riquadro — calcola le celle che coprono un rettangolo, fai una
Querysu ciascuna cella, unisci i risultati. - Query a raggio — lo stesso, sulle celle che coprono un cerchio, poi filtra per distanza esatta lato client.
La risoluzione conta: scegli una dimensione di cella per cui la maggior parte delle ricerche tocchi solo la cella bersaglio e i suoi vicini.
Come la precisione cambia il numero di query
Prendi la Torre Eiffel, 48.8584, 2.2945. Il suo geohash è u09tunquc. Il Trocadéro, a 640 m di distanza a 48.8619, 2.2876, è u09tup1c0. Condividono u09tu, quindi alla precisione 5 stanno nella stessa cella. Alla precisione 6 no. Due monumenti che si vedono l'uno dall'altro, in celle diverse, ed è per questo che una query su cella deve sempre includere anche gli otto vicini oltre alla propria.
Ogni carattere restringe il riquadro. A questa latitudine:
| Precisione | Dimensione cella | Celle toccate da un raggio di 5 km |
|---|---|---|
| 4 | 25,7 × 19,6 km | da 1 a 4 |
| 5 | 3,2 × 4,9 km | da 10 a 12 |
| 6 | 0,81 × 0,61 km | da 185 a 193 |
Ogni riga è un intervallo perché il conteggio dipende da dove cade il cerchio rispetto alla griglia, non solo da quanto è grande. Le celle si allargano anche verso l'equatore, dove un grado di longitudine copre più terreno. La stessa cella di precisione 5 è larga 4,9 km all'equatore e 3,2 km a Parigi.
Quella terza colonna è la decisione di progetto. La precisione 6 trasforma un "ristoranti entro 5 km" in circa 190 chiamate Query. La precisione 4 la rende una o due chiamate che ti restituiscono tutto quello che c'è in un riquadro di 500 km² da scartare lato client.
Non sono i soldi a mordere. Quelle 190 query, ciascuna che restituisce meno di 4 KB a coerenza eventuale, fanno 95 unità di lettura, circa $0,000012 per ricerca alla tariffa on-demand di us-east-1, ovvero $11,88 per un milione di ricerche. I round trip sono il vero costo. Emettile in modo concorrente e limita il fan-out, oppure il p99 del tuo endpoint di ricerca sarà quella query su cella che è capitato fosse la più lenta.
Librerie e strumenti
AWS ha pubblicato la Geo Library for Amazon DynamoDB (Java) che dimostra il pattern basato su S2, ed esistono port della community per altri linguaggi (come dynamodb-geo per Node.js). Controlla lo stato di manutenzione prima di adottarne una — il pattern in sé è abbastanza semplice da implementare direttamente.
Quando usare invece un motore di ricerca
Per predicati geo ricchi (poligoni, ordinamento per distanza, combinazione di geo e full-text), replica la tabella in un indice dedicato — la stessa integrazione zero-ETL con OpenSearch che gestisce la ricerca full-text ti dà anche un motore di ricerca con query geospaziali native.
Approfondisci
Il pattern è in fondo un trucco sulla chiave di ordinamento — la guida alle strategie per la chiave di ordinamento copre gli strumenti, il generatore di espressioni genera le condizioni begins_with/BETWEEN che usano le query su cella, e DynoTable ti permette di ispezionare le chiavi codificate sui tuoi Item reali.
Riferimenti
- 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
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.
Geohash, dimensioni delle celle e conteggi di copertura calcolati il 2026-07-28 con un encoder geohash base32 standard alla latitudine 48.8584. Verifica u09tunquc con qualsiasi strumento per geohash. Il costo per ricerca usa la tariffa di lettura on-demand us-east-1 nella nostra tabella dei prezzi sincronizzata (pubblicazione della pricing API di AWS del 2026-07-22).