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. JVM ZeroTLAB 是什么意思呢?

    ZeroTLAB 是 JVM 的一个布尔型 Flag,意思是是否将新创建的 TLAB 内的所有字节归零. 默认:false 举例:-XX:+ZeroTLAB 当分配出来 TLAB 之后,根据 Zero ...

  2. ACM-ICPC 2018 徐州赛区网络预赛 B BE, GE or NE 【模拟+博弈】

    题目:戳这里 题意:A和B博弈,三种操作分别是x:加a,y:减b,z:取相反数.当x或y或z为0,说明该操作不可取,数据保证至少有一个操作可取,给定一个区间(l,k)和原始数字m,如果A和B在n次操作 ...

  3. 快速计算类似斐波那契数列数列的数列的第N项,矩阵快速幂

    这个题有循环节,可以不用这么做,这个可以当一个模板 #include <iostream> #include <cstdio> using namespace std; typ ...

  4. cookie & session & token compare

    cookie & session & token compare cookie.session.token 区别和优缺点 存储位置 cookie 存在 client 端 session ...

  5. c++中运行lua

    video 下载lua源码将src下面除了 lua.c和luac.c 的文件全部添加到项目中 #include <iostream> #include "lua.hpp" ...

  6. Nestjs 设置https

    文档 只是用https import * as fs from 'fs'; import { NestFactory } from '@nestjs/core'; import { AppModule ...

  7. Android Studio 3.3.1 向avd模拟器发送本地文件

    "工具栏/View/Tool Windows/Device File Pxplorer" 选择模拟器在找到对应的文件夹upload即可

  8. DENIEL SOIBIM:真正自律的人都在做这些事情!

    生活节奏的加快,使得很多人无法适从.很多人,浑浑噩噩,庸庸碌碌,觉得一天做了很多事,却总是一事无成.还有些人,觉得得过且过也很好,但是到头来,却让自己陷入慌乱之中.本想要自由自在的生活,但是却往往却被 ...

  9. Spring学习过程中遇到的No bean named 'beanId' is defined报错

    ApplicationContext applicationContext= new ClassPathXmlApplicationContext("bean.xml");Obje ...

  10. SpringBoot+Vue豆宝社区前后端分离项目手把手实战系列教程02---创建后端工程

    本节代码开源地址 代码地址 项目运行截图 搭建后端工程 0.导入sql 在数据库导入 /* Navicat Premium Data Transfer Source Server : localhos ...