作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL**(本章节)**
PostgreSQL
MongoDB
Redis
Etcd
1.什么是数据库引擎
数据库引擎(更准确的叫法是存储引擎)是 MySQL 的一个关键特性,它决定了数据如何被存储、索引以及支持哪些功能。
你可以将存储引擎理解为数据库的“大脑”或“心脏”,它负责:
-
数据存储格式:数据如何写在磁盘上。
-
索引技术:如何创建索引以加速查询(如 B-Tree, Hash, R-Tree)。
-
锁的粒度:如何处理并发访问(如表锁、行锁)。
-
事务支持:是否支持 ACID 事务。
-
外键:是否支持外键约束。
MySQL 的强大之处在于它提供了多种存储引擎,你可以针对不同的表,根据其用途选择最合适的引擎。
2.MyISAM介绍
这是 MySQL 5.5 之前的默认引擎,现在已不推荐在新项目中使用,但在一些旧系统中仍能看到。
-
核心特性:
-
❌ 不支持事务:无法回滚操作。
-
❌ 不支持外键。
-
表级锁:任何写操作(INSERT, UPDATE, DELETE)都会锁定整个表。在读多写少的场景下很快,但在有大量写操作或混合读写时,并发性能极差。
-
全文索引:在早期版本中,它是唯一支持全文索引(FULLTEXT)的引擎。
-
高速读:如果表主要是用于读(如 SELECT COUNT(*)),且不要求事务,它的速度可能非常快。
-
适用场景:
-
只读或读多写极少的数据。
-
不需要事务的简单应用(如博客文章、新闻归档)。
-
数据仓库中的只读维度表(但现在有更好的选择)。
-
文件结构:
-
.frm:存储表结构。 -
.MYD(MYData):存储数据。 -
.MYI(MYIndex):存储索引。#这里就是后面创建的MyISAM表 -rw-r----- 1 mysql mysql 8672 Sep 16 21:35 myisam_table.frm -rw-r----- 1 mysql mysql 0 Sep 16 21:35 myisam_table.MYD -rw-r----- 1 mysql mysql 1024 Sep 16 21:35 myisam_table.MYI
3. Memory(内存引擎)
-
核心特性:
-
所有数据存储在内存中:速度极快。
-
表级锁:并发性能一般。
-
不支持 TEXT/BLOB 类型:因为内存空间有限。
-
数据非持久化:服务器重启或崩溃后,表中的所有数据都会丢失。表结构会保留。
-
适用场景:
-
用于临时表、缓存或会话管理。
-
存放频繁访问的、非关键的、可以丢失的只读数据。
-
注意:Redis、Memcached 等专业内存数据库通常是更好的选择。
4. Archive(归档引擎)
-
核心特性:
-
专为高效存储大量很少被访问的归档或审计数据而设计。
-
只支持 INSERT 和 SELECT,不支持 DELETE, UPDATE 和索引(支持行插入的自动压缩,但不支持索引)。
-
数据插入时会进行压缩,磁盘 I/O 非常少,存储空间很小。
-
适用场景:
-
日志记录、审计数据、历史数据归档。
5. CSV(CSV引擎)
-
核心特性:
-
数据以纯文本格式的 CSV 文件存储在服务器上。
-
不支持索引。
-
可以直接用文本编辑器打开查看。
-
适用场景:
-
快速导出数据为 CSV 格式。
-
与外部系统交换数据。
6.MyISAM表创建
必须单独指定引擎,否则他会采用默认的引擎,由于我们这里的版本5.7,所以默认是InnoDB。
-- 创建一个使用 MyISAM 存储引擎的表
CREATE TABLE myisam_table (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) ENGINE=MyISAM;
当然我们通过这个小节只是让你对数据引擎有一个基本的认识,以及历史数据库里面可能会存在的数据引擎有一个认识,新的环境里面基本不会在使用他。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。