2012-09-17 7 views
16

Sto provando ad inserire in dinamo DB. Quando chiamo la funzione putItem cosa succederà se la chiave hash è già presente nel DB? L'oggetto PutItemResult contiene qualcosa che può dirci se è stata tentata una voce hash duplicata? Voglio evitare di eseguire un'altra query per verificare se c'è una voce con la chiave di hash che sto usando.cosa succederà se inseriamo in dinamo DB con una chiave hash duplicata?

+0

Stai utilizzando un framework specifico? – yadutaf

risposta

20

Se si inserisce un elemento su una chiave primaria esistente, verrà sovrascritto a meno di utilizzare i "valori attesi". Ecco l'introduzione della documentazione ufficiale:

http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_PutItem.html

Crea un nuovo elemento, o sostituisce un vecchio elemento con un nuovo elemento (inclusi tutti gli attributi). Se un elemento esiste già nella tabella specificata con la stessa chiave primaria, il nuovo elemento sostituisce completamente l'elemento esistente. È possibile eseguire un put condizionale (inserire un nuovo elemento se uno con la chiave primaria specificata non esiste) o sostituire un elemento esistente se ha determinati valori di attributo.

Nota

Per assicurare che un nuovo elemento non sostituisce un elemento esistente, utilizzare un condizionale operazione di inserimento con esiste impostato su false per l'attributo chiave primaria o attributi.

In caso contrario, è possibile utilizzare anche UpdateItem per aggiornare i campi di un elemento preesistente: http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_UpdateItem.html

+0

Penso che il modo più sicuro quando si desidera creare un elemento è di non usare mai putItem e utilizzare sempre UpdateItem. nel mio caso uso updateItem solo con le chiavi per creare un oggetto, se già esce non fa nulla. –

1

È possibile utilizzare 'withReturnValues ​​(ReturnValue.ALL_OLD)' che restituirà una mappa da PutItemResult.getAttributes del valori che erano lì prima dell'inserimento.

Se PutItemResult.getAttributes restituisce null, è stata una nuova voce.