MySQL 逻辑架构

连接管理与安全性

每个客户端连接都会有一个线程
认证基于用户名,原始主机信息和密码

优化与执行

Mysql会解析查询并进行优化
对于select会先检查查询缓存,能够找到就直接返回结果集

并发控制

读写锁

锁在COMMIT或ROLLBACK时自动释放

读锁(共享锁)

共享,不阻塞,多个用户可以同时读同一个资源

写锁(独占锁)

保证只有一个用户写入,防止其他用户写入或读取数据

锁粒度

加锁,锁的检查,锁的解除都是要消耗系统资源的
加锁的对象大小成为锁粒度

锁策略

在锁的开销与数据的安全性中寻求平衡

行锁

最大程度支持并发,MySQL服务器层没有实现,由存储引擎实现

表锁

开销最小
MySQL服务器可以根据自己的目的加上表锁而忽略存储引擎的锁机制

事务

一组原子性的SQL语句,要么全部执行,要么全部不执行
ACID
  1. 原子性: 要么全部执行,要么全部不执行
  2. 一致性: 状态的改变是完全的,不存在改变一半就被保存的情况
  3. 隔离性: 在提交前对其他事务不可见
  4. 持久性: 数据更改会永远保存

隔离级别

未提交读(Read Uncommited)

即使事务未曾提交,数据对于其他事务也是可见的.即事务可以读取未提交的数据,也叫脏读读脏数据

可提交读

即一个事务在提交之前,改变对其他事务是不可见的,又叫不可重复读,幻读(在一个事务读取数据后还未提交时,另一个事务更改了数据)

可重复读

解决了幻读和脏读的问题

可串行化

强制事务串行执行,给每一行数据加锁

死锁

死锁指两个或多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,从而造成的恶性循环
死锁发生后,只能通过部分或完全回滚事务才能解决
例子

事务日志

好处

  1. 避免频繁从内存向磁盘中写入数据(可以记录下日志操作,在后台慢慢一次写入,所以日志文件是追加写)
  2. 便于出现故障后的恢复

Mysql中的事务

自动提交(AUTOCOMMIT)

混合使用多种存储引擎

InnoDB: 支持事务
MyISAM: 不支持事务
不支持事务的表回滚不能撤销更改

隐式和显式锁定

显式: 自动加锁
隐式: 主动加锁

多版本并发控制(MVCC)

  • 一个列保存了创建时间,一个列保存删除时间(时间指版本号)
  • 每开始一个新的事务,系统版本号都会递增,并把事务开始时的版本号作为事务的版本号,供与查询到的每行版本号相匹配

MySql存储引擎

  • 表的定义存储在.frm文件中
  • 通过show table status 'tableName'查看表的相关定义信息

InnoDB

是MySql的默认事务型引擎,也是使用最广泛的存储引擎,被设计用来处理大量短期事务
  • 数据存储在表空间中
  • 采用MVCC实现并发,实现四种隔离级别,默认可重复读
  • 基于聚簇索引(第二索引必须包含主键)建立

MyISAM

缺点

  1. 不支持事务和行级锁
  2. 数据库崩溃后无法安全恢复

特性

  1. 对整张表加锁,而不是针对行,但在读取数据的时候依然可以插入新的数据(并发插入)
  2. 延迟更新索引键

其他引擎

CSV

用于转化.csv文件成数据库里的表

Memory

Archive

第三方引擎

选择合适的引擎

除非用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该优先选择InnoDB引擎
最好不要混用多种存储引擎!!!

更换表的引擎

ALTER TABLE

ALTER Table name Engine = InnoDB

导入与导出

创建与查询

 
 
 
 
 
 
 

MySql历史与架构的更多相关文章

  1. MySQL 高可用架构在业务层面的应用分析

    MySQL 高可用架构在业务层面的应用分析 http://mp.weixin.qq.com/s?__biz=MzAxNjAzMTQyMA==&mid=208312443&idx=1&a ...

  2. MySQL 数据库主从复制架构

    前文<MySQL 数据库事务与复制>分析了 MySQL 复制过程中如何保证 binlog 和事务数据之间的一致性,本文进一步分析引入从库后需要保证主从的数据一致性需要考虑哪些方面. 原生复 ...

  3. MYSQL企业常用架构与调优经验分享

    一.选择Percona Server.MariaDB还是MYSQL  mysql应用源码:http://www.jinhusns.com/Products/Download/?type=xcj 1.M ...

  4. 下载MySQL历史版本

    下载MySQL历史版本 地址:http://downloads.mysql.com/archives/community/

  5. Mysql高可用架构(主从同步)

    做高可用的优势 1.成本低 2.解决单点故障 3.不容易遇到性能瓶颈 一 .Mysql主从同步架构搭建案例 优点如下:·在业务繁忙阶段,在从服务器上可以执行查询工作(即我们常说的读写分离),降低主服务 ...

  6. MySQL集群架构:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken

    MHA简介 MHA可以自动化实现主服务器故障转移,这样就可以快速将从服务器晋级为主服务器(通常在10-30s),而不影响复制的一致性,不需要花钱买更多的新服务器,不会有性能损耗,容易安装,不必更改现有 ...

  7. 【MySQL大系】《Mysql集群架构》

    原文地址(微信):[技术文章]<Mysql集群架构> 本文地址:http://www.cnblogs.com/aiweixiao/p/7258444.html 点击关注微信公众号 1.主要 ...

  8. MYSQL 企业常用架构与调优经验分享

    一.选择Percona Server.MariaDB还是MYSQL  mysql应用源码:http://www.jinhusns.com/Products/Download/?type=xcj 1.M ...

  9. mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8

    mysql扩展性架构实践N库到2N 库的扩容,2变4.4变8 http://geek.csdn.net/news/detail/5207058同城 沈剑 http://www.99cankao.com ...

随机推荐

  1. Chapter Zero 0.1.3 其他单元设备以及运作流程

    其他单元设备 五大单元中的控制单元.算数逻辑段元都被整合到CPU的封装中, 但其实系统单元中,不止有CPU(控制单元.算数逻辑单元), 计算机单元还有哪些? 系统单元:系统单元包括CPU.主存储器(内 ...

  2. Linux 驱动框架---驱动中的异步

    异步IO是对阻塞和轮询IO的机制补充,所谓异步IO就是在设备数据就绪时主动通知所属进程进行处理的机制.之所以说是异步是相对与被通知进程的,因为进程不知道也无法知道什么时候会被通知:这一机制非常类似于硬 ...

  3. 阅文集团 招聘官网 bug

    阅文集团 招聘官网 bug https://join.yuewen.com/ 前端开发 zxx.jpg 张鑫旭 https://qidian.gtimg.com/yuewen/join/css/ima ...

  4. 从长度为 M 的无序数组中,找出N个最小的数

    从长度为 M 的无序数组中,找出 N个最小的数 在一组长度为 n 的无序的数组中,取最小的 m个数(m < n), 要求时间复杂度 O(m * n) 网易有道面试题 const minTopK ...

  5. Full Stack Web Development

    Full Stack Web Development Web Stacks MEAN (Mongo, Express, Angular and Node) LAMP (Linux, Apache, M ...

  6. Service Worker in Action

    Service Worker in Action https://caniuse.com/#feat=serviceworkers Service Workers 1 W3C Candidate Re ...

  7. local JSON file loader in js

    local JSON file loader in js "use strict"; /** * * @author xgqfrms * @license MIT * @copyr ...

  8. 新兴公链NGK Global如何借助Defi突围?

    Defi正在掀起持续不减的热度,在过去的一段时间里,以Uniswap为代表的去中心化交易所,使得以太坊重新焕发生机.币价也较以往上涨了50%有余.而且这波热度同样波及到交易所和其他公链市场. 但是波及 ...

  9. 【Notes_1】现代图形学入门——计算机图形学概述

    跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 计算机图形学概述 计算机图形学是一门将模型转化到屏幕上图 ...

  10. svn报错Previous operation has not finished; run 'cleanup' if it was interrupted