java - 在 PaginatedScanList 上使用 batchDelete() 时出现 Java 堆大小错误 - DynamoDB
问题描述
我需要从 dynamoDB 中删除不少记录:每 6 小时 1,500 万条记录。
首先,我将记录从dynamoDB拉到 PaginatedScanList (因为它是延迟加载的)。
然后,我想批量删除它们,所以我在列表中调用了 batchDelete()。
大约 10 分钟后,我得到
OutOfMemoryError: Java heap space
或GC 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
很高兴看到任何建议。
解决方案
为什么不直接使用新表?而不是从当前删除?
因为表中的项目不仅仅是已删除的项目。
我进行了一些研究,发现DynamoDB TTL(生存时间)功能应该完全符合我的需求,无需额外处理。
不过感谢您的回复。
推荐阅读
- wcf - ASP .NET Core 2.0 部署无法与生产中的 WCF 服务连接
- python - 带有 __RequestVerificationToken 的 python 登录问题的 selenium webdriver
- html - 如何使徽标适合 PC 和移动浏览器?
- javascript - 无法渲染 TIFF 图像并将其添加为 Fabric 对象
- angular - Angular HttpClient:即使出现错误,如何获取原始 HTTP 响应
- php - 使用 PDO 插入时获取自动递增行 ID
- docker - 将外部文件添加到 payara 微应用程序类路径
- python - discord.py 中的 AttributeError
- python-3.x - 尝试在树莓派 4 B 上运行 InstaPy 脚本时出错
- node.js - 如何在弹性 beantalk 环境中将简单的 npm 命令作为 cron 作业运行?