如何检测SimpleDB域是否包含请求的项目?
问题描述:
的AWS SimpleDB documentation为Ruby SDK提供下面的例子是关于使用get_attributes
方法:如何检测SimpleDB域是否包含请求的项目?
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
它还指出以下的一段建议:
如果在该操作所访问的副本上不存在该项目,则会返回一个空集斯内德。系统不会返回错误,因为它无法保证该项目不存在于其他副本上。
我希望我误解这一点,但如果你的反应不会返回一个空集,那么怎么是你应该知道,如果是因为没有项目与所提供的项名称存在,或者如果您的要求只是打一个不包含你的物品的复制品?
答
我之前从未使用过AWS SimpleDB,但是从我掌握的有关Amazon DynamoDB复制的知识来看,数据通常最终是一致的 - 而任何副本处理读取属性的请求时,先前写入的复制过程数据仍然可以在负责存储数据的副本上进行,这就是为什么处理请求读取属性的副本不必将数据存储(还) - 这就是为什么它无法用错误消息进行响应的原因。
你应该能够为了做到100%知道什么是指定consistent_read: true
参数,因为它会告诉你在AWS的SimpleDB是否存在数据:
到the documentation of get_attributes method
:consistent_read(布尔) -
,判断是否当数据从读SimpleDB的强一致性应该执行。如果为true,则将返回以前写入SimpleDB的任何数据。否则,结果最终会一致,并且客户端可能看不到在读取之前立即写入的数据。