当前位置: 首页 > 知识库问答 >
问题:

如何处理DynamoDB boto3的batchWriteItem(在lambda中称为)跳过一些项目(不上传到Dynamodb)?

董翰池
2023-03-14

这是一个正在使用AWS开发的项目。

我已经使用CloudWatch中的cron表达式安排了lambda函数。该函数将每天上传项目到DynamoDB。

尽管有一个唯一的主键,但有些项目没有上传到Dynamodb。有时跳过连续项,有时跳过主键稍相似的项。通常,跳过的项目数少于20个。

当我再次手动运行lambda函数时,它完全可以工作。想知道这背后的原因,可能的解决方案。谢谢!

共有1个答案

辛意智
2023-03-14

BatchWriteItem留档解释说,如果数据库遇到问题-最明显的是如果您的请求速率超过您的预配容量-很可能一个BatchWriteItem只会成功写入批处理中的一些项。未写入的项目列表将在响应中的UnProcessedItem属性中返回,并且您将再次尝试写入相同的未处理项目:

如果任何请求的操作因超出表的已配置吞吐量或发生内部处理故障而失败,则会在UnprocessedItems响应参数中返回失败的操作。您可以调查并选择重新发送请求。通常,您会在循环中调用BatchWriteItem。每次迭代都会检查未处理的项,并提交一个新的BatchWriteItem请求和这些未处理的项,直到处理完所有项为止。

如果由于请求中所有表上的已配置吞吐量不足而无法处理任何项,则BatchWriteItem将通过PutteExceedeDexception返回已配置的数据。

如果DynamoDB返回任何未处理的项,则应重试这些项的批处理操作。但是,我们强烈建议您使用指数退避算法。如果立即重试批处理操作,由于对各个表进行限制,底层读或写请求仍可能失败。如果使用指数退避延迟批处理操作,批处理中的单个请求更可能成功。

 类似资料:
  • 我有一个pycharm项目,大概还有一个Django项目。也许它们是一回事,也许不是——我不确定区别。 总之,在我的settings.py文件中(该文件位于< code>project目录的根目录下,我认为这是我的pycharm项目),我有: 这是否意味着< code>dumpstown是我的项目名称?还是我的pycharm项目名?有什么区别?因为我还有一个名为< code>dumpstownap

  • 我们已经配置了DynamoDB流来触发Lambda函数。超过1000万条独特记录将在30分钟内插入DynamoDB表,Lambda将在通过流触发时处理这些记录。 根据DynamoDB Streams留档,流将在24小时后过期。 问题: 这是否意味着Lambda函数(多个并发执行)应在24小时内完成对所有1000万条记录的处理? 如果某些流事件在24小时后仍未处理,它们会丢失吗?

  • 我正在使用java-8进行多个Spring boot项目,但现在其中一个需要转移到java-11。所以我需要在笔记本电脑上安装两个版本。那么如何在同一台机器上为不同的项目处理不同的JAVA版本呢?

  • 问题内容: 我在Eclipse中有想要上传到GitHub的代码,但到目前为止我还不知道该怎么做。它说“创建存储库”,但是看起来更像是一个存放项目的文件夹,我不确定如何将代码上传到其中。为看似愚蠢的问题道歉。另外,如何删除存储库?也没有一种方法可以做到这一点。 问题答案: 尽管Eclipse的EGit插件是一个不错的选择,但更好的选择是学习使用git bash -即从命令行使用git。学习git的基

  • 我正在尝试将XBee输出的段分组到一个变量中,该变量将它们连接起来。我正在使用Processing来编码和编译。我遇到的问题是输出(println)每隔一个字节就跳过一次(也许这是错误的术语)。因此i=4到11的XBee输出应该如下所示: 0,19,162,0,64,121,230,206(这是由十六进制转换的XBee地址)。

  • 问题内容: 我正在考虑将WCF用于一个项目,该项目需要人们能够将大文件(64MB-1GB)上传到我的服务器。我将如何使用WCF处理此问题,可能还具有恢复上传的功能。 为了处理更大的客户群,我想通过WCF测试JSON。这将如何影响文件上传?可以通过JSON完成,还是需要将上传部分切换到REST? 问题答案: 如果要上传大文件,则肯定需要查看WCF流模式。 基本上,您可以更改绑定上的传输模式;默认情况