Başlangıç5 dakikalık okuma

Bir DynamoDB Tablosunun Boyutu ve Öğe Sayısı Nasıl Alınır

Bir DynamoDB tablosuna ucuza doğrultabileceğiniz bir SELECT COUNT(*) yoktur. DynamoDB, "bu tablo ne kadar büyük?" sorusuna birbirinden çok farklı iki yanıt verir: altı saate kadar bayat olabilen ücretsiz bir tahmin ve tablonun tam bir okumasına mal olan kesin bir sayım. "Öğe sayım neden yanlış?" kafa karışıklığının çoğu, birini seçip diğerinin davranışını beklemektir.

Bir DynamoDB tablosunun öğe sayısını ve boyutunu nasıl alırım?

DescribeTable'ı çağırın: ItemCount ve TableSizeBytes'ı ücretsiz döndürür, ama "DynamoDB bu değeri yaklaşık her altı saatte bir günceller. Son değişiklikler bu değere yansımamış olabilir" (AWS API referansı). Kesin bir sayı için, --select COUNT ile bir Scan çalıştırın — yalnızca sayımı döndürür, ama her öğeyi okur (ve faturalandırır). DynoTable gibi bir GUI, tahminleri her tabloda gösterir ve talep üzerine kesin sayımlar hesaplayabilir.

İstediğinizKullanınMaliyetTazelik
Kabaca sayım + boyut, ücretsizDescribeTableyok (meta veri çağrısı)~6 sa bayat
Kesin toplam sayımSelect COUNT ile Scantüm tabloyu okurcanlı
Tek bir anahtar için kesin sayımSelect COUNT ile Queryeşleşen öğeleri okurcanlı
Filtrelenmiş bir alt kümenin sayımıScan/Query + filtre + COUNTtaranan her şeyi okurcanlı

Yöntem 1: DescribeTable (ücretsiz, ~6 sa bayat)

DescribeTable bir meta veri sorgusudur — hiçbir öğe okumaz, dolayısıyla okuma kapasitesi tüketmez ve peşinde olduğunuz iki sayıyı taşır:

aws dynamodb describe-table --table-name Orders \
  --query 'Table.[ItemCount, TableSizeBytes]'

İkisi de aynı uyarıyla gelir, API referansından kelimesi kelimesine: "DynamoDB bu değeri yaklaşık her altı saatte bir günceller. Son değişiklikler bu değere yansımamış olabilir." Yani az önce toplu yüklediğiniz bir tablo saatlerce ItemCount: 0 raporlayabilir — sayı yanlış değildir, bir anlık görüntüdür.

Aynı yanıt dizin başına rakamları da taşır: her GSI ve LSI, aynı altı saatlik ritimde kendi ItemCount ve IndexSizeBytes değerlerini raporlar. Bir öğe sayısını tablonunkiyle karşılaştırmak hoş, ücretsiz bir sağlık kontrolüdür — kaç öğenin gerçekten dizin anahtarını taşıdığını söyler.

Yöntem 2: Scan + Select COUNT ile kesin sayım

"Yaklaşık, bu sabah itibarıyla" yeterince iyi olmadığında, gerçekten sayın:

aws dynamodb scan --table-name Orders --select COUNT

Çalıştırmadan önce bilmeniz gereken gerçekler, hepsi Scan API referansından:

  • COUNT, "eşleşen öğelerin kendileri yerine eşleşen öğelerin sayısını döndürür" — daha az ağ trafiği, ama "bu, öğeleri almakla aynı miktarda okuma kapasitesi birimi kullanır". 100 GB'lik bir tablonun kesin sayımı, faturanızda 100 GB'lik bir okumadır.
  • Tek bir istek yine taranan 1 MB veride durur; yanıttaki Count "yalnızca tek bir tarama isteğine özgü öğelerin sayısını döndürür". CLI sizin için LastEvaluatedKey'i izler ve sayfaları toplar; SDK kodunda döngü kurar ve toplarsınız — bkz. sayfalama.
  • Büyük bir tabloda işi bir paralel tarama ile bölün (--segment / --total-segments) ve segment başına sayımları toplayın.

Bir alt kümeyi saymak

  • Tek bir bölüm anahtarı altındaki öğeler: --select COUNT ile Query — yalnızca o anahtarın öğelerini okur, yani veri ne kadar küçükse o kadar ucuzdur. Bir saymanın doğru yolu budur.
  • Bir filtreyle eşleşen öğeler: bir FilterExpression ekleyin — ama faturalandırıldığınız sayının Count değil ScannedCount olduğunu unutmayın: DynamoDB, okuduktan sonra filtreler, yani filtrelenmiş bir taramayla "arşivlenmiş siparişleri say" her sipariş için öder. Küçük bir Count'un yanındaki yüksek bir ScannedCount, bir GSI olmak isteyen bir filtrenin imzasıdır — bkz. filtreleme stratejileri.

Daha zengin sorular için — durum başına sayımlar, toplamlar, ortalamalar — DynamoDB'nin hiç GROUP BY'ı yoktur; geçici çözümler sayım, toplam ve toplulaştırma bölümünde yaşar.

DynoTable'da tablo boyutu ve öğe sayısı

DynoTable, iki yanıtı da zaten baktığınız yere koyar. Her açık tablonun sekme araç çubuğunda bir Stats düğmesi (çubuk grafik simgesi) vardır; panel şunları gösterir:

  • Birincil anahtar ve ikincil dizinler — tablonun şekli bir bakışta.
  • Items · Size · Avg item — DynamoDB'nin kendi DescribeTable tahminleri, tahmin olarak etiketlenmiş, altı saatlik uyarı bir fare üstüne getirme uzağınızda.
  • Index table — öğelerinizin gerçekten taşıdığı her özniteliği ( commonData.status gibi iç içe yollar dahil) canlı ilerlemeyle keşfeden tek tıklık bir örnekleme taraması. Alan otomatik tamamlamayı ve çıkarsanan bir TypeScript / Zod / JSON Schema dışa aktarımını besler ve normal DynamoDB okuma maliyetlerine yol açar — uygulama bunu baştan söyler.
DynoTable'daki Tablo istatistikleri paneli: anahtarlar ve dizinler, Items / Size / Avg item tahmin satırı ve dizinlenmiş alan listesi.
DynoTable'daki Tablo istatistikleri paneli: anahtarlar ve dizinler, Items / Size / Avg item tahmin satırı ve dizinlenmiş alan listesi.

Ve kesin sayılar için, yerleşik AI asistanı talep üzerine tüm tablo üzerinde sayımlar, toplamlar ve grup başına dökümler hesaplar — bir sayfayı örneklemek yerine eşleşen her öğeyi okur ve okuma kapasitesine mal olan herhangi bir şeyi çalıştırmadan önce sorar.

SSS

DynamoDB öğe sayım neden yanlış? Yanlış değil — bayat. ItemCount (ve TableSizeBytes) "yaklaşık her altı saatte bir" yenilenir, yani son yazmalar ve silmeler henüz yansımamıştır. Konsolun tablo genel bakışı, aynı gecikmeyle aynı DescribeTable sayılarını gösterir.

DynamoDB'de satırları tam olarak nasıl sayarım? aws dynamodb scan --table-name X --select COUNT — CLI tüm tabloyu sayfalayarak dolaşır ve sayfa başına sayımları toplar. Kesindir ama her öğeyi getirmekle aynı okuma kapasitesini faturalandırır.

DescribeTable ücretsiz mi? Okuma kapasitesi tüketmez — bir veri okuması değil, bir meta veri çağrısıdır; dolayısıyla onu yoklamak tablonuzun throughput'una dokunmaz.

Tek bir öğenin boyutunu nasıl bulurum? DynamoDB, öğe boyutuna göre ölçer (yazılan 1 KB / okunan 4 KB başına yukarı yuvarlanır). Faturalandırılan boyutunu görmek için bir öğeyi öğe boyutu hesaplayıcısına yapıştırın ve tavan için 400 KB öğe sınırına bakın.

Öğe sayısı faturamı etkiler mi? Depolama TableSizeBytes'a göre, istekler ise öğe boyutu × istek sayısına göre faturalandırılır — doğrudan öğe sayısına göre değil. Aylık resmi isteğe bağlı ve sağlanan modlar genelinde görmek için tablonuzun sayılarını fiyatlandırma hesaplayıcısına girin.

Tablonun şeklini, tahminlerini ve dizinlenmiş alanlarını bir tık uzağınızda mı istiyorsunuz? DynoTable'ı indirin ve herhangi bir tabloda Stats panelini açın.

Güncellendi