2016-10-01 4 views
2

Le AWS SimpleDB documentation pour le SDK Ruby fournit l'exemple suivant en ce qui concerne l'utilisation de la méthode get_attributes:Comment détecter si le domaine SimpleDB contient l'élément demandé?

resp = client.get_attributes({ 
    domain_name: "String", # required 
    item_name: "String", # required 
    attribute_names: ["String"], 
    consistent_read: false, 
}) 

... et la réponse exemple suivant:

resp.attributes #=> Array 
resp.attributes[0].name #=> String 
resp.attributes[0].alternate_name_encoding #=> String 
resp.attributes[0].value #=> String 
resp.attributes[0].alternate_value_encoding #=> String 

Il indique également la pièce suivante de conseil:

Si l'élément n'existe pas sur la réplique qui a été accédée pour cette opération, un ensemble vide est renvoyé ned. Le système ne renvoie pas d'erreur car il ne peut pas garantir que l'élément n'existe pas sur d'autres réplicas.

J'espère que je suis malentendu, mais si votre réponse ne retourne un ensemble vide, alors comment êtes-vous censé savoir si c'est parce qu'aucun élément existe avec le nom de l'élément fourni, ou si votre demande vient frapper une réplique qui ne contient pas votre article?

Répondre

1

Je n'ai jamais utilisé AWS SimpleDB auparavant, mais grâce à la faible connaissance de la réplication d'Amazon DynamoDB, les données sont généralement cohérentes - tandis que l'une des réplicas gère votre demande de lecture des attributs, le processus de réplication les données peuvent encore avoir lieu à travers les répliques responsables de stocker vos données et c'est la raison pour laquelle il est possible que la réplique le traitement de votre demande de lire les attributs ne doivent pas avoir les données stockées (encore) - c'est pourquoi il ne peut pas répondre avec un message d'erreur.

Ce que vous devriez être en mesure de le faire afin d'être sûr à 100% est de spécifier le paramètre consistent_read: true comme il devrait vous dire si les données existent dans AWS SimpleDB ou non:

selon the documentation of get_attributes method

: consistent_read (Boolean) -

Détermine si doit être appliquée une forte cohérence ou non lorsque les données sont lues à partir SimpleDB. Si la valeur est true, toutes les données précédemment écrites dans SimpleDB seront renvoyées. Dans le cas contraire, les résultats seront conformes à terme, et le client ne peut pas voir les données écrites immédiatement avant votre lecture.