#### 数据库:
物理操作系统文件或其他文件类型的结合。
#### 实例:
mysql数据库由后台线程以及一个共享内存区组成。
mysql被设计为一个 [ 单进程多线程架 ] 构的数据库。也就是说mysql数据库实例在系统上的表现就是一个进程。
#### mysql数据库体系结构:
1. 连接池组件
2. 管理服务和工具组件
3. sql接口组件
4. 查询分析器组件
5. 缓冲(cache)组件
6. 插件式存储引擎
7. 物理文件
tips:
存储引擎是基于表的而不是数据库
## 存储引擎
#### InnoDB:
* 其设计目标主要面向在线事务处理(OLTP)的应用。其特点是行锁设计、支持外键, 并支持类似于Oracle的非锁定读,即默认读取操作不会产生锁。从MySQL数据库5.5.8版本开始,InnoDB存储引擎是默认的存储引擎。
* InnoDB存储引擎将数据放在一个逻辑的表空间中,这个表空间就像黑盒一样由InnoDB存储引擎自身进行管理。从MySQL 4.1(包括4.1)版本开始,它可以将每个InnoDB存储引擎的表单独存放到一个独立的ibd文件中。
* 同时,使用一种被称为next-key locking的策略来避免幻读(phantom)现象的产生。
* 供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能高科用的功能。
#### MyISAM:
* MyISAM存储引擎不支持事务、表锁设计,支持全文索引,主要面向一些OLAP数据库应用
* MyISAM存储引擎的另一个与众不同的地方是它的缓冲池只缓存(cache)索引文件,而不缓冲数据文件,这点和大多数的数据库都非常不同。MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。
* 在MySQL 5.0版本之前,MyISAM默认支持的表大小为4GB,如果需要支持大于4GB的MyISAM表时,则需要制定MAX_ROWS和AVG_ROW_LENGTH属性。从MySQL 5.0版本开始,MyISAM默认支持256TB的单表数据
* 缓存索引的缓冲区最大只能设置为4GB。
#### NDB集群引擎:
* NDB存储引擎是一个集群存储引擎,类似于Oracle的RAC集群,不过与Oracle RAC share everything架构不同的是,其结构是share nothing的集群架构,因此能提供更高的可用性。
* 复杂的连接操作需要巨大的网络开销,因此查询速度很慢。
#### memory:
* 将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。它非常适合用于存储临时数据的临时表,以及数据仓库中的纬度表。Memory存储引擎默认使用哈希索引,而不是我们熟悉的B+树索引。
* MySQL数据库使用Memory存储引擎作为临时表来存放查询的中间结果集(intermediate result)。如果中间结果集大于Memory存储引擎表的容量设置,又或者中间结果含有text或blob列类型字段,则 MySQL数据库会把其转换到MyISAM存储引擎表而存放到磁盘中。之前提到MyISAM不缓存数据文件,因此这时产生的临时表的性能对于查询会有损失。
#### Archive:
* 使用zlib算法将数据行(row)进行压缩后存储,压缩比一般可达1∶10。
#### Maria:
* 存储引擎的特点是:支持缓存数据和索引文件,应用了行锁设计,提供了MVCC功能,支持事务和非事务安全的选项,以及更好的BLOB字符类型的处理性能。
#### mysql连接:
* 连接MySQL操作是一个连接进程和MySQL数据库实例进行通信。从程序设计的角度来说,本质上是进程通信
##### TCP/IP连接:
* 在通过TCP/IP连接到MySQL实例时,MySQL数据库会先检查一张权限视图,用来判断发起请求的客户端IP是否允许连接到MySQL实例。
------