(一)网络连接层多种语言提链接方式(二)服务层第二层服务层是MysqL的核心,MysqL的核心服务层都在这一层,查询解析,sql执行计划分析,sql执行计划优化,查询缓存,以及跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。通过下图来观察服务器的内部结构
(三)存储引擎层负责MysqL中数据的存储与提取。服务器中的查询执行引擎通过API与存储引擎进行通讯,通过接口屏蔽了不同存储引擎的差异。MysqL采用插件式的存储引擎。MysqL为我们提供了许多存储引擎,每一种存储引擎有不同的特点,我们可以根据不同的业务特点,选择最适合的存储引擎。如果对存储引擎的性能不满意,可以通过修改源码来得到自己想要发到的性能。例如阿里巴巴的X-Engine,为了满足企业的需求facebook与Google都对innodb存储引擎进行了扩充最常用的就是innodb和myisam数据库存储引擎被设计为可插拔的架构:在不影响当前业务下,可随时切换当前存储引擎,已达到存储性能的要求
查看存储引擎
show engines;切换换引擎
ALTER tabledemo1
.classes
ENGINE = MyISAM ;(四)系统文件层数据保存的位置opt:这个文件不属于任何数据库的任何表。存了默认的字符集编码 我们一般将表设置字符集编码就是utf8_general_ci,支持中文支持表情字符集编码:utfmb4 frm:记录表结构,不是MyISAM特有的my.ini配置文件: interactive_timeout=120,120秒的交互环境链接超时时间,可以自行增加 二、数据库的锁什么是锁
锁主要作用是管理共享资源的并发访问锁用于实现事务的隔离性锁定类型
共享锁(也称为读锁):针对同一份数据,多个读 *** 作可以同时进行而不会相互影响独占锁(也称写锁):当前写 *** 作没有完成前,它会阻断其他写锁和读锁锁的粒度
表级锁:锁的是整个表,即使 *** 作一条记录也会锁住整个表,不适合高并发的 *** 作行级锁:锁的是某行数据,并发比表级锁好,作时只锁某一行,不会其他行有影响三、数据库的引擎如何选择存储引擎
人部分情况下,InnoDB都是正确的选择,可以简单地对那为一句话“除非需要用到某些InnoDB不具备的特性,并且没有其他方法可以替代,否则都应该优先选择InnoDB引擎”同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。参考条件
事务
如果应用需要事务支持,那么InnoDB(或者XTradB)是目前最稳定并且经过验证的选择备份
如果可以定期地关闭服务器来执行备份,那么备份的因素可以忽略。反之,如果需要在线备份,那么选择InnoDB就是基本的要求崩溃修复
MyISAM崩溃后发生损坏的概率比InnoDB要高很多,而且恢复速度也要慢应用举例
日志型应用—MyISAM只读或者大部分只读的表----MyISAM订单处理----InnoDB对比项 | MyiSAM | innoDB |
---|---|---|
主外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行级锁 | 表锁 | 行锁 |
缓存 | 只缓存索引,不缓存真实的数据 | 不仅缓存索引还要缓存真实数据,对内存要求极高,而且内存大小对性能有决定性的影响 |
表空间 | 小 | 大 |
关注点 | 性能 | 事务 |
默认安装 | Y | Y |
特性
1.并发性与锁级别:锁级别使用的是表级锁,加锁后会将整张表都上锁,谁都不能动,只有当前执行完毕才可以。并发性不好2.表损坏修复:不常用3.支持表的压缩:节约空间,查询更快。如果压缩后数据发生变化要重新压缩4.插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。# 检查表状态,可以看是否被损坏check table 表名# 修复表repair table 表名
限制
版本 < MysqL5.0时默认表大小为4G,如存储大表则要修改MAX_Rows和AVG_ROW_LENGTH版本>5.0时默认支持256TB适用场景
1.非事务型应用2.只读类应用(二)InnoDB5.5之后版本默认存储引擎支持事务的ACID特性InnoDB 使用表空间进行数据存储表空间
on 独立表空间 默认ontablename.ibd 默认,特有的 off 系统表空间: ibdatax X是一个数字,ibdatax 没有保存在响应的数据库文件夹里面,而是在外部data文件夹里面 系统表空间和独立表空间如何选择系统表空间会产生IO瓶颈,刷新数据的时候是顺序进行的所以会产生文件的IO瓶颈独立表空间可以同时多个文件刷新数据# 查看表空间show variables like 'inoodb_file_per_table# 如何切换到系统表空间set global inoodb_file_per_table=off
特性
1.支持事务的ACID特性2.Innodb支持行级锁,可以最大程度的支持并发3.支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除 *** 作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。(三)CSV文件系统存储特点
数据以文本方式存储在文件中.CSV文空间存储表内容,自己编辑文件会有错.CSM文件存储表的元数据如表状态和数据量.frm文件存储表结构信息建表的时候不能自增,不支持主键、索引。不予许字段有非空的应用场景
适用于一些中间表(四)memory也称HEAP存储引擎所以数据保存在内存中,如果MysqL服务器重启数据会丢失,但是表结果结构会保存下来,比较危险存在内存上的,所以读取速度要快的多,这也是为什么我们也要学redis、mongoDB,存储在内存的数据库特性
支持HASH等值索引和BTree范围索引, 默认HASH等值索引,innoDB只支持BTree指定索引方式:create index IDx_titile using btree on 表(字段) 所有字段都为固定长度varchar(10) = char(10),两种都一样了不支持BLOB和TEXT等大字段memory存储引擎使用表级锁默认最大64M max_nreap_table_size = 64M所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。 总结以上是内存溢出为你收集整理的第四章- MySQL数据库的架构 - MySQL引擎对比- python学习笔记32全部内容,希望文章能够帮你解决第四章- MySQL数据库的架构 - MySQL引擎对比- python学习笔记32所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)