LSMT存储引擎 | 青训营笔记

145 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第5天

1 LSMT

长短期记忆网络(Long Short Term Memory networks,LSTM)是一种特殊的RNN网络,能够学习长依赖信息。LSTM由Hochreiter和Schmidhuber与1997年提出,此后被许多学者改进并普及。LSTM在很多工作中表现优异,并被广泛应用。

LSMT是专门设计用来避免长依赖问题的循环神经网络。它的优点之一就是可以很自然学习长距离的上下文信息。

image.png

ACID

事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。

原子性
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

一致性
数据库总是从一个一致性的状态转移到另一个一致性的状态。一致性确保了即使在执行第三、第四条语句之间时系统崩溃,前面执行的第一、第二条语句也不会生效,因为事务最终没有提交,所有事务中所作的修改也不会保存到数据库中。

隔离性
一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

持续性
指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

LSMT与B+ Tree

  • B+ Tree

image.png

  • LSMT 为了克服B+树的弱点,HBase引入了LSM树的概念,即Log-Structured Merge-Trees。

为了更好的说明LSM树的原理,下面举个比较极端的例子:

现在假设有1000个节点的随机key,对于磁盘来说,肯定是把这1000个节点顺序写入磁盘最快,但是这样一来,读就悲剧了,因为key在磁盘中完全无序,每次读取都要全扫描;

那么,为了让读性能尽量高,数据在磁盘中必须得有序,这就是B+树的原理,但是写就悲剧了,因为会产生大量的随机IO,磁盘寻道速度跟不上。

LSM树本质上就是在读写之间取得平衡,和B+树相比,它牺牲了部分读性能,用来大幅提高写性能

它的原理是把一颗大树拆分成N棵小树, 它首先写入到内存中(内存没有寻道速度的问题,随机写的性能得到大幅提升),在内存中构建一颗有序小树,随着小树越来越大,内存的小树会flush到磁盘上。当读时,由于不知道数据在哪棵小树上,因此必须遍历所有的小树,但在每颗小树内部数据是有序的。

image.png

LSMT模型算法复杂度

image.png

  • 写数据-Level

image.png

  • 写数据-Tier

image.png Tier策略降低了写放大,增加了读放大和空间放大,Level策略增加了写放大,降低了读和空间放大。