文章目录

  • 一、MySQL体系结构概览
  • 二、连接层(Connection Layer)
    • 1. 连接器(Connectors)
    • 2. 连接池(Conncction Pool)
  • 三、服务层(Server Layer)
    • 1. SQL接口组件(SQL Interface)
    • 2. 查询分析器组件(Parser)
    • 3. 优化器组件(Optimizer)
    • 4. 执行器组件(Executor)
    • 5. 缓冲组件(Cache & Buffer)
    • 6. 管理和服务工具组件(Management Service & Utillties)
  • 四、存储引擎层(Storage Engine Layer)
    • 1. 存储引擎层的核心功能
    • 2. 主要存储引擎类型
      • (1)InnoDB(默认引擎)
      • (2)MyISAM(旧版默认引擎)
      • (3)Memory(内存引擎)
      • (4)Archive
      • (5)NDB(MySQL Cluster)
    • 3. 主要存储引擎特性对比
  • 五、文件系统层(Filesystem Layer)
    • 1. 文件系统层的核心功能
    • 2. 主要文件类型
      • (1)数据文件
      • (2)日志文件
      • (3)配置与系统文件
    • 3. 与存储引擎的交互机制
  • 六、总结

MySQL是全球最流行的开源关系型数据库管理系统之一,他通过分层架构、插件式存储引擎、事务日志和锁机制,在保证ACID特性的同时,实现了高并发、高性能的数据处理能力。今天我们一起来了解一下MySQL的底层设计。

一、MySQL体系结构概览

MySQL采用典型的分层架构,各层职责分明,协同工作。整体可分为连接层、服务层、存储引擎层和文件系统层。
在这里插入图片描述


二、连接层(Connection Layer)

连接层是MySQL架构的第一层,主要负责客户端连接管理、身份认证、会话管理以及连接池的维护。这一层的核心组件包括连接器(Connectors)连接池(Connection Pool)

1. 连接器(Connectors)

连接器是MySQL与客户端之间的桥梁,负责处理客户端的连接请求、身份验证、会话管理以及SQL执行。他的核心功能包括:

  • 建立连接:通过TCP协议与客户端建立连接。
  • SSL加密(可选):如果客户端要求SSL加密,连接器会进行SSL握手,协商加密算法和密钥。
  • 身份认证:验证客户端的用户名、密码及权限(与mysql.user表记录比对)。
  • 会话管理:维护连接的会话状态(如权限、事务、临时表等)。
  • SQL执行:将客户端发送的SQL语句传递给服务层处理,并返回处理结果给客户端。
  • 多语言支持:支持Java、Python、Php、C#、Node.js等开发语言。

2. 连接池(Conncction Pool)

连接池是连接器的扩展,用于复用数据库连接,避免频繁创建和销毁连接的开销。他的核心目标是:

  • 减少连接开销:复用已有的连接,避免每次请求都新建连接。
  • 提升性能:在高并发场景下,快速分配连接,降低响应时间。
  • 资源管理:控制连接数量,防止数据库资源被耗尽。

连接池的核心配置参数

参数说明
initialSize初始连接数,连接池启动时创建的连接数量。
maxActive最大连接数,连接池允许的最大连接数。
minIdle最小空闲连接数,保持的最小空闲连接数。
maxIdle最大空闲连接数,超过此值的空闲连接会被回收。
maxWait获取连接的最大等待时间(毫秒),超时后抛出异常。
testWhileIdle是否在空闲时检测连接有效性(如发送SELECT 1)。
validationQuery用于检测连接有效性的SQL语句(如SELECT 1)。

三、服务层(Server Layer)

MySQL服务层是数据库架构的核心处理层,负责处理SQL的解析、优化和执行。它由多个关键组件组成,包括SQL接口组件查询分析器组件优化器组件执行器组件缓冲组件管理和服务工具组件

1. SQL接口组件(SQL Interface)

SQL接口是客户端与MySQL交互的桥梁,负责接收客户端发送的SQL命令,并返回查询结果。它支持多种SQL操作类型,包括DML、DDL、DCL、存储过程、视图、触发器等高级功能。他的核心功能如下:

  • 语法解析:验证SQL语句的语法正确性(如SELECT、INSERT等关键字),并转换为内部解析树。
  • 权限管理:检查用户对表、列的操作权限(如SELECT、UPDATE),防止非法访问。
  • 慢查询处理:通过慢查询日志(如MySQL的slow_query_log)记录执行时间超过阈值的查询,配合EXPLAIN分析执行计划,优化索引使用。
  • 字符集控制:统一客户端、连接与数据库字符集(如UTF8MB4),避免乱码问题。
  • 统一接口:提供统一的接口,屏蔽底层存储引擎的差异。

2. 查询分析器组件(Parser)

查询分析器负责对SQL语句进行词法分析语法分析语义分析,确保SQL语句合法且可执行。他的核心功能如下:

  • 词法分析(Lexical Analysis)

    • 将SQL字符串拆分为词法单元(Tokens),如关键字(SELECT)、标识符(表名、列名)、运算符(=>)等。
    • 示例:SELECT * FROM users WHERE id = 1 → 拆分为 [SELECT, *, FROM, users, WHERE, id, =, 1]
  • 语法分析(Syntactic Analysis)

    • 根据MySQL的语法规则,将词法单元组织成抽象语法树(AST)
    • 验证SQL语法是否符合规范(如SELECT必须跟在FROM之后)。
  • 语义分析(Semantic Analysis)

    • 检查SQL语句中的表、列、函数等是否真实存在。
    • 验证用户是否有操作权限(如SELECT权限)。
    • 消除冗余条件(如WHERE 1=1 AND id=1WHERE id=1)。
  • 错误处理

    • 如果语法或语义检查失败,返回错误信息(如Unknown column 'name' in 'table')。
    • 支持SQL注入防御(通过严格检查输入内容)。

3. 优化器组件(Optimizer)

优化器是MySQL性能的核心组件,负责生成最优的执行计划,以最小的成本(时间、资源)完成查询。

核心优化策略

  • 基于成本的优化(Cost-Based Optimization, CBO)

    • 通过统计信息(如表行数、索引分布)估算不同执行路径的成本。
    • 成本因素包括:I/O操作(读取数据页)、CPU消耗(排序、过滤)、内存使用。
  • 访问路径选择

    • 选择是否使用索引(全表扫描 vs 索引扫描)。
    • 示例:WHERE id = 1 → 使用主键索引;WHERE name LIKE 'A%' → 使用索引(如果存在)。
  • 多表连接优化

    • 决定连接顺序(小表驱动大表原则)。
    • 选择连接算法(嵌套循环连接、哈希连接、合并连接)。
    • 示例:SELECT * FROM users JOIN orders ON users.id = orders.user_id → 优化连接顺序。
  • 子查询优化

    • 子查询转换为连接(如IN转为JOIN)。
    • 物化子查询(将子查询结果缓存)。

核心优化技术

技术类型说明
索引条件下推(ICP)存储引擎在读取索引时直接过滤数据,减少回表操作
多范围读取(MRR)先扫描索引收集主键,再按主键顺序访问数据,减少随机I/O
批量键访问(BKA)结合MRR和连接缓冲区,优化嵌套循环连接
哈希连接(MySQL 8.0+)对小表建立哈希表,加速等值连接

4. 执行器组件(Executor)

执行器负责根据优化器生成的执行计划,调用存储引擎接口完成数据的读取、写入、过滤、排序等操作。他的核心机制如下:

  • 数据访问:调用存储引擎读取数据页,进行过滤、排序、分组、聚合等操作。
  • 锁管理:处理事务隔离级别(如读已提交、可重复读),协调行锁、表锁以避免并发冲突。
  • 结果集生成:将处理后的数据按客户端需求格式化(如JSON、数组),并通过连接器返回。
  • 事务支持:执行器与事务管理器协作,确保ACID特性(原子性、一致性、隔离性、持久性),支持回滚(Rollback)和提交(Commit)操作。

5. 缓冲组件(Cache & Buffer)

缓冲组件是MySQL提高性能的关键机制,通过缓存数据和索引,减少对磁盘的I/O操作。

核心组件

  • 数据页(Data Pages):缓存表的行数据。
  • 索引页(Index Pages):缓存索引结构(如B+树)。
  • Undo页:存储旧版本数据,支持事务回滚和MVCC(多版本并发控制)。
  • 插入缓存(Insert Buffer):优化非聚集索引的插入操作。
  • 自适应哈希索引(Adaptive Hash Index):根据查询模式自动创建哈希索引。

核心机制

  • 缓冲池管理:缓存数据页、索引页(如InnoDB的缓冲池),采用LRU(最近最少使用)或LFU(最不经常使用)算法置换页面。
  • 页面置换:当缓存满时,根据访问频率或时间淘汰旧页面,换入新页面。
  • 一致性保证:通过日志(如Redo Log)确保缓存修改在崩溃后能恢复,同时支持写缓冲(Write Buffer)批量写入磁盘。

配置参数

  • innodb_buffer_pool_size:设置缓冲池大小(建议占物理内存的70%-80%)。
  • innodb_buffer_pool_instances:划分多个缓冲池实例,减少锁竞争。

6. 管理和服务工具组件(Management Service & Utillties)

管理和服务工具组件提供数据库的日常维护、监控和高可用性支持。他的核心功能如下:

  • 备份与恢复

    • 物理备份(如mysqldumpPercona XtraBackup)。
    • 逻辑备份(导出SQL脚本)。
    • 崩溃恢复(通过Redo LogUndo Log)。
  • 日志系统

    • 错误日志(Error Log):记录MySQL启动、运行中的错误信息。
    • 通用查询日志(General Query Log):记录所有SQL请求。
    • 二进制日志(Binary Log):记录数据变更操作,用于主从复制和数据恢复。
    • 慢查询日志(Slow Query Log):记录执行时间超时的查询(默认10秒)。
  • 主从复制(Replication)

    • 基于二进制日志实现数据同步。
    • 支持一主多从、级联复制、半同步复制。
  • 集群管理

    • MySQL Cluster(NDB):分布式数据库集群。
    • MySQL Group Replication:基于组复制的高可用方案。
  • 监控与调优

    • SHOW PROCESSLIST:查看当前连接和查询。
    • SHOW STATUS:查看服务器运行状态(如连接数、缓存命中率)。
    • SHOW VARIABLES:查看配置参数。

四、存储引擎层(Storage Engine Layer)

MySQL的存储引擎层是数据库架构的最底层,负责数据的物理存储索引组织事务管理数据访问。它是MySQL区别于其他数据库的核心特性之一,支持插件式架构,允许用户根据业务需求选择不同的存储引擎。

1. 存储引擎层的核心功能

  • 数据存储:将数据以特定格式存储在磁盘上(如.ibd文件)。
  • 索引管理:组织B+树、哈希索引等结构,加速数据检索。
  • 事务支持:实现ACID特性(原子性、一致性、隔离性、持久性)。
  • 并发控制:通过锁机制(行锁、表锁)保证多用户并发访问的安全性。
  • 数据恢复:利用重做日志(Redo Log)和回滚日志(Undo Log)实现崩溃恢复。

2. 主要存储引擎类型

(1)InnoDB(默认引擎)

特点

  • 支持事务(ACID)、行级锁外键约束
  • 使用聚簇索引(Clustered Index)组织数据,主键即数据存储顺序。
  • 支持MVCC(多版本并发控制),提高并发性能。
  • 通过缓冲池(Buffer Pool)缓存数据和索引,减少磁盘I/O。

适用场景

  • 高并发、事务密集型应用(如电商、银行系统)。
  • 需要外键和数据一致性的场景。

核心机制

  • Redo Log:记录数据修改操作,用于崩溃恢复(持久性)。
  • Undo Log:存储旧版本数据,支持事务回滚和MVCC(一致性)。
  • Change Buffer:延迟非唯一索引的更新,减少随机I/O。
  • 自适应哈希索引:自动为热点查询创建哈希索引。

配置参数

-- 设置缓冲池大小(建议占内存70%-80%)
SET GLOBAL innodb_buffer_pool_size = 2147483648; -- 2GB-- 启用独立表空间
SET GLOBAL innodb_file_per_table = ON;

(2)MyISAM(旧版默认引擎)

特点

  • 不支持事务行级锁,仅支持表级锁。
  • 数据和索引分离存储(.MYD数据文件,.MYI索引文件)。
  • 查询性能高,但并发写入性能差(写操作会锁定整表)。

适用场景

  • 只读或读多写少的场景(如日志分析、数据仓库)。
  • 不需要事务和外键的简单应用。

局限性

  • 崩溃后无法保证数据完整性(无事务日志)。
  • 全表扫描性能优于InnoDB,但范围查询和连接操作较慢。

(3)Memory(内存引擎)

特点

  • 数据存储在内存中,访问速度极快。
  • 使用哈希索引,适合等值查询(=IN)。
  • 服务器重启后数据丢失(非持久化)。

适用场景

  • 临时数据存储(如会话缓存、中间结果表)。
  • 高速缓存表(如频繁查询的配置信息)。

示例

CREATE TABLE temp_cache (id INT PRIMARY KEY,data VARCHAR(100)
) ENGINE=MEMORY;

(4)Archive

特点

  • 仅支持INSERTSELECT,不支持更新和删除。
  • 使用zlib压缩算法,存储空间极小。
  • 适合归档历史数据。

适用场景

  • 日志、审计记录等只追加的场景。

(5)NDB(MySQL Cluster)

特点

  • 分布式存储引擎,支持高可用横向扩展
  • 数据自动分片(Sharding),跨多节点存储。
  • 低延迟,适合电信、金融等关键业务。

局限性

  • 配置复杂,维护成本高。
  • 单行数据大小受限(约14KB)。

3. 主要存储引擎特性对比

引擎类型事务支持锁机制索引结构适用场景典型特性
InnoDB(默认)完整ACID行级锁+MVCC+间隙锁聚集索引(主键存储数据)高并发OLTP、需要数据一致性的系统(如电商/金融)支持外键、崩溃恢复、自适应哈希索引、双写缓冲防页损坏;默认隔离级别为REPEATABLE READ,通过next-key锁避免幻读。
MyISAM无事务表级锁非聚集索引(索引与数据分离)读密集型场景(如日志/报表)、全文索引需求插入/查询速度快,占用空间小;支持表级压缩;无崩溃恢复机制,数据易损坏。
Memory无事务表级锁哈希索引+B+树索引临时表、缓存、会话管理数据存内存,读写极快;服务器重启数据丢失;表大小受内存限制。
Archive无事务行级锁压缩存储日志归档、历史数据存储高压缩比(如1:10),适合只增不写的场景;不支持索引,查询需全表扫描。
NDB(集群)分布式ACID行级锁分片存储高可用/分布式系统支持自动分片、多副本同步;配置复杂,适用于大型集群。

五、文件系统层(Filesystem Layer)

MySQL文件系统层是数据库架构的最底层,负责数据和日志的物理存储,以及与存储引擎的交互。它通过文件系统(如NTFS、ext4、SAN、NAS)管理数据文件、日志文件、配置文件等,是MySQL实现数据持久化、事务恢复和主从复制的核心组件。

1. 文件系统层的核心功能

  • 数据持久化

    • 将存储引擎中的数据(如表数据、索引)写入磁盘文件,确保数据在服务器重启后不丢失。
    • 支持多种存储引擎的文件格式(如InnoDB的.ibd文件、MyISAM的.MYD文件)。
  • 日志管理

    • 错误日志(Error Log):记录启动、运行、停止时的错误信息。
    • 通用查询日志(General Query Log):记录所有SQL操作(包括SELECT)。
    • 二进制日志(Binary Log):记录数据变更操作(如INSERTUPDATE),用于主从复制和恢复。
    • 慢查询日志(Slow Query Log):记录执行时间超过阈值的查询(默认10秒)。
    • Redo Log(重做日志):InnoDB专用,记录事务提交后的数据页修改,用于崩溃恢复。
    • Undo Log(回滚日志):记录事务开始前的数据备份,支持事务回滚和MVCC。
  • 缓存机制

    • 缓冲池(Buffer Pool):InnoDB通过缓冲池缓存频繁访问的数据页,减少磁盘I/O。
    • Key Cache:MyISAM使用键缓存加速索引查找。
    • 临时文件:复杂查询时生成的排序、分组中间结果。
  • 文件组织

    • 数据文件和日志文件按规则存储在文件系统中,支持共享表空间和独立表空间。
    • 示例路径:
      • Linux:/var/lib/mysql/
      • Windows:C:\ProgramData\MySQL\MySQL Server 8.0\Data\
  • 扩展性支持

    • 支持大容量存储(如单个文件超过2TB)。
    • 支持分布式文件系统(如NFS、SAN)以分散存储压力。

2. 主要文件类型

(1)数据文件

文件类型说明
.frmMySQL 8.0前存储表结构定义(元数据),每张表一个文件。8.0后由元数据字典替代,但部分旧表仍保留。
.MYDMyISAM引擎专用,存储表数据(Data)。
.MYIMyISAM引擎专用,存储表索引(Index)。
.ibdInnoDB引擎专用,独立表空间文件(数据+索引)。每个表一个文件,包含数据和索引,通过innodb_file_per_table开启(默认启用)。
.ibdataInnoDB共享表空间文件(默认为ibdata1),存储数据字典、Undo日志、双写缓冲等,通过innodb_data_file_path配置。
db.opt记录数据库的字符集和校验规则。
ibtmp1用于存储所有会话共享的临时表数据,路径由innodb_temp_data_file_path配置。
.ibtMySQL 8.0 新增,每个会话独占一个临时表空间文件,用于存储会话内的临时数据(如排序、分组产生的中间结果),会话结束后自动删除。#innodb_temp/temp_<thread_id>.ibt

(2)日志文件

  • 错误日志(Error Log):记录MySQL启动/关闭、严重错误及警告信息,默认路径由log_error配置(如/var/log/mysqld.log)。通过SHOW VARIABLES LIKE '%log_error%'查询路径。
  • 通用查询日志(General Query Log):记录客户端连接和所有SQL语句(含SELECT),通过general_log动态开启,用于审计或调试。
  • 二进制日志(Binary Log):记录数据变更操作(如INSERT/UPDATE/DELETE),用于主从复制和点-in-time恢复。格式分为ROW(推荐)、STATEMENT、MIXED,通过log_binbinlog_format配置。
  • 慢查询日志(Slow Query Log):记录执行时间超过long_query_time(默认10秒)的查询,用于性能分析。
  • 重做日志(Redo Log):InnoDB的事务日志(如ib_logfile0/ib_logfile1),采用环形缓冲区结构,通过innodb_log_file_sizeinnodb_log_files_in_group配置。用于崩溃恢复,确保事务持久性。
  • 回滚日志(Undo Log):存储在系统表空间或独立Undo表中,用于事务回滚和MVCC(多版本并发控制)。

(3)配置与系统文件

  • 配置文件(my.cnf/my.ini):定义服务器参数(如缓冲池大小、日志路径),路径通常为/etc/my.cnfC:\ProgramData\MySQL\my.ini
  • PID文件:Unix/Linux下记录MySQL进程ID,用于服务管理。
  • Socket文件:本地连接时使用的Unix域套接字,路径由socket配置(如/var/lib/mysql/mysql.sock)。

3. 与存储引擎的交互机制

存储引擎层(如InnoDB、MyISAM)通过文件系统层的API完成数据读写,具体流程如下:

  • 数据写入:存储引擎将数据页写入缓冲池(Buffer Pool),后台线程异步刷盘到.ibd或系统表空间。
  • 日志优先:InnoDB遵循WAL(Write-Ahead Logging)原则,先写Redo日志再更新数据页,确保崩溃后可恢复。
  • 双写缓冲(Double Write Buffer):防止页写入不完整,先写双写缓冲再写数据文件,保障数据一致性。
  • 文件系统差异屏蔽:存储引擎通过标准化接口(如InnoDB的os0file.cc模块)适配不同文件系统,例如XFS的高并发I/O特性或ZFS的压缩/快照功能。

六、总结

MySQL的底层架构设计体现了分层解耦、模块化、高性能的设计思想:

  • 分层架构:连接层、服务层、存储引擎层、文件系统层职责清晰。
  • 插件式引擎:InnoDB提供ACID支持,其他引擎满足特定需求。
  • WAL机制:Redo Log + Buffer Pool 提升写性能。
  • MVCC:实现高并发下的非阻塞读。
  • 日志系统:Redo Log、Undo Log、Binlog 共同保障数据安全。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96217.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96217.shtml
英文地址,请注明出处:http://en.pswp.cn/web/96217.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QB/T 4674-2021 汽车内装饰用聚氨酯束状超细纤维合成革检测

汽车内饰品聚氨酯束状超细纤维合成革是指以海岛型双组份或多组分纤维加工成飞织造布&#xff0c;再经水性聚氨酯树脂或溶剂型聚氨酯树脂浸渍、湿法凝固、溶剂或碱液萃取及后整理等工艺制成的汽车内装饰皮革。QB/T 4674-2021 汽车内装饰用聚氨酯束状超细纤维合成革检测项目测试项…

QML和Qt Quick

QML和Qt Quick QML 和 Qt Quick 是 Qt 框架中紧密相关但概念不同的两个部分&#xff0c;它们之间的关系可以用如下方式清晰说明&#xff1a; 核心区别概览​​特性​​​​QML​​​​Qt Quick​​​​本质​​声明式编程​​语言​​基于 QML 的​​框架/库​​​​作用​​定…

JavaScript 结构型设计模式详解

1. 代理模式1.1. 使用场景代理模式在不改变原始对象的前提下&#xff0c;通过代理对象控制对其访问&#xff0c;通常用于权限控制、延迟加载、远程调用等场景。在前端开发中&#xff0c;可以通过代理模式对网络请求、缓存机制等进行控制。1.2. 代码实现class ApiService {reque…

摄像头模块在运动相机中的特殊应用

运动相机作为记录高速运动场景的专用设备&#xff0c;其摄像头模块的设计与普通消费电子产品存在显著差异。根据行业资料和技术发展&#xff0c;摄像头模块在运动相机中的特殊应用主要体现在以下五个维度&#xff1a;一、极端环境适应性设计运动相机的摄像头模块针对户外运动场…

SpringBoot + MinIO/S3 文件服务实现:FileService 接口与 FileServiceImpl 详解

在企业项目中&#xff0c;文件上传和管理是非常常见的需求。本文基于 芋道源码 的实现&#xff0c;介绍如何封装一个通用的 文件服务 FileService&#xff0c;支持&#xff1a;文件上传&#xff08;保存数据库记录 存储文件到 S3/MinIO 等对象存储&#xff09;文件下载与删除文…

Oracle RAC认证矩阵:规避风险的关键指南

RAC Certification Matrix&#xff08;RAC认证矩阵&#xff09; 是Oracle官方发布的硬件、软件与操作系统兼容性清单&#xff0c;明确规定了哪些平台、组件和版本可以正式支持Oracle RAC&#xff08;Real Application Clusters&#xff09;的部署。它是搭建或升级RAC环境时必须…

【自然语言处理与大模型】如何通过微调来agent性能?

虽然大模型本身具备一定的指令理解和工具调用潜力&#xff0c;但在实际应用中&#xff0c;尤其是在复杂或专业领域&#xff0c;往往需要通过微调来提升Agent的工具调用能力。问题一&#xff1a;基座模型无法准确识别或选择特定领域的工具当Agent需要在医疗、金融、法律、工业控…

在 Keil 中将 STM32 工程下载到 RAM 进行调试运行

在 Keil 中将 STM32 工程下载到 RAM 进行调试运行 在使用 STM32 进行调试时&#xff0c;默认情况下代码会被烧写到 Flash 中运行。然而&#xff0c;Flash 写入速度较慢&#xff0c;擦写次数有限&#xff0c;且调试过程中频繁烧写可能影响开发效率。在某些场景下&#xff08;如快…

【51单片机】【protues仿真】基于51单片机宠物投食系统

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 一、主要功能 1、LCD1602液晶显示时间、温度、食物重量 2、按键手动投喂食物​ 3、称重模块检测当前食物重量 4、食物重量小于阈值会声光警报并自动投喂 二、使用步骤 基于51单片机的宠物投食…

腾讯云负载均衡增加访问策略后访问失败

为了测试&#xff0c;在负载均衡的安全组添加2条安全策略&#xff0c;限制办公室内IP可访问&#xff0c;其他IP地址拒绝所有访问。结果&#xff0c;访问失败。经过反复测试&#xff0c;主要是js问价加载失败&#xff0c;动态接口访问代码返回正常。再进行测试&#xff0c;发现去…

CSS的文本样式

1.文本样式的分类注意&#xff1a;必须先建立标签&#xff0c;再在head中修改1.1字体样式1.1.1字体颜色代码演示<head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&g…

R语言读取excel文件数据-解决na问题

文章目录安装R语言运行环境实现代码遇到的问题总结安装R语言运行环境 安装教程连接, 包含国内镜像快速下载 实现代码 实现思路&#xff1a;使用python将文件的空字符的位置变成0&#xff0c;生成csv文件后交给R语言处理python实现代码如下&#xff1a; import pandas as pd…

【Nginx 运维实战】版本替换:强制 vs 平滑升级全解析

【Nginx 运维实战】版本替换&#xff1a;强制 vs 平滑升级全解析一&#xff1a;版本替换的两种思路二&#xff1a;使用场景对比三&#xff1a;实战1&#xff09;强制替换1.备份旧版本2.替换为新版本3.**赋予执行权限**4.**重启 Nginx**2&#xff09;平滑替换1.确认进程文件2.备…

MQ-消息队列

定义 Mssage Queue&#xff1a;消息队列。它是一种“先进先出”&#xff08;FIFO&#xff09;的数据结构&#xff0c;用于在分布式系统或应用程序之间进行异步通信。组成1. 生产者&#xff08;Producer&#xff09;定义&#xff1a;消息的发送方&#xff0c;负责将业务系…

NVIDIA驱动程序核心的“即时编译器”(Just-in-Time, JIT Compiler)详细介绍

我们来详细、深入地剖析这个位于NVIDIA驱动程序核心的“即时编译器”&#xff08;Just-in-Time, JIT Compiler&#xff09;。它堪称CUDA生态系统成功的“幕后英雄”&#xff0c;是连接软件稳定性和硬件飞速发展的关键桥梁。 第一部分&#xff1a;JIT编译器的本质 首先&#xff…

【PS2025全网最新版】稳定版PS2025保姆级下载安装详细图文教程(附安装包)(Adobe Photoshop)

今天&#xff0c;给大家带来PS2025的保姆级下载安装图文教程。 前言&#xff1a; Adobe Photoshop 作为业界领先的图像处理与设计软件&#xff0c;持续推动着数字创意领域的发展。其应用涵盖平面设计、摄影后期、UI/UX 设计、影视特效等多个专业方向&#xff0c;为用户提供强…

分享TWS充电仓方案开发设计

TWS耳机市场“卷”到最后&#xff0c;拼的早已不只是音质&#xff0c;而是续航、交互、体积、成本四位一体。传统充电仓用多颗IC堆砌&#xff1a;升压、电量计、霍尔、LED驱动、保护IC……BOM高、贴片复杂、调试周期长。8位MCU把上述功能“一锅端”&#xff1a;单芯片即完成电源…

【Java实战㉖】深入Java单元测试:JUnit 5实战指南

目录一、单元测试概述1.1 单元测试概念1.2 单元测试优势1.3 JUnit 5 框架组成1.4 JUnit 5 环境搭建二、JUnit 5 核心功能实战2.1 测试类与测试方法2.2 测试生命周期2.3 断言方法2.4 异常测试三、单元测试进阶实战3.1 参数化测试3.2 测试套件3.3 Mockito 框架3.4 单元测试实战案…

分布式微服务--ZooKeeper作为分布式锁

看这篇博客之前可以先去了解博主的另一篇讲解ZooKeeper的博客&#xff1a;分布式微服务--ZooKeeper的客户端常用命令 & Java API 操作-CSDN博客 1. 为什么需要分布式锁&#xff1f; 在分布式系统中&#xff0c;多个服务节点可能同时访问或修改同一份共享资源&#xff08;例…

基于容器化云原生的 MySQL 及中间件高可用自动化集群项目

1 项目概述 本项目旨在构建一个高可用、高性能的 MySQL 集群,能够处理大规模并发业务。通过容器化部署、多级缓存、完善的监控和备份策略,确保数据库服务的连续性和数据安全性。 架构总览 预期目标 数据库服务可用性达到 99.99% 支持每秒 thousands 级别的并发访问 实现秒…