LSM 算法的原理是什么

LSM 的原理已经有很多答主写得非常详细了。目前,在实践上,RocksDB 是 LSM 的典型代表乃至事实标准,围绕 RocksDB 的各种系统与应用,已经形成了一个巨大的生态:

  • · MySQL 的 MyRocks 存储引擎
  • · TiDB/CockroachDB
  • · MongoDB 的 MongoRocks
  • · 各种外存版 Redis: ssdb, pika,  kvrocks, tendis, tair....
  • · 举不胜数的各种其他系统……

然而,RocksDB 其实是有很多缺陷的,可改进的空间非常大, ToplingDB  就是一个脱胎换骨的 RocksDB:

  1. 兼容性:与 RocksDB API 100% 兼容
    1. 现有使用 RocksDB 的代码不用任何修改,就可以直接使用 ToplingDB
    2. 如果要完全迁移到 ToplingDB,只需要 修改 DB Open/Close 相关的 代码
  2. 增加了很多改进,修改了一些 bug,并且 已向上游 RocksDB 提交了几十个 Pull Request
  3. 旁路插件化 SidePlugin:ToplingDB 的骨架与灵魂
    1. 配置方式
      1. RocksDB:需要通过代码来控制复杂的配置项
      2. ToplingDB:所有配置项都使用 json/yaml 来控制,无需修改代码
    2. 插件机制,不管是内置组件还是第三方组件
      1. RocksDB 需要在代码中引入对具体组件代码( 头文件)的依赖
      2. ToplingDB 无需引入这种依赖,甚至可以透明地 通过动态库使用外来组件
    3. ToplingDB 内置 Web Service,实现 诸多可视化及引擎操纵功能
      1. 在线 查看配置参数、 LSM 树形态SST 文件等等,可观测实时变化……
      2. 在线修改配置参数,不仅仅是修改 DBOptions/CFOptions,所有的组件参数均可修改
      3. 可以通过 http 导出 Prometheus 格式的 metrics,再用 grafana 展示
      4. 在线执行 Compact/Flush ……
  4. Topling 特有的性能组件,通过 SidePlugin 提供,使用 json/ yaml 配置,用户代码无需改动
    1. 更快的 MemTab单线程快 8 倍、多线程线性 scale、内存消耗更低
      1. WriteOnly 负载中,逆天到比 RocksDB 的 VectorMemTab 还要快
    2. 更快的 SST:不压缩、速度快、无需 BlockCache、毫秒级加载,一般用于 L0 & L1
    3. 压缩的 SST:高压缩、速度快、无需 BlockCache、毫秒级加载,一般用于 L2 及更下层
      1. 使用的是 可检索内存压缩算法,压缩率更高,数据在内存中的形态是压缩的,直接在压缩的数据上执行搜索和访问
      2. 无需 BlockCache,内存利用率提升 5 倍以上,并且大幅降低 CPU 消耗
    4. 分布式 Compact,将 Compact 转移到专用的 Compact 服务器集群
      1. 彻底解决 RocksDB 的 Compact 瓶颈问题
      2. 压缩的 SST 结合使用,大幅减小 DB 结点的 CPU 和内存消耗,以一当十
      3. 只需要修改 json/ yaml配置,不需要修改代码

Todis(外存版 Redis) 使用 ToplingDB 存储引擎,是真正的云原生 DB,充分发挥云平台弹性伸缩优势,性能优异, 价格低廉,人性化( 监控& 观测)功能丰富

请使用浏览器的分享功能分享到微信等