前言:最近在了解大数据实时分析技术druid,究其原理时发现用到了类LSM树思想以实现高效的数据插入,于是展开了对LSM的了解,了解之后感觉这东西虽然也并没有很特别,但在大数据、分布式架构中的应用还是非常有价值的,下面简单做下分享!
首先需要介绍下三种存储引擎:
众所周知,数据库的数据大多存储在磁盘上,而磁盘的访问相对内存的访问来说是一项很耗时的操作,对比如下。因此,提高数据库数据的查找速度的关键点之一便是尽量减少磁盘的访问次数,LSM正是基于这样的思考而设计。
更通俗的讲,LSM树原理就是把一棵大树拆分成N棵小树,它首先写入内存中,随着小树越来越大,内存中的小树会批量flush到磁盘中独立的文件中以提高IO性能,而为了提高读性能磁盘中的树定期可以做merge操作,合并成一棵大树。
前面提到HBase用到了LSM树思想,下面以其为例简单做下图解:
LSM思想中的两个要点:“拆分小树”、“合并大树”,在HBase中如何体现呢:
通过以上的分析,应该知道LSM树的由来了,LSM树的设计思想非常朴素:将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘,不过读取的时候稍微麻烦,需要合并各个磁盘中历史数据和内存中最近修改操作,可见写快读慢特点很明显,所以LSM-tree显然比较适合那些数据插入操作远多于数据更新删除操作与读操作的场景!
可能有人会觉得,读能力应该是大部分系统最应该保证的特性,所以用读换写似乎不是个好买卖,但别急,这么分析一下:内存的速度远超磁盘,甚至可达1000倍以上,读取的性能提升,主要还是依靠内存命中率而非磁盘读的次数,所以可以从这个角度去思考优化。
最后讲讲LSM Tree主要的读优化方式:
以上内容可能有理解不到位的地方,欢迎指正!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。