如何检测SimpleDB域是否包含所请求的项目?

时间:2016-10-01 18:40:20

标签: ruby amazon-web-services amazon-simpledb

Ruby SDK的AWS SimpleDB documentation提供了以下有关使用get_attributes方法的示例:

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

...然后是以下示例响应:

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

它还提出以下建议:

  

如果在为此操作访问的副本上不存在该项,则返回空集。系统不会返回错误,因为它无法保证该项目在其他副本上不存在。

我希望我误解了这一点,但是如果你的回复确实返回了一个空集,那你怎么知道它是否因为所提供的项目名称不存在任何项目,或者如果你的请求只是点击了一个不包含你的项目的副本?

1 个答案:

答案 0 :(得分:1)

我之前从未使用过AWS SimpleDB,但是从我从亚马逊DynamoDB复制的知识来看,数据通常最终是一致的 - 而任何副本都会处理您读取属性的请求,复制过程以前写入的数据仍然可以在负责存储数据的副本中进行,这就是为什么处理读取属性请求的副本可能不必存储数据的原因(尚未) - 这就是为什么它无法回复错误消息。

为了100%确定,您应该做的是指定consistent_read: true参数,因为它应该告诉您AWS SimpleDB中是否存在数据:

  

根据the documentation of get_attributes method

     
    

:consistent_read(布尔) -

         

确定从SimpleDB读取数据时是否应强制执行强一致性。如果为true,则返回先前写入SimpleDB的任何数据。否则,结果最终会保持一致,并且客户端可能看不到您在阅读之前立即写入的数据。