关系型数据库——MySQL

【MySQL架构图】

MySQL简要架构图如下图所示,引擎层以插件方式集成了不同的存储引擎,它们共用Server层对外提供服务。

   

  • 连接器:用于连接管理,进行身份认证及权限相关的管理。(登录MySQL)
  • 查询缓存区:执行查询语句时,先从缓存区查询。(该功能V8.0之后移除)
  • 分析器:未命中缓存时,对SQL进行词法分析、语法分析。
  • 优化器:按照MySQL认为的最优方案,生成执行计划。
  • 执行器:执行SQL,并从存储引擎返回数据。
  • 存储引擎:存储数据,提供读写接口

【MySQL存储引擎】

V5.5之前MySQL的默认存储引擎为MyISAM(ISAM:Indexed Sequential Access Method,即有索引的顺序访问方法。MyISAM是基于传统的ISAM优化而来)

V5.5之后,MySQL的默认存储引擎便更改为InnoDB,主要是为支持数据库事务安全而设计。

MyISAM vs InnoDB

  • 锁:MyISAM支持表级锁;InnoDB支持行级锁(默认)。因此并发操作时,InnoDB的效率要更高。
  • 性能:MyISAM执行大量select和insert操作时,效率更高;InnoDB执行大量update和insert操作时,效率更高。
  • 外键:MyISAM不支持;InnoDB支持外键。
  • 事务:MyISAM不支持事务操作;InnoDB支持数据库事务。
  • 崩溃后安全恢复:MyISAM不支持;InnoDB支持。
  • MVCC:MVCC:Multi-Version Concurrency Control,基于多版本的并发控制协议。作用于READ COMMITTED 和 REPEATABLE READ 两个隔离级别下,是一种乐观锁,相对基于锁的并发控制更加高效。最基本的原则是:读不加锁,读写不冲突。仅InnoDB支持。

【MySQL索引】

MySQL索引使用的数据结构主要有BTree索引 和 哈希索引 。查询结果为单条时,哈希索引性能更好;其余场景BTree索引更优。

InnoDB存储引擎下,数据文件和索引文件是一体的。表数据文件本身就是按B+Tree组织的一个索引结构,树的叶节点data域保存了完整的数据记录。

【MySQL日志模块】

MySQL的Server层自带有归档日志模块 binlog,每当MySQL执行更新操作时(insert、delete、update),SQL执行记录会记录到该日志中。该日志模块为所有存储引擎所共享。

引擎层中的InnoDB存储引擎还独有一个重做日志模块 redo log,也会用来记录SQL执行更新的操作。该模块可以保证MySQL崩溃后安全恢复,也是InnoDB可以支持事务操作的重要模块。

使用InnoDB执行更新操作的流程:

  分析器 —— 权限验证 —— 执行器 —— 存储引擎 ——记录redo log(prepare状态) —— 记录bin log —— 记录redo log(commit状态)

【MySQL部署模式】

  • 单点模式。常用的部署模式,但无法实现容灾。
  • 主从模式。一主多从,读写分离。解决单点负载瓶颈。主节点宕机,需将从节点切换为主节点来保证服务可用。
    • 主从模式下数据同步过程:

      1. 主节点负责写,并将更改操作记录到归档日志bin log中;
      2. 从节点的IO线程将主的binlog事件(sql语句) 同步本机上并记录在中继日志relay log里;
      3. 从节点的SQL线程按照relay log中记录顺序执行SQL,使得主从数据同步。
  • 集群模式。各节点均可对外提供读写服务,一个节点写的操作会同步到其他所有节点以满足数据一致性。但任意节点宕机不影响集群服务。

参考文献:(文章仅做交流学习,侵权即删!!)

1、https://github.com/Snailclimb/JavaGuide

2、https://blog.csdn.net/AGambler/article/details/84672849

原文地址:https://www.cnblogs.com/vikezhu/p/12008788.html

时间: 2024-10-08 05:33:04

关系型数据库——MySQL的相关文章

安装关系型数据库MySQL 安装大数据处理框架Hadoop

安装关系型数据库MySQL 安装大数据处理框架Hadoop 简述Hadoop平台的起源.发展历史与应用现状. 列举发展过程中重要的事件.主要版本.主要厂商: 国内外Hadoop应用的典型案例. (1)Hadoop的介绍: Hadoop最早起源于Nutch,Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取.索引.查询等功能.但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题.2003年.2004年谷歌发表的两篇论文为该问题提供了可行的解决方案,即

MongoDB 与传统关系型数据库mysql比较

与关系型数据库相比,MongoDB的优点: 转载自  http://blog.sina.com.cn/s/blog_966e430001019s8v.html①弱一致性(最终一致),更能保证用户的访问速度:举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精确值.这在某些情况下,例 如通过ATM查看账户信息的时候很重要,但对于Wordnik来说,数据是不断更新和增长的,这种“精确”的保证几乎没有任何意义,反而会产生很大的延 迟.他们需要的是一

Python3爬虫(九) 数据存储之关系型数据库MySQL

Infi-chu: http://www.cnblogs.com/Infi-chu/ 关系型数据库关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以关系型数据库的存储方式就是行列组成的表.每一列是一个字段,每一行是一条记录.表可以看成是摸个实体的集合,而实体之间存在关系,比如主键和外键常见的关系型数据库有:Oracle.MySQL.SQLite.SQL Server.DB2等 MySQL在Python2中,MySQL的链接库是MySQLdb, 而在Python3中,官方不支

关系型数据库MySql简介

什么是关系型数据库? 数据库就是用来存储数据的仓库,是一种特殊的文件. 根据存储的数据不同,划分为关系型数据库和非关系型数据库. 关系型数据库就是指 建立在关系模型基础上的数据库,通俗来讲这种数据库就是由多张表组成,并且这些表之间存在一定的关系. 关系型数据库的核心元素: 记录: 数据行 字段 :  数据列 数据表 : 数据行的集合 数据库 : 数据表的集合 主键 : 特殊的字段, 用来唯一标识记录的唯一性. 了解关系数据库,就需要了解到 RDBMS , 即关系型数据库管理系统. 所谓的关系型数

Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)

1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transformation,Sink.其中Source即为Flink计算的数据源,Transformation即为进行分布式流式计算的算子,也是计算的核心,Sink即为计算后的数据输出端.Flink Source原生支持包括Kafka,ES,RabbitMQ等一些通用的消息队列组件或基于文本的高性能非关系型数据库.而

关系型数据库--mysql 5.5.20 32位 数据库的安装

第二项是utf 编码格式 第三项可以自己选择GBK Enable root access from remote machins 选中是可以远程访问mysql服务端 安装结束.

关系型数据库与HBase的数据储存方式区别

如今Bigtable型(列族)数据库应用越来越广,功能也很强大.但是很多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表.存储.查询.本文以hbase举例讲述数据模式的变化. 传统关系型数据库(mysql,oracle)数据存储方式主要如下: 图一 上图是个很典型的数据储存方式,我把每条记录分成3部分:主键.记录属性.索引字段.我们会对索引字段建立索引,达到二级索引的效果. 但是随着业务的发展,查询条件越来越复杂,需要更多的索引字段,且很多值都不存在,如下图: 图二 上图是6个索

关系型数据库与NoSQL的对比

SQL(结构化的查询语言)数据库是过去四十年间存储数据的主要方式.20世纪90年代末随着Web应用和MySQL.PostgreSQL和SQLite等开源数据库的兴起,用户爆炸式的增长. NoSQL数据库自从20世纪60年代就已经存在了,直到MongoDB, CouchDB, Redis 和 Apache Cassandra等数据库的流行才获取了更多的关注. 你可以很容易地找到许多关于如何使用一款特定的SQL或NoSQL的教程,但是很少有讨论你为什么优先的使用一款而不适用另一款.我希望我能够填补这

数据库MYSQL学习系列一

一.MYSQL数据库基础 1.1-认识MYSQL 什么是数据库   计算机处理和存储的一切信息都是数据 计算机系统中一种用于存取数据的程序 一种: 计算机系统中有很多种能够存取数据的程序 它们各有特征和长处,有自己的使用范围 存取: 能够保存数据避免丢失 能够按照需求找到符合条件的数据 为什么要使用数据库 数据库帮助我们解决一下数据存取难题: 较大数据量 网络控制 并发访问 高性能要求 事务控制 持久化和和数据安全 查询数据需求逻辑复制 数据库分类 关系型数据库 MYSQL Oracle SQL