【发布时间】:2021-07-14 06:26:30
【问题描述】:
我们使用 Apache Ignite(版本 2.7.5)作为启用了 ignite 持久性的 2 节点分区集群。
2 个 ignite 实例中的每一个都有一个缓存(例如,名为 XYZ),每个实例占用了大约 250 GB 的空间。该表有 1.5 亿条记录。
以后我们不再需要这个缓存,我想删除这个缓存并回收每个实例中的空间(磁盘空间和堆外内存)。
我尝试了以下方法:
-
尝试编写 API 以从缓存中删除所有数据并将其销毁。
@DeleteMapping(path = "/delete-cache") public String deleteCache() { try { IgniteCache<XYZId, XYZ> cache = ignite.cache("XYZCache"); cache.removeAll(); cache.destroy(); } catch (Exception e) { LOG.error("Exception while destroying cache: ", e); return "Fail"; } return "Success"; }但是在点击这个 API 时,Ignite 挂起,我的服务失去了与 Ignite 的连接。
-
尝试通过进入 ignite 实例并执行
rm cache-XYZ来删除缓存。完成此操作后,由 ignite 实例回收的磁盘空间永远无法作为集群一起启动。 ignite 日志中没有具体的错误,但是做了一个:
./control.sh --baseline 没有给出任何结果,终端挂了。
目前,有一个 API 可以根据记录的id 逐个删除对象,但以当前速率删除 1.5 亿个条目需要 8 周时间。
有没有更好的方法来实现这一点?
【问题讨论】:
标签: java caching ignite gridgain