引言

由于之前的工作对Mysql应用不多,感觉需要补充下这方面的知识。
对MySQL的了解只是简单的CRUD操作,甚至对于case when的用法以及Date类型和Timestamp类型的区别都忘了,
因此开启这个读书笔记系列。

Mysql数据库的体系结构

MySQL数据库由以下几部分组成:

  • 连接池组件(Connection Pool)。
  • 管理服务和工具组件(Management Services&Utilities)。
  • SQL接口组件(SQL Interface)。
  • 查询分析器组件(Parser)。
  • 优化器组件(Optimizer)。
  • 缓冲组件(Caches&Buffers)。
  • 插件式存储引擎(Pluggable Storage Engines)。
  • 物理文件(File system)

存储引擎

其中存储引擎主要有:InnoDB、MyISAM等

InnoDB存储引擎:支持事务。其设计目标主要面向OLTP(见下一小节的分析)的应用。
其特点是行锁设计、支持外键,并支持类似
Oracle的非锁定读,即默认读取操作不会产生锁。从MySQL 5.5.8版
本开始是默认的存储引擎。

对于表中数据的存储,InnoDB存储引擎采用了聚集(clustered)
的方式,每张表都是按主键的顺序进行存储的,如果没有显式地在表
定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的
ROWID,并以此作为主键。

MyISAM存储引擎:不支持事务、表锁设计、支持全文索引。主
要面向一些OLAP数据库应用。在MySQL 5.5.8版本之前是默认的存储引擎。
此外,MyISAM存储引擎的另一个与众不同的地方
是,它的缓冲池只缓存(cache)索引文件,而不缓存数据文件,这
与大多数的数据库都不相同。

NDB存储引擎:NDB存储引擎是一个集群存储引擎,其结构是share nothing的集群架构,
能提供高级别的高可用性。NDB存储引擎的特点是数据全部放在内存中(从5.1版本开
始,可以将非索引数据放在磁盘上),因此主键查找(primary key
lookups)的速度极快,并且能够在线添加NDB数据存储节点(data
node)以便线性地提高数据库性能。由此可见,NDB存储引擎是
高可用、高性能、高可扩展性的数据库集群系统,其面向的也是OLTP的
数据库应用类型。

Memory存储引擎:正如其名,Memory存储引擎中的数据都存放
在内存中,数据库重启或发生崩溃,表中的数据都将消失。它非常适
合于存储OLTP数据库应用中临时数据的临时表,也可以作为OLAP
数据库应用中数据仓库的维度表。Memory存储引擎默认使用哈希索
引,而不是通常熟悉的B+树索引。

Infobright存储引擎:第三方的存储引擎。其特点是存储是按照列
而非行的,因此非常适合OLAP的数据库应用。

OLTP与OLAP的比较

OLTP主要执行基本的、日常的事务处理,比如在银行存取一笔
款,就是一个事务交易。OLTP的特点一般有:
实时性要求高。
查询的数据量不是很大。
交易一般是确定的,所以OLTP是对确定性的数据进行存取。
并发性要求高,并且严格要求事务的完整性、安全性

OLAP是数据仓库系统的主要应用,其典型的应用就是复杂的动
态报表系统。OLAP的特点一般有:
实时性要求不是很高,很多应用最多每天更新一次数据。
数据量大。因为OLAP支持的是动态查询,用户要通过对很多数
据的统计才能得到想要知道的信息,如时间序列分析等,所以处理的
数据量很大。
因为重点在于决策支持,所以查询一般是动态的,也就是说允许
用户随时提出查询的要求。因此,在OLAP中通过一个重要概
念“维”来搭建一个动态查询的平台(或技术),供用户自己决定需要
知道的信息。

《MySQL技术内幕(SQL编程)》——基础_数据

感觉OLAP更适合于做数据仓库