MySQL系列学习之简单介绍MySQL几种常见存储引擎

MySQL 常见存储引擎

1. InnoDB存储引擎

  • InnoDB存储引擎支持事务,其设计目标主要面向在线事务处理(OLTP)的应用。其特点是行锁设计支持外键,并支持类似于Oracle的非锁定读,即默认读取操作不会产生锁,从MySQL5.5.8开始InnoDB存储引擎是默认的存储引擎。
  • InnoDB通过使用多版本并发控制(Multi Version Concurrent Control)来获得高并发性,并且实现了SQL标准的4中隔离级别默认为 READ REPEATABLE级别,同时使用一种被称为next-key locking 的策略来避免幻读(phantom)现象的产生,除此之外InnoDB存储引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用功能。
  • InnoDB存储引擎采用了聚集(clustered)的方式(也就是主键索引),因此每张表的存储都是按主键的顺序进行存放,如果没有显式地在表定义式指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键。

2. MyISAM存储引擎

  • MyISAM存储引擎不支持事务表锁设计支持全文索引,主要面向一些OLAP数据库应用。
  • MyISAM存储引擎的另一个与众不同的地方就是它的缓冲池只缓存索引文件,而不缓冲数据文件
  • MyISAM存储引擎表由MYDMYI组成,MYD用来存放数据文件,MYI用来存放索引文件。可以同通过使用myisampack工具来进一步压缩文件,它使用赫夫曼(Hufffman)编码静态算法来压缩数据,因此使用该工具压缩后的表示只读的,也可以使用它解压数据文件

3.NDB存储引擎

  • NDB存储引擎是一个集群存储引擎,类似于Oracle的RAC集群,Oracle RAC的架构是share everything,NDB则是share nothing的集群架构,因此可以提供更高的可用性,上面大多引用自姜承尧老师的《MySQL技术内幕:InnoDB存储引擎》这本书对这个更高可用性,姜老师没有做解释,我这里姑且百度,加上自己的理解,做一下解释,省的有些人看着迷惑,如果解释的不对,请指教。这里对这个提供更高的可用性做一个说明,不是说NDB比RAC性能好。
    数据库构架设计中主要有Shared Everthting、Shared Nothing、和Shared Disk:
    Shared Everthting:一般是针对单个主机,完全透明共享CPU/MEMORY/IO并行处理能力是最差的,典型的代表SQLServer
    Shared Disk各个处理单元使用自己的私有 CPU和Memory共享磁盘系统。典型的代表Oracle Rac, 它是数据共享,可通过增加节点来提高并行处理的能力,扩展能力较好。其类似于SMP(对称多处理)模式,但是当存储器接口达到饱和的时候,增加节点并不能获得更高的性能 。
    Shared Nothing各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,类似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。典型代表DB2 DPF和hadoop ,各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转。
    我们常说的 Sharding 其实就是Share Nothing架构它是把某个表从物理存储上被水平分割,并分配给多台服务器(或多个实例),每台服务器可以独立工作,具备共同的schema,比如MySQL Proxy和Google的各种架构,只需增加服务器数就可以增加处理能力和容量。
    这里百度上说RAC是Share Disk我看了下确实大部分画的RAC 都是共享磁盘,当然可能也有其他架构的,姜老师这里写的是Share Everything 可能当时出书的时候确实是这个,后续RAC演变了吧(猜测)。RAC也有其高可用的说明,只能说它们两个各有优缺点,看实际业务场景需要哪种。
  • NDB的特点是数据全部放在内存中(从MySQL5.1版本开始,可以将非索引数据放在磁盘上)因此主键查找(primary key lookups)的速度极快,并且通过添加NDB数据存储节点(Data Node)可以线性地提高数据库性能,是高可用,高性能的集群系统。

4.Memory存储引擎

  • Memory存储引擎将表中的数据存档在内存中,如果数据库重启或发生崩溃,表中的数据都将消失,它非常适用于存储临时数据的临时表,一自己数据仓库中的维度表。Memory存储引擎默认使用哈希索引,而不是我们熟悉的B+树索引。
  • Memory存储引擎速度非常快,但是也有一定的限制,只支持表锁,并发性能较差,不支持TEXT和BLOB类型,问题大的是存储变长字段(varchar)时是按照定长字段(char)的方式,会浪费内存,eBay的工程师已经给出了解决方案。

5.Maria存储引擎

  • Maria存储引擎是新开发的引擎,设计目标主要是用来取代原有的MyISAM存储引擎,从来成为MySQL的默认存储引擎。
  • Maria存储引擎的特点是:支持缓存数据和索引文件,应用了行锁设计,提供了MVVC功能,支持事务和非实物安全的选项,以及更好的BLOB字符类型的处理能力

总结

剩下还有多种存储引擎,但是感觉平时不怎么接触,就不多做介绍,文章后续会继续更新里面的知识点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值