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
Scanbittikten sonra ama sonuçlar döndürülmeden önce uygulanır. Bu nedenle, birScanbir 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.
UpdateItembir upsert'tir. "Belirtilen anahtara sahip bir öğe yoksa,UpdateItemyeni 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.