mysql -> 简介&体系结构_01

数据库简介

  数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。

  所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。

关系型数据库的特点

二维表
典型产品 Oracle传统企业,MySQL是互联网企业
数据存取是通过SQL(结构化查询语句)
最大特点,数据安全性方面强(ACID) 

数据库使用排名

数据来源: https://db-engines.com/en/ranking


 

MySQL数据库版本介绍

    5.0--5.1--5.5--5.6--5.7--8.0

MySQL的市场应用

    a)  中、大型互联网公司

    b)  市场空间:互联网领域第一

    c)  趋势明显

    d)  同源产品:MariaDB、perconaDB

mysql发展史  

1979年,报表工具Unireg出现。
1985 年,以瑞典David Axmark 为首,成立了一家公司(AB前身),IASM引擎出现。
1990年,提供SQL支持。
1999-2000年,MySQL AB公司成立,并公布源码,开源化。
2000年4月BDB引擎出现,支持事务。
2008年1月16日,Sun(太阳微系统)正式收购MySQL。
2009年4月20日,甲骨文公司宣布以每股9.50美元,74亿美元的总额收购Sun电脑公司,MySQL 转入Oracle 门下。
2013年6月18日,甲骨文公司修改MySQL授权协议,移除了GPL。但随后有消息称这是一个bug。

MySQL的特点简介

开源、社区版免费、简单,使用方便,可靠、稳定、安全、社区活跃

  

Mysql体系结构

  mysql是一个典型的c/s模式,服务端与客户端两部分组成

服务端程序 mysqld
客户端程序 mysql自带客户端(mysql、mysqladmin、mysqldump等)
第三方客户端  API接口(php-mysql)

 

MySQL在启动过程

  1、启动后台守护进程,并生成工作线程

     2、预分配内存结构供MySQL处理数据使用

  # 实例就是MySQL的后台进程+线程+预分配的内存结构  --> 完整的数据库管理系统

  # 多实例==完整的数据库管理系统*n

 

mysql连接方式

TCP/IP 连接   网络连接串(通过用户名 密码 IP 端口进行连接)

mysql -uroot -p123 -h 127.0.0.1 -P 3306

socket 连接   网络套接字(用户名 密码  socket文件)

mysql -uroot -p123 -S /application/mysql/tmp/mysql.sock

在linux中使用mysql命令不加其他的参数连接方式即

mysql -uroot -p123     //使用的是套接字文件方式登录的

  

Mysqld服务的构成

 

1、连接层

1)提供连接协议(TCPIP,socket2)用户与密码的验证模块
3)针对每个连接提供一个连接线程(接收用户命令,返回结果给用户)

2、SQL层

sql即结构化的查询语句(数据库内部逻辑语言)sql92 sql99

      DDL 数据库定义语言

      DCL 数据库控制语言

      DML 数据库操作语言

      DQL 数据查询语言

sql层处理流程  

select * from wordpress.user;

1、语法检查模块
2、对象权限及存在性检查模块
3、语义检查模块(看看SQL是什么类型的DDL?DCL? DML? DQL?),交给对应类型的解析器继续处理
4、解析器模块处理对应语句,解析成执行计划。
5、优化器(5.7优化可以选择性使用他提供的多种代价模型),选择《他觉得》代价最小的执行计划,交由下一个模块继续处理
6、执行器:按照优化器选择,执行语句,得到结果(目标数据行在哪个文件上(t1.ibd)。的哪个位置(1000页))。
将执行结果,交给下一层继续处理
7、提供查询缓存 query_cache(需要手工开启才能使用)
    (1)每次运行一条语句的时候,首先做个hash运算,得出一串值(SQL ID),拿着SQL_ID缓存中找,如果匹配上,直接返回结果
    (2)生成缓存时,拿着SQL_ID+结果存到缓存中
8、查询日志记录(binlog)    
我们还可以使用 Redis替代query_cache .

3、存储引擎层

负责和底层磁盘打交道,根据上层提供的获取数据的方法,得到数据(16进制)后,再转给上层,结构化成表模式
查看数据库当前运行的进程

存储引擎层功能:

    存数据、取数据

    数据的不同存储方式

不同的管理方式:

        事务(增、删、改)

        备份恢复       

        高级功能(高可用的架构、读写分离架构)

mysql的逻辑结构

  逻辑构成是为了用户能够读懂数据出现的,让你更好的理解数据。

  管理数据的一种方式。

库(database)----> 目录
表(table) ----> 目录下的文件
表的内容 ----> 文件的内容
表的属性(元数据) ----> 文件的Inode
//切换库
mysql> use mysql;
//查看表 mysql
> show tables;
//查看列的信息(记录) mysql
> desc user;

mysql物理结构

对于Linux操作系统来讲,他的物理层是“柱面”
对于MySQL来讲,他是Linux系统之上的应用软件,他的物理层就是文件系统上的特定格式的文件
什么的格式是由MySQL<存储引擎>决定的
" tim [(none)]>show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

存储引擎简介

InnoDB: 支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
MyISAM: 插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。
MEMORY: 所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。
  注意:同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。

MySQL体系结构小结

sql 优化相关的理念

           解析器 : 执行计划  数据库执行sql的一种方式 

           优化器 : 知道基本规则,直接影响将来选择哪个执行计划

           查询缓存 : 生产环境中,一般会用redis memcached 来代替

逻辑结构

  库    就是一个目录,为了存放多张表

  表    在相应的库中,用多个文件来表示

                    myisam表 3个文件:(.myd数据文件  .myi索引文件 frm表 结构定义文件)

                    innodb:  2个或者一个,共享表空间(ibdata1 基表 元数据)、独立表空间(5.6以后默认的表存储方式)

posted @ 2018-10-30 18:18  少校的小木屋  阅读(255)  评论(0编辑  收藏  举报