Débutant4 min de lecture

GSI vs LSI dans DynamoDB

Un index secondaire global (GSI) comme un index secondaire local (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 requiert.

Quelle est la différence entre un GSI et un LSI dans DynamoDB ?

Un index secondaire global peut utiliser n'importe quel attribut scalaire de premier niveau (chaîne, nombre ou binaire) comme clé de partition, obtient sa propre capacité et peut être ajouté à tout moment — mais ne sert que des lectures en cohérence à terme. Un index secondaire local garde la même clé de partition que la table avec une clé de tri différente, prend en charge les lectures fortement cohérentes et partage la capacité de la table, mais doit être créé avec la table.

Les différences qui comptent

GSILSI
Clé de partitionN'importe quel scalaire (S/N/B)Même que la table
Clé de triN'importe quel scalaire (S/N/B)N'importe quel scalaire (S/N/B)
Moment de créationÀ tout momentCréation de table uniquement
CohérenceÀ terme uniquementForte disponible
CapacitéLa siennePartage celle de la table
Propagation des écrituresAsynchrone (à terme)Synchrone (atomique)
Max par table20 (par défaut, augmentable)5 (fixe)
Plafond de partition 10 GoNonOui (par PK)

Une règle empirique

  • Besoin d'une différente (par ex. rechercher les commandes par status au lieu de customer) ? Il te faut un GSI — un LSI ne peut pas repartitionner.
  • Besoin d'un second ordre de tri au sein de la même partition — un LSI garde la clé de partition exacte de la table et n'échange que la clé de tri — décidé d'emblée, avec des lectures ? Un LSI convient.

Le choix se résume à une seule question — quelle clé changes-tu :

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 se tournent presque exclusivement vers les GSI : ils sont ajoutables plus tard, mis à l'échelle indépendamment, et non soumis à la limite de 10 Go par partition. Surcharge les clés d'un même GSI pour servir plusieurs patterns — voir conception à table unique.

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

Mis à jour