LSTM | 青训营笔记

94 阅读4分钟

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

  • LSMT与存储引擎介绍

    • LSMT:是通过Append-only Write+择机Compact来维护结构的索引树
    • 存储引擎

      • 计算层:主要负责SQL解析、查询优化、计划执行
      • 存储层(存储引擎)
      • ACID,在MySQL中全部强依赖于存储引擎

        • A(原子性):依赖Write-Ahead Log(WAL)/Redo Log
        • C(持久性):依赖数据库整体
        • I(独立性):依赖Snapshot/2PL(Phase Log)
        • D(隔离性):Flusher遵循Sync语义
      • 屏蔽IO细节提供更好的抽象
      • 提供统计信息与Predicate Push Down(简单理解为过滤能力)能力
      • 不掌控IO细节,让操作系统接管
  • LSMT与B+Tree

    • LSMT与B+Tree的异同

      • B+Tree

        • 数据插入是原地更新的
        • 在发生不平衡或节点容量达到阈值时,必须立即进行分裂来平衡
      • LSMT与B+Tree从高数据结构看,而这没有本质不同,可相互转换
      • 工程实践上用LSMT表示Append-only Write+Lazy Compact的索引树,B+Tree表示Inplace-Update和Instant Compact的索引树
    • 为什么要采用LSMT

      • HDD时代,顺序操作远快于随机操作
      • SSD时代,顺序写操作远快于随机写操作
      • 二者相同的地方是顺序写是对设备友好的操作,LSMT符合这一点,B+Tree依赖原地更新,导致随机写
  • LSMT模型算法

    • LSMT模型算法复杂度分析

      • T: size ratio,每层 LSMT 比上一层大多少,LO 大小为 1,则 L1 大小为T,L2 为T^2,以此类推
      • L: level num,LSMT 层数 B: 每个最小的 IO 单位能装载多少条记录
      • M: 每个 Bloom Filter 有多少 bits
      • N: 每个 BloomFilter 生成时用了多少条 Key
      • S:区间查询的记录数量
    • level

      • Write

        • 每条记录抵达最底层需要经过 L次 Compact,每次 Compact Ln 的一个小 SST 和 Ln+1 的一个大 SST。
        • 设小 SST 的大小为 1,那么大 SST 的大小则为 T,合并开销是 1+T,换言之将1单位的 Ln 的 SST 推到 Ln+1 要耗费 1+T 的 IO ,单次 Compact 写放大为 工。每条记录的写入成本为 1/B 次最小单位 IO。
        • O(Write Level) = LT1/B=T*L/B
      • Point Lookup

        • 对于每条 Key,最多有 L个重叠的区间。
        • 每个区间都有 BloomFiter,失效率为 e^(-M/N),只有当 BloomFlter 失效时才会访问下一层。
        • O(PointLookup_Level) = L * e^(-M/N)
        • 注意,这里不乘 1/B 系数的原因是写入可以批量提交拉低成本,但是读取的时候必须对齐到最小读取单元尺寸。
    • Tier

      • Write

        • 每条记录抵达最底层前同样要经过 L次 Compact,每次 Compact Ln 中T个相同尺寸的 SST放到 Ln+1。
        • 设 SST 大小为 1,那么 T个 SST Compact 的合并开销是T,换言之将T单位的 Ln 的 SST 推到 Ln+1 要耗费T的 IO,单次 Compact 的写放大为T/T=1。每条记录的写入成本为 1/B 次最小单位 IO。
        • O(Write Tier) = L 11/B =L/B
      • Point Lookup\

        • 对于每条 Key,有L层。
        • 每层最多有 工个重叠区间的 SST,对于整个 SST 来说有T*L 个可能命中的 SST,乘上 BloomFilter 的失效率,e^(-M/N),可得结果。
        • O(PointLookup_Tier) = LTe^(-M/N) = TLe^(-M/N)
        • 注意,这里不乘 1/B 系数的原因是写入可以批量提交拉低成本,但是读取的时候必须对齐到最小读取单元尺寸。
  • 课外:

    • SuperVersion:持有MemTable/ImmemTable/SST这三部分数据并提供快照功能的组件
    • BloomFliter:判断一个元素在不在集合内
    • Level策略:每一层不允许有SST的Key区间重合
    • Tier策略:每层允许有多个区间重合的SST
  • 总结:在本节课我们学习了LSTM用来维护结构的索引树与在学校学习的b+树作为了一个区别,老师为我们讲解具体讲解的他们之间的异同,以及我们选取LSTM的理由,并具体讲解了LSTM模型算法的相关细节,但是对于那个复杂度我认为还是比较复杂的,我需要再次多次观看以及去理解他们之间的关系。