数据库的本质与存储系统的概览
数据库和存储系统在后端服务中至关重要,是数据存储和查询的核心工具。本次内容将通过模拟案例、存储与数据库系统的概述、主流产品的解析,以及新技术的演进,详细介绍这些系统的本质与发展。
1. 存储与数据库简介
存储系统概览
- 存储系统特点:存储系统层级结构从高速缓存到硬盘,并通过 RAID 技术实现数据冗余和可靠性。
- 单机存储栈:包括单机的文件系统和 key-value 存储,侧重于文件 IO 和数据的高效读取写入。
数据库系统概览
- 关系型数据库:例如 MySQL 和 PostgreSQL,提供强一致性和事务支持,适用于结构化数据的复杂查询。
- 非关系型数据库:例如 MongoDB 和 Redis,适用于灵活的、半结构化或无结构的数据,提供高并发和快速访问。
- 数据库 vs 经典存储:数据库系统在经典存储之上加入了索引、事务管理和查询语言等高级特性,使得数据的存储和使用更加智能和高效。
2. 数据库架构的主流产品
单机存储与数据库
- 单机存储:包括 Linux 文件系统、单机 key-value 存储等。
- 单机数据库产品:关系型数据库如 MySQL 和 PostgreSQL,非关系型数据库如 Elasticsearch (ES)、MongoDB、Redis,它们各自具有不同的使用场景。
分布式存储与数据库
- 分布式存储:如 HDFS 和 Ceph,为大规模数据提供高可用和扩展性。
- 分布式数据库:解决单点性能瓶颈和数据高可靠性等挑战,能够在多节点上进行高效存储和查询。
3. 数据库核心技术解析
SQL 执行流程
-
SQL 引擎:包括 词法分析 (Parser)、优化器 (Optimizer)、执行器 (Executor)。
- Parser:生成语法树并校验合法性。
- Optimizer:基于规则或代价产生执行计划树。
- Executor:基于计划树执行查询操作,常见模型为 火山模型。
-
存储引擎:例如 InnoDB,负责底层数据管理。
- Buffer Pool:内存中的缓存池,用于减少磁盘 IO。
- Page:存储数据的基本单位,一般为 16KB。
- B+ Tree:常用的索引结构,提升查询效率。
-
事务引擎:实现数据库的 ACID 特性。
- 原子性:通过 Undo Log 实现,确保事务要么全部执行,要么全部回滚。
- 隔离性:通过多版本并发控制 (MVCC) 实现,降低读写冲突。
- 持久性:使用 Redo Log(WAL 日志)来保证事务提交后的持久化。
- 一致性:通过业务逻辑和数据库约束确保。
4. 新技术演进
- SPDK:通过用户态存储加速,减少内核态切换带来的性能开销。
- 人工智能:AI 技术被应用于数据库调优,例如索引选择、查询优化等。
- 新硬件加速:使用如 NVMe 的新型存储介质来显著提升数据访问速度。
5. 数据库的实践与思考
企业级实践
- 高并发与高可用:以抖音红包雨案例为例,展示了如何通过 RDBMS 的 ACID 特性来保障数据一致性和高可靠性。
- 负载与优化:字节跳动通过合理的缓存、索引及事务管理,应对大流量、突发流量带来的挑战。
课后思考
- 写入粒度与原子性:写入数据较大时(如 100MB),可能面临部分持久化的问题。为解决此问题,通常会使用 WAL 日志 以保证数据原子性,即使系统崩溃也能确保数据完整性。
- 减少数据拷贝:在应用程序到存储介质的过程中,多次数据拷贝带来性能开销。可通过 零拷贝 技术减少数据在链路上的重复传输,但需要权衡数据校验和安全性。
- 并发安全:除了加锁外,还可以通过 MVCC 或乐观锁来保证并发访问的安全性。
- 混合存储格式:结合行存和列存的优势,可以在性能优先的场景中设计出行列混合存储格式,根据查询类型灵活选择存储方式。