122 votes

Différence entre DynamoDb PutItem et UpdateItem ?

En se basant sur la documentation de DynamoDb, pourquoi quelqu'un utiliserait-il updateItem au lieu de putItem ?


  • PutItem - Écrit un seul élément dans un tableau. Si un élément avec la même clé primaire existe dans la table, l'opération remplace l'élément. Pour le calcul de la consommation du débit provisionné, la taille de l'élément qui compte est la plus grande des deux.
  • UpdateItem - Modifie un seul élément du tableau. DynamoDB prend en compte 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'élément. Même si vous ne mettez à jour qu'un sous-ensemble des attributs de l'élément, UpdateItem consommera toujours la totalité du débit provisionné ( la plus grande des tailles des articles "avant" et "après". ).

191voto

Harshal Bulsara Points 3686

La différence principale entre les deux est que PutItem va Remplacer un élément entier, tandis que UpdateItem Mise à jour il.

Eg.

J'ai un article comme :

userId = 1
Name= ABC
Gender= Male

Si j'utilise l'élément PUT avec

UserId = 1
Country = India

Cela remplacera Name et Gender et le nouvel élément sera UserId et Country. Alors que si vous voulez mettre à jour un élément de Name = ABC to Name = 123 vous devez utiliser UpdateItem

Vous pouvez utiliser Put item pour le mettre à jour mais vous devez envoyer tous les paramètres au lieu du seul paramètre que vous voulez mettre à jour car il remplace l'élément avec le nouvel attribut (en interne, il supprime l'élément et ajoute un nouvel élément).

J'espère que cela a un sens.

0 votes

Merci Harshal, Dans mon cas d'utilisation, j'écrase toujours tous les champs pour chaque unique (partitionKey+sortKey). Je me demandais si je pouvais réduire les surcoûts de performance en utilisant updateItem au lieu de PutItem. Mais il semble qu'en interne, ils fonctionnent de la même manière (en interne, il supprime l'élément et ajoute un nouvel élément).

3 votes

Une idée des conséquences sur les performances en utilisant update au lieu de put ?

6 votes

@AmirKarimi, Basiquement, Put fera 3 opérations en interne FindKey-> Delete -> Add et update fera FindKey -> Update donc je pense que update sera plus rapide.

31voto

msoliman Points 732

PutItem écrase l'élément entier (tous les attributs) avec la nouvelle version qui est passée alors que UpdateItem ne fera que Mise à jour les attributs passés

Performance : PutItem peut avoir une incidence sur les performances si vous écrasez l'élément entier si souvent, car cela implique plus d'opérations que UpdateItem FindItem, DeleteOldVersion, et AddNewVersion

Du point de vue des coûts, c'est également différent :

AWS calcule le coût sur la base des unités de capacité de lecture/écriture utilisées, qui sont entièrement liées à la taille de l'élément écrasé/mis à jour.

En cas de PutItem En cas d'échec, la taille sera la plus grande entre la nouvelle et l'ancienne version de l'article. Par exemple, si vous remplacez un élément de 2 Ko par un élément de 1 Ko, cela consommera 2 UCW, mais les demandes suivantes n'utiliseront qu'une UCW. Donc, si vous écrasez souvent et que la taille de l'élément change fortement, vous calculerez toujours la plus grande version de l'élément, ce qui aura une incidence sur le coût.

En cas de modification des éléments à l'aide de UpdateItem la taille inclut tous les attributs préexistants de l'article, et non la version plus grande comme PutItem :) mais aussi pas seulement ceux qui sont ajoutés ou mis à jour :(

1 votes

Du point de vue des coûts, n'est-ce pas frustrant ? Je veux ajouter quelques données à l'attribut d'une liste. Pourquoi devrais-je consommer la capacité d'écriture de l'élément entier ? Existe-t-il une solution de contournement pour ce cas ? Disons que les données que j'ajoute font environ 50 octets. Et mon élément fait 200 kb. Quelle est l'approche correcte pour le faire avec un minimum de WCU ?

4voto

Krishna Rathi Points 73

Légère correction dans la réponse ci-dessus : Même l'API de mise à jour des éléments prend en compte la plus grande des deux tailles d'éléments (pré-mise à jour et post-mise à jour). Voir la documentation aquí .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X