Outil gratuit

Outil de Single-Table Design DynamoDB

Saisis tes entités et la manière dont tu as besoin de les lire — le planificateur suggère des modèles de clés PK/SK préfixées par l’entité, prévisualise les collections d’items et n’ajoute un GSI que là où la table de base ne peut pas servir un motif.

Entités
Motifs d’accès
Schéma de clés suggéré
EntitéPKSK
UserUSER#<userId>USER#<userId>
Order
dans la collection d’items User
USER#<userId>ORDER#<orderDate>#<orderId>
GetItem · table de baseObtenir User par ID
PK = USER#<userId> AND SK = USER#<userId>
Query · table de baseLister Order sous User
PK = USER#<userId> AND begins_with(SK, 'ORDER#') ScanIndexForward: false
  • Les clés de tri se comparent comme des chaînes — stocke l’attribut de tri dans un format triable (dates ISO-8601, nombres complétés par des zéros).
Query · GSI1Trouver User par email
GSI1PK = USER#EMAIL#<email>
  • Un GSI n’impose pas l’unicité — protège-toi des doublons au moment de l’écriture avec une expression de condition sur l’item de base.
Index secondaires globaux
GSI1Indexe les items User
GSI1PK = USER#EMAIL#<email> GSI1SK = USER#EMAIL#<email>
  • Un GSI n’impose pas l’unicité — protège-toi des doublons au moment de l’écriture avec une expression de condition sur l’item de base.
Items d’exemple
EntitéPKSKGSI1Attributs
UserUSER#user-1USER#user-1USER#EMAIL#user-1@example.com USER#EMAIL#user-1@example.comuserId: user-1, email: user-1@example.com
OrderUSER#user-1ORDER#2025-06-01#order-1orderId: order-1, orderDate: 2025-06-01, userId: user-1
OrderUSER#user-1ORDER#2025-06-02#order-2orderId: order-2, orderDate: 2025-06-02, userId: user-1
Définition de la table (JSON CreateTable)
{
  "TableName": "AppTable",
  "BillingMode": "PAY_PER_REQUEST",
  "AttributeDefinitions": [
    {
      "AttributeName": "PK",
      "AttributeType": "S"
    },
    {
      "AttributeName": "SK",
      "AttributeType": "S"
    },
    {
      "AttributeName": "GSI1PK",
      "AttributeType": "S"
    },
    {
      "AttributeName": "GSI1SK",
      "AttributeType": "S"
    }
  ],
  "KeySchema": [
    {
      "AttributeName": "PK",
      "KeyType": "HASH"
    },
    {
      "AttributeName": "SK",
      "KeyType": "RANGE"
    }
  ],
  "GlobalSecondaryIndexes": [
    {
      "IndexName": "GSI1",
      "KeySchema": [
        {
          "AttributeName": "GSI1PK",
          "KeyType": "HASH"
        },
        {
          "AttributeName": "GSI1SK",
          "KeyType": "RANGE"
        }
      ],
      "Projection": {
        "ProjectionType": "ALL"
      }
    }
  ]
}

JSON brut pour aws dynamodb create-table --cli-input-json — attributs PK/SK génériques typés en chaîne, GSI projetés en ALL, facturation On-Demand.

Indications de coût
Unités de lecture par item (cohérence à terme)
0,5 RCU
Unités d’écriture par item
1 WCU
Estimation mensuelle On-Demand (us-east-1) — table de base uniquement
4,93 $US
Réplication d’écriture des GSI incluse (×1)
8,21 $US

Chaque GSI stocke sa propre copie projetée de chaque item, si bien qu’une seule écriture dans la table consomme aussi de la capacité d’écriture sur chaque GSI. L’estimation suppose une projection complète et utilise le même arrondi de 4 KB en lecture / 1 KB en écriture que nos calculateurs de tarifs et de taille d’item.

Des motifs d’accès à un schéma de clés

Le single-table design part des lectures, pas des entités : au lieu de normaliser des tables et de faire des jointures au moment de la requête, tu listes chaque manière dont l’application a besoin de récupérer des données — obtenir un utilisateur par ID, lister les commandes d’un utilisateur des plus récentes aux plus anciennes, trouver un compte par e-mail — et tu façonnes les clés pour que chacune soit un simple GetItem ou une simple Query. Chaque motif auquel la table de base ne peut pas répondre te coûte un index, et ce compromis devrait être visible avant que tu ne crées la table.

Ce planificateur rend le compromis explicite. Il applique les règles single-table standard de façon déterministe — clés composites préfixées par l’entité, collections d’items pour les motifs un-à-plusieurs, GSI inversés ou restreints à un attribut pour le reste — et lorsqu’un motif ne peut pas être servi proprement, il le dit au lieu de faire semblant. La table d’items d’exemple montre comment les lignes obtenues se placent réellement côte à côte au sein d’une partition.

La sortie est un simple document JSON CreateTable avec des attributs de clé génériques typés en chaîne — rien de spécifique à un outil à défaire plus tard — plus des indications de coût qui réutilisent exactement l’arrondi de 4 KB en lecture / 1 KB en écriture qu’emploient nos calculateurs de tarifs et de taille d’item.

Tu débutes avec ces concepts, ou tu n’es pas sûr que l’approche convienne à ta charge de travail ? Notre guide du single-table design explique l’idée à partir des premiers principes, et quand NE PAS l’utiliser en couvre honnêtement les contre-arguments. Une fois le schéma défini, compose la requête concrète dans le Générateur de requêtes DynamoDB ou estime la facture mensuelle complète avec le Calculateur de tarifs DynamoDB.

Questions fréquentes

Qu’est-ce que le single-table design dans DynamoDB ?

Une approche de modélisation où tous les types d’entités d’une application partagent une seule table dotée d’attributs de clé de partition et de tri génériques (PK/SK). Les items liés partagent une clé de partition, si bien qu’une seule Query les récupère ensemble — la conception est guidée par tes motifs d’accès plutôt que par des formes d’entités normalisées.

Comment ce planificateur décide-t-il de la conception des clés ?

Avec des règles fixes et publiées — déterministes, pas génératives. Chaque entité commence comme la racine de sa propre collection d’items avec des clés préfixées par l’entité ; le premier motif de type « lister les enfants » déplace l’enfant dans la partition de son parent via une clé de tri composite ; les recherches par d’autres attributs, les seconds parents et les motifs « tout lister » deviennent des suggestions de GSI ; et un motif que les règles ne peuvent pas servir proprement est marqué comme non pris en charge au lieu de recevoir une conception inventée.

Quand un motif d’accès nécessite-t-il un index secondaire global ?

Lorsque la disposition des clés de la table de base ne peut pas y répondre : récupérer un enfant réhébergé par son propre ID, lister les mêmes items sous un second parent, trouver un item par un attribut non-clé comme un e-mail, ou lister tous les items d’un type. Chacun de ces cas re-clé les mêmes données, ce que seul un index peut faire — le planificateur en suggère un par forme de clé et le réutilise pour les motifs qui partagent cette forme.

Comment les GSI influencent-ils le coût de DynamoDB ?

Chaque GSI maintient sa propre copie projetée des items qu’il couvre, si bien que chaque écriture dans la table consomme aussi de la capacité d’écriture sur chaque GSI qui projette l’item, et le stockage est facturé par copie. La carte de coût affiche une estimation pour la table de base et une autre incluant la réplication d’écriture des GSI, avec le même arrondi de 4 KB en lecture / 1 KB en écriture que nos calculateurs de tarifs et de taille d’item.

Le planificateur envoie-t-il mon modèle de données quelque part ?

Non. La page est statique et la conception est calculée entièrement dans ton navigateur — les noms d’entités, les attributs ID et les motifs d’accès n’atteignent jamais de serveur. La seule façon pour une conception de quitter la page est l’URL « Copier le lien », qui l’encode dans le lien pour que le partage reste un acte délibéré.

Travaille avec DynamoDB sans la Console

DynoTable est un client de bureau rapide pour DynamoDB — parcours les tables, exécute des requêtes de style SQL et édite les items en local.