存储与数据库的学习

4 阅读4分钟

数据库的本质与存储系统的概览

数据库和存储系统在后端服务中至关重要,是数据存储和查询的核心工具。本次内容将通过模拟案例、存储与数据库系统的概述、主流产品的解析,以及新技术的演进,详细介绍这些系统的本质与发展。

1. 存储与数据库简介

存储系统概览

  • 存储系统特点:存储系统层级结构从高速缓存到硬盘,并通过 RAID 技术实现数据冗余和可靠性。
  • 单机存储栈:包括单机的文件系统和 key-value 存储,侧重于文件 IO 和数据的高效读取写入。

数据库系统概览

  • 关系型数据库:例如 MySQLPostgreSQL,提供强一致性和事务支持,适用于结构化数据的复杂查询。
  • 非关系型数据库:例如 MongoDBRedis,适用于灵活的、半结构化或无结构的数据,提供高并发和快速访问。
  • 数据库 vs 经典存储:数据库系统在经典存储之上加入了索引、事务管理和查询语言等高级特性,使得数据的存储和使用更加智能和高效。

2. 数据库架构的主流产品

单机存储与数据库

  • 单机存储:包括 Linux 文件系统、单机 key-value 存储等。
  • 单机数据库产品:关系型数据库如 MySQLPostgreSQL,非关系型数据库如 Elasticsearch (ES)MongoDBRedis,它们各自具有不同的使用场景。

分布式存储与数据库

  • 分布式存储:如 HDFSCeph,为大规模数据提供高可用和扩展性。
  • 分布式数据库:解决单点性能瓶颈和数据高可靠性等挑战,能够在多节点上进行高效存储和查询。

3. 数据库核心技术解析

SQL 执行流程

  1. SQL 引擎:包括 词法分析 (Parser)优化器 (Optimizer)执行器 (Executor)

    • Parser:生成语法树并校验合法性。
    • Optimizer:基于规则或代价产生执行计划树。
    • Executor:基于计划树执行查询操作,常见模型为 火山模型
  2. 存储引擎:例如 InnoDB,负责底层数据管理。

    • Buffer Pool:内存中的缓存池,用于减少磁盘 IO。
    • Page:存储数据的基本单位,一般为 16KB。
    • B+ Tree:常用的索引结构,提升查询效率。
  3. 事务引擎:实现数据库的 ACID 特性。

    • 原子性:通过 Undo Log 实现,确保事务要么全部执行,要么全部回滚。
    • 隔离性:通过多版本并发控制 (MVCC) 实现,降低读写冲突。
    • 持久性:使用 Redo Log(WAL 日志)来保证事务提交后的持久化。
    • 一致性:通过业务逻辑和数据库约束确保。

4. 新技术演进

  • SPDK:通过用户态存储加速,减少内核态切换带来的性能开销。
  • 人工智能:AI 技术被应用于数据库调优,例如索引选择、查询优化等。
  • 新硬件加速:使用如 NVMe 的新型存储介质来显著提升数据访问速度。

5. 数据库的实践与思考

企业级实践

  • 高并发与高可用:以抖音红包雨案例为例,展示了如何通过 RDBMS 的 ACID 特性来保障数据一致性和高可靠性。
  • 负载与优化:字节跳动通过合理的缓存、索引及事务管理,应对大流量、突发流量带来的挑战。

课后思考

  1. 写入粒度与原子性:写入数据较大时(如 100MB),可能面临部分持久化的问题。为解决此问题,通常会使用 WAL 日志 以保证数据原子性,即使系统崩溃也能确保数据完整性。
  2. 减少数据拷贝:在应用程序到存储介质的过程中,多次数据拷贝带来性能开销。可通过 零拷贝 技术减少数据在链路上的重复传输,但需要权衡数据校验和安全性。
  3. 并发安全:除了加锁外,还可以通过 MVCC 或乐观锁来保证并发访问的安全性。
  4. 混合存储格式:结合行存和列存的优势,可以在性能优先的场景中设计出行列混合存储格式,根据查询类型灵活选择存储方式。