

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Contraintes dans Amazon DynamoDB
<a name="Constraints"></a>

Cette section décrit les contraintes actuelles, anciennement appelées limites, dans Amazon DynamoDB. 

**Note**  
Toutes les mesures de taille dans DynamoDB utilisent des unités binaires. DynamoDB indique 1 Ko = 1024 octets, 1 Mo = 1024 Ko, 1 Go = 1024 Mo, 1 To = 1024 Go.

**Topics**
+ [Mode de capacité en lecture/écriture](#default-limits-capacity-modes)
+ [Index secondaires](#limits-secondary-indexes)
+ [Clés de partition et clés de tri](#limits-partition-sort-keys)
+ [Règles de dénomination](#limits-naming-rules)
+ [Types de données](#limits-data-types)
+ [Éléments](#limits-items)
+ [Attributes](#limits-attributes)
+ [Paramètre d’expression](#limits-expression-parameters)
+ [Transactions DynamoDB](#limits-dynamodb-transactions)
+ [DynamoDB Streams](#constraints-dynamodb-streams)
+ [DynamoDB Accelerator (DAX)](#limits-dax)
+ [Contraintes propres à l’API](#limits-api)
+ [Chiffrement de DynamoDB au repos](#limits-dynamodb-encryption)

## Mode de capacité en lecture/écriture
<a name="default-limits-capacity-modes"></a>

Vous pouvez faire passer les tables du mode de capacité provisionnée au mode à la demande jusqu’à quatre fois par période de 24 heures. Vous pouvez à tout moment faire passer des tables du mode à la demande au mode de capacité provisionnée. 

Pour plus d’informations sur le basculement entre les modes de capacité de lecture et d’écriture, consultez [Considérations relatives au changement de mode de capacité dans DynamoDB](bp-switching-capacity-modes.md).

### Tailles des unités de capacité (pour les tables allouées)
<a name="limits-capacity-units"></a>

Une unité de capacité de lecture équivaut à une lecture cohérente forte par seconde, ou deux lectures éventuellement cohérentes par seconde d’éléments dont la taille peut atteindre 4 Ko.

Une unité de capacité d’écriture équivaut à une écriture par seconde d’éléments dont la taille peut atteindre 1 Ko.

Les demandes de lecture transactionnelles nécessitent deux unités de capacité de lecture pour effectuer une lecture par seconde d’éléments dont la taille peut atteindre 4 Ko.

Les demandes d’écriture transactionnelles nécessitent deux unités de capacité de lecture pour effectuer une lecture par seconde d’éléments dont la taille peut atteindre 1 Ko.

### Tailles des unités de demande (pour les tables à la demande)
<a name="limits-request-units"></a>

Une unité de demande de lecture équivaut à une lecture fortement cohérente par seconde, ou deux lectures éventuellement cohérentes par seconde d’éléments dont la taille peut atteindre 4 Ko.

Une unité de demande d’écriture équivaut à une écriture par seconde, pour les éléments dont la taille peut atteindre 1 Ko.

Les demandes de lecture transactionnelles nécessitent deux unités de demande de lecture pour effectuer une lecture par seconde d’éléments dont la taille peut atteindre 4 Ko.

Les demandes d’écriture transactionnelles nécessitent deux unités de demande d’écriture pour effectuer une écriture par seconde d’éléments dont la taille peut atteindre 1 Ko.

## Index secondaires
<a name="limits-secondary-indexes"></a>

### Attributs d’index secondaire projeté par table
<a name="limits-tables-projected-secondary-index-attributes"></a>

Vous pouvez projeter jusqu’à un total de 100 attributs dans l’ensemble des index secondaires locaux et globaux d’une table. Cette possibilité ne s’applique qu’aux attributs projetés spécifiés par l’utilisateur.

Dans une opération `CreateTable`, si vous spécifiez un `ProjectionType` de `INCLUDE`, le nombre total d’attributs spécifié dans `NonKeyAttributes`, cumulé sur l’ensemble des index secondaires, ne peut pas dépasser 100. Si vous projetez le même nom d’attribut dans deux index différents, cette projection est considérée comme deux attributs distincts lors de la détermination du total.

Cette limite ne s’applique pas aux index secondaires dont `ProjectionType` a la valeur `KEYS_ONLY` ou `ALL`. 

## Clés de partition et clés de tri
<a name="limits-partition-sort-keys"></a>

### Longueur de clé de partition
<a name="limits-partition-key-length"></a>

La longueur minimale d’une valeur de clé de partition est 1 octet. La longueur maximale est de 2 048 octets.

### Valeurs de clé de partition
<a name="limits-partition-key-values"></a>

Il n’existe pas de limite pratique quant au nombre de valeurs de clé de partition distinctes, pour les tables ou pour les index secondaires.

### Longueur de la clé de tri
<a name="limits-sort-key-length"></a>

La longueur minimale d’une valeur de clé de tri est 1 octet. La longueur maximale est de 1 024 octets.

### Valeurs de clé de tri
<a name="limits-sort-key-values"></a>

En général, il n’existe pas de limite pratique sur le nombre de valeurs de clé de tri distinctes par valeur de clé de partition.

L’exception concerne les tables avec index secondaires. Une collection d’éléments est l’ensemble des éléments qui ont la même valeur d’attribut de clé de partition. Dans un index secondaire global, la collection d’éléments est indépendante de la table de base (et peut avoir un attribut de clé de partition différent), mais dans un index secondaire local, la vue indexée est colocalisée dans la même partition que l’élément de la table et partage le même attribut de clé de partition. En raison de cette localité, lorsqu'une table en possède une ou plusieurs LSIs, la collection d'éléments ne peut pas être distribuée sur plusieurs partitions.

Pour une table comportant un ou plusieurs articles LSIs, la taille des collections d'articles ne peut pas dépasser 10 Go. Cela inclut tous les éléments de la table de base et toutes les vues d’index secondaires locaux (LSI) projetées ayant la même valeur d’attribut de clé de partition. 10 Go est la taille maximale d’une partition. Pour en savoir plus, consultez [Taille limite de collection d’éléments](LSI.md#LSI.ItemCollections.SizeLimit).

## Règles de dénomination
<a name="limits-naming-rules"></a>

### Noms de tables et d’index secondaires
<a name="limits-naming-rules-tables-secondary-indexes"></a>

Les noms de table et les noms d’index secondaires doivent comporter au moins 3 caractères, mais ne pas dépasser 255 caractères. Voici les caractères acceptés :
+ `A-Z`
+ `a-z`
+ `0-9`
+ `_` (soulignement)
+ `-` (trait d’union)
+ `.` (point)

### Noms d’attribut
<a name="limits-naming-rules-attributes"></a>

En général, un nom d’attribut doit comporter au moins un caractère, mais ne pas dépasser 64 Ko.

Les éléments suivants sont les exceptions. Ces noms d’attribut ne doivent pas dépasser 255 caractères :
+ Noms de clés de partition d’index secondaire.
+ Noms de clés de tri d’index secondaire.
+ Noms d’attributs projetés spécifiés par l’utilisateur (applicables uniquement aux index secondaires locaux). Dans une opération `CreateTable`, si vous spécifiez un `ProjectionType` de `INCLUDE`, les noms des attributs du paramètre `NonKeyAttributes` sont restreints en longueur. Les types de projection `KEYS_ONLY` et `ALL` ne sont pas concernés. 

Ces noms d’attribut doivent être codés en UTF-8 et la taille totale de chaque nom (après encodage) ne peut pas dépasser 255 octets.

## Types de données
<a name="limits-data-types"></a>

### String
<a name="limits-data-types-strings"></a>

La longueur d’une chaîne est limitée par la taille maximum d’élément de 400 Ko.

Les chaînes sont Unicode avec codage binaire UTF-8. L’encodage UTF-8 étant de largeur variable, DynamoDB détermine la longueur d’une chaîne à l’aide de ses octets UTF-8. 

### Number
<a name="limits-data-types-numbers"></a>

Un nombre peut avoir jusqu’à 38 chiffres de précision et peut être positif, négatif ou nul.
+ Plage positive : `1E-130` à `9.9999999999999999999999999999999999999E+125`
+ Plage négative : `-9.9999999999999999999999999999999999999E+125` à `-1E-130`

DynamoDB utilise des chaînes JSON pour représenter les données de type Number (nombre) dans les demandes et les réponses. Pour de plus amples informations, veuillez consulter [API de bas niveau de DynamoDB](Programming.LowLevelAPI.md).

Si la précision numérique est importante, passez les nombres à DynamoDB à l’aide de chaînes que vous convertissez à partir de données de type Number.

### Binaire
<a name="limits-data-types-binary"></a>

La longueur d’un élément de type Binary (binaire) est limitée par la taille maximum d’élément de 400 Ko.

Les applications qui fonctionnent avec des attributs de type Binary doivent encoder les données au format base 64 avant de les envoyer à DynamoDB. À la réception des données, DynamoDB les décode dans un tableau d’octets non signés, et utilise ces informations comme longueur de l’attribut. 

## Éléments
<a name="limits-items"></a>

### Taille de l’élément
<a name="limits-items-size"></a>

La taille maximum d’un élément dans DynamoDB est de 400 Ko, incluant la longueur binaire du nom d’attribut (longueur UTF-8) et les longueurs de valeur d’attribut (également binaires). Le nom d’attribut est comptabilisé parmi la limite de taille.

Par exemple, imaginons un élément avec deux attributs : un attribut nommé « shirt-color » avec la valeur « R » et un autre attribut nommé « shirt-size » avec la valeur « M ». La taille totale de cet élément est de 23 octets.

### Taille d’élément pour les tables avec des index secondaires locaux
<a name="limits-items-size-secondary-indexes"></a>

Pour chaque index secondaire local sur une table, il existe une limite de 400 Ko au total des éléments suivants :
+ La taille des données d’un élément de la table.
+ La taille des entrées correspondantes (y compris les valeurs de clé et les attributs projetés) dans tous les index secondaires locaux. 

## Attributes
<a name="limits-attributes"></a>

### Paires nom-valeur d’attribut par élément
<a name="limits-attributes-name-value-pairs"></a>

La taille cumulée des attributs par élément ne peut pas dépasser la taille maximum d’élément DynamoDB (400 Ko).

### Nombre de valeurs dans un type list, map ou set
<a name="limits-attributes-number"></a>

Il n’existe aucune limite au nombre de valeurs dans un élément de type List (liste), Map (mappage) ou Set (ensemble), pour autant que la taille de l’élément ne dépasse pas la limite de taille d’élément de 400 Ko.

### Valeurs d’attribut
<a name="limits-attributes-values"></a>

Les valeurs vides de String et de Binary attribute sont autorisées si l’attribut n’est pas utilisé comme attribut de clé pour une table ou un index. Les valeurs de chaîne (String) et binaires (Binary) vides sont autorisées dans les types Set (ensemble), List (liste) et Map (carte). Une valeur d’attribut ne peut pas être un ensemble vide (ensemble de chaînes, de chiffres ou binaire). Cependant, les éléments de type liste et carte vides sont autorisés.

### Profondeur des attributs imbriqués
<a name="limits-attributes-nested-depth"></a>

DynamoDB prend en charge les attributs imbriqués jusqu’à 32 niveaux de profondeur.

## Paramètre d’expression
<a name="limits-expression-parameters"></a>

Les paramètres d’expression incluent `ProjectionExpression`, `ConditionExpression`, `UpdateExpression` et `FilterExpression`.

### Longueurs
<a name="limits-expression-parameters-lengths"></a>

La longueur maximale d’une chaîne d’expression est 4 Ko. Par exemple, la taille de `ConditionExpression` `a=b` est de trois octets.

La longueur maximale de n’importe quel nom d’attribut d’expression ou de valeur d’attribut expression est 255 octets. Par exemple, `#name` fait 5 octets et `:val` fait 4 octets.

La longueur maximale de toutes les variables de substitution d’une expression est de 2 Mo. Il s’agit de la somme des longueurs de tous les `ExpressionAttributeNames` et `ExpressionAttributeValues`.

### Opérateurs et opérandes
<a name="limits-expression-parameters-operators"></a>

Le nombre maximal d’opérateurs ou de fonctions autorisés dans une `UpdateExpression` est 300. Par exemple, *UpdateExpression*`SET a = :val1 + :val2 + :val3`contient deux opérateurs `+` « ».

Le nombre maximal d’opérandes pour le comparateur `IN` est 100.

### Mots réservés
<a name="limits-expression-parameters-reserved-words"></a>

DynamoDB ne vous empêche pas d’utiliser des noms en conflit avec des mots réservés. (Pour obtenir la liste complète, consultez [Mots réservés dans DynamoDB](ReservedWords.md).)

Cependant, si vous utilisez un mot réservé dans un paramètre d’expression, vous devez également spécifier `ExpressionAttributeNames`. Pour de plus amples informations, veuillez consulter [Noms d’attributs d’expression (alias) dans DynamoDB](Expressions.ExpressionAttributeNames.md).

## Transactions DynamoDB
<a name="limits-dynamodb-transactions"></a>

Les opérations d’API transactionnelles de DynamoDB sont sujettes aux contraintes suivantes :
+ Une transaction ne peut pas contenir plus de 100 éléments uniques.
+ Une transaction ne peut pas contenir plus de 4 Mo de données.
+ Deux actions d’une transaction ne peuvent pas porter sur le même élément de la même table. Par exemple, vous ne pouvez pas effectuer un `ConditionCheck` et un `Update` sur le même élément dans une même transaction.
+ Une transaction ne peut pas être effectuée sur les tables de plusieurs AWS comptes ou régions.
+ Les opérations transactionnelles fournissent des garanties d'atomicité, de cohérence, d'isolation et de durabilité (ACID) uniquement dans la AWS région où l'écriture a été effectuée à l'origine. Les transactions ne sont pas prises en charge entre les régions dans les tables globales. Par exemple, supposons que vous disposiez d’une table globale avec des réplicas dans les régions USA Est (Ohio) et USA Ouest (Oregon) et que vous effectuiez une opération `TransactWriteItems` dans la région USA Est (Virginie du Nord). Dans ce cas, vous pouvez observer des transactions partiellement terminées dans la région USA Ouest (Oregon) lorsque les modifications sont répliquées. Les modifications seront uniquement répliquées sur les autres régions une fois validées dans la région source. 

## DynamoDB Streams
<a name="constraints-dynamodb-streams"></a>

### Lecteurs simultanés d’une partition dans DynamoDB Streams
<a name="limits-dynamodb-streams-simultaneous-shard-readers"></a>

Pour les tables à région unique qui ne sont pas des tables globales, vous pouvez concevoir jusqu’à deux processus pour lire la même partition DynamoDB Streams simultanément. Le dépassement de cette limite peut se traduire par une limitation de la demande. Pour les tables globales, nous vous recommandons de limiter le nombre de lecteurs simultanés à un seul pour éviter la limitation des demandes.

## DynamoDB Accelerator (DAX)
<a name="limits-dax"></a>

### AWS Disponibilité de la région
<a name="limits-dax-regions"></a>

Pour obtenir la liste des AWS régions dans lesquelles le DAX est disponible, voir [DynamoDB Accelerator (DAX](https://docs.aws.amazon.com/general/latest/gr/rande.html#ddb_dax_region)) dans le. *Références générales AWS*

### Nœuds
<a name="limits-dax-nodes"></a>

Un cluster DAX comporte exactement un nœud primaire et de 0 à 9 nœuds de réplica en lecture.

Le nombre total de nœuds (par AWS compte) ne peut pas dépasser 50 dans une seule AWS région.

### Groupes de paramètres
<a name="limits-dax-parameter-groups"></a>

Vous pouvez créer jusqu’à 20 groupes de paramètres DAX par région.

### Groupes de sous-réseaux
<a name="limits-dax-subnet-groups"></a>

Vous pouvez créer jusqu’à 50 groupes de sous-réseaux DAX par région.

Dans un même groupe de sous-réseaux, vous pouvez définir jusqu’à 20 sous-réseaux.

**Important**  
Un cluster DAX prend en charge un maximum de 500 tables DynamoDB. Une fois que vous dépassez les 500 tables DynamoDB, la disponibilité et les performances de votre cluster peuvent se dégrader.

## Contraintes propres à l’API
<a name="limits-api"></a>

**`CreateTable`/`UpdateTable`/`DeleteTable`/`PutResourcePolicy`/`DeleteResourcePolicy`**  
En général, vous pouvez avoir jusqu'à 500 [CreateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html),, [UpdateTable[DeleteTable[PutResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutResourcePolicy.html)](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteTable.html)](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html), et [DeleteResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteResourcePolicy.html)demandes exécutées simultanément dans n'importe quelle combinaison. En d’autres termes, le nombre total de tables ayant l’état `CREATING`, `UPDATING` ou `DELETING` ne peut pas dépasser 500.  
Vous pouvez soumettre jusqu’à 2 500 demandes par seconde de demandes d’API mutables (`CreateTable`, `DeleteTable`, `UpdateTable`, `PutResourcePolicy` et `DeleteResourcePolicy`) du plan de contrôle, quelle que soit leur combinaison sur un groupe de tables. Cependant, les demandes `PutResourcePolicy` et `DeleteResourcePolicy` ont des limites individuelles inférieures. Pour plus d’informations, consultez les détails des quotas suivants pour `PutResourcePolicy` et `DeleteResourcePolicy`.  
Le demandes `CreateTable` et `PutResourcePolicy` qui incluent une politique basée sur les ressources seront considérées comme deux demandes supplémentaires pour chaque Ko de la politique. Par exemple, une demande `CreateTable` ou `PutResourcePolicy` avec une politique de 5 Ko comptera pour 11 demandes. 1 pour la demande `CreateTable` et 10 pour la politique basée sur les ressources (2 x 5 Ko). De même, une politique de 20 Ko comptera pour 41 demandes. 1 pour la demande `CreateTable` et 40 pour la politique basée sur les ressources (2 x 20 Ko).    
`PutResourcePolicy`  
Vous pouvez envoyer jusqu’à 25 demandes d’API `PutResourcePolicy` par seconde sur un groupe de tables. Après une demande réussie pour une table individuelle, aucune nouvelle demande `PutResourcePolicy` n’est prise en charge pendant les 15 secondes suivantes.  
La taille maximale prise en charge pour un document de politique basé sur les ressources est de 20 Ko. DynamoDB compte les espaces blancs lors du calcul de la taille d’une politique au regard de cette limite.  
`DeleteResourcePolicy`  
Vous pouvez envoyer jusqu’à 50 demandes d’API `DeleteResourcePolicy` par seconde sur un groupe de tables. Après une demande `PutResourcePolicy` réussie pour une table individuelle, aucune nouvelle demande `DeleteResourcePolicy` n’est prise en charge pendant les 15 secondes suivantes.

**`BatchGetItem`**  
Une seule opération `BatchGetItem` peut extraire au maximum 100 éléments. La taille totale de tous les éléments extraits ne peut pas dépasser 16 Mo.

**`BatchWriteItem`**  
Une seule opération `BatchWriteItem` peut contenir jusqu’à 25 demandes `PutItem` ou `DeleteItem`. La taille totale de tous les éléments écrits ne peut pas dépasser 16 Mo.

**`DescribeStream`**  
Vous pouvez appeler `DescribeStream` au maximum 10 fois par seconde.

**`DescribeTableReplicaAutoScaling`**  
La méthode `DescribeTableReplicaAutoScaling` ne prend en charge que 10 demandes par seconde.

**`DescribeLimits`**  
`DescribeLimits` ne doit pas être appelé régulièrement. Vous pouvez vous attendre à des erreurs de limitation si vous l’appelez plusieurs fois par minute.

**`DescribeContributorInsights`/`ListContributorInsights`/`UpdateContributorInsights`**  
`DescribeContributorInsights`, `ListContributorInsights` et `UpdateContributorInsights` ne doivent être appelés que périodiquement. DynamoDB prend en charge jusqu'à cinq requêtes par seconde pour chacune de ces requêtes. APIs 

**`DescribeTable`/`ListTables`/`GetResourcePolicy`**  
Vous pouvez soumettre jusqu’à 2 500 demandes par seconde d’une combinaison de demandes d’API en lecture seule (`DescribeTable`, `ListTables` et `GetResourcePolicy`) du plan de contrôle. L’API `GetResourcePolicy` a une limite individuelle inférieure de 100 demandes par seconde.

**`DescribeTimeToLive`**  
L’opération `DescribeTimeToLive` est limitée à 10 unités de demande de lecture par seconde. Si vous dépassez cette limite, DynamoDB renvoie une erreur `ThrottlingException`.

**`Query`**  
L’ensemble de résultats d’une opération `Query` est limité à 1 Mo par appel. Vous pouvez utiliser `LastEvaluatedKey` à partir de la réponse de la requête pour récupérer plus de résultats.

**`Scan`**  
L’ensemble de résultats d’une opération `Scan` est limité à 1 Mo par appel. Vous pouvez utiliser `LastEvaluatedKey` à partir de la réponse de l’opération Scan pour récupérer plus de résultats.

**`UpdateKinesisStreamingDestination`**  
Lorsque vous effectuez des opérations `UpdateKinesisStreamingDestination`, vous pouvez définir `ApproximateCreationDateTimePrecision` sur une nouvelle valeur au maximum 3 fois par période de 24 heures.

**`UpdateTableReplicaAutoScaling`**  
La méthode `UpdateTableReplicaAutoScaling` ne prend en charge que dix demandes par seconde.

**`UpdateTableTimeToLive`**  
La méthode `UpdateTableTimeToLive` prend en charge une seule demande d’activation ou de désactivation `Time to Live (TTL)` par table spécifiée et par heure. Le traitement complet de la modification peut prendre jusqu’à une heure. Tout `UpdateTimeToLive` appel supplémentaire pour la même table pendant cette durée d'une heure entraîne un ValidationException. 

## Chiffrement de DynamoDB au repos
<a name="limits-dynamodb-encryption"></a>

Vous pouvez basculer entre une Clé détenue par AWS Clé gérée par AWS, une clé et une clé gérée par le client jusqu'à quatre fois, à tout moment par fenêtre de 24 heures, par table, à partir du moment où la table a été créée. Et si aucune modification n’est intervenue au cours des six dernières heures, une modification supplémentaire est autorisée. Cela porte ainsi le nombre maximum de modifications par jour à huit (quatre modifications au cours des six premières heures, puis une modification pour chacune des trois fenêtres de six heures suivantes).

Vous pouvez changer de clé de chiffrement pour utiliser une Clé détenue par AWS aussi souvent que nécessaire, même si le quota ci-dessus est dépassé.

Voici les quotas, à moins que vous ne demandiez un seuil supérieur. Pour demander une augmentation du quota de service, consultez [https://aws.amazon.com/support](https://aws.amazon.com/support).