Başlangıç5 dakikalık okuma

DynamoDB Tablo Boyutu ve Öğe Sayısı

Bir DynamoDB tablosuna ucuza yöneltebileceğiniz bir SELECT COUNT(*) yoktur. DynamoDB, "bu tablo ne kadar büyük?" sorusuna birbirinden çok farklı iki cevap verir: altı saate kadar bayat olabilen ücretsiz bir tahmin ve tablonun tamamının okunması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ı beklemekten kaynaklanır.

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

DescribeTable çağırın: ItemCount ve TableSizeBytes değerlerini ücretsiz döndürür, ama "DynamoDB updates this value approximately every six hours. Recent changes might not be reflected in this value" (AWS API referansı). Kesin bir sayı için --select COUNT ile bir Scan çalıştırın — yalnızca sayıyı döndürür, ama her öğeyi okur (ve faturalandırır). DynoTable gibi bir GUI tahminleri her tabloda gösterir ve istendiğinde kesin sayımları hesaplayabilir.

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

Yöntem 1: DescribeTable (ücretsiz, ~6 saat gecikmeli)

DescribeTable bir meta veri aramasıdır — hiç öğ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 birebir aktarıyoruz: "DynamoDB updates this value approximately every six hours. Recent changes might not be reflected in this value." Yani az önce toplu yükleme yaptığınız bir tablo saatlerce ItemCount: 0 bildirebilir — sayı yanlış değil, sadece bir anlık görüntü.

Aynı yanıt dizin başına rakamları da taşır: her GSI ve LSI kendi ItemCount ve IndexSizeBytes değerini aynı altı saatlik ritimde bildirir. Bir öğe sayısını tablonunkiyle karşılaştırmak hoş ve ü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 olarak, bu sabah itibarıyla" yetmediğinde gerçekten sayın:

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

Çalıştırmadan önce bilinmesi gerekenler, hepsi Scan API referansından:

  • COUNT "returns the number of matching items, rather than the matching items themselves" — daha az ağ trafiği, ama "this uses the same quantity of read capacity units as getting the items". 100 GB'lık bir tablonun kesin sayımı, faturanızda 100 GB'lık bir okumadır.
  • Tek bir istek yine taranan 1 MB veride durur; yanıtın Count alanı "only return[s] the count of items specific to a single scan request". CLI sizin için LastEvaluatedKey'i izler ve sayfaları toplar; SDK kodunda döngü kurup toplarsınız — bkz. sayfalama.
  • Büyük bir tabloda işi bir paralel taramayla (--segment / --total-segments) bölün ve segment başına sayıları 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, dolayısıyla veri küçüldükçe ucuzlar. Bir saymanın doğru yolu budur.
  • Bir filtreyle eşleşen öğeler: bir FilterExpression ekleyin — ama faturalandığınız sayının Count değil ScannedCount olduğunu unutmayın: DynamoDB okumadan sonra filtreler, yani filtreli bir taramayla "arşivlenmiş siparişleri say" demek her siparişin parasını ödemektir. Küçük bir Count'un yanındaki yüksek bir ScannedCount, aslında GSI olmak isteyen bir filtrenin imzasıdır — bkz. filtreleme stratejileri.

Daha zengin sorular için — duruma göre sayımlar, toplamlar, ortalamalar — DynamoDB'de hiç GROUP BY yoktur; geçici çözümler sayma, toplama ve toplu hesaplama sayfasında. (Ya da geçici çözümü atlayın: DynoTable'ın SQL Workbench'i GROUP BY ve toplama işlevlerini istemci tarafında çalıştırır.)

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

DynoTable her iki cevabı da zaten baktığınız yere koyar. Açık her tablonun sekme araç çubuğunda bir Ayarlar düğmesi vardır; açtığı iletişim kutusu şunları gösterir:

  • Birincil anahtar ve ikincil dizinler — tablonun şekli tek bakışta.
  • Items · Size · Avg item — DynamoDB'nin kendi DescribeTable tahminleri, tahmin olarak etiketlenmiş ve altı saatlik uyarı bir imleç dokunuşu uzağında.
  • Tabloyu index'leIndexleme bölümünde, bulduğu attribute'ları (commonData.status gibi iç içe yollar dahil) kaydeden, tek tıkla çalışan bir örnekleme taraması, canlı ilerleme göstergesiyle. Tarama sınırlıdır, bu yüzden nadir attribute'lar eksik kalabilir; sınırlar Tablo genel bakışı ve dizinleme sayfasında. Alan otomatik tamamlamayı ve çıkarımsal bir TypeScript / Zod / JSON Schema dışa aktarımını besler ve normal DynamoDB okuma maliyetlerine tabidir — uygulama bunu baştan söyler.
DynoTable'daki Tablo iletişim kutusu: anahtarlar ve dizinler, Items / Size / Avg item tahmin satırı ve dizinlenmiş alan listesi.
DynoTable'daki Tablo iletişim kutusu: anahtarlar ve dizinler, Items / Size / Avg item tahmin satırı ve dizinlenmiş alan listesi.

Kesin sayılar içinse yerleşik yapay zekâ aracısı, istek üzerine tüm tablo genelinde sayımları, toplamları ve grup bazlı dökümleri hesaplar — bir sayfayı örneklemek yerine eşleşen her öğeyi okur ve okuma kapasitesine mal olan hiçbir şeyi sormadan çalıştırmaz.

SSS

DynamoDB öğe sayım neden yanlış? ItemCount (ve TableSizeBytes) yaklaşık altı saatte bir tazelenir, dolayısıyla son yazmalar ve silmeler henüz yansımamıştır. Konsolun tablo genel bakışı da 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 sayfalar ve sayfa başına sayıları toplar. Kesindir ama her öğeyi çekmekle aynı okuma kapasitesini faturalandırır.

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

Tek bir öğenin boyutunu nasıl bulurum? DynamoDB öğe boyutuna göre ölçer (yazmada 1 KB'a, okumada 4 KB'a yukarı yuvarlanır). Bir öğenin faturalandırılan boyutunu görmek için onu öğe boyutu hesaplayıcısına yapıştırın; tavan için 400 KB öğe sınırına bakın.

Öğe sayısı faturamı etkiler mi? Depolama TableSizeBytes üzerinden, istekler ise öğe boyutu × istek sayısı üzerinden faturalandırılır — doğrudan öğe sayısı üzerinden değil. Aylık tabloyu on-demand ve provisioned modlar genelinde görmek için tablonuzun sayılarını fiyat hesaplayıcıya girin.

Tablonun şeklini, tahminlerini ve dizinlenmiş alanlarını tek tık uzağınızda ister misiniz? DynoTable'ı indirin ve herhangi bir tabloda tablo iletişim kutusunu açın.

Güncellendi