checkTTL

如果一个文件的 endTime < timeLowerBound ,则此文件已经过期,删除此文件,

其中 timeLowerBound = System.currentTimeMillis() - dataTTL, dataTTL 是用户使用命名设置的数据最长生效时间。

注:checkTTL 功能只会删除整个文件。

乱序合并

乱序合并过程中会删除此次乱序合并前该文件所有被标记在 mods 的数据,

但如果在合并过程中有新的 delete 操作,则会生成新的 mods 文件。

顺序合并

顺序合并过程中也会删除此次顺序合并前该文件所有被标记为mods的数据,

但如果在合并过程中有新的 delete 操作,则会生成新的 mods 文件。

文件需要被清理的部分

delete

delete 操作会对相应的文件生成 mods 文件,

合并操作会在合并时将这些标记为 mods 的数据删除,

但是如果没有开启合并或者该文件一直没有被合并到,则 mods 标记的数据不会被真正删除。

乱序合并

为了加快合并速度,当把合并完 chunk 写入文件时,

不会将之前一些已经失效的chunk删除,而是会直接在文件后面 append 已经完成合并的 chunk

这样如果后面的数据越来越多地合并到这个文件,会不断合并一个chunk,并直接append到文件后面,导致文件无效的chunk越来越多。

对于这种情况,后面需要加如下处理方式:

定时扫所有顺序文件列表,如果发现一个文件的 invalidChunkNum 过多,则解文件,并一个点一个点重写这个文件。


  • No labels