如何编码 BatchWriteItemRequest 并保存数据
private static void saveItem(List<EventTracker> items) {
List<WriteRequest> wrList = new ArrayList<>();
try {
for (EventTracker item : items) {
WriteRequest wreqItem;
wreqItem = getWriteRequest(item);
wrList.add(wreqItem);
}
try {
BatchWriteItemResult batchWriteItemResult = new BatchWriteItemResult();
do {
BatchWriteItemRequest batchWriteItemRequest = new BatchWriteItemRequest();
batchWriteItemRequest.addRequestItemsEntry(forumTableName, wrList);// setRequestItems(writeRequestitems);
batchWriteItemResult = amazonDynamoDB.batchWriteItem(batchWriteItemRequest);
// Check for unprocessed keys which could happen if you
// exceed
// provisioned throughput
Map<String, List<WriteRequest>> unprocessedItems = batchWriteItemResult.getUnprocessedItems();
if (unprocessedItems.size() == 0) {
System.out.println("No unprocessed items found");
} else {
System.out.println("Sleeping for: " + ThreadLocalRandom.current().nextInt(500, 999 + 1));
Thread.sleep(ThreadLocalRandom.current().nextInt(500, 999 + 1));
wrList = unprocessedItems.get(forumTableName);
System.out.println("Retrieving the unprocessed items");
}
} while (batchWriteItemResult.getUnprocessedItems().size() > 0);
} catch (Exception e) {
System.err.println("Failed to retrieve items: ");
e.printStackTrace(System.err);
}
} catch (Exception e) {
}
}
如果我们想要使用批处理操作将数据放入 dynamo db 表,我们需要知道这一点。让我们看看完成此任务需要遵循的步骤。在这个例子中,我们试图保留一个 EventTracker 数据列表,这是我的 POJO。
- 对于要插入的每条记录,我们需要创建一个 PUT 请求。
- 每个 PUT 请求都包含在写请求中。
- 所有写请求都绑定在一个列表中。
- 然后将 WriteRequest 列表添加到 BatchWriteItemRequest 并执行。
下面的代码将显示我们如何创建写请求。