可否给leveldb设置最大占用磁盘空间?数据库大小超过一定范围,就基于LRU规则删除数据

可否给leveldb设置最大占用磁盘空间?数据库大小超过一定范围,就基于LRU规则删除数据

喜欢这个问题 | 分享 | 新建回答

回答

jerkzhang

Jan 23, 2024
3 赞

这个leveldb暂时无法没有这个功能,你要自己实现,你可以在第三方主机,定时去激活你主进程中的leveldb的硬盘清理,与重新compact功能释放硬盘空间。以及删除谁,你需要自己维护一个信息表,这样删除的时候你知道删谁。也可以自己在同一台主机上定时轮询。会消耗一些系统资源的,但还好。另外可以考虑错峰自动清理。leveldb不仅仅要清除不用的键值数据,还要进行触发compact功能进行释放空间。我的建议是,让leveldb自动进行compact,当超过你设置的红线值,才开始进行compact操作。之前,清理的时候,以红线值下再设置一个红线值2/3左右的位置,就开始清理key。

不过我认为如果数据不是很大,资源足够的话,不要去考虑这个问题,硬盘也不贵。硬盘和内存比起来,硬盘还是便宜的。

除非你是专门想为这个功能,对leveldb进行二次开发,形成一个这样的内存+SSD硬盘的一种高可用性缓存。否则没必要去考虑这个细节问题。真要觉得空间不够了,大可快速重启,并把原来所有的数据全清空。不过拉回数据,会要一点时间,但你这个缓存本身对即时性要求本身就没那么苛刻,所以,这种全删除清空的方法,可行。