Próbowałem wymusić unikalną kombinację kluczy skrótu i zakresu i natrafiłem na ten wpis. Odkryłem, że nie odpowiedział on w pełni na moje pytanie, ale z pewnością wskazał mi właściwy kierunek. Jest to próba uporządkowania luźnych końców.
Wygląda na to, że DynamoDB faktycznie wymusza unikalną kombinację klawisza skrótu i zakresu według projektu. Cytuję
„Wszystkie pozycje w tabeli musi mieć wartość atrybutu klucza podstawowego i Amazon DynamoDB gwarantuje, że produkt wart tej nazwy jest unikalny”
z http://aws.amazon.com/dynamodb/ w sekcji z nagłówkiem klucz podstawowy.
W moich własnych testach używając putItem z aws-sdk dla nodejs udało mi się opublikować dwa identyczne elementy bez generowania błędu. Kiedy sprawdziłem bazę danych, tylko jeden element został wstawiony. Wygląda na to, że drugie wywołanie metody putItem z tą samą kombinacją klucza i zakresu jest traktowane jak aktualizacja oryginalnego elementu.
Również otrzymałem komunikat "Nie można oczekiwać, że atrybut ma określoną wartość, oczekując, że nie istnieje", gdy próbowałem ustawić opcję exist = false na kluczu mieszającym i klucz zakresu z ustawionymi wartościami. Aby rozwiązać ten problem, usunąłem wartość pod oczekiwanym hashiem i kluczem zakresu i podczas próby dwukrotnego wstawienia tego samego klucza wystąpił błąd sprawdzania poprawności.
Więc moje polecenie insert wygląda następująco (będą różne dla Java, ale mam nadzieję, że masz pomysł)
{ "TableName": "MyTableName",
"Item" : {
"HashKeyFieldName": {
"S": HashKeyValue
},
"RangeKeyFieldName": {
"N": currentTime.getTime().toString()
},
"OtherField": {
"N": "61404032632"
}
},
"Expected": {
"HashKeyFieldName" : { "Exists" : false},
"RangeKeyFieldName" : { "Exists" : false}
}
}
Podczas gdy początkowo starałem się zrobić warunkową wkładkę do sprawdzenia jeśli wartość hasha i wartość zakresu były takie same jak te, które próbowałem wstawić, teraz po prostu muszę sprawdzić, czy HashField i RangeField w ogóle istnieją. Jeśli istnieją, oznacza to, że aktualizuję element zamiast wstawiać.
Naprawdę stare pytanie, ale dynamodb ma wersję atomowej inkrementacji, spójrz na to (głównie dla ludzi, którzy się tu kończą) –
Dokumentacja Atomic tutaj: http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/ API_UpdateItem.html – Deemoe