2011-02-13 1 views
3

Je souhaite ajouter un nouvel élément à un domaine Amazon SimpleDB uniquement s'il n'y a pas déjà un autre élément avec le même nom d'élément.SimpleDB: Insérer un élément uniquement s'il n'existe pas

Je sais comment le faire pour un attribut. Mais je veux que le nom de l'élément soit vérifié pour s'assurer qu'il est unique et qu'il n'écrase pas un élément existant - sans une sélection supplémentaire, bien sûr.

Exemple pour vérifier un attribut:

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] 
[...] 

Selon le FAQ cela devrait être possible:

« Cette sémantique peut également être utilisé pour mettre en œuvre des fonctionnalités telles que les compteurs, l'insertion d'un seul élément s'il n'existe pas déjà [...] "

Répondre

-1

Vous pouvez générer le nom de l'article en fonction de la devise t horodatage. Et utilisez comme méthode% pour récupérer le résultat.

2

Vous avez raison, vous pouvez utiliser la condition pour y parvenir SimpleDB Docs conditional puts. Essentiellement, tout attribut de l'élément que vous connaissez peut être utilisé avec un contrôle d'existence sur la mise à jour conditionnelle pour s'assurer que la mise en place ne se produit que si l'attribut n'existe pas pour cet itemName particulier.

en Java en utilisant le SDK Java de amazon cela ressemblerait à quelque chose comme: -

// 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); 

ce qui réduit essentiellement à ce que vous avez écrit et faire ce que vous voulez tant que vous ne disposez d'un élément valide qui a aucun attribut 'quantité'. Il est peut-être intéressant de noter que dans votre exemple vous avez remplacé set à true, et si vous utilisez des puts conditionnels pour vous assurer que l'élément est un nouvel élément, vous ne devriez pas avoir à remplacer replace = true (selon les docs et preuve empirique, remplacer = vrai coûte plus que remplacer = faux et prend plus de temps).

+0

Cela ne répond pas du tout à sa question. Il veut savoir comment appliquer la sémantique de mise à jour conditionnelle sur itemName lui-même. Tout ce que vous avez décrit est comment le faire sur n'importe quel autre attribut – Senkwe

Questions connexes