You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS DynamoDB iOS Swift版batchWriteItem请求示例问询

iOS AWS DynamoDB batchWriteItem 请求组装示例

没问题!我刚好在iOS项目里用过DynamoDB的batchWriteItem接口,给你一个完整的请求组装示例,你可以直接套用到你的代码里:

1. 先准备要插入的单条数据请求(PutRequest)

首先你需要把每条要插入的数据转换成AWSDynamoDBPutRequest对象,每个对象对应一条插入操作:

// 第一条要插入的数据,注意要符合DynamoDB的数据格式(S代表字符串,N代表数字,BOOL用bool等)
let item1: [String: AWSDynamoDBAttributeValue] = [
    "id": AWSDynamoDBAttributeValue(string: "item_001"),
    "name": AWSDynamoDBAttributeValue(string: "Test Item 1"),
    "count": AWSDynamoDBAttributeValue(number: "5")
]
let putRequest1 = AWSDynamoDBPutRequest()
putRequest1?.item = item1

// 第二条要插入的数据
let item2: [String: AWSDynamoDBAttributeValue] = [
    "id": AWSDynamoDBAttributeValue(string: "item_002"),
    "name": AWSDynamoDBAttributeValue(string: "Test Item 2"),
    "count": AWSDynamoDBAttributeValue(number: "10")
]
let putRequest2 = AWSDynamoDBPutRequest()
putRequest2?.item = item2

2. 组装BatchWriteItemInput请求

接下来把这些单个的PutRequest整理成请求对象,注意requestItems是一个字典,键是你的DynamoDB表名,值是包含所有PutRequest的数组:

// 替换成你的实际表名
let tableName = "Your-DynamoDB-Table-Name"

// 把PutRequest放到数组里(过滤掉可能的nil)
let writeRequests = [putRequest1, putRequest2].compactMap { $0 }

// 组装请求的核心字典:表名对应一组写入请求
let requestItems: [String: [AWSDynamoDBWriteRequest]] = [
    tableName: writeRequests.map {
        let writeRequest = AWSDynamoDBWriteRequest()
        writeRequest?.putRequest = $0
        return writeRequest
    }.compactMap { $0 }
]

// 创建最终的batchWriteItem请求对象
let batchRequest = AWSDynamoDBBatchWriteItemInput()
batchRequest?.requestItems = requestItems

3. 调用batchWriteItem接口

现在你就可以把这个batchRequest传入你原来的调用代码里了:

AWSDynamoDB.default().batchWriteItem(batchRequest!) { (output, error) in
    if let error = error {
        // 处理错误
        if error.localizedDescription.range(of: "offline") != nil {
            // 离线场景处理逻辑
            print("当前处于离线状态,稍后重试")
        } else {
            print("批量写入失败: \(error.localizedDescription)")
        }
    } else {
        // 写入成功,可检查output里的UnprocessedItems是否有未处理的项
        if let unprocessed = output?.unprocessedItems, !unprocessed.isEmpty {
            print("存在未处理的项,需要重试: \(unprocessed)")
        } else {
            print("所有数据批量写入成功!")
        }
    }
}

几个关键注意点:

  • 一次batchWriteItem最多支持25个操作(Put/Delete混合也可以),单条请求的总大小不能超过16MB
  • 如果返回的unprocessedItems不为空,说明有部分项没写入成功,你需要根据官方建议重试(注意重试时要遵守指数退避策略)
  • 数据格式一定要对应DynamoDB的类型,比如字符串用AWSDynamoDBAttributeValue(string:),数字用number:,布尔值用bool:,不要传错类型

内容的提问来源于stack exchange,提问作者tatiana_c

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:22:56