MySQLAtitit.数据库存储引擎的原理与attilax 总结

Atitit.数据库存储引擎的法则和attilax 总结

 

1. 囤引擎是呀1

2. 旁数据库系统(包括大部分商选择)仅支持一栽类型的数存储2

3. 表的积存有三独文本:结构+数据+索引2

4. 页跟字段2

5. 数额存取的挑:行存储还是排存储?3

6. 宽广的蕴藏引擎3

6.1. 简便类型MyISAM、3

6.2. 苛类型,支持工作及外键 MySQL存储引擎【InnoDB、3

6.3. InnoDB数额存储结构3

6.4. Memory】(Heap) 存储引擎5

6.5. NDBCluster分布式存储引擎6

7. other6

7.1. CSV: 逻辑上由于逗号分割数据的贮存引擎。它见面当数码库子目录里啊每个数据表创建一个.CSV文件。这是一致栽普通文书文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。6

7.2. Merge :将定数额之MyISAM表联合而成一个完好无损,在超大规模数据存储时大有因此7

7.3. Archive :非常适合存储大量底独立的,作为历史记录的数据。因为它不经常于读取。Archive拥有高效之插入速度,但其对查询的支撑相对比较差7

7.4. Federated储存引擎7

8. 参考7

 

 

1. 囤引擎是什么

例如,如果您于研大量底现数据,你或许得运用内存存储引擎。内存存储引擎能够当内存中储存所有的报表数据。又要,你也许需要一个支持事务处理的数据库(以保事务处理不成事时数的回退能力)。

这些不同之技巧与配套的相干职能以MySQL中给叫做存储引擎(也如作表类型)。MySQL默认配置了多不一之贮存引擎,可以先安装或在MySQL服务器被启用。你得选适用于服务器、数据库和表格的仓储引擎,以便在选如何存储你的信、如何寻找这些信以及若用而的数量做什么性质和效果的时段也您提供最好可怜的灵活性。

择怎么存储和寻找你的数量的这种灵活性是MySQL为什么这样让欢迎之主要缘由。其它数据库系统(包括大部分经贸选择)仅支持一种植类型的数额存储。遗憾之是,其它品类的数据库解决方案以的“一个尺寸满足整需”的点子表示你或就是牺牲局部性质,要么你就用几独小时甚至几上之年华详细调整而的数据库。使用MySQL,我们只是需要改我们采用的仓储引擎就可以了[1] 

 

  存储引擎说白了即是怎么样存储数据、如何呢存储的数码建立目录和安翻新、查询数据等技巧之兑现方式。因为当关系数据库中多少的存储是以表的款型储存的,所以存储引擎也足以称呼表类型(即存储和操作此表的档次)。

 

 

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

   

2. 旁数据库系统(包括大部分买卖选择)仅支持一种类型的数量存储

 在Oracle 和SQL Server等数据库被单独来平等栽存储引擎,所有数据存储管理机制还是如出一辙的。而MySql数据库提供了多储存引擎。用户可以根据不同之需求呢数据表选择不同之积存引擎,用户为足以因自己之待编制好之囤引擎。

除此以外,Mysql的仓储引擎接口定义良好。有趣味的开发者通过看文档编写好之蕴藏引擎

 

3. 表的储存有三只文件:结构+数据+索引

.frm文件,存储表的组织

.myd文件,存储表的数码

.myi文件,存储表的目录

 

4. 页以及字段

SQL Server 中的为主数据存储单元是页

多少页包括数据行中除text、ntext和 image以外的具有数据类型,text、ntext和 image是保留于单独的页中的 。数据行是连续地坐落页上,紧接在页头之后。一个行偏移的发明开为页的末尾。

行偏移表包含页上每一行的一个条条框框。每一个条条框框记录了该行的第一只字节距离页的发端的相距。行偏移表中之条目的逐条及页上行的依次是倒转的。在SQL Server 7.0中,行不克超过页,

 

5. 数量存取的挑:行存储还是排存储?

实则列存储并无是什么新定义,早在1985年SIGMOD会议及虽来文章” A decomposition storage model”对DSM(decomposition storage model)做了比较详细的介绍,而Sybase更以2004年左右虽推出了排存储的Sybase IQ数据库系统(见200年VLDB文章” Sybase iq multiplex – designed for analytics”),主要用来在线分析、数据挖掘等查询密集型应用。

排存储,缩写为DSM,相对于NSM(N-ary storage model),其重点区别在于,DSM将有所记录着同字段的数聚合存储,而NSM将各国条记下之所有字段的数码聚合存储,如下图所示:

列存储有啊亮点?

纵使我手上可比浅的明白,列存储的要优点有个别只:

1) 每个字段的多少聚集存储,在查询才需要少数几乎独字段的上,能大大减少读取的数据量,据C-Store, MonetDB的作者考察以及剖析,查询密集型应用的风味有就是是查询一般只有关注少数几个字段,而相互呼应的,NSM中老是必读取整长条记下;

2) 既然是一个字段的数量聚集存储,那就是更易吧这种集存储设计更好的压缩/解压算法。

列存储适合用在什么场合?

OLAP,数据仓库,数据挖掘等查询密集型应用。当然,列存储数据库并无是说完全无克拓展翻新操作,其实她的更新操作性能并无是充分不同,一般也足够用,但是单不苟自己之询问性能,另外一边为不如Oracle这种特别做OLTP的数据库,所以一般就非领取这。

排存储不切合用当啊场合?

相对来说,不相符用当OLTP,或者更新操作,尤其是插、删除操作频繁之场合。

呢甚上世纪80年代就起的定义现在以重炒起来了吧?

2005年VLDB有篇稿子(“One Size Fits All – An Idea Whose Time Has Come and Gone”),就是死老牛M. Stonebraker写的,明确指出,时代变了,指望一个数据库产品即统一天下的光阴都一去不复还了。于是,这个老牛在2005年左右召开了C-Store,一个排存储的数据库原型系统,在VLDB, SIGMOD等一等国际会达成沃了几桶水后,

5.1. 4发展史

  有篇稿子(“One Size Fits All – An Idea Whose Time Has Come and Gone”),就是生老牛M. Stonebraker写的,明确指出,时代变了,指望一个数据库产品就是统一天下的小日子就一去不复还了。于是,这个老牛在2005年左右开了C-Store,一个排列存储的数据库原型系统,在VLDB, SIGMOD等一流国际会达成沃了几乎桶水后,拉了平等协办人下开了个铺面为Vertica,将那商业化,专注于数据仓库、在线分析等市场,最近般还大方便之;顺便说一下,为了实现上面的思量,这个老牛在同期又开了H-Store,一个主内存数据库原型系统,没怎么灌水就又照顾了一致增援人起了单铺面被VoltDB,将该商业化,专注于同台事务处理。

M. Stonebraker在达成世纪70年代带头进行关系数据库管理体系的兑现工作,做下了Ingres,其中灌水无数,从夫原型系统基础及发生了累累商贸数据库软件,包括 Sybase、Microsoft SQL Server、NonStop SQL、Informix 等,而所谓的卓绝先进的开源数据库系统PostgreSQL也是Ingres的一个后分支。

 

6. 大规模的仓储引擎

6.1. 简类型MyISAM、

3.4:MYISAM存储引擎的优缺点:

亮点:占用空间稍加,处理速度快(相对InnoDB来说)

规定:不支持工作之完整性和并发性

表级锁定:其锁定机制是表级索引,这虽然足被锁定的落实资产非常粗但是呢又大大降低了其出现性能

MyISAM的Count只发生以全表扫描的时特意快,带有另外条件的count都待展开实际的多寡看

 

6.2. 扑朔迷离类型,支持工作与外键 MySQL存储引擎【InnoDB、

6.3. InnoDB数额存储结构

1.MySQL将有所数据还逻辑地存放于ib_data1文书被,我们称之为表空间。当然,你也可以一个表对应一个物理文件,将innodb_file_per_table设置成ON即可。
2.表空间又扛为成段,有数据段(leaf node segment),索引段(none-leaf node segment),回滚段(rollback segment)。表空间由这些段和页组成,比如32页碎片页。
3.列段以扛为成区,InnoDB每次最好多可申请4独区,即4M底囤空间。
4.每个区而扛为成页,一个分割分为64页,每个页的分寸是16KB,大小非可知转移,这吗一定了一个区的轻重也4M。页是MySQL操作的无限小逻辑单位。
5.InnoDB凡劈向行的,这虽意味着数据行存放在页中,每页最多能记录7992行数量。
6.MySQL概念了不同作用的页类型,比如B-Tree Page, Undo Log Page等,我们无限关心的凡B-Tree Page(数据页)。实际数目就是盖如此的页逻辑实体是于表空间,总是因为B+树结构索引组织的。
7.换句话虽说,实际数目一行一行地存放于B-Tree页中,这些页都放在数据段leaf node segment中。B-Tree Page是B+树的纸牌节点。
8.一个B-Tree树,由7部分整合

· 8-1.File Header,这里记录了页在表空间的一部分消息,比如达一致页,下一致页,属于哪个表空间等等

· 8-2.Page Header, 这里记录了页本身的有的囤积信息。比如第一独记录的职务,记录数,最后插入记录行的职务,该页的索引ID等等

· 8-3.Infimum & Supermum Records, MySQL虚拟的老二个实施记录,用来限制记录的界线。分别代表此页中其他pk值还多少的价和另pk值还格外之值。

· 8-4.user records, 实际存储的行记录。

· 8-5.free space,空闲空间,同样是链表结构。当一个数额记录删除后,就会加盟到空闲链表中

· 8-6.page directory, 存放了笔录之对立位置。注:聚集索引自找不顶具体的一模一样久记下。而是通过 聚集索引找到该记录所当的页,然后又经Page Directory进行第二区划查找找到实际多少。

· 8-7.File Trailer, MySQL InnoDB利用她来保管页完整地刻画副磁盘。

上图中重点有以下几栽存储文件:

1)表结构定义文件(.frm):MySQL里每个表和每个视图都发生一个相应的.frm文件用于记录表和视图的概念。注意:该文件及仓储引擎无关,属于MySQL数据库本身的公文。

2)默认表空间文件(ibdata)

3)单独表空间文件(.ibd)

 

 

6.4. Memory】(Heap) 存储引擎

 

 

4.1:Memory存储引擎的文件存储形式

Memory存储引擎也会见再度磁盘上形成一个 .frm的发明结构文件,只是说明的数据件并无为文件之花样存放于磁盘上。鉴于其数额存放在内存里,因此,访问速度更快。但需要 要考虑的凡:内存上数据的持久性。

4.2:Memory存储引擎的索引类型

默认的是哈希索引,也支持BTree索引

 

6.5. NDBCluster分布式存储引擎

1.特性

  分布式:分布式存储引擎,可以由多只NDBCluster存储引擎组成集群分别存放整体数量的平等组成部分

  支持工作:和Innodb一样,支持工作

  可和mysqld不在同一雅主机:可以和mysqld分开是让独立的主机及,然后通过网及mysqld通信交互

  内存需求量巨大:新版本索引以及被索引的数要存放在内存中,老版本有数据以及目录必须是与外存中

Cluster/NDB :高冗余的存储引擎,用多玉数码机器并提供劳务以加强总体性和安全性。适合数据量大,安全以及总体性要求大的利用

 

7. other

 

7.1. CSV: 逻辑上由于逗号分割数据的蕴藏引擎。它见面在多少库子目录里也每个数据表创建一个.CSV文件。这是平等种家常文书文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。

 

7.2. Merge :将毫无疑问数额之MyISAM表联合而成为一个完全,在超大规模数据存储时死有因此

7.3. Archive :非常适合存储大量之单身的,作为历史记录的多少。因为她不常给读取。Archive拥有便捷的插速度,但该针对性查询的支持相对较差

无独有偶而该名所示,Archive非常适合存储归档数据,如日志信息。它只支持INSERT和SELECT操作,其设计的要目的是供便捷的插入和减少功能。

7.4. Federated仓储引擎

Federated存储引擎不存数量,它起码指于同一大远程MySQL数据库服务器上的阐明,非常相近于Oracle的透明网关

 

 

8. 参考

MySQL存储引擎【InnoDB、MyISAM、Memory】 – mysql数据库栏目 – 红黑联盟

MySQ 存储引擎选择 – ggjucheng – 博客园.html

仓储引擎_百度百科.html

( imp )mysql 数据结构详解-singerinsky-ChinaUnix博客.html

(imp)MySQL数据库的系架构 – dongdong_java的特辑 – 博客频道 – CSDN.NET.html

SQLServer数据库中蕴藏引擎深入探讨-mssql-电脑编程网.html

(imp )大数额存取的选料:行存储还是排存储?_存储_比特网.html

网站地图xml地图