2015-07-21 48 views
3

閱讀文檔後,我不清楚在掃描操作中使用DynamoDB中的過濾器消耗了多少讀取容量單位。例如,這個紅寶石要求:讀取DynamoDB表掃描的容量成本

table.items.where(:MyAttribute => "Some Value").each do |item_data| 
    # do something with the item_data 
end 

我的理解是,這將導致表掃描,但DynamoDB將只返回,我很感興趣的項目但如果我的表中有10000項,並且只。這些項目中有5項是通過我的過濾器得到的,我仍然被「收取」了大量的讀取容量單位?

我用於過濾器的屬性不是散列,範圍或二級索引。我最近不得不添加該屬性,並且出乎意料地說,這就是爲什麼我沒有使用查詢。

回答

3

簡而言之,您將被「收取」掃描的物品總量(而不是返還的物品總量)。 掃描是,相比查詢(如你已經提到)一個昂貴的操作。

值得一提的是,當您在表格上調用掃描時,並不意味着整個表格將被掃描。如果掃描項目的大小超過1MB的限制,則掃描將停止,您必須再次調用才能掃描表格的下一部分。

這是從正式文檔採取:如果掃描的物品的總數目超過最大數據集大小1 MB的 極限

,掃描停止,結果被返回給用戶作爲 一個LastEvaluatedKey值在後續的 操作中繼續掃描。結果還包括超出 限制的項目數量。掃描可能導致沒有符合過濾標準的表格數據。

在掃描找到的項目後應用該過濾器,因此根本不會影響吞吐量。

如果您要定期執行這些操作,可能值得考慮添加一些二級索引或優化散列和範圍鍵。

+0

如果我的讀取容量是5個讀取單位,需要多長時間掃描1000個記錄的表格。如果掃描每個項目使用一個讀取容量,則需要很長時間才能完成掃描權限? – iamprem