2016-10-01 73 views
2

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 

它还指出以下的一段建议:

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

我希望我误解这一点,但如果你的反应不会返回一个空集,那么怎么是你应该知道,如果是因为没有项目与所提供的项名称存在,或者如果您的要求只是打一个不包含你的物品的复制品?

回答

1

我之前从未使用过AWS SimpleDB,但是从我掌握的有关Amazon DynamoDB复制的知识来看,数据通常最终是一致的 - 而任何副本处理读取属性的请求时,先前写入的复制过程数据仍然可以在负责存储数据的副本上进行,这就是为什么处理请求读取属性的副本不必将数据存储(还) - 这就是为什么它无法用错误消息进行响应的原因。

你应该能够为了做到100%知道什么是指定consistent_read: true参数,因为它会告诉你在AWS的SimpleDB是否存在数据:

根据

the documentation of get_attributes method

:consistent_read(布尔) -

,判断是否当数据从读SimpleDB的强一致性应该执行。如果为true,则将返回以前写入SimpleDB的任何数据。否则,结果最终会一致,并且客户端可能看不到在读取之前立即写入的数据。

相关问题