MySQL底層架構設計原理詳細介紹

文章目錄

  • 一、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 級別的并發訪問 實現秒…