在回答“亚马逊DynamoDB吞吐量是如何计算和限制的?”有人建议,只要超出每秒预配的吞吐量,DynamoDB就会限制请求。然而,这与我的经验相矛盾。
我在一个表中发布了多行,通常行数远远超过了配置的写容量。这种情况会在短时间内发生。在某一点上,我甚至有5分钟的平均时间超过了规定的容量。OTOH,平均15分钟低于容量。在那段时间里,我没有收到任何限制性的请求。
15分钟的平均峰值远低于规定的容量:
那么DynamoDB什么时候会限制请求?它考虑了什么样的平均值?在限制突发之前,它可以达到多高的超出配置的容量?
DynamoDB通过提供突发容量,在每个分区的吞吐量供应方面提供了一些灵活性。每当您没有完全使用分区的吞吐量时,DynamoDB都会保留一部分未使用的容量,用于以后的吞吐量突发,以处理使用高峰。
DynamoDB目前保留最多5分钟(300秒)未使用的读写容量。在偶尔的读或写活动突发期间,这些额外的容量单位可以很快消耗,甚至比您为表定义的每秒提供的吞吐量还要快。
DynamoDB还可以消耗突发容量用于后台维护和其他任务,而无需事先通知。
DynamoDB文档中有一个提示,解释了Burst是如何工作的:
当您没有充分利用分区的吞吐量时,DynamoDB会保留一部分未使用的容量,以供以后的吞吐量使用。DynamoDB目前保留了最多五分钟(300秒)未使用的读写容量。
但它也说你不能依赖这种行为:
但是,不要设计应用程序,使其依赖于随时可用的突发容量:DynamoDB可以并且确实使用突发容量进行后台维护和其他任务,而无需事先通知。
至少这可以解释为什么5分钟的平均时间可能高于供应的容量。根据上面的解释,如果在间隔开始时出现峰值,并且在间隔开始前的300秒内使用量减少,那么15分钟的平均值(或更长的时间跨度)甚至可能高于配置的容量。
DynamoDB旨在确保您的配置容量每秒可用。如果您为每秒10次1kB的读取提供一个表,那么DynamoDB将为您提供足够的容量来处理该吞吐量。此外,DynamoDB有时会允许您在短时间内实现超出所提供吞吐量的有限爆发。这是为了吸收客户工作负载的自然变化。这种突发事件不一定会发生,而且并不总是可用的(而且可用突发事件的性质可能会随着时间的推移而改变)。正如当前在最佳实践文档中所描述的,为了获得最佳性能,您应该拥有一个不超过配置容量的均匀分布的工作负载,并在密钥空间上均匀分布负载。然而,如果应用程序的实际生产行为偏离了均匀分布的工作负载,那么DynamoDB可能会吸收一些突发事件。
至于你的桌子需要准备多少,这在很大程度上取决于你的工作量。您可以先将资源调配到峰值的80%左右,然后根据收到的节流次数(可以在CloudWatch图表中看到)和应用程序对重试引起的延迟的容忍度来调整表容量。请记住,DynamoDB不允许超出您配置容量的无限突发。您可能能够吸收短脉冲,但无法在较长时间内维持高于所提供容量水平的吞吐量。我们可以提供的一般指导是,准备一些接近峰值的东西,然后向下拨,同时观察节流。
这个答案发布在AWS论坛上
免责声明:我为亚马逊DynamoDB团队工作。
问题内容: 我对JAX-WS进行了概述,并注意到了(和)的一些引用。 在什么情况下需要?(我认为JSR 109服务器?!) 问题答案: 是使用SUN的参考实现将Web服务作为标准存档部署在非Java EE5 Servlet容器上时所需的专有部署描述符。 Sun的RI 用作servlet上下文事件的侦听器和调度程序servlet。两者都必须在中声明。然后需要该文件为定义Web服务端点,以使其知道必须
问题内容: 我使用类只有很短的时间,编写方法时,我使所有变量都引用了self,例如self.foo。 但是,我在浏览《 wxPython in Action》 一书时发现,“ self”并没有一直使用。例如: 下面的一个确实使用“自我”。 如果我没记错的话,“自我”是指该类的特定实例,那么什么时候没有必要?有一般的经验法则吗? 问题答案: 您用于引用当前实例的属性。 您用于引用父类的方法。 如果仅
谷歌正在通过电子邮件通知Android位置权限的更改: 我们将于2016年10月15日进行更改,这将影响针对API版本21(Android 5.0、Lollipop)或更高版本的应用程序,这些应用程序使用ACCESS_FINE_LOCATION但没有明确具有“android.hardware.location.gps”用途功能。展望未来,这些应用程序将可安装在没有GPS硬件的设备上。在大多数情况下
如题, 在将包含汉字的数据转json存的时候,什么时候需要转unicode存储,什么时候不需要 如下: {"subject":"\u6395\u7268\u51ef\u86c1"} {"subject":"吃饭了没"}
问题内容: 当我尝试按照本指南进行SQLAlchemy Relation Example时:基本关系模式 我有这个代码 它运作良好,但是在指南中,该模型应为: 为什么我不需要或在我的示例中?什么时候应该使用其中一个? 问题答案: 如果使用,则无需在第二个表上声明关系。 如果 不 使用,并分别定义,则如果不使用,则sqlalchemy将不知道如何连接关系,因此修改一个也将修改另一个。 因此,在您的示