Amazon DynamoDB Mapper - 限制批处理操作

Sma*_*ajl 8 amazon-web-services amazon-dynamodb

我正在尝试将大量记录写入dynamoDB,我想知道这样做的正确方法是什么.目前,我正在使用DynamoDBMapper在一个batchWrite操作中完成这项工作,但在阅读文档之后,我不确定这是否是正确的方法(特别是如果对书面项目的大小和数量有一些限制).

让我们说,我有一个包含10000条记录的ArrayList,我将它保存为:

mapper.batchWrite(recordsToSave, new ArrayList<BillingRecord>());
Run Code Online (Sandbox Code Playgroud)

第一个参数是包含要写入的记录的列表,第二个参数包含要删除的项目(在这种情况下没有这样的项目).

映射器是否将此写入分成多个写入并处理限制或是否应该明确处理?

我只发现batchWrite例子与AmazonDynamoDB客户端直接完成(像一个).是否正确使用客户端进行批处理操作?如果是这样,有一个映射器有什么意义?

小智 9

映射器是否将对象列表分成多个批次,然后分别编写每个批次?是的,它配料为你和你可以看到,它将该项目要写入的多达25个项批次这里.然后它尝试编写每个批次,每个批次中的一些项目可能会失败.映射器文档中给出了一个失败的示例:

如果批处理中单个对象的大小超过400 KB,则此方法无法保存批处理.有关批量限制的详细信息,请参阅http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html

该示例讨论的是一条记录(在您的情况下为一个BillingRecord实例)超过400KB的大小,在撰写此答案时,它是DynamoDB中记录的最大大小.

在特定批次失败的情况下,它会移动到下一批次(如果失败是因为限制,则将线程休眠一会儿).最后,所有失败的批次都在List of FailedBatch实例中返回.每个FailedBatch实例都包含未写入DynamoDB的未处理项目列表.

您提供了正确的批量写入方式的片段吗?我可以想到两个建议.该BatchSave如果你没有要删除的项目方法是比较合适的.您可能还想考虑要对失败的批次执行什么操作.

是否正确使用客户端?如果是这样,映射器有什么意义?映射器只是客户端的包装器.映射器为您提供了一个ORM层,用于将BillingRecord实例转换为低级客户端使用的排序嵌套哈希映射.直接使用客户端并没有什么不妥,在某些需要在映射器之外编码所需的其他功能的特殊情况下,这确实会发生.