Pemula3 menit baca

GSI vs LSI di DynamoDB

Baik Global Secondary Index (GSI) maupun Local Secondary Index (LSI) memungkinkan Anda men-Query berdasarkan sebuah atribut yang bukan key tabel Anda. Keduanya tidak dapat dipertukarkan — perbedaannya menentukan yang mana yang dibutuhkan sebuah pola.

Apa perbedaan antara GSI dan LSI di DynamoDB?

Sebuah Global Secondary Index bisa memakai atribut skalar top-level apa pun (String, Number, atau Binary) sebagai partition key-nya, mendapat kapasitasnya sendiri, dan bisa ditambahkan kapan saja — tetapi hanya melayani pembacaan eventually consistent. Sebuah Local Secondary Index mempertahankan partition key sama dengan tabel dengan sort key berbeda, mendukung pembacaan strongly consistent dan berbagi kapasitas tabel, tetapi harus dibuat bersama tabel.

Perbedaan yang penting

GSILSI
Partition keyApa pun skalar (S/N/B)Sama dengan tabel
Sort keySkalar apa pun (S/N/B)Skalar apa pun (S/N/B)
Kapan dibuatKapan sajaHanya saat tabel dibuat
KonsistensiEventual sajaStrong tersedia
KapasitasMiliknya sendiriBerbagi milik tabel
Propagasi penulisanAsync (eventual)Sinkron (atomik)
Maks per tabel20 (default, bisa dinaikkan)5 (keras)
Plafon partisi 10 GBTidakYa (per PK)

Aturan praktis

  • Butuh berbeda (mis. mencari order berdasarkan status alih-alih customer)? Anda butuh sebuah GSI — sebuah LSI tak bisa mem-partisi ulang.
  • Butuh urutan sort kedua dalam partisi yang sama — sebuah LSI mempertahankan partition key persis tabel dan hanya menukar sebuah sort key yang berbeda — diputuskan di awal, dengan pembacaan ? Sebuah LSI cocok.

Pilihannya menyusut menjadi satu pertanyaan — key mana yang Anda ubah:

YesNo, same PKnew sort keyNeed to queryanother way?Differentpartition key?GSILSIOwn partitionsEventual readsOwn capacityAdd anytimeShared partitionStrong reads OKShared capacityTable-creation only

Partition key berbeda memaksa sebuah GSI; sort key berbeda pada partisi yang sama adalah satu-satunya kasus yang cocok untuk LSI.

Dalam praktik kebanyakan tim hampir selalu meraih GSI: mereka bisa ditambahkan nanti, diskalakan secara independen, dan tidak tunduk pada batas 10 GB per-partisi. Overload key satu GSI untuk melayani beberapa pola — lihat single-table design.

Jika Anda menambahkan sebuah GSI untuk membunuh sebuah Scan, ingat ia punya read/write capacity-nya sendiri. Ukur biaya ekstra itu dengan kalkulator harga, dan coba DynoTable untuk menginspeksi atribut yang diproyeksikan sebuah index sebelum Anda berkomitmen padanya.

Diperbarui