第四章- MySQL数据库的架构 - MySQL引擎对比- python学习笔记32

第四章- MySQL数据库的架构 - MySQL引擎对比- python学习笔记32,第1张

概述数据库架构一、数据库的整体架构架构:四层(一)网络连接层多种语言提链接方式(二)服务层第二层服务层是MySQL的核心,MySQL的核心服务层都在这一层,查询解析,SQL执行计划分析,SQL执行计划优化,查询缓存,以及跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。通过下图来 数据库的架构一、数据库的整体架构架构:四层

(一)网络连接层多种语言提链接方式(二)服务层第二层服务层是MysqL的核心,MysqL的核心服务层都在这一层,查询解析,sql执行计划分析,sql执行计划优化,查询缓存,以及跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。通过下图来观察服务器的内部结构

(三)存储引擎层负责MysqL中数据的存储与提取。服务器中的查询执行引擎通过API与存储引擎进行通讯,通过接口屏蔽了不同存储引擎的差异。MysqL采用插件式的存储引擎。MysqL为我们提供了许多存储引擎,每一种存储引擎有不同的特点,我们可以根据不同的业务特点,选择最适合的存储引擎。如果对存储引擎的性能不满意,可以通过修改源码来得到自己想要发到的性能。例如阿里巴巴的X-Engine,为了满足企业的需求facebook与Google都对innodb存储引擎进行了扩充最常用的就是innodb和myisam数据库存储引擎被设计为可插拔的架构:在不影响当前业务下,可随时切换当前存储引擎,已达到存储性能的要求

查看存储引擎

show engines;

切换换引擎

ALTER table demo1.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
对比项MyiSAMinnoDB
主外键不支持支持
事务不支持支持
行级锁表锁行锁
缓存只缓存索引,不缓存真实的数据不仅缓存索引还要缓存真实数据,对内存要求极高,而且内存大小对性能有决定性的影响
表空间
关注点性能事务
默认安装YY
(一)MyISAMMysqL5.5之前的版本默认存储引擎,后面就是InnoDBMyISAM存储引擎表由MYD(表的数据文件)和MYI(表的索引)组成 独有的两个文件

特性

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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1184868.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存