DynamoDB - Mis point si hachage (ou du haschisch et de la gamme de combinaison) n'existe pas

Voici mon cas d'utilisation: j'ai une Dynamo tableau avec une valeur de hachage + touche range. Quand j'ai mis de nouveaux éléments dans le tableau, je veux faire un contrôle d'unicité. Parfois, j'ai envie de garantir que le hachage est unique (en ignorant la gamme). D'autres fois je veux permettre à double hache, mais de garantir que le hachage et la gamme de combinaison est unique. Comment puis-je y arriver?

J'ai expérimenté avec attribute_not_exists. Il semble gérer le deuxième cas, où il vérifie le hash + combinaison de touches. Voici un PHP, exemple:

$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)'
));

Curieusement, il ne semble pas à la matière si j'utilise attribute_not_exists(hash) ou attribute_not_exists(range). Ils semblent tous deux à faire exactement la même chose. Est-ce la façon dont il est censé fonctionner?

Aucune idée de comment gérer le cas où je ne veux vérifier hash pour l'unicité?

  • Poursuite de l'expérimentation montre que attribute_not_exists suit cette étrange logique: attribute_not_exists(any_attribute_that_exists_in_the_table) retourne true si la valeur de hachage + gamme de combinaison n'existe pas dans la table, sinon elle retourne false. attribute_not_exists(attribute_that_does_not_exist_in_the_table) retourne toujours true. Les index secondaires (global ou local) n'affectent pas le comportement.
InformationsquelleAutor mrog | 2015-09-28