MySQL의 스토리지 엔진

1. 스토리지 엔진의 해석

첫 번째 개념은 내부 MySQL의 스토리지 엔진이며, 모든 관계형 데이터베이스 스토리지 엔진이 개념을 가지고 결정, 우리는 나중에 말할 것이다,하지만 지금은이 결정.  

  이 스토리지 엔진, 우리가 처음 비유 무엇을 분명히하기 전에, 우리는 모두 다른 존재한다 우리의 컴퓨터의 디스크에 존재 기록 등은 MP4, AVI, WMV, 같은 다른 형식으로 변환 할 수있는 비디오 파일을 알고 같은 일반적인 ext3로 리눅스에 존재하는 공통의 NTFS, FAT32의 창으로 파일 시스템의 유형은 내부에서 ext4, XFS는, 그러나, 우리의 사용자 또는 실제 비디오 콘텐츠가 동일을 이해합니다. 시각차 시스템의 선명도가 차지하는 공간의 크기가 상이 할 수있다.
그런 다음 데이터베이스 및 비디오 형식과 유사한 파일 저장 디스크 위에 설명 된 시스템의 디스크 형식과 기능에 저장된 데이터베이스 테이블의 데이터를 저장하는 방법에는 여러 가지가 있습니다.
  그러나 아무리 저장소에 어떤 엔진 사용자와 응용 프로그램의 테이블 같은 데이터는 사용자 데이터가 동일 볼 수 있습니다. 다른 액세스 스토리지 엔진, 엔진 기능 공간 크기, 판독 성능과 다를 수있다. 노골적으로 말하면, 스토리지 엔진은 데이터 저장이 기술 방법의 실현 데이터, 데이터를 업데이트, 다른 기본 구현을 추출하는 방법으로, 그것은 서로 다른 스토리지 엔진의 번호를 보여주는 것입니다 서로 다른에 해당하는 고유 한 특징과 기능을 가지고 액세스 메커니즘.
  테이블이 관계형 데이터베이스에 저장된 데이터의 형태로 저장되므로 스토리지 엔진은 또한 테이블 유형을 호출 할 수 있기 때문에 (예 : 테이블 저장, 조작 등을 달성하기위한 다른 방법) 테이블이 테이블에 무슨 일이 본질적으로 디스크입니다 에 파일.

  사용, 당신은 자신의 비즈니스 시나리오에서 가장 일반적으로 사용되는 MySQL의 스토리지 엔진에 따라 서로 다른 스토리지 엔진을 사용할 수있을 때 사실, MySQL은, 각각의 엔진은 고유 한 기능을 가지고, 사용자가 여러 스토리지 엔진을 지원의 MyISAM과 InnoDB의를

2. 스토리지 엔진의 종류

우리 시대의 MySQL의 전면, 사용할 수있는 이유, 내가 MySQL5.5 전에 기억 설명 MySQL의 기본 스토리지 엔진이 무엇을 설명 사용할 아직 지정하지 않은 작동 및 스토리지 엔진을 지정하지 않으면, 기본 스토리지 엔진은의 MyISAM입니다 모든 InnoDB의 대신에, 우리의 초점은 이노이며,이 회사는 또한 후 역사적인 이유에 더하여, 가장 일반적으로 최고의 엔진을 사용하지만, 일부 기업은 여전히의 MyISAM 엔진을 사용,의 MyISAM InnoDB에보다 효율적이 있습니다 약간의 이상이, 이노 우리가 최적화, 효율성의 많은 일을 거의의 MyISAM이 있지만, 다른 이노 엔진 NB 기능이 많이가있는 한, 우리가 여러 스토리지 엔진을 소개합니다.

1.의 MyISAM 엔진 

MyISAM引擎特点:
        1.不支持事务
            事务是指逻辑上的一组操作,组成这组操作的各个单元,要么全成功要么全失败。
        2.表级锁定
            数据更新时锁定整个表:其锁定机制是表级锁定,也就是对表中的一个数据进行操作都会将这个表锁定,其他人不能操作这个表,这虽然可以让锁定的实现成本很小但是也同时大大降低了其并发性能。
        3.读写互相阻塞
            不仅会在写入的时候阻塞读取,MyISAM还会再读取的时候阻塞写入,但读本身并不会阻塞另外的读。
        4.只会缓存索引
            MyISAM可以通过key_buffer_size的值来提高缓存索引,以大大提高访问性能减少磁盘IO,但是这个缓存区只会缓存索引,而不会缓存数据。
        
        5.读取速度较快
            占用资源相对较少
        6.不支持外键约束,但只是全文索引
        7.MyISAM引擎是MySQL5.5版本之前的默认引擎,是对最初的ISAM引擎优化的产物。

1.MyISAM 적용 엔진 생산 비즈니스 시나리오

        1.不需要事务支持的业务(例如转账就不行,充值也不行)
        2.一般为读数据比较多的应用,读写都频繁场景不适合,读多或者写多的都适合。
        3.读写并发访问都相对较低的业务(纯读纯写高并发也可以)(锁定机制问题)
        4.数据修改相对较少的业务(阻塞问题)
        5.以读为主的业务,例如:www.blog,图片信息数据库,用户数据库,商品库等业务
        6.对数据一致性要求不是很高的业务。
        7.中小型的网站部分业务会用。
        小结:单一对数据库的操作都可以示用MyISAM,所谓单一就是尽量纯读,或纯写(insert,update,delete)等。

2.MyISAM 엔진 튜닝 필수

        1.设置合适的索引(缓存机制)(where、join后面的列建立索引,重复值比较少的建索引等)
        2.调整读写优先级,根据实际需求确保重要操作更优先执行,读写的时候可以通过参数设置优先级。
        3.启用延迟插入改善大批量写入性能(降低写入频率,尽可能多条数据一次性写入)。
        4.尽量顺序操作让insert数据都写入到尾部,较少阻塞。
        5.分解大的操作,降低单个操作的阻塞时间,就像操作系统控制cpu分片一样。
        6.降低并发数(减少对MySQL访问),某些高并发场景通过应用进行排队队列机制Q队列。
        7.对于相对静态(更改不频繁)的数据库数据,充分利用Query Cache(可以通过配置文件配置)或memcached缓存服务可以极大的提高访问频率。
        8.MyISAM的Count只有在全表扫描的时候特别高效,带有其他条件的count都需要进行实际的数据访问。
        9.可以把主从同步的主库使用innodb,从库使用MyISAM引擎。主库写,从库读可以(不推荐,有些麻烦的地方,市场上有人这么用)。
不支持事务、表锁设计、支持全文索引,主要面向一些 OLAP 数 据库应用,在 MySQL 5.5.8 版本之前是默认的存储引擎(除 Windows 版本外)。数据库系统 与文件系统一个很大的不同在于对事务的支持,MyISAM 存储引擎是不支持事务的。究其根 本,这也并不难理解。用户在所有的应用中是否都需要事务呢?在数据仓库中,如果没有 ETL 这些操作,只是简单地通过报表查询还需要事务的支持吗?此外,MyISAM 存储引擎的 另一个与众不同的地方是,它的缓冲池只缓存(cache)索引文件,而不缓存数据文件,这与 大多数的数据库都不相同。

2.InnoDB 엔진

        介绍:InnoDB引擎是MySQL数据库的另一个重要的存储引擎,正称为目前MySQL AB所发行新版的标准,被包含在所有二进制安装包里。和其他的存储引擎相比,InnoDB引擎的优点是支持兼容ACID的事务(类似于PostGreSQL),以及参数完整性(即对外键的支持)。Oracle公司与2005年10月收购了Innobase。Innobase采用双认证授权。它使用GNU发行,也允许其他想将InnoDB结合到商业软件的团体获得授权。

InnoDB引擎特点:
        1.支持事务:支持4个事务隔离界别,支持多版本读。
        2.行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响。
        3.读写阻塞与事务隔离级别相关(有多个级别,这就不介绍啦~)。
        4.具体非常高效的缓存特性:能缓存索引,也能缓存数据。
        5.整个表和主键与Cluster方式存储,组成一颗平衡树。(了解)
        6.所有SecondaryIndex都会保存主键信息。(了解)
        7.支持分区,表空间,类似oracle数据库。
        8.支持外键约束,不支持全文索引(5.5之前),以后的都支持了。
        9.和MyISAM引擎比较,InnoDB对硬件资源要求还是比较高的。
        
        小结:三个重要功能:Supports transactions,row-level locking,and foreign keys

1.InnoDB 적용 엔진 생산 비즈니스 시나리오

        1.需要事务支持(具有较好的事务特性,例银行业务)
        2.行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成。
        3.数据更新较为频繁的场景,如:BBS(论坛)、SNS(社交平台)、微博等
    
        4.数据一致性要求较高的业务,例如:充值转账,银行卡转账。
        5.硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘IO,可以通过一些参数来设置,这个就不细讲啦~~~
        
        6.相比MyISAM引擎,Innodb引擎更消耗资源,速度没有MyISAM引擎快

InnoDB引擎适用的生产业务场景

2.InnoDB 엔진 튜닝 필수

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 存储引擎》一书。

3. 거래

事务介绍:
        简单地说,事务就是指逻辑上的一组SQL语句操作,组成这组操作的各个SQL语句,执行时要么全成功要么全失败。
        例如:你给我转账5块钱,流程如下
            a.从你银行卡取出5块钱,剩余计算money-5
            b.把上面5块钱打入我的账户上,我收到5块,剩余计算money+5.
        上述转账的过程,对应的sql语句为:
                update 你_account set money=money-5 where name='你';
                update 我_account set money=money+5 where name='我';
        上述的两条SQL操作,在事务中的操作就是要么都执行,要么都不执行,不然钱就对不上了。
        这就是事务的原子性(Atomicity)。
    事务的四大特性:
        1.原子性(Atomicity)
            事务是一个不可分割的单位,事务中的所有SQL等操作要么都发生,要么都不发生。
        2.一致性(Consistency)
            事务发生前和发生后,数据的完整性必须保持一致。
        3.隔离性(Isolation)
            当并发访问数据库时,一个正在执行的事务在执行完毕前,对于其他的会话是不可见的,多个并发事务之间的数据是相互隔离的。也就是其他人的操作在这个事务的执行过程中是看不到这个事务的执行结果的,也就是他们拿到的是这个事务执行之前的内容,等这个事务执行完才能拿到新的数据。
        4.持久性(Durability)
            一个事务一旦被提交,它对数据库中的数据改变就是永久性的。如果出了错误,事务也不允撤销,只能通过'补偿性事务'。
        
    事务的开启:
        数据库默认事务是自动提交的,也就是发一条sql他就执行一条。如果想多条sql放在一个事务中执行,则需要使用事务进行处理。当我们开启一个事务,并且没有提交,mysql会自动回滚事务。或者我们使用rollback命令手动回滚事务。

4. 기타 엔진 도입

#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
黑洞存储引擎,可以应用于主备复制中的分发主库。

MySQL 数据库还有很多其他存储引擎,上述只是列举了最为常用的一些引擎。如果 你喜欢,完全可以编写专属于自己的引擎,这就是开源赋予我们的能力,也是开源的魅 力所在。

스토리지 엔진의 5.

테이블을 만들 때 1, 엔진을 지정

create table innodb_t2(id int)engine=innodb;

2, 기본 스토리지 엔진은 구성 파일에 지정된

linux:vim /etc/my.cnf   windows:my.ini文件
[mysqld]
default-storage-engine=INNODB  #配置默认引擎,现在用的mysql默认基本都是InnoDB,所以其实都可以不用配置了
innodb_file_per_table=1  #表示独立表空间存储,可以不写

테이블을 만들 때 3 가지 엔진은 다른 파일을 생성

    네 개의 테이블은 테스트 데이터를 삽입, 이노,의 MyISAM, 메모리, 블랙홀 스토리지 엔진을 사용 하였다 만들기

#下面是使用四个不同的引擎来创建的表
create table t1(id int)engine=innodb;
create table t2(id int)engine=myisam;
create table t3(id int)engine=memory;
create table t4(id int)engine=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人家设定的规则就是这样存储表的,使用人家的系统,就要理解人家的规则。

오라클의 데이터 저장 관리 메커니즘과 SQL Server의 모든에서 동일합니다. 그리고 MySQL 데이터베이스 스토리지 엔진을 (를) 제공합니다. 사용자가 데이터 테이블에 대한 수요에 따라 서로 다른 스토리지 엔진을 선택할 수 있습니다, 사용자는 자신의 필요에 따라 자신의 스토리지 엔진을 작성할 수 있습니다.

  온라인 온라인 트랜잭션 처리 OLTP (온라인 트랜잭션 처리), (온라인 분석 처리) 분석 처리 OLAP : 오라클 엔진에 존재하지 않는 개념은 데이터 처리는 크게 두 가지 범주로 나눌 수 있습니다. 주요 응용 프로그램은 기존의 OLTP 관계형 데이터베이스 등의 금융 거래 등을 중심으로 기본적인 일상적인 거래이다. OLAP 데이터웨어 하우스 시스템은 의사 결정 지원에 초점을 맞춘 정교한 분석 작업을 지원하는 기본 응용 프로그램이며, 직관적 인 쿼리 결과를 제공합니다.

추천

출처www.cnblogs.com/zdqc/p/11433300.html