2016-10-01 64 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的任何數據。否則,結果最終會一致,並且客戶端可能看不到在讀取之前立即寫入的數據。

相關問題