lsm-tree

lsm思想非常朴素,就是将对数据的更改hold在内存中,达到指定的threadhold后将该批更改批量写入到磁盘,在批量写入的过程中跟已经存在的数据做rollling merge。

拿update举个例子:
比如有1000万行数据,现在希望update table.a set addr=’new add’ where pk = ‘833’,

如果使用B-Tree类似的结构操作,就需要:
1、找到该条记录所在的page,
2、load page到内存(如果恰好该page已经在内存中,则省略该步)
3、如果page之前被修改过,则先flush page to disk
4、修改数据

上面的动作平均来说有两次disk I/O
如果采用lsm-tree类似结果,则:
1、将需要修改的数据直接写入内存,可见这里是没有disk I/O的。
这样的话读的时候就飞机了,需要merge disk上的数据和memory中的修改数据,这显然降低了读的性能。

所以选择lsm-tree有个假设,就是写入远大于读取的时候,lsm是很好的选择。更准确的描述是,优化了写,没有显著降低读。
因为大部分的时候我们都是要求读最新的数据,而最新的数据可能还在内存里面,即使不在内存里面,只要不是那些更新特别频繁的数据,其I/O次数也是有限的。而读可以采用缓存的方式进行优化。

综上所述:
lsm-tree比较适合的应用场景是:insert数据量大,读数据量和update数据量不高且读一般针对最新数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值