我一直在阅读有关亚马逊DynamoDB的各种文章,但我仍然对阅读/写作单位如何使用这些文章感到困惑.例如,使用免费版本,我每秒有5个写入单位和10个读取单位,每个单位代表1kb数据.但这究竟意味着什么呢?
这是否意味着每秒可以执行最多10个读取请求,或者每秒可以请求最多10kb的数据(无论是否有10个或100个请求)?因为这方面对我来说并不清楚.因此,如果我有20个用户同时访问我网站上的页面(导致执行20个查询以检索数据),会发生什么?他们中的10个会立即看到数据,而其他10个会在1秒后看到它吗?或者,如果请求的数据(乘以20)小于10kb,他们是否会立即看到数据?
另外,如果读取单元不够,100个用户同时请求1kb数据,这是否意味着所有请求都需要10秒才能完成?
此外,定价有点令人困惑,因为我不明白是否为预留或消费的单位支付了价格?例如,他们说价格是"写入吞吐量:每10个写入容量单位每小时0.00735美元".这是否意味着即使一天没有提出书面请求,也会支付($ 0.00735*24 = $ 0.176)?
Mik*_*ugh 20
你是正确的,因为容量与被读/写对象的大小紧密相关.
AWS已更新了他们计算吞吐量的方式,并且他们已经从1 KB对象增加到4 KB进行计算.下面的讨论仍然有效,但某些计算现在有所不同.
请始终查阅最新的DynamoDB文档,以获取有关如何计算吞吐量的最新信息和示例.
从AWS DynamoDB文档(截至2014年8月1日):
写入所需的容量单位=每秒的项目写入次数x项目大小(向上舍入到最接近的KB)
读取所需的容量单位*=每秒项目读取次数x项目大小(向上舍入到最接近的KB)
- 如果你使用最终一致的读取,你将获得每秒读取吞吐量的两倍.
根据您的示例问题,如果您希望每秒读取10KB数据,则需要配置10个读取单位.如果您对1 KB数据发出10个请求,或者对10 KB数据发出单个请求,则无关紧要.你的速度限制在10KB /秒.
请注意,所需的读取容量单位数取决于每秒读取的项目数,而不是API调用的数量.例如,如果您需要从表中每秒读取500个项目,如果您的项目是1KB或更少,那么您需要500个单位的读取容量.如果您执行500个单独的GetItem调用或50个BatchGetItem调用,每个调用返回10个项目,则无关紧要.
对于您的20个用户示例,请记住数据已向上舍入到最接近的KB.因此,即使您的20个用户请求0.5 KB的数据,您也需要20个读取单元来同时为所有这些数据提供服务.如果您只有10个读取单元,那么其他10个请求将被限制.如果您使用Amazon DynamoDB库,它们会启动自动重试逻辑以再次尝试请求,以便最终获得服务.
对于有关100个用户的问题,其中一些请求可能会受到限制,重试逻辑最终可能会失败(代码只会在停止尝试之前多次重试请求) - 因此您需要准备好处理这400个响应来自DynamoDB的代码并做出相应的反应.在使用DynamoDB时监控应用程序非常重要,并确保不会限制应用程序关键事务.
关于定价的最后一个问题 - 您按小时支付预订金额.如果您保留1000个读取单位且您的网站绝对没有流量,那么太糟糕了,您仍然需要每小时支付1000个读取单位.
为了完整性 - 请记住吞吐量是PER TABLE.因此,如果您有3个DynamoDB表:用户,照片,朋友,那么您必须为每个表配置容量,并且您需要确定适合每个表的表.在这个简单的示例中,可能在应用程序中访问照片的频率较低,因此与"用户"表相比,您可以提供较低的吞吐量.
最终一致的读取非常适合节省成本,但您的应用必须设计为能够处理它.最终一致的读取意味着如果您更新数据并立即尝试读取新值,则可能无法获得新值,它仍可能返回先前的值.最终,有足够的时间,你将获得新的价值.由于您无法保证读取最新数据,因此您支付的费用较少 - 但如果您进行适当的设计,则可以.
将其视为管道直径:您需要支付每秒可能的数据吞吐量.请求数量无关紧要.
此外,如果您要求10个读取单位,那么无论您的实际流量如何,您确实将支付10个单位.
如果您的流量超过限额,您将首先收到警告(假设您提供的吞吐量的80%).然后请求开始花费更多时间.如果您在相当长的时间内仍然超出限制,则可以拒绝新连接几分钟.
希望有所帮助
归档时间: |
|
查看次数: |
12635 次 |
最近记录: |