您的位置:首页 > 博客中心 > 数据库 >

tair源码分析——leveldb新增的CompactRangeSelfLevel过程

时间:2022-03-13 22:33

tair是一个分布式KV存储引擎,当新增机器或者有机器down掉的时候,tair的dataserver会根据ConfigServer生成的新的对照表进行数据的迁移和清理。在数据清理的过程中就用到了在tair中新增的Compaction方式——CompactRangeSelfLevel,顾名思义,这个CompactRangeSelfLevel就是对自己所在(指定)的Level进行一定Key范围的Compaction然后将生成的输出文件也写入到自己所在的Level而不是父层(L + 1)。下面我们来对这个CompactRangeSelfLevel进行分析。

// 判断这个key是否在需要回收的bucket中,如果是就返回true,那么Compaction的时候直接删除(即回收掉)
  virtual bool ShouldDrop(const char* key, int64_t sequence, uint32_t now = 0) const { return false;}
  // 根据expire_time判断这个key是否已经过期,如过期则返回true
  virtual bool ShouldDropMaybe(const char* key, int64_t sequence, uint32_t now = 0) const { return false;}
  // start_key和key是否依旧属于同一个bucket,是的放回false,否则返回true
  virtual bool ShouldStopBefore(const Slice& start_key, const Slice& key) const { return false;}

有了这三个函数以后tair的ldb引擎就可以在Compaction的时候对key进行回收和判断是否写入同一个SSTable中,比如最直接的Compaction的时候如果ShouldDrop返回true那么直接标记这个key为drop不写入到新的SSTable中;而ShouldStopBefore则被用在是否生成新的SSTable文件,如果返回true则结束当前文件的写入生成下一个SSTable,这样就可以将不同的bucket写入到不同的SSTable文件中了。

tair源码分析——leveldb新增的CompactRangeSelfLevel过程,布布扣,bubuko.com

热门排行

今日推荐

热门手游