mysql_原理

作者: 飞翔的鲲 | 来源:发表于2018-05-23 17:19 被阅读19次

MySQL运行原理与基础架构
http://blog.csdn.net/quyuedage/article/details/51993409

并发控制和锁的概念


  1. 锁在功能上分为共享锁(shared lock)和排它锁(exclusive lock)即通常说的读锁和写锁。

事务的隔离级别


image.png

这个写的比较好
https://www.cnblogs.com/snsdzjlz320/p/5761387.html
数据库事务四种隔离级别
http://blog.csdn.net/tolcf/article/details/49283575

  1. READ UNCOMMITTED( 读未提交 ) , 一个事务能读取另一个交叉事务未提交的数据
    事务中的修改即使未提交也是对其它事务可见
  2. READ COMMITTED( 读提交 ) , 一个事务能读取另一个交叉事务提交后的数据
    事务提交后所做的修改才会被另一个事务看见,可能产生一个事务中两次查询的结果不同。
  3. REPEATABLE READ( 可重读 ) 一个事务不能读取另一个交叉事务的数据
    只有当前事务提交才能看见另一个事务的修改结果。解决了一个事务中两次查询的结果不同的问题。
  4. SERIALIZABLE( 串行化 )
    只有一个事务提交之后才会执行另一个事务。

存储引擎


  1. InnoDB引擎
   1.将数据存储在表空间中,表空间由一系列的数据文件组成,由InnoDB管理;

   2.支持每个表的数据和索引存放在单独文件中(innodb_file_per_table);

   3.支持事务,采用MVCC来控制并发,并实现标准的4个事务隔离级别,支持外键;

   4.索引基于聚簇索引建立,对于主键查询有较高性能;

   5.数据文件的平台无关性,支持数据在不同的架构平台移植;

   6.能够通过一些工具支持真正的热备。如XtraBackup等;

   7.内部进行自身优化如采取可预测性预读,能够自动在内存中创建hash索引等。
  1. MyISAM引擎
    1.MySQL5.1中默认,不支持事务和行级锁;

   2.提供大量特性如全文索引、空间函数、压缩、延迟更新等;

   3.数据库故障后,安全恢复性差;

   4.对于只读数据可以忍受故障恢复,MyISAM依然非常适用;

   5.日志服务器的场景也比较适用,只需插入和数据读取操作;

   6.不支持单表一个文件,会将所有的数据和索引内容分别存在两个文件中;

   7.MyISAM对整张表加锁而不是对行,所以不适用写操作比较多的场景;

   8.支持索引缓存不支持数据缓存。
  1. NDB集群引擎
    MySQL Cluster专用。

  2. 第三方存储引擎...

  3. 存储引擎选取

 4.存储引擎选取参考因素

1.是否有事务需求

 如果需要事务支持最好选择InnoDB或者XtraDB,如果主要是select和insert操作MyISAM比较合适,一般使用日志型的应用。

2.备份操作需求

 如果能够关闭服务器进行备份,那么该因素可以忽略,如果需要在线进行热备份,则InnoDB引擎是一个不错的选择。

3.故障恢复需求

 在对恢复要求比较好的场景中推荐使用InnoDB,因为MyISAM数据损坏概率比较大而且恢复速度比较慢。

4.性能上的需求

 有些业务需求只有某些特定的存储引擎才能够满足,如地理空间索引也只有MyISAM引擎支持。所以在应用架构需求环境中也需要管理员折衷考虑,当然从各方面比较而言,InnoDB引擎还是默认应该被推荐使用的。

相关文章

网友评论

    本文标题:mysql_原理

    本文链接:https://www.haomeiwen.com/subject/yhyezxtx.html