您是正确的,因为容量与正在读取/写入的对象的大小紧密相关。
2016 年 2 月更新
AWS 更新了他们计算吞吐量的方式,并将其计算的对象从 1 KB 增加到 4 KB。下面的讨论仍然有效,但某些计算现在不同了。
请始终查阅最新的 DynamoDB 文档,以获取有关如何计算吞吐量的最新信息和示例。
旧文档
来自 AWS DynamoDB 文档(截至 2014 年 1 月 8 日):
写入所需的容量单位 = 每次写入的项目数
第二个 x 项目大小(四舍五入到最接近的 KB)
读取所需的容量单位* = 每次读取的项目数
第二个 x 项目大小(四舍五入到最接近的 KB)
- 如果您使用最终一致性读取,就每秒读取而言,您将获得两倍的吞吐量。
根据您的示例问题,如果您想每秒读取 10KB 的数据,则需要配置 10 个读取单元。无论是对 1 KB 数据发出 10 次请求,还是对 10 KB 数据发出单个请求,都没有关系。您被限制为 10KB/秒。
请注意,所需的读取容量单位数已确定
通过每秒读取的项目数,而不是 API 的数量
来电。例如,如果您需要每秒从您的
表,如果你的项目是 1KB 或更少,那么你需要 500 个单位
读取容量。 500个单独的GetItem没关系
调用或 50 个 BatchGetItem 调用,每个调用返回 10 个项目。
对于您的 20 个用户示例,请注意数据会四舍五入到最接近的 KB。因此,即使您的 20 个用户请求 0.5 KB 的数据,您也需要 20 个读取单元来同时为所有用户提供服务。如果您只有 10 个读取单元,那么其他 10 个请求将被限制。如果您使用 Amazon DynamoDB 库,它们具有自动重试逻辑以再次尝试请求,因此它们最终应该得到服务。
对于您关于 100 个用户的问题,其中一些请求可能只是被限制并且重试逻辑最终可能会失败(代码只会在停止尝试之前重试请求多次) - 所以您需要准备好处理来自 DynamoDB 的 400 个响应代码并做出相应反应。 在使用 DynamoDB 时监控您的应用程序并确保您不会在应用程序关键事务上受到限制,这一点非常重要。
关于定价的最后一个问题 - 您按小时支付预订费用。如果您保留了 1000 个读取单元,而您的网站完全没有流量,那太糟糕了,您仍然需要为这 1000 个读取单元按小时付费。
为了完整性 - 请记住,吞吐量是按表提供的。因此,如果您有 3 个 DynamoDB 表:用户、照片、朋友,那么您必须为每个表配置容量,并且您需要确定适合每个表的容量。在这个简单的示例中,可能在您的应用程序中访问照片的频率较低,因此与您的用户表相比,您可以提供更低的吞吐量。
最终一致的读取非常适合节省成本,但您的应用必须设计为能够处理它。最终一致读取意味着如果您更新数据并立即尝试读取新值,您可能无法取回新值,它可能仍会返回之前的值。最终,如果有足够的时间,您将获得新的价值。由于不能保证读取最新数据,因此您支付的费用更少 - 但如果您设计得当,那是可以的。