主页 > 人工智能  > 

存储引擎---数据库

存储引擎---数据库
数据库的存储引擎

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

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

存储引擎的核心功能:

数据存储:

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

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

数据检索:

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

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

事务管理:

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

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

并发控制:

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

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

故障恢复:

通过日志(如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,行级锁,MVCCMyISAMMySQLB+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:

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


五、存储引擎的选择

OLTP场景:

需要高并发、强一致性。

推荐:InnoDB、PostgreSQL。

OLAP场景:

需要高性能分析查询。

推荐:ClickHouse、Apache Parquet。

写密集型场景:

需要高写入吞吐。

推荐:RocksDB、Cassandra。

缓存场景:

需要低延迟访问。

推荐: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的缺陷就是 对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。

标签:

存储引擎---数据库由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“存储引擎---数据库