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

存储引擎---数据库

数据库的存储引擎

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式

数据库系统管理的核心组件之一,负责数据的存储、检索和管理。它决定了数据如何存储在磁盘上,如何被索引,如何支持事务和并发操作等。不同的存储引擎有不同的设计目标和优化方向,适应于不同的应用场景,

存储引擎的核心功能:

  1. 数据存储

    • 定义数据的物理存储格式(如行存储、列存储)。

    • 管理数据在磁盘上的分布(如页、块、文件)。

  2. 数据检索

    • 提供高效的索引结构(如B+Tree、LSM-Tree)。

    • 支持快速查询和数据过滤。

  3. 事务管理

    • 实现ACID特性(原子性、一致性、隔离性、持久性)。

    • 提供事务的提交、回滚和隔离级别控制。

  4. 并发控制

    • 处理多用户并发访问(如锁机制、MVCC多版本并发控制)。

    • 避免数据竞争和一致性问题。

  5. 故障恢复

    • 通过日志(如Redo Log、Undo Log)实现崩溃恢复。

    • 保证数据的持久性和一致性。

二、存储引擎的分类

根据设计目标和适用场景,存储引擎可以分为以下几类:

1. 按存储格式
  • 行式存储引擎

    • 特点:将整行数据存储在一起,适合OLTP(在线事务处理)。

    • 代表:MySQL InnoDB、PostgreSQL。

  • 列式存储引擎

    • 特点:将每列数据存储在一起,适合OLAP(在线分析处理)。

    • 代表:ClickHouse、Apache Parquet。

2. 按索引结构
  • B+Tree引擎

    • 特点:支持高效的范围查询和点查询,适合读多写少场景。

    • 代表:MySQL InnoDB。

  • LSM-Tree引擎

    • 特点:写优化,适合写多读少场景。

    • 代表:RocksDB、Cassandra。

3. 按数据位置
  • 磁盘存储引擎

    • 特点:数据持久化到磁盘,适合大规模数据存储。

    • 代表:MySQL InnoDB、RocksDB。

  • 内存存储引擎

    • 特点:数据存储在内存中,适合高性能缓存和实时计算。

    • 代表:Redis、MemSQL。

三、常见存储引擎对比

以下是几种常见存储引擎的对比:

存储引擎代表数据库索引结构事务支持适用场景特点
InnoDBMySQLB+Tree支持OLTP支持ACID,行级锁,MVCC
MyISAMMySQLB+Tree不支持读密集型表级锁,不支持事务
RocksDBMySQL (MyRocks)LSM-Tree支持写密集型高写入吞吐,压缩率高
LevelDBGoogleLSM-Tree不支持嵌入式存储简单高效,适合小规模数据
TokuDBMySQLFractal Tree支持大数据量高压缩比,适合归档数据
AriaMariaDBB+Tree支持轻量级OLTP支持崩溃恢复,适合小型应用

四、存储引擎的工作原理

1. 数据存储
  • 页结构

    • 数据按页(Page)存储,通常大小为16KB。

    • 页中包含页头、行数据、页尾等信息。

  • 文件组织

    • 数据文件(如InnoDB的.ibd文件)由多个页组成。

    • 索引文件和数据文件可能分离或合并。

2. 索引结构
  • B+Tree

    • 非叶子节点存储键值,叶子节点存储数据。

    • 支持高效的范围查询和点查询。

  • LSM-Tree

    • 数据先写入内存(MemTable),再刷入磁盘(SSTable)。

    • 通过Compaction合并磁盘文件。

3. 事务与并发
  • Redo Log

    • 记录事务的物理修改,用于崩溃恢复。

  • Undo Log

    • 记录事务的逻辑修改,用于回滚和MVCC。

  • MVCC

    • 多版本并发控制,通过版本链实现非阻塞读。


五、存储引擎的选择

  1. OLTP场景

    • 需要高并发、强一致性。

    • 推荐:InnoDB、PostgreSQL。

  2. OLAP场景

    • 需要高性能分析查询。

    • 推荐:ClickHouse、Apache Parquet。

  3. 写密集型场景

    • 需要高写入吞吐。

    • 推荐:RocksDB、Cassandra。

  4. 缓存场景

    • 需要低延迟访问。

    • 推荐:Redis、Memcached。

如何使用数据库的存储引擎

如何查看数据库的存储引擎

show engines

建表时指定存储引擎

create table 表名{
字段1 字段1类型 [comment 字段1注释]
...
字段2 字段2类型 [comment 字段2注释]
}engine = innodb[comment 表注释]

数据库(以mysql为例),我查询建表语句(会默认存储引擎)一般默认为InnoDB

存储引擎的选择


InnoDB: 是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要
求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操
作,那么InnoDB存储引擎是比较合适的选择。
MyISAM : 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完
整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。
MEMORY:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY的缺陷就是
对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。

相关文章:

  • spring的核心配置
  • 什么是DNS?DNS解析的过程是怎样的?
  • Zookeeper分布式锁实现
  • rust学习笔记1-window安装开发环境
  • 上线了一个微软工具(免费),我独自开发,本篇有源码
  • python类方法名加前缀下划线
  • vue3的响应式的理解,与普通对象的区别(一)
  • 非docker安装open-webui连接ollama实现deepseek本地使用,集成其他openai模型,常见启动报错问题解决。
  • SpringAI-开启 Java AI 新纪元
  • Twitter 安卓客户端安装包下载
  • Linux——库函数
  • DeepSeek渣机部署编程用的模型,边缘设备部署模型
  • 【云安全】云原生- K8S etcd 未授权访问
  • Day1:强化学习基本概念
  • 2025最新Java面试题大全(整理版)2000+ 面试题附答案详解
  • 【linux】ubunbu切换到root
  • (四)Axure学习图文教程
  • Mybatis-扩展功能
  • 学习资料整合记录
  • 【Kubernetes】k8s 部署指南
  • 证监会副主席王建军被查
  • 庄语乐︱宋代历史是被“塑造”出来的吗?
  • 辽宁辽阳火灾3名伤者无生命危险
  • 原国家有色金属工业局副局长黄春萼逝世,享年86岁
  • 李在明涉嫌违反《公职选举法》案将于5月1日宣判
  • 阿里千问3系列发布并开源:称成本大幅下降,性能超越DeepSeek-R1