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
它还提出以下建议:
如果在为此操作访问的副本上不存在该项,则返回空集。系统不会返回错误,因为它无法保证该项目在其他副本上不存在。
我希望我误解了这一点,但是如果你的回复确实返回了一个空集,那你怎么知道它是否因为所提供的项目名称不存在任何项目,或者如果你的请求只是点击了一个不包含你的项目的副本?
答案 0 :(得分:1)
我之前从未使用过AWS SimpleDB,但是从我从亚马逊DynamoDB复制的知识来看,数据通常最终是一致的 - 而任何副本都会处理您读取属性的请求,复制过程以前写入的数据仍然可以在负责存储数据的副本中进行,这就是为什么处理读取属性请求的副本可能不必存储数据的原因(尚未) - 这就是为什么它无法回复错误消息。
为了100%确定,您应该做的是指定consistent_read: true
参数,因为它应该告诉您AWS SimpleDB中是否存在数据:
根据the documentation of get_attributes method
:consistent_read(布尔) -
确定从SimpleDB读取数据时是否应强制执行强一致性。如果为true,则返回先前写入SimpleDB的任何数据。否则,结果最终会保持一致,并且客户端可能看不到您在阅读之前立即写入的数据。