题当我们估计写放大时,我们通常通过假设密钥在每个级别内均匀分布来简化问题。实际上,即使用户更新在整个密钥范围内均匀分布,情况也并非如此。例如,当我们将一个级别的文件压缩到下一个级别时,它将创建一个孔。随着时间的流逝,传入的压缩将把数据填充到孔中,但是密度仍然会暂时降低。选择具有最不密集填充的键的文件将文件升级到下一级别的成本更高,因为在下一级别将有更多重叠的文件,因此我们需要重写更多的数据。例如,假设一个文件为100MB,如果一个L2文件与8个L3文件重叠,则我们需要重写大约800MB的数据才能将该文件保存到L3。如果该文件与12个L3文件重叠,则我们需要重写大约1200MB的空间,以使L2中的文件大小相同。它使用50%以上的写入。 (此分析忽略了下一级的密钥密度,因为该范围覆盖了该级别中的N次文件,因此一个空洞仅影响写入放大1 / N)。来自RocksDB by Facebook。
如果我们总是选择人口最稠密的SST,则较低级别的SST密度将越来越小。由于较低级别的SST密度非常小,因此会有更多的SST重叠。那么他们如何解决这个问题呢?