Débutant4 min de lecture

Types de données DynamoDB

Chaque attribut DynamoDB est étiqueté avec un code de type d'une ou deux lettres dans le format filaire. Connaître l'ensemble compte, car le type détermine à la fois la manière dont une valeur est stockée et la façon dont elle pèse dans la taille d'un item.

Quels types de données DynamoDB prend-il en charge ?

DynamoDB prend en charge dix types de données répartis en trois catégories. Les scalaires sont String (S), Number (N), Binary (B), Boolean (BOOL) et Null (NULL). Les documents sont Map (M) et List (L), qui imbriquent d'autres types. Les ensembles sont String Set (SS), Number Set (NS) et Binary Set (BS) — non ordonnés, homogènes et non vides. Seuls S, N et B peuvent servir de clé.

CodeTypeCatégorieÉquivalent JSON / JSExemple (DynamoDB-JSON)
SStringScalairestring{"S": "Ada"}
NNumberScalairenumber{"N": "37"}
BBinaryScalaireUint8Array / base64{"B": "ZGF0YQ=="}
BOOLBooleanScalaireboolean{"BOOL": true}
NULLNullScalairenull{"NULL": true}
MMapDocumentobject{"M": {"k": {"S": "v"}}}
LListDocumentarray{"L": [{"N": "1"}]}
SSString setEnsemble— (pas de type JSON){"SS": ["a", "b"]}
NSNumber setEnsemble{"NS": ["1", "2"]}
BSBinary setEnsemble{"BS": ["ZA=="]}

Scalaires

  • S — chaîne (UTF-8 ; dimensionnée par sa longueur en octets, pas par le nombre de caractères).
  • N — nombre, envoyé sous forme de chaîne pour la précision ; jusqu'à 38 chiffres.
  • B — binaire, envoyé encodé en base64.
  • BOOLtrue / false.
  • NULL — un marqueur null explicite.

Documents

  • M — map (objet). Chaque attribut imbriqué conserve son propre tag de type.
  • L — liste. Les éléments peuvent être de types mélangés.
{"profile": {"M": {"name": {"S": "Ada"}, "age": {"N": "37"}}}}

Ensembles

  • SS — ensemble de chaînes, NS — ensemble de nombres, BS — ensemble binaire.

Les ensembles sont non ordonnés, homogènes et ne peuvent pas être vides. Fait crucial, le JSON brut n'a pas de type ensemble — un tableau fait l'aller-retour en liste (L), jamais en SS/NS. C'est une véritable limitation de conversion, pas un bug ; voir la note du convertisseur DynamoDB-JSON.

Quels types peuvent servir de clé ?

Les clés de et de — sur la table comme sur n'importe quel index — doivent être un scalaire, et uniquement S, N ou B. Tu ne peux pas utiliser un booléen, un ensemble, une map ou une liste comme clé. Modélise une clé « composite » en concaténant des valeurs dans un seul S (p. ex. ORDER#2026#42).

Limites à connaître

  • Un item plafonne à 400 KB — chaque nom d'attribut plus sa valeur, y compris les imbriqués.
  • Les nombres portent jusqu'à 38 chiffres de précision (positifs ou négatifs).
  • Les maps et les listes s'imbriquent jusqu'à 32 niveaux de profondeur.
  • Les ensembles sont non vides et homogènes — pas d'ensemble vide, pas de mélange de S et de N.

Pourquoi le type affecte le coût

La taille d'un item est la somme des octets des noms d'attributs plus les octets des valeurs, et chaque type se dimensionne différemment — les nombres sont compactés, les booléens et les nulls font 1 octet, les maps et les listes ajoutent une surcharge par élément. Cette taille est arrondie au supérieur en unités de capacité de lecture/écriture capacity units. Mesure un item réel avec le calculateur de taille d'item.

Fais-le dans DynoTable

La distinction ensemble-vs-liste ci-dessus est ce que l'outillage cache habituellement. L'éditeur d'items de DynoTable la rend explicite avec un bascule de format :

  • JSON brut — les primitifs restent bruts ("age": 30), mais les ensembles conservent leur enveloppe de type pour survivre à l'aller-retour : "tags": { "SS": ["a", "b"] }, "scores": { "NS": ["1.5", "2.5"] }. C'est la forme lisible pour l'édition au quotidien.
  • DynamoDB JSON — la forme AWS canonique , où chaque valeur porte son tag de type : "age": { "N": "30" }, "name": { "S": "alice" }.

Passer de l'une à l'autre te montre exactement comment chaque type scalaire, document et ensemble est représenté sur le fil — et parce que les types ensemble n'ont pas d'équivalent en JSON brut, la bascule est le seul moyen d'écrire un SS/NS/BS à la main sans marshaller l'item entier soi-même.

L'éditeur d'items de DynoTable affichant un item avec un ensemble de nombres et un ensemble de chaînes, et la bascule JSON brut / DynamoDB-JSON.
L'éditeur d'items de DynoTable affichant un item avec un ensemble de nombres et un ensemble de chaînes, et la bascule JSON brut / DynamoDB-JSON.

Essaie DynoTable pour voir le type de chaque attribut et le décompte d'octets en direct pendant que tu édites un item — et pour filtrer ou agréger sur des attributs typés dans le Workbench SQL, qui lit chaque tag de type pour toi. Pour convertir un blob marshallé sans l'application, le convertisseur DynamoDB-JSON fait le même aller-retour dans le navigateur.

Mis à jour