MySQL:单进程多线程数据库
一、InnoDB存储引擎
InnoDB存储引擎支持事务(5.5.8MySQL默认版本),特点:行锁设计、支持外键,并支持类似于Oracle的非锁定读,即默认读取操作不会产生锁。
InnoDB存储引擎将数据放在一个逻辑的表空间中,表空间就像黑盒一样由InnoDB存储引擎自身进行管理。InnoDB存储引擎支持用裸设备(row disk)用来建立其表空间。
InnoDB通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4中隔离级别,默认为REPEATABLE级别。同时使用一种被称为next-keylocking的策略来避免幻读(phantom)现象的产生。除此之外,InnoDB存储引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hashindex)、预读(read ahead)等高性能和高可用的功能。
对表中数据的存储,InnoDB存储引擎采用了聚集(clustered)的方式,因此每张表的存储都是按住键的顺序进行存放。若没有显示地在表定义时指定主键,InnoDB存储引擎会为每行生成一个6字节的ROWID,并以此作为主键。
二、MyISAM存储引擎
MyISAM存储引擎不支持事务、表锁设计,支持全文索引,主要面向一些OLAP数据库应用(5.5.8MySQL前除windows版外为默认版本)。MyISAM存储引擎缓冲池只缓存索引文件,不缓冲数据文件,数据文件的缓存交由操作系统本身来完成,这点和大多数的数据库非常不同。
MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。MySQL5.0版本之前,MyISAM默认支持表大小4GB,如果需要支持大于4GB的MyISAM表时,则需要制定MAX_ROWS和AVG_ROW_LENGTH属性。
三、NDB存储引擎
NDB存储引擎是一个集群存储引擎,类似于Oracle的RAC集群,不过与Oracle RAC share everything架构不同的是,其结构是share nothing的集群架构,因此能提供更高的可用性。NDB的特点是数据全部放在内存中(MySQL5.1版本后,可将非索引数据放在磁盘上),因此主键查找的速度极快,并且通过添加NDB数据存储节点可以线性地提高数据库性能,是高可用、高性能的集群系统。
NDB存储引擎的连接操作实在MySQL层完成的,而不是在存储引擎层完成的,也就是说,复杂的连接操作需要巨大的网络开销,因此查询速度很慢,若解决这一问题市场前景可观。
四、Memory存储引擎
Memory(HEAP)存储引擎将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。适用于存储临时数据的临时表,以及数据仓库中的维度表。Memory默认使用哈希索引,而不是B+树索引。存储熟读快,但只支持表锁,并发性能较差,不支持TEXT和BLOB列类型。
网友评论