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
相关产品推荐
相关产品推荐

