我一直在阅读有关亚马逊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)?
答案 0 :(得分: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个用户的问题,其中一些请求可能只是受到限制,重试逻辑最终可能会失败(代码只会在停止尝试之前多次重试请求) - 所以你需要准备好处理来自DynamoDB的400个响应代码并做出相应的反应。 在使用DynamoDB时监控应用程序非常重要,并确保您不会受到关键应用程序的限制。
关于定价的最后一个问题 - 您按小时支付预订金额。如果您保留1000个读取单位且您的网站绝对没有流量,那么太糟糕了,您仍然需要每小时支付1000个读取单位。
为了完整性 - 请记住,吞吐量是PER TABLE的条款。因此,如果您有3个DynamoDB表:用户,照片,朋友,那么您必须为每个表配置容量,并且您需要确定适合每个表的表。在这个简单的示例中,可能在应用程序中访问照片的频率较低,因此与“用户”表相比,您可以提供较低的吞吐量。
最终一致性读取非常适合节省成本,但您的应用必须设计为能够处理它。最终一致的读取意味着如果您更新数据并立即尝试读取新值,则可能无法获得新值,它仍可能返回先前的值。最终,有足够的时间,你将获得新的价值。由于您无法保证读取最新数据,因此您支付的费用较少 - 但如果您进行了适当的设计,则可以。
答案 1 :(得分:5)
将其视为管道直径:您需要支付每秒可能的数据吞吐量。请求数量无关紧要。
此外,如果您要求10个读取单位,那么无论您的实际流量如何,您确实将支付10个单位。
如果您的流量超过限额,您首先会收到警告(假设您提供的吞吐量的80%)。然后请求开始花费更多时间。如果您在相当长的时间内仍然超出限制,则可以拒绝新连接几分钟。
希望有所帮助
答案 2 :(得分:1)
•添加和更新项目会消耗您的写入吞吐量,而请求/查询项目会消耗您在dynamo db中的读取吞吐量。 DynamoDB表中单个项目的最大大小为400 kb,项目越大,消耗的吞吐量越多,成本就越高。如果您使用密钥在DynamoDB中搜索,则表格扫描不会发生,您需要相当于项目大小的吞吐量,例如,如果您的项目大小为4kb,那么您需要1个读取容量单位(1个单位相当于4KB /秒),如果你想每秒读取40KB的数据,你需要配置10个读取单元。如果您对4 KB数据发出10个请求,或者对40 KB数据发出单个请求,则无关紧要。你的速度限制在40KB /秒。但是,如果您正在搜索密钥,那么DynamoDB会扫描表中的完整数据,而扫描数据库将在数据库中的数据高时跨越预配置的吞吐量限制,我们可以将表的吞吐量增加到扫描时所需的最大值,但这会增加成本并且会使数据库在大多数时间内完全闲置。
答案 3 :(得分:0)
请阅读本文,所有详细信息都在其中:
通常,您需要为每个项目付费,其中每个项目的大小都会四舍五入到下一个1KB / 4KB,以进行写/读操作。
此规则的唯一例外是当您执行查询/扫描调用时:
所有返回的项目都被视为一次读取操作,DynamoDB会在其中计算所有项目的总大小,然后舍入到下一个4 KB边界。如果查询返回1500个项目,每个项目64个字节,则累积大小为96 KB。