LSMT 存储引擎浅析 | 青训营笔记

64 阅读2分钟

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

概述

  1. 介绍 LSMT 与存储引擎
  2. 分析 LSMT 存储引擎的优势与实现
  3. LSMT 模型理论分析
  4. LSMT 存储引擎调优以及案例介绍

数据先写入 MemTable,MemTable 是内存中的索引可以用 SkipList / B+Tree 等数据结构实现。当 MemTable 写到一定阈值后,冻结,成为 ImmemTable,任何修改只会作用于 MemTable,所以 ImmemTable 可以被转交给 Flush 线程进行写盘操作而不用担心并发问题。Flush 线程收到 ImmemTable ,在真正执行写盘前,会进一步从 ImmemTable 生成 SST(Sorted String Table),其实也就是存储在硬盘上的索引,逻辑上和 ImmemTable 无异。

新生成的 SST 会存放于 L0(Layer 0),除了 L0 以外根据配置可以一直有 Ln。SST 每 Compact 一次,就会将 Compact 产物放入下一层。Compact 可以大致理解为 Merge Sort,就是将多个 SST 去掉无效和重复的条目并合并生成新的 SST 的过程。Compact 策略主要分为 Level 和 Tier 两种,会在课中进行更详细的描述。

LSMT 存储引擎的优势

  1. 顺序写模型对于 SSD 设备更友好
  2. SST 不可修改的特性使得其能使用更加紧凑的数据排列和加上压缩
  3. 后台延迟 Compact 能更好利用 CPU 多核处理能力,降低前台请求延迟\

相较于HashTable,LSMT 存储引擎是有序索引抽象,HashTable 是无序索引抽象。无序索引是有序索引的真子集。LSMT 相比于 HashTable 更加通用。HashTable 能处理点查请求,LSMT 也能,但 LSMT 能处理 TopK 请求,但 HashTable 就不行了。为了避免维护多套存储引擎,绝大多数数据库都直接采用一套有序的存储引擎而非针对点查和顺序读取分别维护两个引擎。

参考链接:juejin.cn/post/712795… 来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。