Wie implementiere ich eine optimistische Sperre in einer DynamoDB-Tabelle?
Ich möchte eine optimistische Sperre für meine Amazon-DynamoDB-Tabelle anstelle von DynamoDBMapper verwenden.
Kurzbeschreibung
Um eine optimistische Sperre ohne DynamoDBMapper zu implementieren, schreibe benutzerdefinierten Code mit Bedingungs- und Aktualisierungsausdrücken in dein AWS-SDK. Der benutzerdefinierte Code überprüft, ob die Versionsnummern in der Tabelle übereinstimmen.
Lösung
Führe die folgenden Schritte aus:
-
Erstelle eine DynamoDB-Tabelle mit einem Versionsnummerattribut.
Hinweis: Du musst jedem Element, das du aktualisieren möchtest, eine Versionsnummer zuordnen. -
Füge deinem [Aktualisierungsausdruck die SET](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html)-Klausel hinzu, um das Element zu aktualisieren. Wenn du keinen Aktualisierungsausdruck hast, erstelle einen.
Beispiel für die Syntax eines Aktualisierungsausdrucks:UpdateExpression='SET #attr = :val', ExpressionAttributeNames={ '#attr': 'attribute_to_update' }, ExpressionAttributeValues={ ':val': new_value }, ConditionExpression='condition_expression'Hinweis: Ersetze attribute_to_update durch deine Attribute und new_value durch den neuen Wert, auf den du aktualisieren möchtest.
-
Aktualisiere den Bedingungsausdruck, um die Versionsnummer zwischen der Anforderung und dem Wert in der DynamoDB-Tabelle zu testen. Wenn du keinen Bedingungsausdruck hast, erstelle einen.
Beispiel für die Syntax eines Bedingungsausdrucks:ExpressionAttributeNames = { "#attr": "attribute_name" } ExpressionAttributeValues = { ":val": "new_value" }Hinweis: Ersetze attribute_name durch den Namen deines Ausdrucksattributs und new_value durch den neuen Wert, auf den du aktualisieren möchtest.
Wenn die Versionsnummern übereinstimmen, ist die Aktualisierung erfolgreich. Wenn die Versionsnummern nicht übereinstimmen, erhältst du den Fehler „ConditionalCheckFailedExpection“ und du kannst Änderungen, die andere Clients vornehmen, nicht überschreiben.
Verwende die folgende Fehlerbehandlungslogik in deinem AWS SDK, um den Fehler „ConditionalCheckFailedExpection“ zu verwalten:
print("Update successful") except ClientError as e: if e.response['Error']['Code'] == 'ConditionalCheckFailedException': print("Item was modified by another process. Please retry.") else: raise e
Um benutzerdefinierte Ausdrücke zu testen, gib in deiner Anforderung eine falsche Versionsnummer an.
Ähnliche Informationen
CLI-Beispiel für DynamoDB-Bedingungsausdruck
Warum erhalte ich in DynamoDB den Fehler „ConditionalCheckFailedException“?
- Themen
- Database
- Tags
- Amazon DynamoDB
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 6 Monaten
AWS OFFICIALAktualisiert vor 6 Monaten
AWS OFFICIALAktualisiert vor einem Jahr
AWS OFFICIALAktualisiert vor 2 Jahren