İşte kullanım durumlarım: Bir hash + aralık anahtarına sahip bir Dinamo masası var. Masaya yeni öğeler koyduğumda, tek bir kontrol yapmak istiyorum. Bazen, hashın benzersiz olduğunu (menzili göz ardı ederek) garanti etmek istiyorum. Diğer zamanlarda yinelenen karmalara izin vermek istiyorum, ancak karma ve aralık kombinasyonunun benzersiz olduğunu garanti ediyorum. Bunu nasıl başarabilirim?DynamoDB - Eğer hash (veya karma ve aralık birleşimi) yoksa öğe koyun
attribute_not_exists ile deneme yaptım. Hash + anahtar kombinasyonunu kontrol ettiği ikinci davayı ele alıyor gibi görünüyor. İşte bir PHP örneği verilmiştir:
$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)'
));
İşin garibi, ben attribute_not_exists(hash)
veya attribute_not_exists(range)
kullanırsanız fark görünmüyor. İkisi de aynı şeyi yapıyor gibi görünüyor. Bu şekilde çalışması gerekiyor mu?
Tek farkla sadece hash
'u kontrol etmek istediğim davayı nasıl kullanacağım konusunda bir fikrin var mı?
İleri deneyler attribute_not_exists bu tuhaf mantığı izlediğini göstermektedir: ' attribute_not_exists (any_attribute_that_exists_in_the_table) ', hash + range kombinasyonu tabloda yoksa, aksi takdirde false değerini döndürürse true değerini döndürür. 'attribute_not_exists (attribute_that_does_not_exist_in_the_table)' her zaman doğru döner. İkincil endeksler (global veya yerel) davranışı etkilemez. – mrog