Başlangıç3 dakikalık okuma

DynamoDB'de GSI vs LSI

Hem bir Global Secondary Index (GSI) hem bir Local Secondary Index (LSI), tablonuzun anahtarı olmayan bir attribute'a göre Query yapmanıza izin verir. Bunlar değiştirilebilir değildir — farklar, bir modelin hangisine ihtiyaç duyduğuna karar verir.

DynamoDB'de bir GSI ile bir LSI arasındaki fark nedir?

Bir Global Secondary Index, partition key'i olarak herhangi bir üst düzey skaler attribute (String, Number ya da Binary) kullanabilir, kendi kapasitesini alır ve istediğiniz zaman eklenebilir — ama yalnızca nihai tutarlı okumalara hizmet eder. Bir Local Secondary Index, tablonun aynı partition key'ini farklı bir sort key ile korur, güçlü tutarlı okumaları destekler ve tablonun kapasitesini paylaşır, ama tabloyla birlikte oluşturulmalıdır.

Önemli olan farklar

GSILSI
Partition keyHerhangi skaler (S/N/B)Tabloyla aynı
Sort keyHerhangi skaler (S/N/B)Herhangi skaler (S/N/B)
Ne zaman oluşturulurİstediğiniz zamanYalnızca tablo oluşturmada
TutarlılıkYalnızca nihaiGüçlü mevcut
KapasiteKendisininkiTablonunkini paylaşır
Yazma yayılımıAsync (nihai)Senkron (atomik)
Tablo başına maks.20 (varsayılan, yükseltilebilir)5 (kesin)
10 GB partition sınırıHayırEvet (PK başına)

Bir başparmak kuralı

  • Farklı bir mi gerekiyor (örn. siparişleri customer yerine status'a göre aramak)? Bir GSI'ye ihtiyacınız var — bir LSI yeniden partition'layamaz.
  • Aynı partition içinde ikinci bir sıralama düzeni mi — bir LSI, tablonun tam partition key'ini korur ve yalnızca farklı bir sort key'i takar — baştan kararlaştırılmış, okumalarla mı gerekiyor? Bir LSI uyar.

Seçim tek bir soruya iner — hangi anahtarı değiştiriyorsunuz:

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

Farklı bir partition key bir GSI'yi zorunlu kılar; aynı partition üzerinde farklı bir sort key, bir LSI'nin uyduğu tek durumdur.

Uygulamada çoğu ekip neredeyse yalnızca GSI'lere uzanır: sonradan eklenebilirler, bağımsız ölçeklenirler ve 10 GB partition başına sınırına tabi değildirler. Birkaç modele hizmet etmek için tek bir GSI'nin anahtarlarını aşırı yükleyin — bkz. single-table tasarımı.

Bir Scan'i öldürmek için bir GSI ekliyorsanız, kendi okuma/yazma kapasitesi olduğunu unutmayın. O ekstra maliyeti fiyatlandırma hesaplayıcısı ile boyutlandırın ve bir index'e bağlanmadan önce yansıtılan attribute'larını incelemek için DynoTable'ı deneyin.

Güncellendi