首页 > 解决方案 > 在 PaginatedScanList 上使用 batchDelete() 时出现 Java 堆大小错误 - DynamoDB

问题描述

我需要从 dynamoDB 中删除不少记录:每 6 小时 1,500 万条记录。

首先,我将记录从dynamoDB拉到 PaginatedScanList (因为它是延迟加载的)。

然后,我想批量删除它们,所以我在列表中调用了 batchDelete()。

大约 10 分钟后,我得到 OutOfMemoryError: Java heap spaceGC overhead limit exceeded. 我认为这要归功于 PaginatedScanList。

我试图删除记录,list.foreach(record -> mapper.delete(record))它可以正常工作,但它对我的需要来说太慢了。

我可以分配最大 1gb 的堆空间,也可以更频繁地调用请求。

那么我的需求将如下所示: 每小时 210 000 条记录

这就是我的代码:

public void deleteOldRecords(PaginatedScanList<Records> recordsToDelete) {
 mapper.batchDelete(recordsToDelete);
}

mapper在哪里DynamoDBMapper。错误如下所示:

-[pool-3-thread-1] o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task.
00:08:29
java.lang.OutOfMemoryError: Java heap space

很高兴看到任何建议。

标签: javaspringamazon-web-servicesspring-bootamazon-dynamodb

解决方案


为什么不直接使用新表?而不是从当前删除?

因为表中的项目不仅仅是已删除的项目。

我进行了一些研究,发现DynamoDB TTL(生存时间)功能应该完全符合我的需求,无需额外处理。

不过感谢您的回复。


推荐阅读