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
它还提出了以下建议:
如果在该操作访问的副本上不存在该项,则返回空集。系统不能返回错误,因为它不能保证该项不存在于其他副本上。
我希望我误解了这一点,但是如果您的回复确实返回一个空集合,那么您应该如何知道它是否是由于所提供的项目名称没有项目,或者如果您的请求刚刚命中了一个不包含您的项的副本?
最佳答案
我以前从未使用过AWS SimpleDB,但从我对Amazon的DynamoDB复制的一点了解来看,数据通常最终是一致的,而任何副本都会处理您读取属性的请求复制以前写入的数据的过程仍然可以在负责存储数据的副本之间进行,这就是为什么处理您的读取属性请求的副本不必存储数据的原因,这就是为什么它不能用错误消息响应的原因。
为了确保100%确定,你应该做的是指定consistent_read: true
参数,因为它应该告诉你数据是否存在于AWS SimuldB中:
根据the documentation of get_attributes method
:一致读取(布尔值)-
确定从simpledb读取数据时是否应强制执行强一致性。如果为true,则将返回以前写入simpledb的任何数据。否则,最终的结果将是一致的,客户端可能看不到在您读取之前立即写入的数据。
关于ruby - 如何检测SimpleDB域是否包含请求的项目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39810220/