Direkt zum Inhalt

Wie implementiere ich eine optimistische Sperre in einer DynamoDB-Tabelle?

Lesedauer: 2 Minute
0

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:

  1. Erstelle eine DynamoDB-Tabelle mit einem Versionsnummerattribut.
    Hinweis: Du musst jedem Element, das du aktualisieren möchtest, eine Versionsnummer zuordnen.

  2. 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.

  3. 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

Ein Element einfügen (Java)

Ein Element einfügen (.NET)

CLI-Beispiel für DynamoDB-Bedingungsausdruck

Warum erhalte ich in DynamoDB den Fehler „ConditionalCheckFailedException“?

AWS OFFICIALAktualisiert vor 2 Monaten