DynamoDb配置了数据吞吐量限制,根据this post中的答案,如果超出吞吐量限制,DynamoDb可能会开始抛出异常,而不仅仅是减慢查询速度。如果您运行查询(例如,如here所述),您如何确保查询不超过吞吐量?
查询将自动限制为1 MB,在这种情况下,您必须使用LastEvaluatedKey进行一些棘手的重新查询,如其文档中所述(没有代码示例)。但是,根据查询速度或类似情况,即使这1 MB可能会超出您的预配限制吗?
您还可以设置QuerySpec对象中返回的最大项目数,以便您可以在单个页面中处理查询 - 我猜这是在单独的页面中进行单独的查询。但是,如果您事先不知道项目的大小,则无法根据需要将其限制为KB以保持在吞吐量范围内。鸡肉和鸡蛋的情况。
我在这里遗漏了什么吗?有没有更简单的方法呢?
答案 0 :(得分:2)
最好的解决方案是不要使用分析性查询来强调动态表。将那些查询移到一个关联的数据库,该数据库可以提供功能强大的查询,而不会导致dynamodb的高昂成本。您可以针对这些分析类型的查询将dynamodb复制到AWS Athena或ElasticSearch或Rockset(如先前的答案所示)。
答案 1 :(得分:0)
您的问题可以通过以下解决方案或通过组合解决方案来解决
解决方案1:正如您在问题中所述,如果您知道自己的项目大小,则可以限制记录数量,通过lastEvaluatedKey
获取下一组记录。
再次,即使这可能足以限制你的限制,你需要一段时间的睡眠机制,这样你就不会连续击中桌子。
解决方案2:到目前为止,我实施的最佳方法是不要点击DynamoDB表,而是将您的信息存储在某种形式的缓存中(Memcahce
,{{ 1}}等等)
这将确保您不需要非常高的吞吐率。
注意:这将取决于您的应用类型,如果您的数据经常更新,这可能不是很有帮助。