当前位置: 首页 > news >正文

MySQL存储引擎InnoDB、MyRocks、NDB Cluster和未来架构

MySQL 的存储引擎是插件化的, MySQL 把 SQL 层和存储层解耦

SQL 解析 → 优化器 → 执行器 ↕ (插件化接口) 存储引擎层 (InnoDB / MyRocks / NDB / ...)

为MySQL表指定不同的存储引擎

CREATE TABLE my_table ( id INT PRIMARY KEY, data VARCHAR(255)) ENGINE=RocksDB;

一、InnoDB

InnoDB 的 B+Tree 架构就不太适合场景

  • 每天数十亿条日志写入,磁盘 IO 成为瓶颈;

  • 冷数据占据 80% 存储空间,成本居高不下;

  • 跨地域高可用集群,要求毫秒级故障切换;

当你的瓶颈明确落在存储层,且InnoDB 的 B+Tree 特性恰好是瓶颈的根源时,才值得考虑替代方案。

二、MyRocks

MyRocks 是 Facebook(现 Meta)开源的 MySQL 存储引擎,底层基于RocksDB——一个用 C++ 编写的嵌入式键值存储库,而 RocksDB 的底层数据结构是LSM-Tree(Log-Structured Merge-Tree)。LSM-Tree与 InnoDB 的 B+Tree 是完全不同的流派。

LSM-Tree 的核心思想是把随机写变成顺序写,InnoDB 使用 B+Tree,数据按主键顺序组织在页中。当发生写入时:·如果目标页不在内存中,需要随机读磁盘加载该页;·修改后,页变为"脏页",由后台刷盘线程随机写回磁盘

LSM-Tree 的思路

写入请求 ↓ MemTable (内存有序结构) ↓ (写满后,顺序刷盘) SST 文件 Level 0 (磁盘,不可变) ↓ (后台 Compaction 合并) SST 文件 Level 1 → Level 2 → ... → Level N

LSM-Tree与 InnoDB 的 B+Tree 的关键差异在于,所有写入先在内存中完成(MemTable),然后以顺序写的方式追加到磁盘上的 SST 文件;·磁盘上的数据分层存储,低层的数据通过后台 Compaction 逐步合并到高层。

MyRocks 的写入性能可以是 InnoDB 的 2~10 倍(具体取决于负载特征),因为它的磁盘 IO 几乎全是顺序的,MyRocks 的另一大杀手锏是存储空间效率.

由于 SST 文件是有序的、不可变的块,可以应用块级压缩算法(Snappy、ZSTD、LZ4 等)。在实际案例中,MyRocks 的数据压缩比通常能达到2:1 到 4:1,而 InnoDB 在默认配置下通常只有 1.5:1 左右的压缩效率。

Facebook 的真实数据:他们将部分 MySQL 实例从 InnoDB 迁移到 MyRocks 后,存储空间减少了50% 以上,同时写入延迟显著降低。对于管理 PB 级数据的团队,这意味着真金白银的成本节省。

没有免费的午餐。LSM-Tree 的代价是:

问题

原因

影响

读放大

一次查询可能需要查找多个 SST 文件

点查询比 InnoDB 慢(尤其无索引时)

写放大

Compaction 过程反复重写数据

持续大量写入时的后台开销

范围查询抖动

Compaction 期间可能阻塞读取

延迟的 P99 不稳定

事务能力

支持 MVCC 但实现不同于 InnoDB

复杂事务场景不如 InnoDB 成熟

MyRocks 场景

强烈推荐:

·高吞吐写入场景(IoT 时序数据、日志存储、用户行为埋点)

·数据量大、压缩需求高的场景(数据归档、冷热分层存储)

·写多读少的业务(写入:读取 > 5:1)

不太适合:

·大量随机点查询的 OLTP 核心业务

·依赖外键、全文索引的场景

·事务逻辑极复杂的金融系统

三、NDB Cluster:需求是高可用

NDB(Network DataBase)是 MySQL Cluster 的核心存储引擎,由 Oracle 维护。它与 InnoDB 和 MyRocks 的设计哲学完全不同——NDB 是一个分布式的、基于内存的、无共享(Shared-Nothing)架构。

内存优先 + 自动分片

NDB 的核心特征:

·数据主存储在内存中(也可配置磁盘持久化),读写延迟极低;

·自动水平分片:数据按主键哈希分布到多个数据节点(Data Node);

·同步复制:每个数据分片有多个副本,事务在所有副本上同步提交;

·无单点故障:管理节点、数据节点、SQL 节点均可冗余部署。

架构示意:

应用层 ↓ SQL 节点 (mysqld) × N ← 无状态,任意扩展 ↓ 数据节点 (ndbd) × M ← 数据分片 + 副本 ↓ (心跳 + 自动故障转移) 管理节点 (ndb_mgmd) ← 集群配置管理

四、五、适用引擎场景

你的场景

推荐引擎

核心原因

通用 OLTP 业务

InnoDB

最成熟、生态最好、没有短板

海量写入 + 存储成本敏感

MyRocks

高写入吞吐 + 高压缩比

电信级高可用 + 低延迟

NDB Cluster

内存架构 + 同步复制

全文检索需求

InnoDB (或上 Elasticsearch)

InnoDB 支持全文索引

时序/日志/埋点

MyRocks (或上 ClickHouse)

LSM-Tree 天然适合追加写

跨地域容灾

NDB 或 Galera

同步复制保证一致性

一个核心原则

InnoDB 不满足需求,在换引擎。

换引擎不是一句ALTER TABLE ... ENGINE=xxx就能搞定的。它涉及:

·功能兼容性验证(索引类型、SQL 语法、事务隔离级别);

·性能基准测试(不是你想象的负载,是你的实际负载);

·运维体系调整(备份恢复、监控告警、扩容策略);

·团队学习成本。

Facebook 从 InnoDB 切 MyRocks 花了数年时间,从内部验证到逐步灰度才完成迁移——这本身就是一个信号:换引擎是战略决策,不是临时优化

Amazon Aurora 和阿里云 PolarDB 已经证明了"存算分离"的可行性:计算节点只处理 SQL 逻辑,数据下沉到共享存储层。这种架构下,传统意义上由"引擎"承担的数据持久化工作被剥离,引擎层变得更轻、更专注于计算优化。

http://www.jsqmd.com/news/1140453/

相关文章:

  • SecHex-Spoofy完整指南:用户模式硬件标识篡改解决方案深度解析
  • m4s-converter:打破平台壁垒,让B站缓存视频重获自由播放权
  • 如何一次性获取B站视频的所有评论?这个开源工具让你轻松搞定数据分析
  • RTD1296PB vs RK3568 选型指南:从4大应用场景看22nm Cortex-A55的3项关键优势
  • 如何快速实现B站缓存视频转换:面向普通用户的完整指南
  • 终极GTA5安全防护指南:如何用YimMenu打造无崩溃游戏体验
  • 如何用Akebi-GC提升你的原神游戏体验:免费开源辅助工具完全指南
  • League Akari:英雄联盟玩家的智能游戏助手革命
  • 考霸刷题宝:五年级的暑假冲刺抢跑,决定了孩子小升初的起跑线
  • 生产事故复盘:一次由Binlog格式引发的数据不一致故障全记录
  • 【计算机毕业设计】基于Spring Boot 的疫苗接种平台设计及实现
  • 【2027最新】基于SpringBoot+Vue的大学生创新创业项目管理系统管理系统源码+MyBatis+MySQL
  • 构建模块化电竞工具链:League Akari架构深度解析与实战指南
  • 暗黑破坏神2存档编辑器的终极完整教程:从数据解析到可视化编辑
  • 告别繁琐手动下载:res-downloader 如何让你的资源收集效率提升 10 倍
  • 终极暗黑2存档编辑器:5分钟打造完美游戏角色的完整指南
  • KSZ9031 电源与 LED 设计避坑指南:FDT434P 替代选型与 640ns 脉冲解析
  • League Akari终极指南:5分钟掌握英雄联盟智能工具箱的完整使用教程
  • 线段树与树状数组的设计比较与应用的技术8
  • UNet 医学图像分割实战:PyTorch 2.0 实现 4 层编码器-解码器结构
  • 研三学术写作入门指南:拆解三重心理障碍,实现高效动笔
  • 5分钟搞定Windows安卓驱动:终极ADB Fastboot一键安装工具完整指南
  • Awesome-CGM:连续血糖监测数据标准化处理架构设计与技术实现
  • JDK Synchronizers 设计及工作原理与教程
  • UnityExplorer自由视角相机:3步解锁游戏世界的终极探索方案
  • GPT-5.6 正式发布:三大模型、价格腰斩、150万上下文——OpenAI 的全面反击
  • ForesightFlow:势引导流匹配实现具身智能动作策略优化
  • 六自由度飞行模拟平台:航空模拟训练与研发的核心技术方案
  • AzurLaneAutoScript技术方案:解决碧蓝航线重复操作问题的自动化解决方案
  • Universal Extractor 2:解决复杂文件格式提取难题的终极方案