web-dev-qa-db-fra.com

DynamoDB a-t-il un verrouillage par défaut?

Je regarde la documentation de la dynamo et il semble qu'ils soient optimistes. Je me demande si cela est utilisé par défaut ou non.

D'après la documentation, il semble que vous devez coder l'application Java pour utiliser le @DynamoDBVersionAttribute annotation et obtenir et définir les versions. Sans cela, il semble que vous puissiez écrire dans DynamoDB sans aucune sorte de verrouillage.

Est-ce exact?

Sur une note latérale, je ne suis pas trop familier avec les bases de données sans une sorte de verrouillage, alors que se passerait-il si 2 personnes écrivaient sur le même élément en même temps dans DynamoDB sans aucun verrouillage? Supposons que l'élément sur lequel nous écrivons comporte 4 champs, une écriture échouerait-elle complètement ou est-il possible que DynamoDB mette à jour 2/4 champs avec 1 écriture et les 2 autres champs avec l'autre écriture?

9
Kevin

Vous avez raison. DynamoDB n'a PAS de verrouillage optimiste par défaut. Il existe différents SDK pour DynamoDB et, à ma connaissance, le seul qui fournit la fonctionnalité de verrouillage optimiste est le Java SDK .

Voici ce que le verrouillage optimiste Java SDK Java prend en charge:

  • Crée un attribut dans votre table appelé version
  • Vous devez charger un élément de la base de données avant de le mettre à jour
  • Lorsque vous essayez et enregistrez un élément, le SDK vérifie que le numéro de version de l'élément client correspond à celui du tableau, et si c'est le cas, l'enregistrement est terminé et le numéro de version est incrémenté

C'est assez simple à implémenter vous-même si vous utilisez un SDK différent. Vous créeriez vous-même l'attribut de version. Vous devez créer un wrapper pour la méthode putItem (et toute autre opération de sauvegarde/mise à jour requise). Vous utiliseriez la Condition Expression pour tester que le numéro de version dans la base de données est inférieur de un à la version que vous enregistrez.

Pour répondre à la deuxième partie de votre question, les deux mises à jour réussiraient (en supposant que vous n'aviez posé aucune condition à votre mise à jour). Le premier ferait toutes les mises à jour spécifiées, et le second viendrait et les écraserait.

10
F_SO_K

Dynamodb ne prend pas en charge le verrouillage optimiste par défaut. Comme vous l'avez mentionné, vous devez utiliser l'annotation dans la classe de modèle Java afin d'utiliser le verrouillage optimiste.

Si deux threads écrivent sur le même élément, l'élément Dynamodb aura les dernières données d'écriture (c'est-à-dire le dernier thread qui écrit les données).

1
notionquest