MySQL 全方位解析:從基礎到高可用架構

1. 介紹 (Introduction)

1.1. 什么是 MySQL?

MySQL 是全球最受歡迎的開源關系型數據庫管理系統 (Relational Database Management System, RDBMS)。它由瑞典的 MySQL AB 公司開發,現隸屬于 Oracle 公司。MySQL 將數據存儲在不同的、預先定義好結構的表中,并通過結構化查詢語言 (SQL) 對數據進行管理和操作。

其核心是一個客戶端/服務器架構的系統,由一個多線程的SQL服務器、多種不同的客戶端程序和庫、管理工具以及廣泛的應用程序編程接口 (API) 組成。因其高性能、高可靠性、易用性和強大的社區支持,MySQL 已成為Web應用開發(尤其是經典的LAMP/LNMP架構)的事實標準數據庫之一。

1.2. 核心特性

  • 關系型模型: 數據被組織在由行和列組成的二維表中。通過主鍵、外鍵等約束來保證數據之間的關聯和引用完整性,遵循數據庫的規范化理論。
  • ACID 事務支持: MySQL 的核心存儲引擎 InnoDB 提供了完整的ACID(原子性、一致性、隔離性、持久性)事務支持,確保了即使在并發和故障情況下,數據操作的正確性和可靠性。
  • 可插拔存儲引擎架構: 這是MySQL的一大特色。用戶可以根據不同的應用場景選擇最合適的存儲引擎。最常用的包括:
    • InnoDB: 默認引擎,提供事務安全、行級鎖定和外鍵約束,是絕大多數OLTP應用的首選。
    • MyISAM: 早期的默認引擎,提供高速的讀取性能,但不支持事務和行級鎖,適用于讀密集型應用。
    • NDB Cluster: 用于構建內存數據庫集群,提供極高的數據可用性和冗余性。
  • 強大的查詢語言: 完全遵循并擴展了ANSI SQL標準,支持復雜的查詢、連接、子查詢、視圖、存儲過程、觸發器等高級功能。
  • 成熟的生態系統: 擁有超過20年的發展歷史,積累了龐大的用戶社區、詳盡的官方文檔、豐富的第三方工具(如phpMyAdmin, Navicat, DBeaver)和各種編程語言的成熟驅動庫。

2. MySQL 核心架構與原理

2.1. 邏輯架構與多線程模型

MySQL 的服務器邏輯架構大致可分為三層:

  1. 連接層 (Connectors & Connection Pool): 負責處理客戶端的連接請求,提供認證、授權、連接池管理等。每個客戶端連接都會在服務器進程中擁有一個獨立的線程。
  2. 服務層 (Core Service Layer): 這是MySQL的核心,負責SQL的解析、分析、優化和執行。包括:
    • 查詢解析器 (Parser): 對SQL語句進行詞法和語法分析。
    • 查詢優化器 (Optimizer): 對解析后的查詢樹進行重寫,選擇最優的執行計劃(如決定使用哪個索引、表的連接順序等)。
    • 查詢緩存 (Query Cache): (在MySQL 8.0中已廢棄) 緩存查詢結果,但因效率問題已被移除。
    • 內置函數和所有跨存儲引擎的功能都在這一層實現。
  3. 引擎層 (Pluggable Storage Engines): 負責數據的實際存儲和提取。服務器通過API與存儲引擎進行通信,存儲引擎根據指令操作磁盤上的數據文件。

多線程模型: MySQL 服務器是多線程的,其后臺有多種不同功能的線程,如負責將臟頁刷入磁盤的Master Thread、處理IO請求的IO Thread、執行定時任務的Event Scheduler Thread等。對于客戶端連接,通常采用“一個連接一個線程”的模型,這在連接數非常高時可能會消耗大量內存和CPU上下文切換資源。

2.2. 核心組件:InnoDB 存儲引擎

InnoDB 是MySQL的默認事務型存儲引擎,其設計目標是處理大量的短期(short-lived)事務。

  • 緩沖池 (Buffer Pool): 一塊位于主內存中的區域,用于緩存磁盤上數據頁(Data Page)和索引頁(Index Page)。當需要訪問數據時,InnoDB首先在緩沖池中查找,如果找到(命中),則直接從內存讀取,極大地提升了性能。寫操作也是先修改緩沖池中的頁,這些被修改的頁被稱為“臟頁”,然后由后臺線程在合適的時機將其刷回(flush)磁盤。
  • 事務日志 (Transaction Log):
    • Redo Log (重做日志): 實現了ACID中的持久性(Durability)。當數據被修改時,InnoDB會先將修改記錄寫入Redo Log,然后再修改內存中的數據頁。即使在臟頁還未刷回磁盤時數據庫崩潰,重啟后也可以通過Redo Log來恢復這些已提交事務的修改,確保數據不丟失。這種機制被稱為Write-Ahead Logging (WAL)
    • Undo Log (撤銷日志): 實現了ACID中的原子性(Atomicity)和隔離性(Isolation)。當事務需要回滾時,可以通過Undo Log中的信息將數據恢復到修改前的狀態。同時,它也是多版本并發控制 (MVCC) 的基礎,用于為其他事務提供數據修改前的“快照”。
  • MVCC (多版本并發控制): InnoDB實現非鎖定讀(Non-locking Read)的核心機制。它通過為每行數據添加隱藏的事務ID和回滾指針,并結合Undo Log,使得在讀-寫和寫-讀并發場景下,讀操作可以不加鎖地、非阻塞地讀取到數據的一個一致性版本(快照),極大地提高了并發性能。

2.3. 數據持久化與文件結構

  • my.cnf / my.ini: MySQL的主配置文件。
  • 表空間文件 (.ibd): 在獨立表空間模式下,每個InnoDB表(包括數據和索引)都存儲在一個同名的.ibd文件中。
  • Redo Log 文件 (ib_logfile*): 重做日志文件,通常以組的形式存在,循環寫入。
  • Binary Log (二進制日志): 位于服務層,記錄了所有修改數據的SQL語句(或行變更事件)。它主要用于數據復制(Replication)時間點恢復(Point-in-Time Recovery)

2.4. 鎖機制詳解 (Locking Mechanisms)

鎖是數據庫系統用于管理并發訪問的核心機制。

  • 鎖的分類:

    • 共享鎖 (Shared Lock / S Lock): 也叫讀鎖。多個事務可以同時對同一數據持有共享鎖并讀取。但當數據被加上共享鎖后,其他事務不能再對其加排他鎖。
    • 排他鎖 (Exclusive Lock / X Lock): 也叫寫鎖。一旦一個事務對數據加上了排他鎖,其他任何事務都不能再對該數據加任何類型的鎖(共享或排他),直到該鎖被釋放。排他鎖保證了在任何時刻只有一個事務能修改數據。
  • 鎖的粒度:

    • 全局鎖 (Global Lock): 鎖定整個數據庫實例,執行FLUSH TABLES WITH READ LOCK后,整個實例變為只讀狀態。通常用于進行邏輯備份(如mysqldump)。
    • 表級鎖 (Table-Level Lock): 鎖定整張表。開銷小,加鎖快,但并發度最低。MyISAM引擎主要使用表級鎖。InnoDB也支持表級鎖,如LOCK TABLES ...
    • 行級鎖 (Row-Level Lock): 鎖定數據行。開銷大,加鎖慢,但并發度最高。這是InnoDB引擎的優勢所在。
  • InnoDB 中的行級鎖算法:

    • 記錄鎖 (Record Lock): 這是最簡單的行鎖,它直接鎖定索引記錄。例如 SELECT ... FROM ... WHERE id = 1 FOR UPDATE; 會在id=1的索引記錄上加一個記錄鎖。
    • 間隙鎖 (Gap Lock): 鎖定一個開區間范圍,但不包括記錄本身。例如,當鎖定id > 5 AND id < 10這個范圍時,間隙鎖會防止其他事務在這個范圍內插入新的記錄(如id=7),從而解決了“幻讀”問題。間隙鎖只在**可重復讀(Repeatable Read)**或更高的隔離級別下生效。
    • 臨鍵鎖 (Next-Key Lock): 它是記錄鎖和間隙鎖的組合,鎖定一個左開右閉的區間。例如,如果一個索引包含值10, 20, 30,那么臨鍵鎖可以鎖定的區間包括 (-∞, 10], (10, 20], (20, 30]等。這是InnoDB在可重復讀隔離級別下的默認鎖算法,既鎖定了記錄本身,也鎖定了記錄之前的間隙,從而徹底避免了幻讀。
  • 意向鎖 (Intention Lock): 這是一種表級鎖,但它不與行級鎖沖突,而是用于協調。當一個事務想要對某幾行加S鎖或X鎖時,它必須先在表上加一個意向共享鎖(IS Lock)或意向排他鎖(IX Lock)。這樣,當另一個事務想要對整張表加表級S鎖或X鎖時,它只需檢查表上是否有沖突的意向鎖,而無需逐行檢查是否有行鎖,大大提高了效率。

  • 死鎖 (Deadlock): 指兩個或多個事務在同一資源上互相等待對方釋放鎖,從而導致所有事務都無法繼續執行的現象。InnoDB有內置的死鎖檢測機制,當發現死鎖循環時,它會自動選擇一個持有鎖最少或回滾成本最低的事務進行回滾,以打破死鎖。

3. MySQL 核心對象與概念

  • 3.1. 數據庫 (Database / Schema): 在MySQL中,Database和Schema是同義詞,它是一個表的集合,作為數據組織的邏輯單元。
  • 3.2. 表 (Table) 與數據類型: 表是數據的基本存儲單元,由行和列組成。每一列都有預定義的數據類型,如INT, VARCHAR, DATETIME, TEXT等。
  • 3.3. 索引 (Index): 是一種特殊的數據結構,用于快速查詢表中的特定行。它以空間換時間,能極大提高查詢(SELECT)性能,但會降低寫(INSERT, UPDATE, DELETE)性能。
    • B+Tree 索引: InnoDB和MyISAM的默認索引類型,適用于全值匹配、匹配最左前綴、匹配范圍值等查詢。
    • 哈希索引: 基于哈希表實現,只適用于等值查詢,不支持范圍查詢和排序。
    • 全文索引 (Full-text Index): 用于在文本內容中進行關鍵詞搜索。
  • 3.4. 視圖 (View): 一張虛擬表,其內容由一個SQL查詢定義。它簡化了復雜查詢,并可以作為一種安全機制,只向用戶暴露部分數據。
  • 3.5. 存儲過程與觸發器: 存儲過程是預先編譯好的SQL語句集合,可以被應用程序調用。觸發器是與表事件(INSERT, UPDATE, DELETE)相關聯的特殊存儲過程,當事件發生時自動執行。

4. 高可用與擴展方案

4.1. 主從復制 (Replication)

graph TDsubgraph "MySQL 主從復制架構"Master[Master Server] --|>| BinlogClientW[Client (Write)] --> Mastersubgraph "Replication Process"Binlog -- "1. Binlog Dump Thread" --> IOThread[Slave: IO Thread]IOThread -- "2. Write to Relay Log" --> RelayLogSQLThread[Slave: SQL Thread] -- "3. Read & Execute" --> RelayLogendSlave[Slave Server] --|>| SQLThreadClientR[Client (Read)] --> Slaveend
  • 數據同步原理 (Binary Log):
    1. 主庫(Master)將所有數據更改操作記錄到二進制日志(Binary Log)中。
    2. 從庫(Slave)上啟動一個I/O線程,連接到主庫,并請求從指定位置開始的Binary Log。
    3. 主庫的Binlog Dump線程接收到請求后,將Binary Log的內容發送給從庫的I/O線程。
    4. 從庫的I/O線程將接收到的日志內容寫入本地的中繼日志(Relay Log)。
    5. 從庫上啟動一個SQL線程,讀取Relay Log中的事件,并在從庫上重放(Replay)這些操作,從而使數據與主庫保持一致。
  • 節點宕機處理:
    • 從庫宕機: 不影響整體服務,重啟后會自動嘗試重新連接主庫。
    • 主庫宕機: 無自動故障轉移。需要DBA手動介入,將一個數據最同步的從庫提升為新的主庫,并讓其他從庫指向這個新主庫。

4.2. 高可用架構 (InnoDB Cluster / Group Replication)

graph TDsubgraph "InnoDB Cluster (Group Replication)"direction LRM1[Server 1 (Primary)]M2[Server 2 (Secondary)]M3[Server 3 (Secondary)]M1 <-->|Group Communication| M2M2 <-->|Group Communication| M3M3 <-->|Group Communication| M1Client[Client] -->|MySQL Router| M1note right of M2- 基于Paxos協議的組成員管理- 事務提交前需多數節點確認- 自動選舉Primary節點- 讀寫/只讀流量由Router分發endend
  • 數據同步原理 (Group Replication): 基于分布式一致性協議(如Paxos)實現。當主節點(Primary)執行一個事務時,它會將事務的變更(writeset)廣播給組內的所有成員。只有當組內大多數節點都確認接收并可以應用這個變更時,該事務才會在所有節點上提交。這是一種半同步近乎同步的復制,數據一致性非常高。
  • 節點宕機處理:
    • 從節點(Secondary)宕機: 組內成員減少,只要多數派仍然存在,服務不受影響。
    • 主節點(Primary)宕機: 自動故障轉移。組內剩下的節點會自動進行選舉,快速選出一個新的主節點來接管寫操作,整個過程對應用透明(由MySQL Router處理連接切換)。

4.3. 分片與水平擴展 (Sharding)

數據庫分片架構 (中間件方案)
DB Shard 1
DB Shard 2
DB Shard N
Shard Key: 1-1000
Shard Key: 1001-2000
Shard Key: ...
Application
DB Proxy / Middleware
MySQL DB N
MySQL DB 2
MySQL DB 1
  • 工作原理: 將一個巨大的表(邏輯上)水平拆分到多個物理上獨立的數據庫實例中。這通常通過一個中間件層(如ProxySQL, MyCat, Sharding-Sphere)來實現。應用將SQL發送給中間件,中間件根據預設的分片規則(如按用戶ID取模)解析SQL,判斷該請求應該路由到哪個后端的MySQL分片。
  • 數據路由與管理: 核心是分片鍵(Shard Key)和分片算法。跨分片的查詢和事務處理非常復雜,是分片架構的主要挑戰。

4.4. 架構對比 (Replication vs. InnoDB Cluster vs. Sharding)

對比維度主從復制 (Replication)InnoDB Cluster分片 (Sharding)
核心功能讀寫分離、數據備份高可用性 (HA)、數據強一致性水平擴展 (Scale-out)
高可用性無自動故障轉移,需手動或借助外部工具。內置自動故障轉移,RTO(恢復時間目標)很低。每個分片自身的高可用性依賴于其內部架構(如主從或Cluster)。
擴展能力只支持讀擴展。寫能力和存儲容量受限于單臺主庫。只支持讀擴展。所有成員都有完整數據,寫能力受限于單主節點。同時支持讀/寫擴展和存儲擴展。通過增加分片來線性提升系統能力。
數據一致性異步復制,主從之間有延遲,主庫宕機可能丟數據。近乎同步,基于分布式協議,數據強一致性,基本不丟數據。每個分片內部的數據一致性由其自身架構決定。
架構復雜度,配置和理解最簡單。,需要配置Group Replication和Router,但官方集成度高。,需要引入中間件,對應用有侵入性,跨分片查詢和事務是難點。
適用場景中小型應用,讀多寫少,對高可用要求不高的場景。對數據一致性和高可用性要求極高的OLTP系統,但數據量和寫壓在單機可控范圍內。用戶量巨大、數據量巨大(TB級以上)、寫入和讀取壓力都極高的超大型應用。

5. 常見應用場景

  • 5.1. OLTP (在線事務處理) 系統: 這是MySQL最核心的應用領域,如電商平臺的訂單系統、金融系統的交易系統、SaaS應用的用戶和業務后臺等。
  • 5.2. Web 應用與內容管理系統 (CMS): 幾乎所有的PHP開源項目,如WordPress, Drupal, Joomla等,都默認使用MySQL作為后端數據庫。
  • 5.3. 數據倉庫與分析 (輕量級): 對于中小型企業,MySQL可以作為數據倉庫的基礎,存儲業務數據,并進行BI報表和分析。
  • 5.4. 日志存儲與分析: MyISAM引擎的高速插入特性使其適合存儲日志數據,但現在更多被專用日志系統替代。

6. 實踐與運維

  • 6.1. 安裝與配置 (my.cnf): 可以通過包管理器、二進制包或Docker安裝。核心配置文件my.cnf(或my.ini)用于調整服務器參數,如內存分配(innodb_buffer_pool_size)、日志設置等。
  • 6.2. 用戶管理與權限控制: 使用CREATE USER, GRANT, REVOKE命令來創建用戶并精確控制其對不同數據庫、表、列的訪問和操作權限。
  • 6.3. 備份與恢復:
    • 邏輯備份 (mysqldump): 導出SQL語句,靈活但恢復速度慢。
    • 物理備份 (XtraBackup): 直接拷貝數據文件,備份和恢復速度極快,支持熱備份。
  • 6.4. 性能監控與優化:
    • 慢查詢日志 (Slow Query Log): 記錄執行時間超過閾值的SQL語句,是性能優化的首要入口。
    • Performance Schema & Sys Schema: 提供對服務器內部運行狀態的詳細監控數據。
    • EXPLAIN 命令: 分析SQL查詢的執行計劃,查看是否使用了索引、表的連接方式等,是SQL優化的利器。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917835.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917835.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917835.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

力扣熱題100——滑動窗口

無重復字符的最長子串步驟 1&#xff1a;初始狀態 字符串 s “abcabcbb”&#xff0c;哈希表 charSet 初始為空&#xff0c;雙指針 left 0&#xff0c;right 0。 哈希表&#xff08;charSet&#xff09;&#xff1a; {} 字符串&#xff1a; a b c a b c b b 指…

SOD-YOLO:增強基于YOLO的無人機影像小目標檢測

摘要 https://www.arxiv.org/pdf/2507.12727 小目標檢測仍是目標檢測領域中的一個挑戰性問題。為應對這一挑戰&#xff0c;我們提出了一種基于YOLOv8的增強模型SOD-YOLO。該模型在頸部&#xff08;neck&#xff09;中集成了ASF&#xff08;注意力尺度序列融合&#xff09;機制以…

監督微調-指令微調-偏好微調

有監督微調 有監督微調是使用輸入及其標簽對的典型情況。例如&#xff0c;判斷郵件是垃圾郵件還是非垃圾郵件&#xff0c;判斷情感是積極還是消極。根據文檔的主要主題對其進行分類也是一種常見應用。模型會將輸入文本的相應表示&#xff08;隱藏狀態或嵌入向量&#xff09;作為…

樓宇自控系統對建筑碳中和目標的實現具重要價值

隨著全球氣候變化問題日益嚴峻&#xff0c;建筑行業作為碳排放的重要來源之一&#xff0c;其節能減排工作備受關注。樓宇自控系統&#xff08;Building Automation System&#xff0c;BAS&#xff09;作為智能建筑的核心組成部分&#xff0c;通過集成控制、監測和管理建筑內的各…

【YOLO學習筆記】YOLOv5詳解

一、數據增強 mosaic仿射變換與透視變換Mixup mosaic代碼位置仿射變換 與 透視變換?代碼片段位置 二、網絡結構 1. 網絡不同尺寸 nsmlx與網絡深寬度 yolov5 官方提供了5個目標檢測的網絡版本&#xff1a;yolov5n、yolov5s、yolov5m、yolov5l、yolov5x &#xff0c;早年是…

WebRTC前處理模塊技術詳解:音頻3A處理與視頻優化實踐

一、WebRTC前處理模塊概述 WebRTC&#xff08;Web Real-Time Communication&#xff09;作為實時音視頻通信的核心技術&#xff0c;其前處理模塊是提升媒體質量的關鍵環節。該模塊位于媒體采集與編碼之間&#xff0c;通過對原始音頻/視頻數據進行優化處理&#xff0c;解決實時…

ssm復習

Spring Framework系統架構核心容器的學習IOC/DIIOC容器IOC使用對象時,由主動new產生的對象轉換為由外部提供對象,此過程中對象的創建的控制權交由外部,此思想稱為控制反轉, (實現了自己new的解耦) 對象創建的控制權Spring提供一個容器,稱為IOC容器 用來充當IOC思想的外部Bea…

ESP32:2.搭建UDP服務器

硬件&#xff1a;ESP32-Devkit-V4 MODEL:ESP32-32U 庫&#xff1a;ESP-IDF v5.4.1 系統&#xff1a;windows中的虛擬機 ubuntu 22.04 實現STA&#xff0c;主動連接AP后&#xff0c;打印IP地址&#xff0c;獲取IP后&#xff0c;創建socket&#xff0c;搭建UDP 服務器&#xff0…

【Linux】動靜態庫制作

&#x1f43c;故事背景假設今天你有一位舍友。你需要幫助他完成老師的作業。而他寫的代碼依賴兩個文件&#xff08;mymath.h,mystdio.h&#xff09;。但是這兩個文件的功能他不會寫&#xff0c;他只會調用。他的調用代碼:#include"mystdio.h" #include"mymath.h…

使用Database Navigator插件進行連接sqlite報錯invalid or incomplete database

解決方案 &#xff0c;將這個db.sqlite3文件拷貝到盤的文件中 &#xff0c;修改文件夾名字&#xff0c;重新使用絕對路徑訪問 db.sqlite3&#xff0c;將路徑名字的中文去掉 &#xff0c;不能有中文

【Linux】重生之從零開始學習運維之主從MGR高可用

MGR集群部署12、15、18主機環境準備ssh免密碼登錄\rm -rf .ssh/* ssh-keygen ssh-copy-id 127.1 scp -r .ssh 10.0.0.12:/root/ ssh root10.0.0.12還原基礎環境systemctl stop mysqld \rm -rf /var/lib/mysql/* id mysqlvim /etc/my.cnf.d/mysql-server.cnf [mysqld] datadir/v…

如何在虛擬機(Linux)安裝Qt5.15.2

1.進入到阿里的網站下載在線安裝包 qt-official_releases-online_installers安裝包下載_開源鏡像站-阿里云 https://mirrors.aliyun.com/qt/official_releases/online_installers/?spma2c6h.13651104.d-5201.2.60ad4773ZZNPNm 2.下載完畢后&#xff0c;進入到下載地址&…

【運維進階】DHCP服務配置和DNS域名解析

DHCP服務配置和DNS域名解析 DHCP 服務介紹 在大型網絡中&#xff0c;系統靜態分配IP地址面臨問題&#xff1a; 確保不要同時在多個系統上使用同一個地址。部署新系統通常需要手動分配其IP地址。在云環境中&#xff0c;實例的網絡是自動化配置的。 動態主機配置協議&#xff08;…

VisionPro MR環境下虛擬物體與現實的透明度混合

display.rgb (virtualcontent.rgb*1)(passthrough.rgb*(1 - vistualcontent.a) viirtualcontent預乘過a值了&#xff0c;跟透明度混合公式一致 人頭檢測挖孔不清晰問題&#xff0c;這個a值變成設備層動態檢測人頭的a值&#xff0c;當面前的渲染壓力過大時&#xff0c;會導致…

css怪異模式(Quirks Mode)和標準模式(Standards Mode)最明顯的區別

文章目錄css怪異模式&#xff08;Quirks Mode&#xff09;和標準模式&#xff08;Standards Mode&#xff09;最明顯的區別詳細對比示例對比&#xff08;盒模型&#xff09;標準模式&#xff08;Standards Mode&#xff09;怪異模式&#xff08;Quirks Mode&#xff09;如何觸發…

一種簡單的3dnr去噪算法介紹

一段未經過插補的視頻圖像可以分解為若干幀&#xff0c;為了能正確地找到并去除圖像幀中的噪聲污染&#xff0c;由于視頻圖像各幀的連續性&#xff0c;在去噪的過程中就必須考慮幀圖像的空間性和時間性&#xff0c;一個簡單的例子&#xff0c;在去噪算法中就必須考慮&#xff0…

【數據結構初階】--排序(四):歸并排序

&#x1f525;個人主頁&#xff1a;草莓熊Lotso &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a; 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言&#xff1a;生活是默默的堅持&#xff0c;毅力是永久的…

GaussDB 并行創建索引

1 背景當業務數據在單表存儲達到一定的數量級時&#xff0c;此時對表創建索引是要花費時間的。GaussDB為了解決這個問題采用并行創建索引技術&#xff0c;以提高創建索引的效率。2 示例步驟1&#xff1a;根據實際情況調整maintenance_work_mem參數該大小。[Rubydtest1 ~]$ gsq…

LOOP Finance:一場 Web3 共和國中的金融制度實驗

LOOP Finance 是建構于幣安智能鏈&#xff08;BNB Chain&#xff09;上的定投型DEFI理財協議。 它以凱因斯經濟學為啟發&#xff0c;設計出一套長期、安全、穩定收益的全新DEFI玩法&#xff0c;兼顧穩健利息回報與DEFI高速成長的潛力。 通過生態機制&#xff0c;LOOP要求每位參…

【golang面試題】Golang遞歸函數完全指南:從入門到性能優化

引言&#xff1a;遞歸的本質與挑戰 在Golang中&#xff0c;遞歸函數是一把鋒利的雙刃劍。它通過函數自身調用實現問題分解&#xff0c;讓代碼變得簡潔優雅&#xff0c;但也容易因無限遞歸、棧溢出或性能問題讓開發者陷入困境。本文將從基礎到高級&#xff0c;全面解析Golang遞歸…