2016-05-06 57 views
3

DynamoDB扫描操作成本我很新的AWS DynamoDB和看了我不是100%肯定的SCAN使用“限制”参数时,会发生什么成本计算的文档操作。与“限制”参数

据我所知,应该设计表,以便QUERY业务集中使用和一个SCAN会扫描整个表,从而消耗了大量的阅读能力。我也明白,FilterExpression并不会影响扫描整个表的成本,但会在之后过滤之后的所有扫描结果,并且如果扫描的项目总数超过了1 MB的最大数据集大小限制,则扫描停止并返回结果。

我不确定的是'限制'参数是一种FilterExpression,还是它停止整个扫描,从而降低了读取成本。

例如,如果我有一个排序关键字是日期字段(updatedAt)并且它有一百万行的活动表。如果我执行限值= 10的SCAN(为了获得最新的10个活动),我显然会得到10行,但是我会因阅读一百万行而被收费吗?成本是我最关心的问题。

回答

2

是,Limit还将rediuce消耗的读取能力,这里是有关部分来自DynamoDB docs

扫描操作提供了可用于设置页面大小为您请求的限制参数。每个具有较小页面大小的扫描或查询请求使用较少的读取操作并在每个请求之间创建“暂停”。例如,如果每个项目是4 KB,并且您将页面大小设置为40个项目,则Query请求将只消耗40个高度一致的读取操作或20个最终一致的读取操作。较大数量的较小扫描或查询操作将允许您的其他关键请求在不受限制的情况下成功完成。

如您所见每个具有较小页面大小的扫描或查询请求使用较少的读取操作

+0

感谢您的回复。这确实回答了这个问题,尽管我最近意识到扫描的顺序现在是随机的,而不是维护排序键的顺序。这意味着我无法通过updatedAt字段获得最新的10项活动。感谢您确认成本问题。 – elprl

+0

@elprl但是如果'updatedAt'字段是你的排序键,你为什么要使用'scan'操作而不是'query'? –

+0

在我的特殊情况下,表的散列键是一个hashTag字符串,排序键是updatedAt epoc数。 [“#cat”:1462812033,“#dog”:1462812073,...]。因此,为什么我需要''扫描''来获得自X时间起的所有hashtags。 – elprl