OSDI’ 20 From WiscKey to Bourbon: A Learned Index for Log-Structured Merge Trees论文阅读
摘要
我们介绍BOURBON,一种利用机器学习提供快速查找的日志合并树(LSM)。我们将BOURBON的设计和实现建立在仔细分析LSM设计得出的经验基础上。BOURBON使用贪心分段线性回归来学习key的分布,以最小的计算量实现快速查找,并应用成本效益策略来决定何时值得学习。通过在合成和真实世界数据集上的一系列实验,我们发现,与最先进的LSM相比,BOURBON将查找性能提高了1.23-1.78倍。
挑战
学习型索引主要针对只读进行设计,而LSM tree对写更加友好。写入会导致学习索引的中断,因为现在必须更新从现有数据学习的模型以适应更改;因此系统必须重复地重新学习数据。
但其实学习型索引很适合LSM tree,因为虽然写操作修改LSM,但是树的大部分是不可变的,比如说LSM tree最底层的一些sstable是相对静态的。只需要学习一次就可以一直使用到这个sstable发烧compaction。
相关工作以及实验证明为什么LSM tree适合使用learned index
。。。
论文根据实验得到5条建立学习型索引的指导:
1.Favor learning files at lower levels.(喜欢在比较底层的文件中进行学习,因为较底层的sstable相对静态)
2.Wait before learning a file.(在实际创建学习索引前等待一会,因为有些sstable存活时间很短,没必要创建学习型索引)
3.Do not neglect files at higher levels.(不要忽略较高层的文件)
4.Be workload- and data-aware(了解工作量和数据。尽管大多数数据位于较底层,但如果工作负载不查找这些数据,学习这些级别将产生较少的好处)
5.Do not learn levels for write-heavy workloads.(不学习写繁重工作负载的级别)
Bourbon 设计
学习数据
数据可以在两个粒度上学习:单个sstable或level。
学习的目标是:在有序数据集中,预测数据的位置。为单个sstable学习就是预测数据在sstable中的偏移量,为level学习就是预测目标sstable以及其中的偏移量。
对模型的要求是,它在学习和查找过程中必须具有低开销。此外,我们希望模型的空间开销较小。我们发现分段线性回归模型(PLR)可以满足这些条件。论文通过贪心分段线性回归算法(Greedy-PLR algorithm)训练模型。
贪心分段线性回归算法的时间复杂度是O(n),只需要扫描一次数据。如果当前扫描的数据点无法加入之前的segment(指如果加入之后,误差会大于阈值),那么生成一个新的segment。算法最后会生成一系统的segment,每个segment包括适用的最小key,以及斜率,偏移量。
如果模型被训练好,查找是很快速的。首先通过二分查找找到包括查找key的segment,然后通过计算得到目标地址,如果目标位置不对,将会通过error bound范围内进行一个local search。
PLR的开销很小,每个segments有几十个字节。(a few tens of bytes for every line segment.)
支持不定长数据
Bourbon要求key是定长的,value可以不定长。
如果key不定长的话,可以采用padding技术使得所有key都是定长。然后采用key-value分离的技术,通过键值分离,BOURBON中的sstable只包含键和指向值的指针;值分别保存在值日志中
sstable学习和level学习
在上一节中的分析表明,在写繁重的工作负载下,sstable的生存时间比level更长,这暗示在sstable粒度上学习可能是最佳选择。
作者通过实验验证在不同工作负载情况下,哪种学习更有优势。
从实验结果可以看出,只有在只读情况下,基于level的学习效果要好于基于sstable的学习。考虑到BOURBON的目标是要实现高速查找,同时支持写操作,基于sstable的学习更加适合,所以BOURBON默认是基于sstable学习。