在leveldb上使用Riak处理数据过期/大量删除(释放空间)是否有效?

时间:2016-02-03 14:12:14

标签: riak leveldb

On Riak:

  1. 有没有办法处理数据过期或将旧数据转储到释放一些空间
  2. 效率高吗?
  3. 编辑:感谢Joe提供答案及其解决方法(回答)。 数据到期应该从一开始就要考虑,因为它需要一个带有map-reduce算法的附加索引。

2 个答案:

答案 0 :(得分:3)

简短回答:不,没有发布商提供的到期日。

更长的答案:在您希望过期的每个值的二级索引条目中包含写入时间,如Unix纪元之类的整数表示。在非高峰时间运行定期作业以执行范围2I查询以获得从0到(现在 - TTL)的任何条目。这可以用作map / reduce作业的输入来进行实际的删除。

至于恢复磁盘空间,leveldb非常慢。当一个值写入leveldb时,它从0级开始,然后当每个级别填充时,压缩将值移动到下一级别,因此最近最少写入的数据驻留在最低级别的磁盘上。删除值时,会将逻辑删除写入级别0,这会掩盖较低级别中的先前值,并且正常压缩发生时,逻辑删除将按任何其他值向下移动。在逻辑删除达到相同级别之前,不会回收旧值占用的磁盘空间。

答案 1 :(得分:1)

我编写了一个小c ++工具,它使用leveldb内部函数CompactRange来执行此任务。 Here you can read the article about this.
有了这个,我们可以删除整个桶(按键键)并擦除所有的墓碑。 50Gb的75Gb被释放!
不幸的是,这仅在leveldb用作后端时才有效。