【问题标题】:Amazon DynamoDB Mapper - limits to batch operationsAmazon DynamoDB Mapper - 批处理操作的限制
【发布时间】:2019-10-07 07:17:32
【问题描述】:

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

假设我有一个包含 10000 条记录的 ArrayList,我正在这样保存它:

mapper.batchWrite(recordsToSave, new ArrayList<BillingRecord>());

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

映射器是否将此写入拆分为多个写入并处理限制,还是应该明确处理?

我只找到了直接使用 AmazonDynamoDB 客户端完成的 batchWrite 示例(例如 THIS 之一)。直接使用客户端进行批处理操作是否正确?如果是这样,拥有映射器的意义何在?

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:

    映射器是否将您的对象列表拆分为多个批次,然后分别编写每个批次?是的,它为您进行批处理,您可以看到它将要写入的项目拆分为最多 25 个项目的批次here。然后它会尝试写入每个批次,并且每个批次中的某些项目可能会失败。映射器documentation中给出了一个失败的例子:

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

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

    在特定批次失败的情况下,它会移动到下一个批次(让线程休眠一段时间,以防故障是由于节流造成的)。最后,所有失败的批次都在FailedBatch 实例列表中返回。每个FailedBatch 实例都包含一个未写入DynamoDB 的未处理项目列表。

    您提供的 sn-p 是否是进行批量写入的正确方法?我能想到两个建议。如果您没有要删除的项目,BatchSave 方法更合适。您可能还想考虑如何处理失败的批次。

    直接使用客户端是否正确?如果是这样,映射器的意义何在?映射器只是客户端的包装器。映射器为您提供了一个 ORM 层,用于将您的 BillingRecord 实例转换为低级客户端使用的嵌套哈希映射。直接使用客户端并没有什么问题,而且在某些特殊情况下确实会发生这种情况,需要在映射器之外编写额外的功能。

    【讨论】:

    • 感谢您的详细回答...有没有示例如何使用映射器处理失败的批次?我只找到了直接使用客户端的例子。
    • 对不起...我找不到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多