DynamoDB Sorgu Oluşturucu
Query ya da Scan isteğinin tamamını oluşturun — tablo, dizin, anahtar koşulu, filtre, projeksiyon, Limit, sıralama, tutarlı okumalar ve sayfalama — ve çalıştırılabilir bir AWS SDK v3, DocumentClient, CLI, boto3, Java, Go, .NET, Rust, Kotlin, PHP, Ruby ya da DynamoDB-Toolbox programı veya PartiQL ifadesini kopyalayın.
dynamodb-expression-builder bu aracın arkasındaki açık kaynaklı (MIT) kitaplıktır.
Erişim deseninden çalıştırılabilir isteğe
İfade nadiren işin tamamıdır. Üretimdeki bir Query ayrıca hangi index’in okunacağına, istek başına kaç item değerlendirileceğine, sort key’in hangi yönde ilerleyeceğine, okumanın güçlü tutarlı olması gerekip gerekmediğine ve yanıt bir LastEvaluatedKey ile döndüğünde ne olacağına da karar verir. İstek düzeyindeki bu parametreler ifade dizgisinin dışında yaşar — kopyala-yapıştır parçacıkların genellikle şaştığı yer de burasıdır.
Bu oluşturucu, isteği iş birimi olarak ele alır. Anahtar koşulunu, filtreyi ve projeksiyonu, İfade Oluşturucumuzun kullandığı aynı tipli ve ayrılmış-kelimelere-dayanıklı modelin üzerinde kurar, istek seçeneklerini de yanına ayarlarsın. Çıktı bir parça değildir: çalıştırabileceğin bir programdır — import’lar, istemci kurulumu, çağrının kendisi ve “Tüm sayfaları getir”i açtığında tüm sonuç sayfalarını boşaltan ExclusiveStartKey döngüsü.
Üretilen kod her hedef için dürüst kalır. AWS CLI kendi kendine sayfalar; bu yüzden Limit --page-size olur ve tek istekli çalıştırma --no-paginate alır. PartiQL, deyime değil ExecuteStatement API’sine ait parametreleri geri çevirir. Azalan bir Query ise, ifade edilebildiği yerde sort key’in üzerinde ORDER BY olur.
Altı operasyondan herhangi biri için yalnızca ifadenin kendisine mi ihtiyacın var — yer tutucu map’leriyle bir koşul, filtre veya güncelleme ifadesi? DynamoDB İfade Oluşturucu tam olarak bunun için yapıldı. Önce iki okuma operasyonu arasında mı karar veriyorsun? Query ve Scan hangisinin ne zaman doğru tercih olduğunu ayrıntılarıyla anlatır.
Sıkça sorulan sorular
Bunun DynamoDB İfade Oluşturucudan farkı ne?
İkisi problemi bilinçli olarak paylaşır. İfade Oluşturucunun konusu ifade sözdizimidir — altı operasyonun tamamında anahtar koşulları, filtreler, güncelleme ve koşul ifadeleri ile bunların ExpressionAttributeNames/Values map’leri — ve yalnızca komutun kendisini üretir. Sorgu Oluşturucunun konusu eksiksiz Query veya Scan isteğidir: tablo ve index, anahtar koşulu, filtre, projeksiyon, artı ifade aracının sunmadığı istek düzeyindeki parametreler (Limit, sıralama yönü, ConsistentRead, ExclusiveStartKey) — ve istemci kurulumu ile isteğe bağlı sayfalama döngüsünü içeren çalıştırılabilir bir program üretir.
Query veya Scan’de Limit gerçekte neyi sınırlar?
Limit, DynamoDB’nin istek başına kaç item değerlendireceğini sınırlar; kaç eşleşen item alacağını değil. Filtreler okumadan sonra çalışır; bu yüzden Limit 25 ve bir FilterExpression içeren bir Query, 25’ten az item — hatta hiç — döndürebilir ve yine de değerlendirdiği her şeyin okuma kapasitesini tüketir; sayfalama LastEvaluatedKey’den devam eder. Otomatik sayfalayan AWS CLI’da aynı parametre --page-size ile ayarlanır.
DynamoDB sayfalaması (LastEvaluatedKey) nasıl çalışır?
Daha fazla veri içeren bir Query ya da Scan yanıtı, okunan son öğenin birincil anahtarı olan bir LastEvaluatedKey içerir. Bunu bir sonraki istekte ExclusiveStartKey olarak geri gönderir ve bu anahtarı içermeyen bir yanıt gelene kadar tekrarlarsınız. “Tüm sayfaları getir” seçeneğini açtığınızda, üretilen SDK v3, boto3, Java ve .NET programları tam olarak bu döngüyü içerir; Go, Rust, Kotlin, PHP, Ruby ve DocumentClient kendi SDK'lerinin yerleşik sayfalayıcısını kullanır; AWS CLI ise --no-paginate vermediğiniz sürece sayfaları kendisi takip eder.
Güçlü tutarlı okumayı ne zaman kullanabilirim?
ConsistentRead temel tablolarda ve local secondary index’lerde çalışır, ancak global secondary index’lerde çalışmaz — ConsistentRead ayarlı bir GSI’ye yapılan Query reddedilir. Güçlü tutarlı bir okuma ayrıca nihai tutarlı bir okumanın iki katı okuma kapasitesi tüketir. Bu, PartiQL deyim metninin bir parçası değil bir API parametresidir — PartiQL sekmesinin bunu dürüstçe geri çevirmesinin nedeni de bu.
Buraya girdiğim herhangi bir şey bir yere yükleniyor mu?
Hayır. Bu statik bir sayfa: istek tamamen tarayıcında oluşturulur ve kod orada üretilir; tablo adları, anahtar değerleri ve filtreler asla bir sunucuya ulaşmaz. “Bağlantıyı kopyala” tüm isteği URL’ye paketler — yazdığın herhangi bir şeyin sayfadan çıkmasının tek yolu o bağlantıyı paylaşmaktır ve bu senin elindedir.