Débutant3 min de lecture

GSI vs LSI dans DynamoDB

Un Global Secondary Index (GSI) comme un Local Secondary Index (LSI) te permettent tous deux de faire un Query sur un attribut qui n'est pas la clé de ta table. Ils ne sont pas interchangeables — les différences décident lequel un pattern réclame.

Les différences qui comptent

GSILSI
Clé de partitionN'importe quel attributIdentique à la table
Clé de triN'importe quel attributN'importe quel attribut
Quand crééÀ tout momentÀ la création de la table seulement
CohérenceÀ cohérence à terme uniquementForte disponible
CapacitéLa siennePartage celle de la table
Propagation des écrituresAsynchrone (à cohérence à terme)Synchrone (atomique)
Max par table20 (par défaut, augmentable)5 (strict)
Plafond de partition 10 GBNonOui (par PK)

Une règle empirique

  • Besoin d'une clé de partition différente (par ex. retrouver des commandes par status plutôt que par customer) ? Il te faut un GSI — un LSI ne peut pas repartitionner.
  • Besoin d'un second ordre de tri dans la même partition — un LSI garde la clé de partition exacte de la table et n'échange qu'une clé de tri différente, décidée en amont, avec des lectures fortement cohérentes ? Un LSI convient.

Le choix se résume à une seule question — quelle clé es-tu en train de changer :

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

Une clé de partition différente impose un GSI ; une clé de tri différente sur la même partition est le seul cas où un LSI convient.

En pratique, la plupart des équipes optent presque exclusivement pour les GSI : ils sont ajoutables plus tard, mis à l'échelle indépendamment et non soumis à la limite de 10 GB par partition. Surcharge les clés d'un seul GSI pour servir plusieurs patterns — voir single-table design.

Si tu ajoutes un GSI pour éliminer un Scan, souviens-toi qu'il a sa propre capacité de lecture/écriture. Dimensionne ce coût supplémentaire avec le calculateur de tarifs, et essaie DynoTable pour inspecter les attributs projetés d'un index avant de t'y engager.

Mis à jour