Warunkowe aktualizacje w DynamoDB

Warunkowe aktualizacje w DynamoDB
Podobnie jak w innych bazach danych, operacja aktualizacji jest jednym z najczęstszych wywołań API w DynamoDB. Ponadto możesz użyć narzędzia UpdateItem wraz z wyrażeniami warunku w DynamoDB, aby umożliwić aktualizacje elementów tylko wtedy.

Zatem warunkowe aktualizacje w DynamoDB pozwolą na aktualizację elementów tylko w tabeli tylko wtedy, gdy pasują do określonych warunków. Ta funkcja przydaje się do anatomicznej aktualizacji elementów, w wyniku czego Twój system wpłynie na wszystkie lub żadne z twoich aktualizacji. Poza tym aktualizacje warunkowe odniosą sukces tylko wtedy, gdy przedmiot pozostanie taki sam od czasu ostatniego czytania elementu.

Ten post na blogu podkreśla wszystko o aktualizacji warunków DynamODB. Przedstawia sposób korzystania z aktualizacji warunkowych i podaje przykłady warunków aktualizacji w DynamoDB.

Jak używać aktualizacji warunkowych w DynamoDB

Aby wykonać aktualizacje warunkowe w DynamoDB, użyj operacji aktualizacji i parametru warunków Wyświetlanie. Parametr powinien przyjąć warunek, który należy spełnić, aby wymagać pomyślnego zastosowania aktualizacji. Jeśli system nie spełni warunku z tego czy innego powodu, aktualizacja nie powiedzie się i zwróci błąd.

W szczególności operacja aktualizacji obsługuje również wyrażenia aktualizacji. Operacje z wyrażeniami aktualizacji pomagają określić każdą modyfikację, którą należy dokonać w elemencie.

Przykłady aktualizacji warunkowej DynamODB są następujące. Wszystkie przykłady używają Boto3, którym jest AWS SDK dla Pythona.

Przykład 1: Aktualizacja elementu tylko wtedy, gdy określony atrybut ma określoną wartość.

Aktualizacje warunkowe pomagają zaktualizować element tylko wtedy, gdy atrybut ma określoną wartość. Przykład tego samego Pythona pokazano poniżej:

Import Boto3
# Utwórz klienta DynamoDB
klient = boto3.Klient („DynamODB”)
# Zdefiniuj klucz podstawowy elementu, który chcesz zaktualizować
key =
„id”: 'n': '1234'

# Zdefiniuj wyrażenie aktualizacji i wartości atrybutów
aktualizacja_expression = 'set #a =: val1, #b =: val2'
Expression_attribute_names =
„#A”: „atrybut1”,
„#B”: „atrybut2”

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

# Zdefiniuj wyrażenie warunku
warunki_expression = '#a =: old_val'
warunek_expression_attribute_values ​​=
': old_val': 'n': '1234'

# Wykonaj aktualizację
Odpowiedź = klient.aktualizacja_item (
TableName = „My-Table-Nazwa”,
Key = klucz,
Aktualizacja Expression = aktualizacja_expression,
ExpressionAttributenames = Expression_Attribute_names,
ExpressionAttributeValues ​​= Expression_Attribute_Values,
Warunek Expression = Warunek_Expression,
ExpressionAttributeValues ​​= warunek_expression_attribute_values
)

To narzędzie aktualizuje element za pomocą klucza podstawowego ID = 1234 w nazwa mojego stołu tabela. Ustawia wartości atrybut1 I atrybut2 Do 5678 I Abcd, odpowiednio. Jednak aktualizacja zostanie zastosowana tylko wtedy, gdy bieżąca wartość atrybut1 Jest 1234. Jeśli wartość atrybut1 zmienił się, ponieważ element został ostatnio odczytany, aktualizacja nie powiedzie się, a system zwróci błąd.

Przykład 2: Aktualizacja elementu tylko wtedy, gdy element ma określony atrybut

Kod takiej warunkowej aktualizacji jest jak pokazano:

Import Boto3
# Zdobądź klienta DynamoDB
klient = boto3.Klient („DynamODB”)
# Ustaw wartości elementu i wartości atrybutów
key =
„id”: 'n': '123'

aktualizacja_expression = 'set a =: a, b =: b'
Expression_attribute_values ​​=
': a': 'n': '5',
': B': 's': 'abc'

# Ustaw wyrażenie warunku, aby sprawdzić, czy element ma atrybut „C”
warunek_expression = 'atrybut_exists (c)'
# Zaktualizuj element
Odpowiedź = klient.aktualizacja_item (
TableName = „My-Table-Nazwa”,
Key = klucz,
Aktualizacja Expression = aktualizacja_expression,
ExpressionAttributeValues ​​= Expression_Attribute_Values,
Warunek Expression = Warunek_Expression
)

Powyższy przykład pokazuje, jak zaktualizować element w tabeli DynamoDB tylko wtedy, gdy element ma określony atrybut. W takim przypadku wyrażenie warunku sprawdzi istnienie C atrybut za pomocą atrybut_exists funkcjonować. Jeśli przedmiot nie ma C atrybut, aktualizacja nie powiedzie się i zwróci błąd.

Przykład 3: Aktualizacja elementu tylko wtedy, gdy dany atrybut ma wartość przekraczającą określoną wartość.

Na koniec możesz ustawić polecenie, aby zaktualizować element tylko wtedy, gdy określony atrybut jest większy niż określona wartość. Narzędzie Pythona jest jak pokazano poniżej;

Import Boto3
# Zdobądź klienta DynamoDB
klient = boto3.Klient („DynamODB”)
# Ustaw wartości elementu i wartości atrybutów
key =
„id”: 'n': '1234'

aktualizacja_expression = 'set a =: a, b =: b'
Expression_attribute_values ​​=
': a': 'n': '15',
': B': 's': 'abcd'

# Ustaw wyrażenie warunku, aby sprawdzić, czy atrybut „liczba” jest większy niż 15
warunek_expression = 'count>: Count'
Expression_attribute_values ​​[': count'] = 'n': '15'
# Zaktualizuj element
Odpowiedź = klient.aktualizacja_item (
TableName = „My-Table-Nazwa”,
Key = klucz,
Aktualizacja Expression = aktualizacja_expression,
ExpressionAttributeValues ​​= Expression_Attribute_Values,
Warunek Expression = Warunek_Expression
)

Ilustracja pokazuje, jak zaktualizować element w tabeli DynamODB tylko wtedy, gdy określony atrybut ma wartość większą niż konkretna wartość. W takim przypadku wyrażenie warunku sprawdza, czy liczyć Atrybut jest większy niż 15 używając > operator. Jeśli liczyć atrybut jest co najwyżej 15, Aktualizacja nie powiedzie się, a otrzymasz komunikat o błędzie.

Wniosek

Warunkowa funkcja wyrażenia DynamODB jest potężną metodą określenia warunków podczas aktualizacji elementów w tabeli. W wielu przypadkach jest to pomocne. Na przykład możesz go użyć, aby upewnić się, że element jest aktualizowany tylko wtedy, gdy nie zmienił się od odczytania lub że element jest aktualizowany tylko wtedy, gdy dany atrybut ma określoną wartość.