dr. bradley kuzmaul的结果是(页13):
从结果来看:
不过,ramp这块的分析有个小问题:
lsm(leveled)在实现上(比如leveldb),可以通过meta-info打"锚点"的方式,把ramp(range)降低甚至做到跟ft一样,如果是point queries的ramp,则可以通过bloom filter来降低。
具体的推导过程请阅读原作,下面简单分析下ft的ramp为啥比lsm的要低。
ft的读方式比较"特殊",由于每个节点都有个message buffer,当有读请求时,需要把inner node的message buffer数据(部分)推(apply)到leaf node,最后只在leaf node上做二分查找,所以ramp基本就是树的高度。
另外,在数据流向上(compaction过程中数据走向),lsm强调"level"(横向),从level-l根据规则选取部分数据merge到level-(l+1),如果选取数据的策略不好,会抢占磁盘带宽,容易引起性能抖动,而ft强调"root-to-leaf"(纵向),数据从root有序的逐层merge到leaf节点,每条数据的merge路径是很明确的。