Bedingte Updates in DynamoDB

Bedingte Updates in DynamoDB
Wie in anderen Datenbanken gehört der UpdateItem -Vorgang zu den häufigsten API -Aufrufen in DynamoDB. Darüber hinaus können Sie das UPDATETEM-Dienstprogramm neben Bedingungsausdrücken in DynamoDB verwenden, um nur Updates zu Elementen zuzulassen, wenn der Befehl die Set-out-Bedingungen erfüllt.

In bedingten Updates in DynamoDB können Sie daher nur dann die Elemente in einer Tabelle aktualisieren, wenn bestimmte Bedingungen übereinstimmen. Diese Funktion ist nützlich, um die Elemente anatomisch zu aktualisieren, wobei Ihr System entweder alle oder keine Ihrer Updates beeinflusst. Außerdem sind bedingte Updates nur erfolgreich, wenn der Artikel gleich geblieben ist, da Sie den Artikel zuletzt gelesen haben.

Dieser Blog -Beitrag zeigt alles über DynamoDB bedingte Updates. Es wird beschrieben.

So verwenden Sie bedingte Updates in DynamoDB

Um bedingte Updates in DynamoDB durchzuführen, verwenden Sie den Aktualisierungsprogramm und den Conditionexpressionsparameter. Der Parameter sollte die Bedingung annehmen, die erfüllt sein muss, um die erfolgreiche Anwendung des Updates zu erfordern. Sollte Ihr System die Bedingung aus dem einen oder anderen Grund nicht erfüllen, fällt das Update fehl und gibt einen Fehler zurück.

Insbesondere unterstützt der UpdateItem -Vorgang auch Aktualisierungsausdrücke. Vorgänge mit Update -Ausdrücken helfen dabei, jede Änderung anzugeben, die Sie in einem Element vornehmen sollten.

Ein dynamodb bedingter Aktualisierungsbeispiele sind wie folgt. Alle Beispiele verwenden Boto3, das AWS SDK für Python.

Beispiel 1: Nur ein Element aktualisieren, wenn ein bestimmtes Attribut einen bestimmten Wert hat.

Bedingte Updates helfen dabei, ein Element nur zu aktualisieren, wenn das Attribut einen bestimmten Wert hat. Ein Python -Beispiel davon ist unten gezeigt:

Boto3 importieren
# Erstellen Sie einen DynamoDB -Client
client = boto3.Client ('DynamoDB')
# Definieren Sie den Primärschlüssel des Elements, den Sie aktualisieren möchten
Key =
'id': 'n': '1234'

# Definieren Sie den Aktualisierungsausdruck und die Attributwerte
update_expression = 'set #A =: val1, #b =: val2'
expression_attribute_names =
'#A': 'Attribute1' ',
'#B': 'Attribute2' '

expression_attribute_values ​​=
': val1': 'n': '5678',
': val2': 's': 'abcd'

# Definieren Sie den Zustandsausdruck
condition_expression = '#A =: old_val'
condition_expression_attribute_values ​​=
': old_val': 'n': '1234'

# Führen Sie das Update durch
Antwort = Client.update_item (
TableName = 'my-table-name' ',
Key = Schlüssel,
UpdateExpression = update_expression,
ExpressionAttributenames = expression_attribute_names,
ExpressionAttributeValues ​​= expression_attribute_values,
ConditionExpression = condition_expression,
ExpressionAttributeValues ​​= condition_expression_attribute_values
)

Dieses Dienstprogramm aktualisiert den Element mit dem Primärschlüssel ID = 1234 im My-Table-Namen Tisch. Es wird die Werte von festlegen Attribut1 Und Attribut2 Zu 5678 Und A B C D, bzw. Das Update wird jedoch nur angewendet, wenn der aktuelle Wert von Attribut1 Ist 1234. Wenn der Wert von Attribut1 hat sich geändert, seit das Element zuletzt gelesen wurde, das Update fehlschlägt und Ihr System gibt einen Fehler zurück.

Beispiel 2: Nur ein Element aktualisieren, wenn das Element ein bestimmtes Attribut enthält

Der Code für eine solche bedingte Aktualisierung ist wie gezeigt:

Boto3 importieren
# Holen Sie sich den DynamoDB -Client
client = boto3.Client ('DynamoDB')
# Legen Sie die Elementschlüssel- und Attributwerte fest
Key =
'id': 'n': '123'

update_expression = 'setzen a =: a, b =: b'
expression_attribute_values ​​=
': a': 'n': '5',
': b': 's': 'abc'

# Legen Sie den Zustandsausdruck fest, um zu überprüfen, ob das Element das Attribut "C" enthält
condition_expression = 'attribute_exists (c)' '
# Aktualisieren Sie den Artikel
Antwort = Client.update_item (
TableName = 'my-table-name' ',
Key = Schlüssel,
UpdateExpression = update_expression,
ExpressionAttributeValues ​​= expression_attribute_values,
ConditionExpression = condition_expression
)

Das obige Beispiel zeigt, wie ein Element in einer DynamoDB -Tabelle nur dann aktualisiert wird, wenn das Element ein bestimmtes Attribut enthält. In diesem Fall wird der Zustandsausdruck auf die Existenz der Existenz des C Attribut mit dem Attribute_exists Funktion. Wenn der Artikel nicht das hat C Attribut, das Update fällt fehl und gibt einen Fehler zurück.

Beispiel 3: Nur ein Element aktualisieren, wenn ein bestimmtes Attribut einen Wert hat, der einen bestimmten Wert überschreitet.

Schließlich können Sie Ihren Befehl festlegen, um ein Element nur zu aktualisieren, wenn ein bestimmtes Attribut größer als ein bestimmter Wert ist. Das Python -Dienstprogramm ist wie unten gezeigt

Boto3 importieren
# Holen Sie sich den DynamoDB -Client
client = boto3.Client ('DynamoDB')
# Legen Sie die Elementschlüssel- und Attributwerte fest
Key =
'id': 'n': '1234'

update_expression = 'setzen a =: a, b =: b'
expression_attribute_values ​​=
': a': 'n': '15',
': b': 's': 'abcd'

# Legen Sie den Zustandsausdruck fest, um zu überprüfen, ob das Attribut "Count" größer als 15 ist
condition_expression = 'count>: count'
expression_attribute_values ​​[': count'] = 'n': '15'
# Aktualisieren Sie den Artikel
Antwort = Client.update_item (
TableName = 'my-table-name' ',
Key = Schlüssel,
UpdateExpression = update_expression,
ExpressionAttributeValues ​​= expression_attribute_values,
ConditionExpression = condition_expression
)

Die Abbildung zeigt, wie ein Element in einer DynamoDB -Tabelle nur dann aktualisiert wird, wenn ein bestimmtes Attribut einen Wert mehr als ein bestimmter Wert hat. In diesem Fall prüft der Zustandsausdruck, ob die zählen Attribut ist größer als 15 Verwendung der > Operator. Wenn der zählen Attribut ist höchstens 15, Das Update fällt fehl und Sie erhalten eine Fehlermeldung.

Abschluss

Die bedingte Expressionsfunktion von DynamoDB ist eine leistungsstarke Methode zur Angabe von Bedingungen beim Aktualisieren der Elemente in einer Tabelle. Es ist in vielen Fällen hilfreich. Sie können es beispielsweise verwenden, um sicherzustellen, dass ein Element nur aktualisiert wird, wenn es sich seit dem Lesen nicht geändert hat oder dass ein Element nur aktualisiert wird, wenn ein bestimmtes Attribut einen bestimmten Wert hat.