SimpleDB: вставлять элемент, только если он еще не существует - PullRequest
3 голосов
/ 14 февраля 2011

Я хотел бы добавить новый элемент в домен Amazon SimpleDB, только если еще нет другого элемента с таким же именем.

Я знаю, как это сделать для атрибута.Но я хочу, чтобы имя элемента проверялось, чтобы убедиться, что оно уникально и не перезапишет существующий элемент - конечно, без дополнительного запроса выбора.

Пример проверки атрибута:

https://sdb.amazonaws.com/
?Action=PutAttributes
&DomainName=MyDomain
&ItemName=JumboFez
&Attribute.1.Name=quantity
&Attribute.1.Value=14
&Attribute.1.Replace=true
&Expected.1.Name=quantity
&Expected.1.Exists=false
&AWSAccessKeyId=[valid access key id]
[...]

Согласно FAQ это должно быть возможно:

«Эта семантика может также использоваться для реализации таких функций, как счетчики, вставка элемента только в том случае, еслиуже существует […] ”

Ответы [ 2 ]

2 голосов
/ 27 июля 2011

Вы правы, вы можете использовать условный пут для достижения этого Условные путы SimpleDB Docs .

По существу любой атрибут на предмете, который, как вы знаете, будет у вас, может использоваться с проверкой существованияв условном обновлении, чтобы убедиться, что помещение происходит только в том случае, если атрибут не существует для этого конкретного itemName.

В java, использующем java SDK Amazon, это будет выглядеть примерно так: -

// add a conditional check to ensure that the specified profile does not already
// exist - if there's a timestamp, then this profile already exists
UpdateCondition condition = new UpdateCondition("quantity", null, false);

final PutAttributesRequest request = new PutAttributesRequest().withDomainName("MyDomain");
request.setItemName("JumboFez");
request.setAttributes(attributes);
request.setExpected(condition);

sdb.putAttributes (request);

Это существенно уменьшает то, что вы написали, и будет делать то, что вы хотите, до тех пор, пока у вас никогда не будет действительного элемента, который не имеет атрибута количества.

Возможно, стоит отметить, что в вашем примере у вас есть набор заменв true, и если вы используете условные путы, чтобы убедиться, что элемент является новым, вам не нужно устанавливать replace = true (в соответствии с документами и эмпирическими данными замена = true стоит больше, чем replace = false и занимает больше времени)).

0 голосов
/ 25 февраля 2011

Вы можете сгенерировать имя элемента на основе текущей отметки времени.И используйте как% метод для получения результата.

...