• 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以后默认的表存储方式)

  • 相关阅读:
    IIS服务器应用程序不可用的解决办法
    C#几个经常犯错误汇总
    C1flexgrid格式化
    图片自动按比例缩小代码(防止页面被图片撑破)
    VSS2005的使用与配置过程
    ASP.NET通过IHttpModule实现伪静态
    五一游玩收藏
    plants
    几个JS的方法
    英式英语VS美式英语的差异
  • 原文地址:https://www.cnblogs.com/tim1blog/p/9878584.html
Copyright © 2020-2023  润新知