PostgreSQL VS MySQL's Storage EngineSss..

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
初次接触MySQL,简单的和PostgreSQL做一个对比,主要是存储引擎这块。(个人认为虽然MySQL支持存储引擎的热插拔,并且存储引擎五花八门,MySQL的说法是适应不同的应用场景,非常抱歉的是现在的应用都是比较综合型的,MySQL的大多数引擎已经不能适合现在的应用,而PostgreSQL应对现在的高并发业务非常适合,对比如下)
参考《High Performance MySQL》一书,书是2008年6月份出版的(因此可能以下的对比拿到现在会有些出入).
首先简单的介绍一下MySQL的架构,如图:
PostgreSQL VS MySQLs Storage EngineSss.. - 德哥@Digoal - The Heart,The World.
 
第一层主要负责处理连接请求,认证,安全。
第二层主要功能包括SQL解析,分析,优化器,查询缓存,以及所有的内建函数(如:date,times,math,encryption等),任何与跨存储引擎的功能都在这一层如存储过程,触发器,视图等。
第三层存储引擎层,负责数据存取,每个存储引擎有各自的特性,就好似UNIX操作系统的各种文件系统。Server 通过存储引擎API与存储引擎交互,API包括一些底层功能,如开始一个事务。存储引擎不干解析SQL的事情,引擎之间也不能相互通信(必须通过Server交换)。只负责相应Server端请求。这里有个例外,因为目前MySQL Server不处理FK关系,而InnoDB是支持FK的,因此在InnoDB中是存储引擎负责解析FK定义的。
存储引擎过多,一个是造成维护的麻烦,开发也会更加复杂,如事务型和非事务型表在同一个事务中的处理,还有引擎间表的互转移,权限和FK丢失等等一系列问题。
下面简单介绍一下MySQL的存储引擎,
查看存储引擎:
mysql> SHOW TABLE STATUS LIKE 'user' \G
*************************** 1. row ***************************
           Name: user
         Engine: MyISAM
     Row_format: Dynamic
           Rows: 6
 Avg_row_length: 59
    Data_length: 356
Max_data_length: 4294967295
   Index_length: 2048
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2002-01-24 18:07:17
    Update_time: 2002-01-24 21:56:29
     Check_time: NULL
      Collation: utf8_bin
       Checksum: NULL
 Create_options:
        Comment: Users and global privileges
1 row in set (0.00 sec)

1. MyISAM : 
在MySQL 5.5GA以前,MyISAM一直作为MySQL的默认引擎,拥有支持全文索引,压缩,空间函数等特性,缺点是不支持行锁和事务,因此并发能力极差(insert和select不冲突,其他的写都是排他锁)。
存储:
索引和数据分别存在.MYD和.MYI,文件具有平台无关性,如x86的文件放到PowerPC下使用。
MyISAM可以存储变长记录和固定长度记录,表的定义决定MySQL使用何种方式存放记录,MyISAM可以存放的最大记录数受到文件系统剩余空间
和单个文件大小上限的限制。在建表时可以使用MAX_ROWS 和AVG_ROW_LENGTH指定最大记录数和平均记录的SIZE。在MySQL5.0版本中,默认MyISAM表的限制是256TB,pointer占用6 bytes,早期版本默认pointers占用4bytes,因此表的现在是4GB.pointer最大可以占用8bytes
CREATE TABLE mytable (
   a    INTEGER  NOT NULL PRIMARY KEY,
   b    CHAR(18) NOT NULL
) MAX_ROWS = 1000000000 AVG_ROW_LENGTH = 32;
mysql> SHOW TABLE STATUS LIKE 'mytable' \G
*************************** 1. row ***************************
           Name: mytable
         Engine: MyISAM
     Row_format: Fixed
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 98784247807
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2002-02-24 17:36:57
    Update_time: 2002-02-24 17:36:57
     Check_time: NULL
 Create_options: max_rows=1000000000 avg_row_length=32
        Comment:
1 row in set (0.05 sec)
特征:
reader获得shared lock.writer获得exclusive锁,因此并发性极差。(insert和select 锁不冲突,这要再冲突的话MyISAM估计活不到现在)
自动修复 或 手工修复数据表
check table , repair table或者使用myisamchk 在数据库关闭时修复。(数据容易被破坏,要不整这玩意干啥)
支持BLOB,TEXT前500字符的索引,(据说是为了防止索引过大,所以整了个前500字符的限制,搞个函数索引不就完了么,整这限制干啥)
delay_key_write : 即索引的更新在内存中暂缓,降低IO开销,听起来不错,可惜的是如果出现故障,索引要完全重建。
compressed MyISAM table :  使用myisampack可以将myisam表压缩,以行为单位压缩,支持索引,遗憾的是压缩表是只读的。

2. MyISAM Merge引擎
类似视图,把多个MyISAM表合并成一个表对外。

3. InnoDB引擎
InnoDB是一个支持事务的引擎。使用MVCC来满足高并发的场景需求。
一个比较致命的问题是InnoDB的表建立在Clustered Index之上.因此所有的索引都会包含PK的内容,PK必须使用精简列来减少索引的空间占用。
任何改变InnoDB表结构的操作都将导致表和所有索引的重建。
InnoDB支持预加载数据,内存哈希索引,插入缓存等特性来提高性能。

4. 内存存储引擎
之前也被称为heap表,内存表重启后数据将丢失,常用于lookup和mapping表的场景。支持HASH索引。
缺点是不支持事务,使用表级锁,只支持定长的字段类型等。
MySQL在临时表的处理方面,如果没有超出参数指定值的话都将使用内存表来处理,超过将自动转换为MyISAM来处理。

5. 归档引擎
只支持insert和 select,不支持索引,支持行级压缩,支持插入缓存。由于不支持索引,所以在查询方面性能不行,但是MySQL提供了复制,并且可以在SLAVE端使用不同的引擎。这就使得SLAVE端可以选用支持索引的引擎来加快扫描速度。

6. CSV引擎
类似外部表,支持CSV格式的文件,不支持索引。

7. Federated引擎
用于操控远程数据库记录,在统计,JOIN等其他方面使用不是太好。一般用于PK来取数据,或INSERT来插入记录。类似DBLINK,但是功能较弱

8. 黑洞引擎
类似/dev/null,往里面写东西 啥都不干。一般用作数据复制的MASTER,由于MASTER啥都不干,没有IO,提高写入效率。

9. NDB Cluster引擎
一个shared nothing的存储引擎,包含数据节点,管理节点,SQL实例节点。每个数据节点存放部分数据,并且数据节点之间相互有对方的数据,确保数据至少有两份在不同的节点上。管理节点监控和配置SQL集群。由于SQL实例和数据节点之间通信频繁,低的延时对NDB 集群非常重要。

10. Falcon引擎
支持MVCC的事务引擎

11. solidDB引擎
支持MVCC的事务引擎,使用集群索引,支持FK,支持在线备份,

12. PBXT引擎
一般用作高并发的写场景,支持MVCC,支持事务,支持FK。使用非集群索引。

13. Maria存储引擎
开发中

PostgreSQL包含了几乎所有MySQL这些存储引擎的优点,支持MVCC,支持事务,支持所有事务隔离级别,支持全文索引,支持自动压缩,支持行锁,支持FK,支持CSV快速导入导出,支持外部表(GreenPlum),支持列存储(GreenPlum),支持资源控制(GreenPlum),支持shared nothing(Plproxy或PGXC,pg-grid,pgpool等都可以做),支持复制(支持master-master ,master-slave),支持写规则(比MYSQL黑洞引擎更加灵活),支持继承(比merge引擎更加灵活),使用非集群索引,支持手工修正数据表存储顺序(类似瞬态cluster索引),支持并行运算(GreenPlum)。等等
还有一些其他更加优异的优点:
如:
支持MMAP,将IO请求高的PAGE放入内存区域。更强大的是可以记录下状态,下次开启数据库直接将之加载至内存.
支持部分索引,索引变小,维护开销降低
支持在线备份,支持PITR
支持日志级复制,表级复制,流复制等等
支持非常强大的数据库DBLINK,甚至异构平台,如到oracle , mysql的 dblink
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 SQL 运维
TIDB和MySQL的区别
TIDB和MySQL的区别
162 0
|
6月前
|
SQL 关系型数据库 MySQL
将MySQL 数据迁移到 PostgreSQL
将MySQL 数据迁移到 PostgreSQL 可以采用以下步骤: 安装 PostgreSQL 数据库:首先,需要安装 PostgreSQL 数据库。可以从官方网站(https://www.postgresql.org/)下载最新版本的 PostgreSQL,并根据官方指南进行安装。 创建 PostgreSQL 数据库:在 PostgreSQL 中创建与 MySQL 数据库相对应的数据库。可以使用 pgAdmin 或命令行工具(如 psql)来创建数据库。例如,如果在 MySQL 中有一个名为 "mydb" 的数据库,那么可以在 PostgreSQL 中创建一个具有相同名称的数据库。 导
776 0
|
8月前
|
存储 SQL 缓存
【MySQL系列】- 常用MySQL存储引擎
【MySQL系列】- 常用MySQL存储引擎
845 0
|
6月前
|
NoSQL 关系型数据库 MySQL
阿里云RDS关系型数据库大全_MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等
阿里云RDS关系型数据库如MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等,NoSQL数据库如Redis、Tair、Lindorm和MongoDB
254 0
|
6月前
|
SQL 关系型数据库 MySQL
《PostgreSQL与MySQL:详细对比与分析》
《PostgreSQL与MySQL:详细对比与分析》
235 0
|
6月前
|
NoSQL 关系型数据库 MySQL
阿里云关系型数据库详细介绍MySQL/MariaDB/SQL Server/PolarDB/PostgreSQL等
阿里云关系型数据库详细介绍MySQL/MariaDB/SQL Server/PolarDB/PostgreSQL等,阿里云RDS关系型数据库如MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等
117 0
|
6月前
|
NoSQL Cloud Native 关系型数据库
阿里云RDS数据库_MySQL_SQL Server_MariaDB_PolarDB_PostgreSQL
阿里云RDS关系型数据库大全:MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等
110 0
|
9月前
|
存储 关系型数据库 MySQL
【MySQL】MySQL的存储引擎
【MySQL】MySQL的存储引擎
38 0
|
存储 缓存 容灾
MySQL学习笔记 03、MySQL存储引擎
MySQL学习笔记 03、MySQL存储引擎
MySQL学习笔记 03、MySQL存储引擎
|
存储 安全 关系型数据库
Mysql四种常见数据库引擎
四种mysql存储引擎 前言 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。
10844 0