Başlangıç3 dakikalık okuma

DynamoDB'de GSI ve LSI

Hem bir Global Secondary Index (GSI) hem de bir Local Secondary Index (LSI), tablonuzun anahtarı olmayan bir attribute ile Query yapmanıza olanak tanır. Bunlar birbirinin yerine kullanılamaz — farklılıklar, bir modelin hangisine ihtiyaç duyduğuna karar verir.

Önemli olan farklılıklar

GSILSI
Partition keyHerhangi bir attributeTabloyla aynı
Sort keyHerhangi bir attributeHerhangi bir attribute
Ne zaman oluşturulurHer zamanYalnızca tablo oluşturulurken
TutarlılıkYalnızca nihaiGüçlü kullanılabilir
KapasiteKendine aitTablonunkini paylaşır
Yazma yayılımıAsync (nihai)Senkron (atomik)
Tablo başına maks.20 (varsayılan, artırılabilir)5 (kesin)
10 GB partition sınırıHayırEvet (PK başına)

Bir başparmak kuralı

  • Farklı bir partition key'e mi ihtiyacınız var (örn. siparişleri customer yerine status ile aramak)? Bir GSI'ye ihtiyacınız var — bir LSI yeniden partition'layamaz.
  • Güçlü tutarlı okumalarla, önceden kararlaştırılmış olarak, aynı partition içinde ikinci bir sıralama düzenine mi ihtiyacınız var — bir LSI, tablonun tam partition key'ini tutar ve yalnızca farklı bir sort key ile değiştirir? Bir LSI uygundur.

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'da farklı bir sort key, bir LSI'nin uyduğu tek durumdur.

Pratikte çoğu ekip neredeyse yalnızca GSI'lere başvurur: bunlar daha sonra eklenebilir, bağımsız olarak ölçeklenir ve partition başına 10 GB sınırına tabi değildir. Birden çok modele hizmet etmek için tek bir GSI'nin anahtarlarını aşırı yükleyin — single-table tasarımı bölümüne bakın.

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

Güncellendi