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ğiniz | Kullanın | Maliyet | Tazelik |
|---|---|---|---|
| Kabaca sayı + boyut, ücretsiz | DescribeTable | yok (meta veri çağrısı) | ~6 saat gecikmeli |
| Kesin toplam sayı | Select COUNT ile Scan | tüm tabloyu okur | canlı |
| Tek bir anahtar için kesin sayı | Select COUNT ile Query | eşleşen öğeleri okur | canlı |
| Filtrelenmiş bir alt kümenin sayısı | Scan/Query + filtre + COUNT | taranan her şeyi okur | canlı |
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
Countalanı "only return[s] the count of items specific to a single scan request". CLI sizin içinLastEvaluatedKey'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 COUNTileQuery— 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
FilterExpressionekleyin — ama faturalandığınız sayınınCountdeğilScannedCountolduğ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 birCount'un yanındaki yüksek birScannedCount, 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
DescribeTabletahminleri, tahmin olarak etiketlenmiş ve altı saatlik uyarı bir imleç dokunuşu uzağında. - Tabloyu index'le — Indexleme bölümünde, bulduğu attribute'ları (
commonData.statusgibi 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.

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.


