DynamoDB coğrafi konum sorgularını destekliyor mu?
Yerel olarak değil. DynamoDB'nin coğrafi konum veri türü ve mesafe ya da sınırlayıcı kutu operatörleri yoktur. Coğrafi sorgular bunun yerine bir modelleme desenidir: yakındaki noktalar birlikte sıralansın diye anahtara bir geohash ya da S2 hücre kimliği saklayın, arama alanınızı kapsayan hücreleri sorgulayın, sonra uygulamanızda tam mesafeye göre daraltın.
Geohash deseni
Bir geohash (ya da AWS'nin DynamoDB için Geo Library'sinde kullanıldığı gibi bir S2 hücre kimliği), enlem/boylamı önekinin bir ızgara hücresini belirlediği bir string ya da sayıya kodlar — ve en önemlisi, yakındaki noktalar önek paylaşır. Bir bölüm ya da sıralama anahtarı olarak saklandığında, bu "yakınımdaki noktalar"ı sıradan anahtar aralığı sorgularına çevirir:
- Kutu sorgusu — bir dikdörtgeni kapsayan hücreleri hesaplayın, her hücreyi
Queryedin, sonuçları birleştirin. - Yarıçap sorgusu — aynısı, bir daireyi kapsayan hücreler üzerinde, sonra istemci tarafında tam mesafeye göre filtreleyin.
Çözünürlük önemlidir: aramaların çoğunun yalnızca hedef hücreye ve komşularına dokunduğu bir hücre boyutu seçin.
Kesinlik sorgu sayısını nasıl değiştirir
Eiffel Kulesi'ni ele alalım, 48.8584, 2.2945. Geohash'i u09tunquc. 640 m ötede, 48.8619, 2.2876 konumundaki Trocadéro ise u09tup1c0. u09tu önekini paylaşıyorlar, dolayısıyla 5. kesinlikte aynı hücrede oturuyorlar. 6. kesinlikte oturmuyorlar. Birbirini görebileceğiniz iki simge yapı, farklı hücrelerde — bir hücre sorgusunun neden her zaman kendi hücrenizin yanı sıra sekiz komşuyu da kapsaması gerektiğinin nedeni bu.
Her karakter kutuyu daraltır. Bu enlemde:
| Kesinlik | Hücre boyutu | 5 km yarıçapın dokunduğu hücreler |
|---|---|---|
| 4 | 25,7 × 19,6 km | 1 ila 4 |
| 5 | 3,2 × 4,9 km | 10 ila 12 |
| 6 | 0,81 × 0,61 km | 185 ila 193 |
Her satır bir aralıktır, çünkü sayı yalnızca dairenin ne kadar büyük olduğuna değil, ızgaraya göre nereye düştüğüne de bağlıdır. Hücreler ayrıca ekvatora doğru genişler, çünkü orada bir boylam derecesi daha çok yer kaplar. Aynı 5. kesinlik hücresi ekvatorda 4,9 km, Paris'te 3,2 km enindedir.
Tasarım kararı o üçüncü sütundur. 6. kesinlik, tek bir "5 km içindeki restoranlar"ı kabaca 190 Query çağrısına çevirir. 4. kesinlik ise onu, istemci tarafında eleyeceğiniz 500 km²'lik bir kutudaki her şeyi geri veren bir ya da iki çağrı yapar.
Canınızı yakan para değildir. Her biri nihai tutarlı olarak 4 KB'ın altında dönen o 190 sorgu 95 okuma birimi eder — us-east-1 talep üzerine tarifesinde arama başına yaklaşık $0.000012 ya da bir milyon arama için $11.88. Asıl maliyet gidiş dönüşlerdir. Onları eşzamanlı yapın ve yayılmayı sınırlayın; yoksa arama uç noktanızın p99'u en yavaş çıkan hücre sorgusu olur.
Kütüphaneler ve araçlar
AWS, S2 tabanlı deseni gösteren Geo Library for Amazon DynamoDB'yi (Java) yayımladı ve başka diller için topluluk uyarlamaları var (Node.js için dynamodb-geo gibi). Birini benimsemeden önce bakım durumunu denetleyin — desenin kendisi doğrudan gerçekleştirilecek kadar basittir.
Bunun yerine ne zaman bir arama motoru kullanmalı
Zengin coğrafi koşullar (çokgenler, mesafeye göre sıralama, coğrafyayı tam metinle birleştirme) için tabloyu amaca özel bir indekse çoğaltın — tam metin aramayı da karşılayan aynı sıfır-ETL OpenSearch entegrasyonu size yerel coğrafi konum sorguları olan bir arama motoru da verir.
Daha derine inin
Desen özünde bir sıralama anahtarı hilesidir — sıralama anahtarı stratejileri kılavuzu araç kutusunu anlatır, expression builder hücre sorgularının kullandığı begins_with/BETWEEN koşullarını üretir ve DynoTable kodlanmış anahtarları gerçek öğelerinizde incelemenizi sağlar.
Kaynaklar
- 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
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.
Geohash'ler, hücre boyutları ve kapsama sayıları 2026-07-28 tarihinde, 48.8584 enleminde standart bir base32 geohash kodlayıcısıyla hesaplandı. u09tunquc'yi herhangi bir geohash aracıyla denetleyin. Arama başına maliyet, eşitlediğimiz fiyatlandırma tablosundaki us-east-1 talep üzerine okuma tarifesini kullanır (AWS fiyatlandırma API'si yayını 2026-07-22).