2016-07-10 4 views
1

Kann DynamoDB UpdateItem eine Option übergeben werden, sodass der Aufruf von UpdateItem an nicht vorhandenen Elementen fehlschlägt?Wie kann UpdateItem nur für vorhandene DynamoDB-Ressourcen zugelassen werden?

Derzeit UpdateItem erstellt glücklich ein neues Element, wenn Partitionsschlüssel nicht existiert. Ich möchte stattdessen einen Fehler in dieser speziellen Situation.

Natürlich kann ich eine get vor updateItem tun und nur eine updateItem auf Existenz, aber das ist weniger performant/mehr umständlich.

+0

Wäre es weniger performant? Hast du das getestet? Ich kenne mich nicht, aber ich bin neugierig. – arjabbar

+1

Kein Zweifel. Es gibt mindestens eine weniger Roundtrip plus, in meinem Fall eine weniger durch Api Gateway. Obendrein ist Dynamodb wahrscheinlich in der Lage, den bedingten Put schneller zu machen, als ein get plus separat zu setzen, aber dieser letzte Teil ist eine Annahme für den Moment. –

Antwort

1

Sie können eine bedingte Aktualisierung unter Verwendung einer ConditionExpression durchführen. Die Conditional Updates-API ist sehr leistungsfähig, aber in Ihrem Fall sollten Sie einen Bedingungsausdruck erstellen, der überprüft, ob das Element, das Sie zu aktualisieren versuchen, einen bedingten Ausdruck für den Partitionsschlüssel (und den Bereich) des Elements verwendet Schlüssel, wenn Ihre Tabelle einen verwendet).

Da Sie keine Programmiersprache angegeben haben, ist der beste Startpunkt the documentation.

+0

Ah, das ist ziemlich mächtig! –

+0

Was ist ConditionExpression-Syntax in PHP verwendet werden –

0

Um genauer zu sein, müssen Sie ConditionExpression: "attribute_exists(<your key attribute name>)" setzen.

Das schlägt fehl, wenn das Schlüsselelement nicht vorhanden ist - DynamoDB sucht nach dem Schlüsselelement, findet keine und alle Anrufe attribute_existscondition function schlagen fehl.

Im Gegensatz dazu, wenn das Element vorhanden ist, hat es immer das Schlüsselattribut, so attribute_exists(key) gibt True zurück.