我们使用ApacheIgnite(版本2.7.5)作为启用ignite持久性的2节点分区集群。
两个ignite示例中的每个示例都有一个缓存(例如,名为xyz),它在每个示例中占用了大约250GB的空间。这个表有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周的时间。
有没有更好的方法来实现这一点?请帮忙
1条答案
按热度按时间cfh9epnr1#
你可以直接跑
cache.destroy();
(不删除每个条目)它将销毁缓存并回收磁盘上的空间。