Ecco i casi di utilizzo: Ho una tabella Dynamo con una chiave hash + intervallo. Quando inserisco nuovi oggetti nella tabella, voglio fare un controllo di unicità. A volte voglio garantire che l'hash sia unico (ignorando l'intervallo). Altre volte desidero consentire gli hash duplicati, ma garantire che la combinazione di hash e intervallo sia univoca. Come posso realizzare questo?DynamoDB - Inserisci articolo se hash (o hash e combinazione di intervalli) non esiste
Ho sperimentato con attribute_not_exists. Sembra gestire il secondo caso, dove controlla la combinazione di tasti hash +. Ecco un esempio PHP:
$client->putItem(array(
'TableName' => 'test',
'Item' => array(
'hash' => array('S' => 'abcdefg'),
'range' => array('S' => 'some other value'),
'whatever' => array('N' => 233)
),
'ConditionExpression' => 'attribute_not_exists(hash)'
));
Stranamente, non sembra avere importanza se uso attribute_not_exists(hash)
o attribute_not_exists(range)
. Entrambi sembrano fare esattamente la stessa cosa. È così che dovrebbe funzionare?
Qualche idea su come gestire il caso in cui voglio solo controllare hash
per l'unicità?
un'ulteriore sperimentazione mostra che attribute_not_exists segue questa logica bizzarra: ' attribute_not_exists (any_attribute_that_exists_in_the_table) 'restituisce true se la combinazione di hash + range non esiste nella tabella, altrimenti restituisce false. 'attribute_not_exists (attribute_that_does_not_exist_in_the_table)' restituisce sempre true. Gli indici secondari (globali o locali) non influenzano il comportamento. – mrog