【MySQL】架构

打印 上一主题 下一主题

主题 1018|帖子 1018|积分 3054

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. MySQL架构根本明白

   与餐厅就餐类比明白
  

  • 每次数据库查询就像一次餐厅服务

    • 应用程序发出查询相当于点菜
    • MySQL剖析和实行查询,后厨根据订单制作食物
    • 事务管理保证数据的一致性,类似于结账的时候保证账单精确
    • 查询的时候思量优化器,类似于厨师选择最快的炒菜方法

   对应布局明白
  

    各个层级作用简朴明白
  连接层


  •  管理客户端的连接请求。负责身份验证线程复用连接限制、以及一些缓存管理。通过连接池,MySQL 可以高效地处理惩罚大量并发请求,淘汰频繁的连接创建和烧毁的开销
  • 像餐厅的迎宾员,负责安排客人入座,分配资源
服务层


  • NoSQL Interface:支持 NoSQL 的 CRUD 使用(主要是简朴的增删查改)。
  • SQL Interface处理惩罚 DML、DDL 语句,包括视图、存储过程和触发器。
  • Parser:将 SQL 语句剖析成数据库可以明白的使用,检查语法和权限。
  • Optimizer:根据查询语句的布局,选择实行查询的最佳路径。
  • Caches & Buffers:提供全局缓存,以及针对差别存储引擎的缓存机制。
  • NoSQL 和 SQL 接口像服务员,将客户端的请求转换为具体的使用。
  • 剖析器(Parser)和优化器(Optimizer)决定如何高效实行请求。
  • 缓存和缓冲区就像厨房预备的食材,淘汰重复使用,提高性能。
存储引擎层


  • InnoDB:支持事务、行级锁和外键约束,是 MySQL 默认存储引擎。
  • MyISAM:轻量级引擎,不支持事务,实用于读多写少的场景。
  • MEMORY:将数据存储在内存中,速度快但数据不长期。
文件系统层


  • 负责将数据以及日记文件存储在使用系统的文件系统上
  • 日记文件(如 redo、undo、错误日记等)
  • 数据库数据文件二进制日记配置文件
   缓存与缓冲区8.0以后不再使用
  MySQL8.0移除了全局查询缓存,因为其会成为高并发环境下性能瓶颈,同时InnoDB提供了更加高效的缓存机制,如今根本都推荐使用应用层缓存(Redis类似)解决高并发缓存题目,MySQL则负责专注于数据存储和查询优化
2. 连接层

2.1 网络端口和连接受理线程

   网络端口
  MySQL本质上是网络服务,IP地址和端标语可以找到特定的进程,该进程上运行的就是MySQL服务
配置网络端口(通过配置文件生效也可以自己手动配置)
  1. [mysqld]
  2. port=3306
  3. bind-address=0.0.0.0
  4. //bind-address参数设置MySQL监听的IP地址,0.0.0.0表示允许所有IP访问
  5. //限制特定IP访问时则可指定具体IP
复制代码
  连接受理线程
  类似于主从Reactor模式中的主Reactor专门管理连接


  • MySQL连接受理类似于主从Reactor模式,主Reactor负责接收客户端的连接请求,然后分发给专门的连接线程处理惩罚。这样可以分担连接压力,提高响应效率
多线程的管理


  • 通过MySQL的多线程架构,主线程将连接分配给多个工作线程,提升并发处理惩罚能力。例如在InnoDB存储引擎中,后台线程池管理大量连接和事务
2.2 客户端连接线程管理

主从Reactor模式中,子Reactor在线程池中专门负责处理惩罚新连接使命,线程池实现了线程的复用,从而淘汰性能开销,提高其整体性能。 
在主从Reactor架构下,子Reactor线程池专门用于处理惩罚新的连接使命。线程池的复用和独立处理惩罚可淘汰主线程的性能开销,并在高并发场景下保持高效
2.3 连接量管理

最大连接数设置


  • 留意不要凌驾服务器的内存和CPU的承载能力,克制系统崩溃
  1. SET GLOBAL max_connections = 200;
复制代码
连接超时管理


  • 对于不活跃的连接,设置较短的超时时间,从而确保及时释放资源
  1. SET GLOBAL wait_timeout = 28800;
  2. SET GLOBAL interactive_timeout = 28800;
复制代码
连接缓存


  • thread_cache_size控制连线程的缓存数量,较大的缓存可以淘汰线程频繁的创建和烧毁
SSL/TLS加密管理


  • 服务端,开启并配置
  1. //服务端 生成证书配置MySQL
  2. [mysqld]
  3. require_secure_transport=ON
  4. ssl-ca=/path/to/ca.pem
  5. ssl-cert=/path/to/server-cert.pem
  6. ssl-key=/path/to/server-key.pem
  7. //客户端配置
  8. mysql --ssl-ca=/path/to/ca.pem -h host -u user -p
复制代码
3. 服务层

3.1 服务管理与公共组件



  • Backup & Recovery(备份与规复)

    • 提供数据备份和规复功能,用于在发生数据丢失或破坏时规复数据,保障数据的长期性和完整性。
    • 通常包括逻辑备份(如mysqldump工具)和物理备份(如MySQL Enterprise Backup工具)

  • Security(安全)

    • 涉及MySQL的安全性管理,包括用户权限、身份验证、数据加密等方面
    • 通过用户管理、权限控制和SSL/TLS加密来保证数据库的安全访问

  • Replication(主从复制)

    • 支持主从复制(Master-Slave Replication)功能,将数据从一个主数据库同步到一个或多个从数据库,实现数据冗余和负载均衡
    • 实用于数据同步、读写分离和灾备等场景

  • Cluster(集群)

    • MySQL Cluster是一种高可用、分布式的数据库解决方案,支持无共享架构,适合必要高性能和高可用性的场景
    • 在多节点之间分布数据和负载,提供容错能力

  • Partitioning(表分区)

    • 支持表分区功能,将一张大表按某种分区规则(如范围、列表、哈希等)划分为多个分区,提升查询和管理的效率
    • 有助于管理大型数据集,优化查询性能

  • Instance Manager(实例管理)

    • 管理MySQL实例的启动、克制、配置等使用,支持多实例运行,便于资源隔离和管理
    • 通过下令行或图形化界面来控制和监控数据库实例

  • Administrator(管理员工具)

    • 提供MySQL的管理功能,包括用户管理、权限分配、配置修改、性能监控等
    • 可以通过MySQL Workbench等图形化工具或下令行工具实现,简化数据库管理流程

  • Migration Toolkit(迁移工具)

    • 用于将其他数据库系统(如Oracle、SQL Server)中的数据迁移到MySQL,支持数据和架构的迁移
    • 便于在差别数据库系统之间进行数据转换和整合

3.2 NoSQL接口与SQL接口

该接口的目的就是简化客户端和数据库的交互过程,从而确保SQL语句的高效实行和结果通报


  • 接收客户端请求

    • 接收客户端发送过来的SQL语句以及下令请求,该接口可以识别差别的请求

  • SQL转发与实行

    • 接收到SQL语句后,接口将其转发至MySQL的查询处理惩罚器或存储引擎等其他模块进行处理惩罚。
    • 根据请求范例,大概会交由差别的引擎(如InnoDB、MyISAM等)来实行

  • 结果返回

    • 实行完SQL语句后,接口将处理惩罚结果(如查询结果或使用状态)返回给客户端。
    • 这一过程确保客户端可以或许获得SQL下令实行的反馈,完成与数据库的交互

3.3 Parser-语法分析器

主要作用就是将客户端发送的SQL语句进行剖析和转换


  • 词法分析

    • 剖析器起首对SQL语句中的关键词(例如select)进行词法分析,将这些关键词与自定义字段提取出来
    • 词法分析将SQL语句分解成一个个根本单元,便于后续的语法分析

  • 语法分析

    • 在词法分析后,剖析器会检查SQL语句的语法布局,判断其是否符合SQL标准语法
    • 如果语法精确,剖析器会将SQL语句转换为剖析树(Parse Tree),为实行引擎提供布局化的信息。如果语法不精确,则会返回错误

  • 天生剖析树

    • 剖析树是SQL语句的布局化表示,包含语句的使用范例(如SELECT)以及使用对象(如表和字段)
    • 剖析树为后续的查询优化和实行提供了基础

3.4 Optimizer-查询优化器

查询优化器的目的就是在多种实行方案中寻找最佳方案,从而使得SQL查询的实行更加高效,其内部通过索引选择、连接优化、条件过滤和查询重写等本领实现该目的。目的就是提高其搜索性能
优化后的SQL语句在条件查询的时候大概与自己写的查询条件过滤次序差别
3.5 Buffer-缓存

缓存机制可以显著提高查询性能,但在高写入频率的场景中会导致缓存失效频繁,反而影响效率。因此MySQL从5.6版本开始默认关闭查询缓存,并在8.0版本中完全移除。在现代应用中,推荐使用外部缓存来实现对高频查询的优化
   缓存作用分析
  当服务器接收到SELECT查询时,会先检查缓存中是否已存有该查询的结果。若缓存中存在相同的查询(使用键值对情势存储,key为查询SQL语句,value为结果集),则直接返回缓存的结果,从而省去查询实行过程
缓存中没有相应记录,则进入正常的查询流程,由查询优化器和实行引擎处理惩罚
   缓存失效
  总结:频繁的数据修改大概会导致缓存失效
缓存的数据在表数据更新(如插入、更新、删除)后会失效,因为数据的一致性要求缓存的结果必须反映最新的数据状态
尤其是在写使用频繁的应用场景下,缓存的有用性受限。频繁的数据修改会导致缓存失效,从而增大缓存维护成本
   传统缓存的替代方案
   使用分布式缓存系统(如Redis、Memcached)来缓存常用查询结果,淘汰数据库的直接访问,提升系统整体性能
3.6 SQL语句实行流程分析





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天津储鑫盛钢材现货供应商

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表