几种经常使用引擎介绍css
1, MyISAM引擎node
特色mysql
1, 不支持事务sql
事务是指逻辑上的一组操做,组成这组操做的各个单元,要么全成功要么全失败。数据库
2, 表级锁定缓存
数据更新时锁定整个表:其锁定机制是表级锁定,也就是对表中的一个数据进行操做都会将这个表锁定,其余人不能操做这个表,这虽然可让锁定的实现成本很小可是也同时大大下降了其并发性能安全
3, 读写互相阻塞架构
不只会在写入的时候阻塞读取,MyISAM还会再读取的时候阻塞写入,但读自己不会阻塞另外的读并发
4, 只会缓存索引oracle
MyISAM 能够经过key_buffer_size 的值来提升缓存索引,以大大提升访问性能减小磁盘IO,可是这个缓存区只会缓存索引,而不会缓存数据。
5, 读取速度快
占用资源相对较少
6, 不支持外键约束,但只是全文索引
7, MyISAM引擎是MySQL5.5版本以前的默认引擎,是对最初的ISAM引擎优化的产物。
业务场景:
1, 不须要事务支持的业务
2, 通常为读数据比较多的应用,读写都频繁场景不适合,读多或者写多的都适合
3, 读写并发访问都相对较低的业务
4, 数据修改相对较少的业务
5, 以读为主的业务
6, 对数据一致性要求不是很高的业务
7, 中小型的网站部分业务会用
调优精要:
1, 设置合适的索引
2, 调整读写优先级,根据实际需求确保重要操做更优先执行,读写的时候能够经过参数设置优先级
3, 启用延迟插入改善大批量写入性能(下降写入频率,尽量多条数据一次性写入)
4, 尽可能顺序操做让insert数据都写入道尾部,较少阻塞
5, 分解大的操做,下降单个操做的阻塞时间,就像操做系统控制cpu分片同样
6, 下降并发数,某些高并发某些高并发场景经过应用进行排队队列机制Q队列
7, 对于相对静态的数据库数据,充分利用Query Cache或mecached缓存服务能够极大的提升访问频率
8, MyISAM的Count只有再全表扫描的时候特别高效,带有其余条件的count都须要进行实际
不支持事务、表锁设计、支持全文索引,主要面向一些 OLAP 数 据库应用,在 MySQL 5.5.8 版本以前是默认的存储引擎(除 Windows 版本外)。数据库系统 与文件系统一个很大的不一样在于对事务的支持,MyISAM 存储引擎是不支持事务的。究其根 本,这也并不难理解。用户在全部的应用中是否都须要事务呢?在数据仓库中,若是没有 ETL 这些操做,只是简单地经过报表查询还须要事务的支持吗?此外,MyISAM 存储引擎的 另外一个不同凡响的地方是,它的缓冲池只缓存(cache)索引文件,而不缓存数据文件,这与 大多数的数据库都不相同。
2. InnoDB引擎
特色:
1, 支持事务,支持4个事务隔离界别,支持多版本读
2, 行级锁定:经过索引实现,全表扫描仍然会是表锁,注意间隙的影响
3, 读写阻塞与事务隔离级别相关
4, 具体很是高效的缓存特性:能缓存索引,也能缓存数据
5, 整个表和主键与cluster方式存储,组成一颗平衡树
6, 全部secondaryIndex都会保存主键信息
7, 支持分区,表空间,相似oracle数据库
8, 支持外键约束
9, 对硬件要求比较高
业务场景:
1, 须要事务支持(具备较好的事务特性)
2, 行级锁定对高并发有很好的适应能力,但须要确保查询是经过索引完成
3, 数据更新较为频繁的场景
4, 数据一致性要求较高的业务
5, 硬件设备内存较大
6, 更消耗资源,没有MyISAM引擎快
InnoDB引擎调优精要 1.主键尽量小,避免给Secondery index带来过大的空间负担。 2.避免全表扫描,由于会使用表锁。 3.尽量缓存全部的索引和数据,提升响应速度,较少磁盘IO消耗。 4.在大批量小插入的时候,尽可能本身控制事务而不要使用autocommit自动提交,有开关能够控制提交方式。 5合理设置innodb_flush_log_at_trx_commit参数值,不要过分追求安全性。 若是innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不作任何操做。 6.避免主键更新,由于这会带来大量的数据移动。 能够看一看InnoDB的重要参数学习一下。
InnoDB 存储引擎将数据放在一个逻辑的表空间中,这个表空间就像黑盒同样由 InnoDB 存储引擎自身来管理。从 MySQL 4.1(包括 4.1)版本开始,能够将每一个 InnoDB 存储引擎的 表单独存放到一个独立的 ibd 文件中。此外,InnoDB 存储引擎支持将裸设备(row disk)用 于创建其表空间。
InnoDB 经过使用多版本并发控制(MVCC)来得到高并发性,而且实现了 SQL 标准 的 4 种隔离级别,默认为 REPEATABLE 级别,同时使用一种称为 netx-key locking 的策略来 避免幻读(phantom)现象的产生。除此以外,InnoDB 存储引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead) 等高性能和高可用的功能。
对于表中数据的存储,InnoDB 存储引擎采用了汇集(clustered)的方式,每张表都是按 主键的顺序进行存储的,若是没有显式地在表定义时指定主键,InnoDB 存储引擎会为每一 行生成一个 6 字节的 ROWID,并以此做为主键。
InnoDB 存储引擎是 MySQL 数据库最为经常使用的一种引擎,Facebook、Google、Yahoo 等 公司的成功应用已经证实了 InnoDB 存储引擎具有高可用性、高性能以及高可扩展性。对其 底层实现的掌握和理解也须要时间和技术的积累。若是想深刻了解 InnoDB 存储引擎的工做 原理、实现和应用,能够参考《MySQL 技术内幕:InnoDB 存储引擎》一书。
事务介绍:
四大特性:
1, 原子性:
事务是一个不可分割的单位,事务中的全部SQL等操做要么都发生,要么都不发生
2, 一致性
事务发生前和发生后,数据的完整性必须保持一致
3, 隔离性:
当并发访问数据库时,一个正在执行的事务在执行完毕前,对于其余的会话是不可见的,多个并发事务之间的数据是相互隔离的,
4, 持久性
一个事务一旦被提交,它对数据中的数据改变就是永久性的。若是出了错误,事务也不准撤销,只能经过‘补偿性事务’
事务的开启:
数据库默认事务时自动提交的,也就是发一条sql它就执行一条
#NDB 存储引擎 2003 年,MySQL AB 公司从 Sony Ericsson 公司收购了 NDB 存储引擎。 NDB 存储引擎是一个集群存储引擎,相似于 Oracle 的 RAC 集群,不过与 Oracle RAC 的 share everything 结构不一样的是,其结构是 share nothing 的集群架构,所以能提供更高级别的 高可用性。NDB 存储引擎的特色是数据所有放在内存中(从 5.1 版本开始,能够将非索引数 据放在磁盘上),所以主键查找(primary key lookups)的速度极快,而且可以在线添加 NDB 数据存储节点(data node)以便线性地提升数据库性能。因而可知,NDB 存储引擎是高可用、 高性能、高可扩展性的数据库集群系统,其面向的也是 OLTP 的数据库应用类型。 #Memory 存储引擎 正如其名,Memory 存储引擎中的数据都存放在内存中,数据库重 启或发生崩溃,表中的数据都将消失。它很是适合于存储 OLTP 数据库应用中临时数据的临时表,也能够做为 OLAP 数据库应用中数据仓库的维度表。Memory 存储引擎默认使用哈希 索引,而不是一般熟悉的 B+ 树索引。 #Infobright 存储引擎 第三方的存储引擎。其特色是存储是按照列而非行的,所以很是 适合 OLAP 的数据库应用。其官方网站是 http://www.infobright.org/,上面有很多成功的数据 仓库案例可供分析。 #NTSE 存储引擎 网易公司开发的面向其内部使用的存储引擎。目前的版本不支持事务, 但提供压缩、行级缓存等特性,不久的未来会实现面向内存的事务支持。 #BLACKHOLE 黑洞存储引擎,能够应用于主备复制中的分发主库。
文件做用介绍:
1. db.opt文件:用来记录该库的默认字符集编码和字符集排序规则用的。也就是说若是你建立数据库指定默认字符集和排序规则,那么后续建立的表若是没有指定字符集和排序规则,那么该新建的表将采用db.opt文件中指定的属性。 2.后缀名为.frm的文件:这个文件主要是用来描述数据表结构(id,name字段等)和字段长度等信息 3.后缀名为.ibd的文件:这个文件主要储存的是采用独立表储存模式时储存数据库的数据信息和索引信息; 4.后缀名为.MYD(MYData)的文件:从名字能够看出,这个是存储数据库数据信息的文件,主要是存储采用独立表储存模式时存储的数据信息; 5.后缀名为.MYI的文件:这个文件主要储存的是数据库的索引信息; 6.ibdata1文件:主要做用也是储存数据信息和索引信息,这个文件在mysql安装目录的data文件夹下。 从上面能够看出,.ibd储存的是数据信息和索引信息,ibdata1文件也是存储数据信息和索引信息,.MYD和.MYI也是分别储存数据信息和索引信息,那他们之间有什么区别呢? 主要区别是再于数据库的存储引擎不同,若是储存引擎采用的是MyISAM,则生成的数据文件为表名.frm、表名.MYD、表名的MYI;而储存引擎若是是innoDB,开启了innodb_file_per_table=1,也就是采用独立储存的模式,生成的文件是表名.frm、表名.ibd,若是采用共存储模式的,数据信息和索引信息都存储在ibdata1(在里面进行分类,从外面看是一个文件)中; 在进行数据恢复的时候,若是用的是MYISAM数据引擎,那么数据很好恢复,只要将相应.frm, .MYD, .MYI文件拷贝过去便可。可是若是是innodb的话,则每个数据表都是一个单独的文件,只将相应的.frm和.ibd文件拷贝过去是不够的,必须在你的ibd文件的tablespace id和ibdata1文件中的元信息的tablespace id一致才能够。 msyql人家设定的规则就是这样存储表的,使用人家的系统,就要理解人家的规则。
在Oracle 和SQL Server等全部数据存储管理机制都是同样的。而MySql数据库提供了多种存储引擎。用户能够根据不一样的需求为数据表选择不一样的存储引擎,用户也能够根据本身的须要编写本身的存储引擎。
Oracle中不存在引擎的概念,数据处理大体能够分红两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、平常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操做,侧重决策支持,而且提供直观易懂的查询结果。