D'après la documentation DynamoDb, pourquoi utiliser quiconque updateItem
au lieu de putItem
?
PutItem
- Écrit un seul élément dans une table. Si un élément avec la même clé primaire existe dans la table, l'opération le remplace. Pour calculer la consommation de débit provisionnée, la taille de l'article qui compte est la plus grande des deux.UpdateItem
- Modifie un seul élément de la table. DynamoDB considère la taille de l'élément tel qu'il apparaît avant et après la mise à jour. Le débit provisionné consommé reflète la plus grande de ces tailles d'articles. Même si vous ne mettez à jour qu'un sous-ensemble des attributs de l'élément, UpdateItem
continue de consommer l'intégralité du débit alloué (le plus grand des tailles "avant" et "après").La principale différence entre les deux est que PutItem va Remplacer un élément entier alors que UpdateItem va Mettre à jour.
Par exemple.
J'ai un article comme:
userId = 1
Name= ABC
Gender= Male
Si j'utilise l'article PUT avec
UserId = 1
Country = India
Ceci remplacera Nom et genre et le nouvel élément est maintenant UserId and Country. While si vous souhaitez mettre à jour un élément à partir de Name = ABC to Name = 123
vous devez utiliser UpdateItem
Vous pouvez utiliser l'élément Mettre à jour pour le mettre à jour, mais vous devez envoyer tous les paramètres au lieu du paramètre que vous souhaitez mettre à jour car il remplace l'élément par le nouvel attribut (en interne, il supprime l'élément et ajoute un nouvel élément).
J'espère que cela a du sens.
PutItem
écrase l'élément entier (tous les attributs) avec la nouvelle version en cours de transmission tandis que UpdateItem
ne fera que mettre à jour les attributs transmis
Performance: PutItem
peut affecter les performances si vous écrasez l'élément entier aussi souvent car il implique plus d'opérations que UpdateItem
FindItem, DeleteOldVersion et AddNewVersion.
Du point de vue des coûts, il est également différent:
AWS calcule le coût en fonction des unités de capacité de lecture/écriture utilisées, totalement liées à la taille de l'élément en cours d'écrasement/mise à jour.
Dans le cas de PutItem
, la taille sera la plus grande des nouvelles et des anciennes versions de l'élément. Par exemple, si vous remplacez un élément de 2 Ko par un élément de 1 Ko, cela consommera 2 WCU, mais les requêtes suivantes n'utiliseront qu'un seul WCU. Par conséquent, si vous écrasez si souvent et que la taille de l'élément change considérablement, cela calculera toujours la version la plus grande de l'élément et aura une incidence sur le coût.
En cas de modification d’éléments à l’aide de UpdateItem
, la taille inclut tous les attributs préexistants de l’élément, pas la version la plus grande comme PutItem
:) mais également ceux ajoutés ou mis à jour :(