LSM实现热数据读写和range查询加速
LSM-tree 上的读路径,从出生就带着镣铐。因为 CoW 的使用,读一条记录实际上需要把这条记录所有的增量碎片都找到。因为横跨内存和磁盘两种介质和有层次化的存储,这些碎片可能藏在各种犄角旮旯里面。更惨的是,如果是读一个范围内的记录,俗称 range scan,因为 LSM-tree 的每一层的 key range 是交叠的,那么一个 range 内的数据就很有可能会落在所有的层次上,为了把他们都找到,我们就需要每层都去读,这个工作量也不小。
为了解决这个问题,目前的 LSM-tree 引擎把各种经典技术都用上了:各种索引、各种 cache。但是为了提高索引和 cache 的效率,让他们一直发挥比较好的作用,难度不小。以富贵论坛 cache 为例,X-Engine 中使用了两种经典的 cache,一种是 row cache,缓存记录级别的热数据,一种是 block cache,缓存数据块级别的热数据。Row cache 可以加速点查询,block cache 可以加速 range scan,一切看上去都是很完美的芭蕾舞。然而,当 compaction 被大王叫来巡山的时候,危险就发生了。因为 compaction 会重新组织数据块里面的内容,干掉一些老的 block,生成一些新的 block,传统的 cache 替换策略对老的 block 做的访问统计会失效,而新的 block 它不认识,没统计信息。此外,compaction 还会移动数据。这两点加起来,只要 compaction 巡了一次山,cache 里面缓存的记录就有很大可能出现大面积失效,导致原本可以命中 cache 的查询,不得不去访问磁盘,造成严重的延迟尖刺。
(福利推荐:阿里云、腾讯云、华为云服务器最新限时优惠活动,云服务器1核2G仅88元/年、2核4G仅698元/3年,点击这里立即抢购>>>)
你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧:
相关文章
- 新特性解读 | MySQL 8.0.31 导入直方图存量数据
- 【Qbot】4.连接mysql/限制使用次数
- MySQL 为什么要使用索引及索引创建的原则有哪些?
- MySQL 6种索引数据结构详解:BTree、B+Tree、红黑树、平衡二叉树、二叉树、Hash
- MySQL 聚集索引(InnoDB)和 非聚集索引(MyISAM) 精讲~两张图彻底搞懂
- MySQL 事务隔离级别 理论+实战分析
- MySQL MVCC 多版本并发控制机制 工作原理
- MySQL : 彻底搞懂一条SQL的执行过程
- 彻底搞懂MySQL主从复制工作原理 2+3+3+4
- MySQL Explain 执行计划详解、写高效SQL、灵活使用索引(实战)
- MySQL 数据库 Schema 设计的性能优化①:高效的模型设计
- 图算法、图数据库在风控场景的应用
- 客快物流大数据项目(九十一):ClickHouse的数据库引擎
- 零基础学SQL注入必练靶场之SQLiLabs(搭建+打靶)
- aws生产实践-33:aurora查看触发死锁的sql
- C/C++ Qt 数据库与Chart实现历史数据展示
- C/C++ Qt 数据库SqlRelationalTable关联表
- C/C++ Qt 数据库与SqlTableModel组件应用
- C/C++ Qt 数据库与TableView多组件联动
- C/C++ Qt 数据库与ComBox多级联动