Başlangıç6 dakikalık okuma

DynamoDB Verisini Nasıl Görüntülersiniz, Gezinirsiniz ve Düzenlersiniz

Bir DynamoDB tablosuna yaptığınız her "bakma" ya da "değiştirme", küçük bir API işlemi kümesinden birine eşlenir — GetItem, Query, Scan, PutItem, UpdateItem, DeleteItem. Altta ilişkisel bir tablo görüntüleyici yoktur: "bir tabloya göz atmak" kelimenin tam anlamıyla bir Scan'dir ve "bir satırı düzenlemek" bir birincil anahtara karşı bir UpdateItem'dır. Her tıklamanın hangi işleme eşlendiğini bilmek, ucuz bir okuma ile yapmak istemediğiniz bir tam tablo taraması arasındaki farktır.

DynoTable, tam olarak bu işlemler üzerinde bir GUI'dir — hangisini çalıştırmak üzere olduğunuzu ve maliyeti, tele ulaşmadan önce size gösterir.

Bir DynamoDB tablosuna nasıl göz atılır

"İçinde ne olduğunu görmek" için bir tablo açmak bir Scan'dir — tablodaki ya da indeksteki her öğeyi okur (AWS: "Amazon DynamoDB'deki bir Scan işlemi bir tablodaki ya da bir ikincil indeksteki her öğeyi okur."). Küçük tablolar için iyidir; büyük bir tabloda query vs scan'de ele alınan klasik maliyet ayak tetiğidir.

Tek bir Scan en fazla 1 MB veri döndürür, sonra size bir sonraki sayfayı getirmek için bir LastEvaluatedKey verir — yani "tüm tabloya göz atmak" aslında bir sayfalandırma döngüsüdür (AWS: "Tek bir Scan isteği en fazla 1 MB veri alabilir" ve "bir Scan yanıtından gelen LastEvaluatedKey, bir sonraki Scan isteği için ExclusiveStartKey olarak kullanılmalıdır"). İmlecin nasıl çalıştığı ve neden ofset stili sayfa numaralarının burada var olmadığı için bkz. sayfalandırma.

DynamoDB verisi nasıl filtrelenir / taranır

Tuzak: bir filtre ifadesi sizi bir taramadan kurtarmaz. DynamoDB filtreyi okuma tamamlandıktan sonra uygular, böylece taranan her öğenin bedelini ödersiniz — sadece tuttuğunuz satırların değil.

Bir filtre ifadesi bir Scan bittikten sonra ama sonuçlar döndürülmeden önce uygulanır. Bu nedenle, bir Scan bir filtre ifadesinin varlığından bağımsız olarak aynı miktarda okuma kapasitesi tüketir. — AWS Scan belgeleri

Yanıt bunu görünür kılar: ScannedCount "herhangi bir ScanFilter uygulanmadan önce değerlendirilen öğelerin sayısı" iken Count filtreden hayatta kalan şeydir (AWS). Küçük bir Count ile yüksek bir ScannedCount, verimsiz bir taramanın imzasıdır.

Bir DynamoDB tablosu nasıl sorgulanır

Bir Query ucuz, hedefli okumadır — ama bir bölüm anahtarı gerektirir. AWS'e göre: "Bölüm anahtarı özniteliğinin adını ve o öznitelik için tek bir değer sağlamalısınız. Query, o bölüm anahtarı değerine sahip tüm öğeleri döndürür. İsteğe bağlı olarak, bir sıralama anahtarı özniteliği sağlayabilir ve arama sonuçlarını daraltmak için bir karşılaştırma operatörü kullanabilirsiniz."

Yani bir Query yalnızca bir bölüm anahtarı altındaki öğeleri okur, isteğe bağlı olarak bir sıralama anahtarı koşuluyla daraltılır — asla tüm tabloyu değil. Bölüm anahtarı yok, Query yok: yine bir Scan'e dönersiniz. Bu seçim, DynamoDB'deki en önemli maliyet kararıdır; tam dökümü query vs scan'de.

KeyConditionExpression / FilterExpression'ı yer tutucu söz dizimini elle yazmadan derlemek için, DynamoDB İfade Oluşturucu'yu kullanın — API'nin beklediği tam ad/değer haritalarını yayar.

DynamoDB'de bir öğe nasıl düzenlenir

Bir öğeyi düzenlemek, onun tam birincil anahtarına karşı bir UpdateItem'dır. Tüm öğeyi yeniden yazmazsınız — yalnızca değiştirdiğiniz öznitelikleri adlandıran bir güncelleme ifadesi sağlarsınız:

UpdateItem
  Key:              { "PK": "USER#42", "SK": "PROFILE" }
  UpdateExpression: SET email = :e, updatedAt = :t

İnsanları tökezleten, ikisi de AWS öğeler belgelerinden gelen iki gerçek:

  • Bir kısmını değil, tüm birincil anahtarı belirtmelisiniz. Bileşik anahtarlı bir tabloda bu, bölüm anahtarı ve sıralama anahtarıdır. Keyfî bir özniteliğe göre "bir satırı düzenleyemezsiniz" — bunun önce anahtarı bulmak için bir tarama gerekir.
  • UpdateItem bir upsert'tir. "Belirtilen anahtara sahip bir öğe yoksa, UpdateItem yeni bir öğe oluşturur. Aksi takdirde, mevcut bir öğenin özniteliklerini değiştirir." Anahtardaki bir yazım hatası, hata vermek yerine sessizce yeni bir öğe oluşturur.

Bir öğe nasıl silinir

Bir DeleteItem, yine tam birincil anahtarla anahtarlanmış: "DeleteItem belirtilen anahtara sahip öğeyi siler" (AWS). Düzenlemeyle aynı kural — tüm anahtara ihtiyacınız var, bu yüzden "status = 'open' olan tüm satırları silmek" tek bir çağrı değildir; anahtarları bulmak için tarar/sorgular, sonra her birini silersiniz. BatchWriteItem 25'e kadar put/delete isteğini paketler (AWS: "BatchWriteItem işlemi 25'e kadar bireysel PutItem ve DeleteItem isteği içerebilir"), ama her biri yine tek bir anahtarı hedefler — bir DELETE … WHERE yoktur.

İç içe / JSON verisi nasıl görüntülenir

DynamoDB öğeleri tür etiketli bir telli biçimde (DynamoDB-JSON) saklanır, burada her değer bir veya iki harfli bir tür tanımlayıcısı taşır (S, N, M, L, SS… — tam tanımlayıcı listesi AWS veri türleri belgelerinde). Düz JSON'un küme türü yoktur, bu yüzden bir dizi bir dize kümesi (SS) olarak değil, asla bir liste (L) olarak gidip gelir — gerçek bir dönüştürme sınırlaması, bir görüntüleme hatası değil. Tam tür haritası DynamoDB veri türleri'nde; bir DynamoDB-JSON blob'unu düz JSON'a ve geri dönüştürmek için, DynamoDB JSON dönüştürücüsünü kullanın.

Göz at-ve-düzenle'nin ötesinde: DynamoDB'nin yapamadığı sorgulama

Scan/Query/UpdateItem görüntülemeyi ve düzenlemeyi kapsar, ama analiz edemezler — DynamoDB'nin JOIN, GROUP BY'ı ya da COUNT/SUM gibi toplama işlevleri yoktur ve PartiQL de onları eklemez: SELECT grameri sadece SELECT … FROM table [WHERE …] [ORDER BY …]'dir, birleştirme ya da gruplama yan tümcesi olmadan (AWS PartiQL SELECT referansı), böylece her ifade tek bir Get/Query/Scan/Put/Update/Delete'e eşlenir. DynoTable'ın SQL Workbench'i, tablolarınızı DynamoDB'nin gerçek sorgu çalışma zamanı aracılığıyla gerçekleştirerek ve üzerinde SQL çalıştırarak o boşluğu doldurur — DynamoDB'nin erişim deseni kuralları içinde SQL — ama günlük göz at-ve-düzenle için, yukarıdaki işlemler tüm araç kutusudur.

SSS

DynamoDB verisini AWS Konsolu olmadan nasıl görüntülerim? Aynı Scan/Query çağrılarını veren bir masaüstü GUI kullanın. AWS Konsolu tablolara sayfalanmış taramalar aracılığıyla göz atar; DynoTable gibi özel bir istemci aynısını yapar ama tüketilen kapasiteyi ve çalıştırdığınız işlemi gösterir.

Bir DynamoDB öğesini nasıl düzenlerim? Öğenin tam birincil anahtarına karşı, yalnızca değiştirdiğiniz öznitelikleri adlandıran bir SET güncelleme ifadesiyle bir UpdateItem verin. Bir GUI'de, hücreyi satır içi düzenleyin — sizin için o UpdateItem'a derlenir.

Filtreleme neden hâlâ bir tam taramaya mal olur? Çünkü DynamoDB filtreyi tarama öğeleri okuduktan sonra uygular. Filtrelenip çıkarılan öğeler yine okunur ve ölçülür. Maliyeti kesmek için, taramak yerine bir bölüm anahtarına (ya da bir GSI'ya) göre sorgulayın.

Birçok öğeyi aynı anda güncelleyebilir miyim? Tek bir çağrıda değil. UpdateItem/DeleteItem her biri tek bir birincil anahtarı hedefler; bir UPDATE … WHERE yoktur. Anahtarları toplamak için tarar/sorgular, sonra her birini yazarsınız (BatchWriteItem başına 25'e kadar).

Bir DynamoDB Local tablosuna aynı şekilde göz atabilir miyim? Evet — aynı GUI'yi yerel uç noktaya yöneltin. Bkz. DynamoDB Local.

DynamoDB tablolarına göz atmak, filtrelemek ve satır içi düzenlemek — ve PartiQL'in çalıştıramadığı SQL'i çalıştırmak ister misiniz? DynoTable'ı indirin.

Güncellendi