mysql数据库差别于其它数据库的最重要的一个特点是其插件式的表存储引擎,存储引擎是基于表的。而不是数据库

InnoDB存储引擎:

       支持事务,其设计目标主要面向在线事务处理(OLTP)的应用,其特点是行锁设计、支持外键、并支持相似于oracle的非锁定读,即默认读取操作不会产生锁。其将数据放在一个逻辑的表空间中。此外。InnoDB存储引擎支持用裸设备用来建立其表空间,所谓裸设备即是是一种没有经过格式化,不被Unix通过文件系统来读取的特殊块设备文件,是不被操作系统直接管理的设备。

这种设备少了操作系统这一层。I/O效率更高。InnoDB还提供了插入缓冲(insert
buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。

   InnoDB使用多版本号并发控制来获得高并发性。而且实现了sql标准的4种隔离级别,各自是:
 
  • 未提交读(Read uncommitted):在未提交读级别,事务中的改动,即使没有提交,对其它事务也都是可见的。事务能够读取未提交的数据,这也被称为脏读(Dirty
    Read)。这个级别会导致非常多问题。从性能上来说,未提交读不会比其它的级别好太多,可是缺乏其它级别的非常多优点。在实际应用中一般非常少使用。
  • 提交读(Read committed):大多数数据库系统的默认隔离级别都是提交读(但Mysql不是)。

    提交读满足前面提到的隔离性的简单定义:一个事务開始时,仅仅能“看见”已经提交的事务所做的改动。

    换句话说,一个事务从開始直到提交之前。所做的不论什么改动对其它事务都是不可见的。

    这个级别有时候也叫做不可反复读(nonrepeatable
    read),由于两次运行相同的查询。可能会得到不一样的结果。

  • 可反复读(Repeatable read):可反复读攻克了脏读的问题。该级别保证了在同一个事务中多次读取相同记录的结果是一致的。

    可是理论上。可反复读隔离级别还是无法解决另外一个幻读(Phantom
    read)问题。所谓幻读。指的是当某个事务在读取某个范围内的记录时,另外一个事务中又在该范围插入了新的记录,当之前的事务再次读取该范围的记录时。会产生幻行(Phantom
    row)。可反复读是MySQL的默认事务隔离级别。

  • 可串行化(Serializable):可串行化是最高的隔离级别。

    它通过强制事务串行运行,避免了前面所说的幻读问题。简单来说,可串行化会在读取的每一行数据上都加上锁,所以可能导致大量的超时和锁争用问题。实际应用中也非常少用到这个隔离级别。仅仅有在非常须要确保数据的一致性而且能够接受没有并发的情况下,才考虑用该级别。

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

MyISAM存储引擎:
    MyISAM存储引擎不支持事务、表锁设计,支持全文索引。主要面向一些OLAP(在线分析处理)数据库应用,MyISAM存储引擎的还有一个与众不同的地方是它的缓冲池仅仅缓存索引文件,而不是数据文件,MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件,在mysql5.0版本号之前,MyISAM默认支持的表大小为4GB,5.0版本号開始,MyISAM默认支持256TB的单表数据,
NDB存储引擎:
      是一个集群存储引擎。其结构是share nothing的集群架构。

Shared Everthting:通常是针对单个主机。全然透明共享CPU/MEMORY/IO,并行处理能力是最差的,典型的代表SQLServer

Shared Disk:各个处理单元使用自己的私有 CPU和Memory,共享磁盘系统。典型的代表Oracle Rac。 它是数据共享,可通过添加节点来提高并行处理的能力,扩展能力较好。其相似于SMP(对称多处理)模式。可是当存储器接口达到饱和的时候,添加节点并不能 获得更高的性能 。

Shared Nothing:各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源。相似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。典型代表DB2 DPF和hadoop ,各节点相互独立。各自处理自己的数据。处理后的结果可能向上层汇总或在节点间流转。

我们常说的 Sharding 事实上就是Share Nothing架构,它是把某个表从物理存储上被水平切割,并分配给多台server(或多个实例),每台server能够独立工作,具备共同的schema。比方MySQL
Proxy和Google的各种架构,仅仅需添加server数就能够添加处理能力和容量。

因此提供更高的可用性,NDB的特点是数据所有存放在内存中,因此主键查找的速度极快,而且通过加入NDB数据存储节点能够线性的提高数据库性能,是高可用的集群系统。

可是NDB存储引擎的链接操作是在mysql数据库层完毕的,而不是在存储引擎层完毕的,意味着复杂的连接操作须要巨大的网络开销。因此查询速度非常慢。

Memory存储引擎(之前称为heap存储引擎):

     将表中的数据存放在内存中,假设数据库重新启动或者发生崩溃,表中的数据都将消失,非常适用于存储暂时数据的暂时表,默认使用哈希索引,而不是B+树索引。仅仅支持表锁。并发性能较差,而且存储变长字段(varchar)时是依照定常字段(char)的方式进行的。因此会浪费内存。

Archive存储引擎:

   仅仅支持insert和select操作。从mysql5.1開始支持索引,非常适合存储归档数据,如日志信息,其设计目标是提供快速的插入和压缩功能。

Federated存储引擎:

     存储引擎表并不存放数据。他仅仅是指向一台远程mysql数据库server上的表。仅仅支持mysql数据库表,不支持异构数据库表(异构数据库系统相关的多个数据库系统的集合,能够实现数据的共享和透明訪问,每一个数据库系统在加入异构数据库系统之前本身就已经存在,拥有自己的DBMS。


 

Maria存储引擎:

      设计目标是主要用来代替原有的mysql存储引擎,特点是支持缓存数据和索引文件,应用了行锁设计,提供了mvcc(多版本号并发控制)功能,支持事务和非事务安全的选项,以及更好的blob字符类型的处理性能,

在MySQL中有两个字段类型easy让人感觉混淆,那就是TEXT与BLOB。特别是自己写博客程序的博主不知道改为自己的博客正文字段选择TEXT还是BLOB类型。

以下给出几点差别:

一、主要差别

TEXT与BLOB的主要差别就是BLOB保存二进制数据。TEXT保存字符数据。眼下差点儿所有博客内容里的图片都不是以二进制存储在数据库的,而 是把图片上传到server然后正文里使用<img>标签引用,这种博客就能够使用TEXT类型。

而BLOB就能够把图片换算成二进制保存到数据 库中。

二、类型差别

BLOB有4种类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们仅仅是可容纳值的最大长度不同。

TEXT也有4种类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些类型同BLOB类型一样。有相同的最大长度和存储需求。

三、字符集

BLOB列没有字符集,而且排序和比較基于列值字节的数值值。TEXT列有一个字符集。而且依据字符集的校对规则对值进行排序和比較

四、大写和小写

在TEXT或BLOB列的存储或检索过程中。不存在大写和小写转换,都一样!

五、严格模式

运行在非严格模式时,假设你为BLOB或TEXT列分配一个超过该列类型的最大长度的值值。值被截取以保证适合。

假设截掉的字符不是空格。将会产生一条警告。使用严格SQL模式,会产生错误。而且值将被拒绝而不是截取并给出警告。

六、其它

当保存或检索BLOB和TEXT列的值时不删除尾部空格。

对于BLOB和TEXT列的索引,必须指定索引前缀的长度。

BLOB和TEXT列不能有默认值。

当排序时仅仅使用该列的前max_sort_length个字节。

max_sort_length的 默认值是1024。

当你想要使超过max_sort_length的字节有意义,对含长值的BLOB或TEXT列使用GROUP BY或ORDER BY的还有一种方式是将列值转换为固定长度的对象。

标准方法是使用SUBSTRING函数。

BLOB或TEXT对象的最大大小由其类型确定,但在client和server之间实际能够传递的最大值由可用内存数量和通信缓存区大小确定。

你能够通过更改max_allowed_packet变量的值更改消息缓存区的大小,但必须同一时候改动server和client程序。

除了以上的存储引擎,mysql还有非常多其它的存储引擎。包含merge、csv、sphinx、infobright。他们都有各自的使用场所,

mysql数据库各存储引擎比較的更多相关文章

  1. MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析

    文/何登成 导读:   来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解I ...

  2. MySQL数据库InnoDB存储引擎中的锁机制

    MySQL数据库InnoDB存储引擎中的锁机制    http://www.uml.org.cn/sjjm/201205302.asp   00 – 基本概念 当并发事务同时访问一个资源的时候,有可能 ...

  3. MySQL数据库InnoDB存储引擎

    MySQL数据库InnoDB存储引擎Log漫游  http://blog.163.com/zihuan_xuan/blog/static/1287942432012366293667/

  4. 查看和改动MySQL数据库表存储引擎

            要做一名合格的程序猿,除了把代码写的美丽外,熟知数据库方面的知识也是不可或缺的.以下总结一下怎样查看和改动MySQL数据库表存储引擎:        1.查看数据库所能支持的存储引擎: ...

  5. MySQL数据库MyISAM存储引擎转为Innodb

    MySQL数据库MyISAM存储引擎转为Innodb  之前公司的数据库存储引擎全部为MyISAM,数据量和访问量都不是很大,所以一直都没什么问题.但是最近出现了MySQL数据表经常被锁的情况,直接导 ...

  6. 百万年薪python之路 -- MySQL数据库之 存储引擎

    MySQL之存储引擎 一. 存储引擎概述 定义: 存储引擎是mysql数据库独有的存储数据.为数据建立索引.更新数据.查询数据等技术的实现方法 ​ 首先声明一点: 存储引擎这个概念只有MySQL才有. ...

  7. mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制、数据库备份

    目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发 ...

  8. mysql数据库之存储引擎

    mysql存储引擎概述 什么是存储引擎?                                                               MYSQL中的数据用各不相同的技术 ...

  9. 关于MySql 数据库InnoDB存储引擎介绍

    熟悉MySQL的人,都知道InnoDB存储引擎,如大家所知,Redo Log是innodb的核心事务日志之一,innodb写入Redo Log后就会提交事务,而非写入到Datafile.之后innod ...

随机推荐

  1. Flat UI简介

    Flat UI简介 一.简介 Flat UI是基于Bootstrap之上进行二次开发的扁平化前端框架,他提供了动感.时尚的风格色调搭配,简洁.炫丽的功能组件,同时还提供了更为平滑的js交互动画,可以称 ...

  2. es6 -- set 数据结构

    ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. const s = new Set(); [2, 3 ...

  3. 上市公司恋上互联网金融 目前已有14家涌入P2P

    时至今日,互联网金融已蔚然成风,诸多上市公司正前赴后继介入到P2P业务中,据记者初步统计,目前至少有14家A股上市公司参与了P2P业务.央行6月份的报告显示,中国当前有600多家P2P公司,交易额达到 ...

  4. OpenCV —— ROI

    通过 cvResetImageRoI 函数释放ROI是非常重要的,否则其他操作将默认在ROI区域中进行 通过巧妙的使用widthStep,可以达到同ROI一样的效果 —— 如果想设置和保持一副图像的多 ...

  5. Java中JVM虚拟机详解

    1. 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来 ...

  6. 前台技术--div的隐藏与显示

    怎样使用页面元素隐藏或显示. HTML为我们提供了两个变量visibility和display visibility:隐藏要元素可是元素所暂用的空间不予释放.也就是说元素隐藏了,可是页面上会流出一片空 ...

  7. vue-cli 和webpack

    https://note.youdao.com/share/?id=d1851db9f0fe0a691798fac823849564&type=notebook#/C045BC3E7DC144 ...

  8. react+react-router+mobx+element打造管理后台系统---react-amdin-element

    react-admin-element,一款基于react的后台管理系统. 那么我们和其他的后台管理系统有什么区别呢? demo地址:点我进入demo演示 github地址:点我进入github 1. ...

  9. python路径找类并获取静态字段

    Python通过路径找类并获取其中大写的静态字段 settings.py class Foo: DEBUG = True TEST = True xx.py import importlib path ...

  10. JS错误记录 - To-do List

    var data = (localStorage.getItem('todolist'))? JSON.parse(localStorage.getItem('todolist')) : { todo ...