Pemula5 menit baca

Cara Mendapatkan Ukuran dan Jumlah Item Tabel DynamoDB

Tidak ada SELECT COUNT(*) yang bisa Anda arahkan dengan murah ke sebuah tabel DynamoDB. DynamoDB memberi Anda dua jawaban yang sangat berbeda untuk "seberapa besar tabel ini?": sebuah estimasi gratis yang bisa basi hingga enam jam, dan sebuah hitungan eksak yang berbiaya pembacaan penuh atas tabelnya. Sebagian besar kebingungan "kenapa jumlah Item saya salah?" berasal dari memilih yang satu sambil mengharapkan perilaku yang lain.

Bagaimana cara mendapatkan jumlah Item dan ukuran sebuah tabel DynamoDB?

Panggil DescribeTable: ia mengembalikan ItemCount dan TableSizeBytes secara gratis, tetapi "DynamoDB memperbarui nilai ini kira-kira setiap enam jam. Perubahan terbaru mungkin belum tercermin dalam nilai ini" (AWS API reference). Untuk angka eksak, jalankan sebuah Scan dengan --select COUNT — ia mengembalikan hanya hitungannya, tetapi membaca (dan menagih) setiap Item. Sebuah GUI seperti DynoTable menampilkan estimasinya di setiap tabel dan bisa menghitung hitungan eksak sesuai permintaan.

Anda inginGunakanBiayaKesegaran
Perkiraan kasar jumlah + ukuran, gratisDescribeTabletidak ada (panggilan metadata)basi ~6 jam
Hitungan total eksakScan dengan Select COUNTmembaca seluruh tabellive
Hitungan eksak untuk satu keyQuery dengan Select COUNTmembaca Item yang cocoklive
Hitungan subset yang difilterScan/Query + filter + COUNTmembaca semua yang di-scanlive

Metode 1: DescribeTable (gratis, basi ~6 jam)

DescribeTable adalah pencarian metadata — ia tidak membaca Item, jadi ia tidak mengonsumsi read capacity, dan ia membawa dua angka yang Anda cari:

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

Keduanya datang dengan peringatan yang sama, langsung dari API reference: "DynamoDB memperbarui nilai ini kira-kira setiap enam jam. Perubahan terbaru mungkin belum tercermin dalam nilai ini." Jadi tabel yang baru saja Anda bulk-load bisa melaporkan ItemCount: 0 selama berjam-jam — angkanya tidak salah, ia sebuah snapshot.

Respons yang sama juga membawa angka per-indeks: setiap GSI dan LSI melaporkan ItemCount dan IndexSizeBytes-nya sendiri dengan irama enam jam yang sama. Membandingkan jumlah Item sebuah dengan milik tabelnya adalah pemeriksaan kesehatan gratis yang bagus — ia memberi tahu Anda berapa banyak Item yang benar-benar membawa key indeksnya.

Metode 2: hitungan eksak dengan Scan + Select COUNT

Ketika "kira-kira, per tadi pagi" tidak cukup baik, hitunglah sungguhan:

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

Fakta yang perlu diketahui sebelum Anda menjalankannya, semuanya dari Scan API reference:

  • COUNT "mengembalikan jumlah Item yang cocok, alih-alih Item yang cocok itu sendiri" — trafik jaringan lebih sedikit, tetapi "ini menggunakan jumlah read capacity unit yang sama dengan mengambil Item-nya". Hitungan eksak atas tabel 100 GB adalah pembacaan 100 GB di tagihan Anda.
  • Sebuah request tunggal tetap berhenti di 1 MB data yang di-scan; Count di respons "hanya mengembalikan hitungan Item yang spesifik untuk satu request scan". CLI mengikuti LastEvaluatedKey dan menjumlahkan halaman-halamannya untuk Anda; di kode SDK Anda me-loop dan menjumlahkan — lihat paginasi.
  • Pada tabel besar, bagi pekerjaannya dengan sebuah parallel scan (--segment / --total-segments) dan jumlahkan hitungan per-segmennya.

Menghitung sebuah subset

  • Item di bawah satu partition key: Query dengan --select COUNT — membaca hanya Item milik key itu, jadi semurah datanya kecil. Ini cara yang benar untuk menghitung sebuah .
  • Item yang cocok dengan sebuah filter: tambahkan sebuah FilterExpression — tetapi ingat hitungan yang ditagihkan kepada Anda adalah ScannedCount, bukan Count: DynamoDB memfilter setelah membaca, jadi "hitung order yang diarsipkan" lewat scan berfilter membayar untuk setiap order. ScannedCount tinggi di samping Count kecil adalah tanda tangan sebuah filter yang ingin menjadi GSI — lihat strategi filtering.

Untuk pertanyaan yang lebih kaya — hitungan per status, jumlah, rata-rata — DynamoDB sama sekali tidak punya GROUP BY; solusi-solusinya ada di count, sum & agregat.

Ukuran tabel dan jumlah Item di DynoTable

DynoTable menaruh kedua jawaban di tempat yang sudah Anda pandangi. Setiap tabel yang terbuka punya tombol Stats (ikon bar-chart) di toolbar tab; panelnya menampilkan:

  • Primary key dan secondary index — bentuk tabel dalam sekali pandang.
  • Items · Size · Avg item — estimasi DescribeTable milik DynamoDB sendiri, diberi label sebagai estimasi, dengan peringatan enam-jam-nya hanya satu hover jauhnya.
  • Index table — sebuah sampling scan satu-klik yang menemukan setiap atribut yang benar-benar dibawa Item Anda (termasuk path bersarang seperti commonData.status), dengan progres live. Ia menggerakkan autocomplete field dan sebuah ekspor TypeScript / Zod / JSON Schema hasil inferensi, dan ia menimbulkan biaya baca DynamoDB normal — aplikasinya mengatakannya di muka.
Panel Table stats di DynoTable: key dan indeks, baris estimasi Items / Size / Avg item, dan daftar field yang terindeks.
Panel Table stats di DynoTable: key dan indeks, baris estimasi Items / Size / Avg item, dan daftar field yang terindeks.

Dan untuk angka eksaknya, asisten AI bawaan menghitung hitungan, jumlah, dan rincian per-grup atas seluruh tabel sesuai permintaan — ia membaca setiap Item yang cocok alih-alih men-sampling satu halaman, dan ia bertanya sebelum menjalankan apa pun yang berbiaya read capacity.

FAQ

Kenapa jumlah Item DynamoDB saya salah? Ia tidak salah — ia basi. ItemCount (dan TableSizeBytes) menyegarkan diri "kira-kira setiap enam jam", jadi penulisan dan penghapusan terbaru belum tercermin. Ringkasan tabel di console menampilkan angka DescribeTable yang sama, dengan jeda yang sama.

Bagaimana cara menghitung baris di DynamoDB secara eksak? aws dynamodb scan --table-name X --select COUNT — CLI menelusuri seluruh tabel halaman demi halaman dan menjumlahkan hitungan per-halamannya. Ia eksak tetapi menagih read capacity yang sama dengan mengambil setiap Item.

Apakah DescribeTable gratis? Ia tidak mengonsumsi read capacity — ia panggilan metadata, bukan pembacaan data, jadi mem-polling-nya tidak akan menyentuh throughput tabel Anda.

Bagaimana cara menemukan ukuran satu Item? DynamoDB memetering berdasarkan ukuran Item (dibulatkan ke atas per 1 KB ditulis / 4 KB dibaca). Tempelkan sebuah Item ke kalkulator ukuran item untuk melihat ukuran tertagihnya, dan lihat batas Item 400 KB untuk plafonnya.

Apakah jumlah Item memengaruhi tagihan saya? Penyimpanan ditagih berdasarkan TableSizeBytes, dan request berdasarkan ukuran Item × jumlah request — bukan berdasarkan jumlah Item secara langsung. Masukkan angka tabel Anda ke kalkulator harga untuk melihat gambaran bulanannya lintas mode on-demand dan provisioned.

Ingin bentuk tabel, estimasi, dan field terindeks hanya satu klik jauhnya? Unduh DynoTable dan buka panel Stats pada tabel mana pun.

Diperbarui