随着时间的推移,tablet会积累许多DiskRowSets,并且会在行更新时累积很多增量重做(REDO)文件。当插入一个关键字时,为了强制执行主关键字唯一性,Kudu会针对RowSets查询一组布隆过滤器,来找到可能包含该关键字的Rowset。越多的布隆过滤器检查及随后的DiskRowSet搜索,写入操作就会变得越慢。随着更多DiskRowSets的积累,必须采取措施确保写入性能不会下降。此外,随着每个RowSet累积更多的重做(REDO)增量文件,为了将基础数据转换为行的最新版本,需要执行更多的工作扫描。这意味着如果不采取任何行动,读取性能也会随时间而下降。Kudu可以通过执行压缩功能来处理这些问题,其中包括三种类型的压缩:
-
微小增量压缩(Minor delta compaction)
可以在不会触及基础数据的前提下,通过将增量文件合并在一起以减少文件的数量。其结果是读取操作必须寻求更少的增量文件来生成当前版本的行。
-
重大增量压缩(Major delta compaction)
将重做(REDO)记录迁移到撤销(UNDO)记录中,并更新基础数据。考虑到大多数读取将读取最近的快照(从基础数据的时间向前计算),并且基础数据将以最有效的方式进行存储(被编码和压缩),最小化重做(REDO)记录存储的数量可以获得更有效的读取。在重大压缩期间,行的重做(REDO)记录可以合并到基础数据中,并替换为包含先前版本行的等效的撤销(UNDO)记录集。可以对列的任何子集执行重大压缩,因此如果某列与其他列相比收到更多的更新,就可以在单个列上执行压缩,通过避免重写未更改的数据以减少重大增量压缩的I / O。
-
行集合压缩(RowSet compaction)
可以将范围内重叠的行集合(RowSets)组合在一起,从而生成更少的行集合(RowSets),从而加快写入速度。