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
| GSI | LSI | |
|---|---|---|
| Partition key | Herhangi skaler (S/N/B) | Tabloyla aynı |
| Sort key | Herhangi skaler (S/N/B) | Herhangi skaler (S/N/B) |
| Ne zaman oluşturulur | İstediğiniz zaman | Yalnızca tablo oluşturmada |
| Tutarlılık | Yalnızca nihai | Güçlü mevcut |
| Kapasite | Kendisininki | Tablonunkini 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ır | Evet (PK başına) |
Bir başparmak kuralı
- Farklı bir mi gerekiyor (örn. siparişleri
customeryerinestatus'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:
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.