文章目錄
- 一、數據庫基礎
- 1.1 數據庫基礎定義
- 1.2 數據庫分類與典型產品
- 1.3 數據庫模型
- 1.4 數據庫層次結構
- 1.5 數據庫核心機制
- 1.6 數據表和視圖
- 1.61 數據表(Table)
- 1.62 視圖(View)
- 1.7 鍵類型
- 1.8 MySQL數據類型
- 1.9 數據庫范式化
- 二、 數據庫技術構成
- 2.1 系統構成
- 2.2 SQL語言
- 2.3 數據庫訪問技術
- 2.31 ODBC(開放數據庫互連)
- 2.32 ADO(ActiveX Data Objects)
- 2.33 JDBC(Java數據庫連接)
- 2.34 ORM(對象關系映射)框架
- 2.4 數據庫引擎
- 2.41 數據庫引擎核心組件
- 2.42 主流數據庫引擎對比
- 2.43 引擎選型策略
- 三、相關概念中英文表格
前面兩篇文章,介紹了MySQL已經其在Windows和Linux上的安裝。在學習相關操作之前,應該先明確一些基本的、核心的概念。
歷史文章點擊👉:SQL
🐈??github:https://github.com/mysql
💻官網: https://www.mysql.com
🌏維基百科:https://zh.wikipedia.org/wiki/MySQL
一、數據庫基礎
1.1 數據庫基礎定義
數據庫 (Database
,DB
) 是按照特定的數據模型組織、存儲和管理數據的計算機化系統,通常存儲在計算機存儲設備中。它可以包含多種類型的數據,如文本、數字、圖像、視頻和文件等。數據庫的核心目標是便于有效地存儲、檢索、修改、刪除和管理數據。
數據庫管理系統(Database Management System,簡稱 DBMS
)是用于創建、管理、和維護數據庫的系統軟件,提供了對數據的增、刪、查、改操作,支持數據的存儲、訪問、安全控制、備份等功能。DBMS通常通過數據庫模型來組織數據,例如關系型數據庫(RDBMS)、文檔型數據庫(NoSQL)等。
數據庫與DBMS的關系:數據庫本質上是數據的集合,而數據庫管理系統是實現對這些數據進行操作和管理的軟件。就像Excel文件(.xls,.xlsx等)和Excel軟件的關系一樣,數據庫是數據存儲的容器,而DBMS是對這些數據進行管理和操作的工具。
例如,MySQL數據庫是由MySQL DBMS管理的數據庫實例,而MySQL本身是一個數據庫管理系統。
概念 | 完整定義與擴展說明 |
---|---|
數據庫 (DB) | 按特定數據模型組織、存儲和管理數據的電子化倉庫,核心特性: 1. 數據結構化 2. 高共享性 3. 低冗余度 4. 數據獨立性(物理獨立性與邏輯獨立性) |
數據庫管理系統(Database Management System,DBMS) | 數據庫管理系統,核心功能: - 數據定義(DDL) - 數據操作(DML) - 事務管理(ACID) - 并發控制 - 數據安全與恢復 |
1.2 數據庫分類與典型產品
數據庫管理系統可以根據不同的特點進行分類,其中最常見的是根據數據庫模型(如關系型數據庫、NoSQL數據庫等)進行分類。
關系型數據庫:
- 關系型數據庫(
Relational Database
)基于關系模型,使用表格(二維數組)來存儲數據。每個表由行和列組成,每行代表一條記錄,每列代表一個數據字段。關系型數據庫的優點包括高一致性、良好的事務支持、以及強大的查詢語言(SQL)。它們廣泛應用于企業的核心業務系統中,如ERP、CRM等。
非關系型數據庫(NoSQL
):
- NoSQL(Not Only SQL)數據庫是為了解決關系型數據庫在處理大規模、非結構化數據時的局限性而提出的。它們支持多種數據模型,如鍵值存儲、文檔型、列族存儲和圖數據庫等。NoSQL數據庫通常具有更好的擴展性,尤其適用于大數據場景和實時分析。
分類 | 子類/技術特性 | 代表產品與場景 |
---|---|---|
關系型數據庫 (Relational database) | - 基于關系模型(表、行、列) - 支持ACID事務 - 強一致性 - 結構化查詢語言(SQL) | OLTP場景:MySQL、PostgreSQL、Oracle 分析型:Amazon Redshift、Snowflake |
NoSQL數據庫 | 1. 鍵值存儲:高性能讀寫,弱一致性 2. 文檔型:JSON/BSON格式,靈活模式 3. 列族存儲:高擴展性,適合海量數據 4. 圖數據庫:復雜關系網絡 | Redis(緩存)、MongoDB(文檔)、Cassandra(列族)、Neo4j(圖數據庫) |
NewSQL數據庫 | 結合NoSQL擴展性與RDBMS的ACID特性,分布式架構 | Google Spanner、CockroachDB、TiDB |
內存數據庫 | 數據常駐內存,極低延遲 | Redis(持久化)、MemSQL、VoltDB |
時序數據庫 | 高效處理時間序列數據(如監控、IoT) | InfluxDB、TimescaleDB、Prometheus |
多模型數據庫 | 支持多種數據模型(關系+文檔+圖) | ArangoDB、Microsoft Azure Cosmos DB |
1.3 數據庫模型
數據庫模型描述了在數據庫中數據的組織、存儲及操作方式。不同的數據庫模型適用于不同類型的數據處理需求。
-
層次模型與網狀模型:
- 層次模型和網狀模型是早期的數據庫模型,通常用于處理較為簡單的數據結構。層次模型以樹形結構來表示數據的層級關系,而網狀模型則使用圖結構來表示數據之間的連接。雖然這兩種模型在處理復雜數據關系時有局限性,但它們仍然在某些特定場景下發揮作用。
-
關系模型:
- 關系模型基于數學集合理論,將數據表示為表格的形式,每個表格通過主鍵和外鍵進行關聯。關系模型廣泛應用于企業管理、金融、政府等領域,
適用于高規范化的數據
。
- 關系模型基于數學集合理論,將數據表示為表格的形式,每個表格通過主鍵和外鍵進行關聯。關系模型廣泛應用于企業管理、金融、政府等領域,
模型 | 數據結構 | 適用場景 | 優缺點 |
---|---|---|---|
層次模型 | 樹形結構(父子節點) | 文件系統、組織結構管理 | ? 查詢效率高 ? 數據冗余,多對多關系處理困難 |
網狀模型 | 圖結構(節點+連接) | 早期工業系統(如IDMS) | ? 復雜關系支持 ? 結構復雜,維護成本高 |
關系模型 | 二維表(行+列) | 通用業務系統(ERP、CRM等) | ? 結構清晰,標準化高 ? 大數據處理效率較低 |
文檔模型 | JSON/BSON嵌套文檔 | 內容管理、日志存儲 | ? 靈活模式 ? 關聯查詢效率低 |
列族模型 | 按列簇存儲(BigTable衍生) | 大數據分析(如HBase) | ? 高壓縮率,適合稀疏數據 ? 隨機讀寫性能差 |
1.4 數據庫層次結構
數據庫的層次結構通常分為物理層、邏輯層和用戶層。每一層負責不同的功能,從數據存儲到用戶訪問,都由這些層次共同協作。
- 物理層:物理層負責數據庫數據的存儲方式和優化,它包括文件組織(如堆文件、索引文件等)、存儲引擎(如InnoDB、RocksDB)以及緩存機制。
該層關注數據在硬件中的存儲形式,確保數據的有效存取
。 - 邏輯層:邏輯層則定義了數據庫的邏輯結構,包括表結構、視圖、以及數據完整性約束(如主鍵、外鍵等)。這一層不關心數據的具體存儲形式,而是
定義了如何通過SQL語句來操作數據庫
。 - 用戶層:用戶層為最終用戶提供數據訪問接口,包括權限控制、虛擬表、以及數據庫與應用程序之間的接口協議(如JDBC、ODBC等)。通過該層,用戶可以方便地訪問數據庫進行查詢和操作。
層次 | 核心功能 | 關鍵組件示例 |
---|---|---|
內層(物理層) | 管理數據的物理存儲: - 文件組織(堆文件、索引文件) - 存儲引擎(InnoDB、RocksDB) - 緩存機制(Buffer Pool) | 存儲引擎、磁盤塊管理、數據壓縮算法 |
概念層(邏輯層) | 定義全局的邏輯結構: - 表結構(Schema) - 視圖(View) - 完整性約束(主鍵、外鍵) | 數據字典、查詢優化器、事務管理器 |
外層(用戶層) | 提供用戶的數據訪問: - 權限控制(RBAC) - 虛擬表(View) - 接口協議(JDBC/ODBC) | 應用程序接口、可視化工具(如Navicat)、ORM框架(Hibernate) |
1.5 數據庫核心機制
數據庫管理系統的核心機制包括事務管理、并發控制和數據安全等。這些機制確保了數據庫在高并發環境下的數據一致性、完整性和可靠性。
🟢 事務管理
事務(transaction
)是指一組數據庫操作,要求在執行過程中要么全部成功,要么全部失敗。事務管理確保數據庫在并發操作中能夠維持一致性,避免出現部分操作執行成功、部分操作執行失敗的情況。
ACID
是一組用于確保數據庫事務可靠性和一致性的原則,全稱為 Atomicity(原子性)、Consistency(一致性)、Isolation(隔離性)、Durability(持久性)。這些特性共同保證了在并發環境下,數據庫事務能夠正確、安全地執行,即使在系統故障或其他異常情況下也能保持數據的完整性和正確性。
特性 | 定義 | 實現技術 |
---|---|---|
原子性 | 事務內操作全部成功或全部回滾 | Undo Log(回滾日志) |
一致性 | 事務執行后數據庫狀態符合業務規則 | 約束(主鍵、外鍵、Check約束) |
隔離性 | 并發事務互不干擾 | 鎖機制(行鎖、表鎖)、MVCC(多版本并發控制) |
持久性 | 事務提交后數據永久保存 | Redo Log(重做日志)、WAL(預寫式日志) |
🟢索引優化
索引是提高數據訪問效率的重要手段,它像書籍的目錄,幫助快速定位數據。數據庫通過索引結構,如B+樹、哈希等,來優化查詢性能。
索引類型 | 數據結構 | 適用場景 | 示例 |
---|---|---|---|
B+樹索引 | 平衡多路搜索樹 | 范圍查詢、排序(默認索引類型) | MySQL InnoDB |
哈希索引 | 鍵值哈希映射 | 等值查詢(如內存表) | Redis、Memcached |
全文索引 | 倒排索引(分詞) | 文本內容搜索 | Elasticsearch、MySQL FullText |
空間索引 | R樹/GIS索引 | 地理位置查詢 | PostGIS(PostgreSQL擴展) |
1.6 數據表和視圖
1.61 數據表(Table)
數據表是關系型數據庫中存儲數據的核心物理結構,由行(記錄)和列(字段)組成,用于持久化保存實體或關系的具體數據。
核心特性
- 物理存儲:數據實際存儲在磁盤中,占用存儲空間。
- 結構定義:需預先定義列名、數據類型(如
INT
,VARCHAR
)及約束(主鍵、外鍵、唯一性等)。 - 數據操作:支持增刪改查(
INSERT
,DELETE
,UPDATE
,SELECT
)等操作。 - 獨立性:每個表代表一個獨立的數據實體或關系(如
學生表
、課程表
)。
示例
CREATE TABLE 學生表 (學號 INT PRIMARY KEY, -- 主鍵約束姓名 VARCHAR(50) NOT NULL, -- 非空約束年齡 INT CHECK (年齡 >= 10), -- 檢查約束班級ID INT,FOREIGN KEY (班級ID) REFERENCES 班級表(班級ID) -- 外鍵約束
);
1.62 視圖(View)
視圖是基于一個或多個表的查詢結果
生成的虛擬表,不存儲實際數據,而是通過查詢動態生成結果集。
核心特性
- 虛擬性:不占用物理存儲空間,數據實時從基表計算。
- 邏輯抽象:隱藏底層表結構的復雜性,提供簡化的數據訪問接口。
- 安全性:通過視圖限制用戶訪問特定列或行(如屏蔽敏感字段)。
- 更新限制:部分視圖支持更新操作,但需滿足特定條件(如單表視圖、未使用聚合函數)。
視圖就是一些特定的SQL語句,每次打開視圖,就會執行這些語句。比如,你的表存儲了很多信息,而有些信息是不能給客戶查看的,現在就可以創建一個視圖,只包含表中的特定列,讓客戶查詢這個視圖。
這個很像api的概念,簡化了操作邏輯,用戶只能調用api提供的功能,而無法看到api背后的具體實現。
視圖就是一個整合的或者定制化的 “表”,它支持很多表的操作(如查詢、對視圖創建視圖等)。
綜上,如果沒有相關需求,視圖不是數據庫的必要內容。
盡管視圖支持許多表的操作,但它也有一些限制:
- 性能開銷:視圖的查詢是動態執行的,可能會帶來額外的性能開銷。
- 更新限制:復雜視圖(如包含聚合函數、多表連接等)通常不支持直接更新。
- 依賴性:視圖的定義依賴于底層表的結構。如果底層表的結構發生變化,視圖可能需要重新定義
示例
-- 創建視圖:僅顯示學生姓名和班級名稱(隱藏學號和班級ID)
CREATE VIEW 學生班級視圖 AS
SELECT 學生表.姓名, 班級表.班級名稱
FROM 學生表
JOIN 班級表 ON 學生表.班級ID = 班級表.班級ID;
作用與場景
- 簡化復雜查詢:將多表關聯或復雜計算封裝為視圖(如統計學生平均成績)。
- 數據權限控制:限制用戶僅能訪問視圖中的字段(如隱藏工資列)。
- 邏輯獨立性:基表結構變化時,通過調整視圖定義保持應用層不變。
數據表 vs 視圖:核心區別
特性 | 數據表(Table) | 視圖(View) |
---|---|---|
存儲方式 | 物理存儲數據,占用磁盤空間 | 虛擬表,僅保存查詢定義,不存儲數據 |
數據來源 | 直接存儲原始數據 | 基于一個或多個表的查詢結果動態生成 |
更新操作 | 支持所有增刪改查操作 | 僅部分視圖支持更新(需滿足特定條件) |
性能影響 | 依賴索引和表結構優化 | 復雜視圖可能因查詢計算影響性能 |
設計目的 | 持久化存儲數據實體 | 簡化查詢、控制訪問、邏輯抽象 |
1.7 鍵類型
🗝? (1)超鍵(Super Key)
能唯一標識表中某一行(元組)的一個或多個屬性的集合,可能存在冗余屬性。
- 冗余性:超鍵可能包含不必要的屬性。
示例:在員工表
中,員工ID + 姓名 + 部門
可組成超鍵,但僅需員工ID
即可唯一標識記錄,其他屬性冗余。 - 用途:主要用于理論分析,為候選鍵的篩選提供基礎。
設計原則:
- 實際設計中需消除冗余屬性,轉化為候選鍵。
🗝? (2)候選鍵(Candidate Key)
最小的超鍵(無冗余屬性),表中可能有多個候選鍵。
- 唯一性:每個候選鍵都能唯一標識記錄。
示例:在用戶表
中,用戶ID
和身份證號
均為候選鍵。 - 不可約簡:移除任意屬性后,不再滿足唯一性。
設計原則:
- 穩定性:優先選擇值不隨業務邏輯變化的屬性(如自增ID)。
- 簡潔性:選擇字段長度短、存儲效率高的候選鍵。
🗝? (3)主鍵(Primary Key)
從候選鍵中選定的唯一標識符,不可為空且不可重復
。
- 唯一標識:每個表有且僅有一個主鍵。
示例:訂單表
使用訂單ID
作為主鍵。 - 物理存儲影響:在InnoDB中,主鍵是聚簇索引的基準,直接影響數據存儲順序。
設計原則:
-
代理鍵 vs 自然鍵:
類型 優點 缺點 代理鍵(如自增ID) 穩定、長度固定 無業務含義 自然鍵(如身份證號) 業務相關 可能變更或長度不一 -
最佳實踐:
- 優先使用
BIGINT UNSIGNED
自增主鍵。 - 避免使用業務字段(如手機號),防止業務規則變化導致主鍵修改。
- 優先使用
🗝? (4) 外鍵(Foreign Key)
引用其他表主鍵的字段,用于維護表間關系與數據一致性。
-
參照完整性:確保子表記錄對應有效的父表記錄。
示例:訂單明細表
中的訂單ID
引用訂單表
的主鍵。 -
級聯操作:需明確定義數據變更時的行為:
ALTER TABLE 子表 ADD CONSTRAINT fk_order FOREIGN KEY (order_id) REFERENCES 訂單表(id) ON DELETE CASCADE -- 父表刪除時,子表級聯刪除 ON UPDATE NO ACTION; -- 父表主鍵更新時,禁止操作
設計原則:
- 分布式系統慎用:跨節點外鍵可能引發性能問題,需在應用層實現一致性。
- 索引優化:為外鍵字段建立索引,加速關聯查詢。
🗝? (5)聯合主鍵(Composite Primary Key)
由多個字段組合構成的主鍵。
- 復合唯一性:多個字段的組合值唯一標識記錄。
示例:學生選課表
使用學生ID + 課程ID
作為聯合主鍵。 - 查詢優化:聯合主鍵的字段順序影響索引效率(最左前綴原則)。
設計原則:
- 適用場景:
- 多對多關系表(如
訂單_商品
關聯表)。 - 無合適單一字段作為主鍵時。
- 多對多關系表(如
- 字段順序:區分度高的字段應放在左側。
示例:國家代碼 + 城市代碼
優于城市代碼 + 國家代碼
。
🟢鍵類型對比:
鍵類型 | 核心作用 | 典型應用場景 | 注意事項 |
---|---|---|---|
超鍵 | 理論分析基礎 | 數據庫設計初期分析 | 需精簡冗余屬性 |
候選鍵 | 提供主鍵候選方案 | 多唯一標識字段的表 | 選擇穩定且高效的候選鍵 |
主鍵 | 唯一標識記錄,優化存儲 | 所有表的核心標識,必須的 | 避免使用可變業務字段 |
外鍵 | 維護跨表數據一致性 | 關聯表(如訂單與用戶) | 分布式系統慎用,需索引優化 |
聯合主鍵 | 復合場景下的唯一性保證 | 多對多關系表、時序數據表 | 注意字段順序與查詢模式匹配 |
1.8 MySQL數據類型
數據庫管理系統提供了多種數據類型,用于存儲不同類型的值。MySQL支持的常見數據類型包括整數類型、浮點數類型、日期時間類型和字符串類型等。
類別 | 具體類型 | 存儲范圍 | 使用建議 |
---|---|---|---|
整數型 | TINYINT 、INT 、BIGINT | 1字節 ~ 8字節 | 根據數據范圍選擇最小類型(節省空間) |
浮點型 | FLOAT 、DOUBLE 、DECIMAL | 單精度、雙精度、精確小數(DECIMAL(10,2)) | 金融計算必須使用DECIMAL避免精度丟失 |
時間型 | DATE 、TIME 、DATETIME 、TIMESTAMP | TIMESTAMP自動時區轉換 | 記錄時間戳優先用TIMESTAMP(4字節節省空間) |
字符串型 | CHAR 、VARCHAR 、TEXT 、BLOB | CHAR定長(0-255)、VARCHAR變長(0-65535) | 短文本用VARCHAR,長文本用TEXT+壓縮算法 |
1.9 數據庫范式化
數據庫范式化旨在通過分解關系來減少冗余數據,確保數據的一致性和完整性。
范式 | 規則 | 示例 |
---|---|---|
1NF(第一范式) | 消除重復列,屬性原子性 | 拆分“地址”字段為省、市、街道 |
2NF(第二范式) | 消除部分函數依賴(非主屬性完全依賴主鍵) | 訂單表中不應存儲客戶姓名(應通過外鍵關聯) |
3NF(第三范式) | 消除傳遞函數依賴(非主屬性不依賴其他非主屬性) | 員工表中不應包含部門地址(應通過部門ID關聯部門表) |
二、 數據庫技術構成
2.1 系統構成
數據庫系統由三個核心組成部分構成:
-
數據庫(Database)
用于持久化存儲數據的物理容器,通常以文件形式存在于存儲設備中。 -
數據庫管理系統(DBMS):管理數據庫的軟件系統,提供以下功能:
- 數據定義與結構管理
- 數據操作與事務控制
- 安全權限與訪問控制
- 備份恢復與性能優化
-
數據庫應用程序:用于增強DBMS功能的輔助工具,例如:
- 數據可視化工具(如Tableau)
- 數據同步工具(如Debezium)
- 監控管理工具(如Percona Monitoring)
2.2 SQL語言
SQL(Structured Query Language
)是用于與數據庫通信的標準語言,具備以下特點:
- 跨平臺性:主流DBMS(MySQL、Oracle、PostgreSQL等)均支持
- 易學性:基于自然英語的關鍵詞(SELECT/INSERT/UPDATE等)
- 功能強大:支持從簡單查詢到復雜事務處理
- 擴展性:不同DBMS在標準SQL基礎上提供專屬擴展
SQL的功能分類:
分類 | 功能描述 | 典型語句 |
---|---|---|
DDL(數據定義語言) | 管理數據庫對象結構 | CREATE , ALTER , DROP |
DML(數據操作語言) | 操作數據記錄 | INSERT , UPDATE , DELETE |
DQL(數據查詢語言) | 數據檢索 | SELECT |
DCL(數據控制語言) | 權限管理 | GRANT , REVOKE |
SQL應用示例:
(1) 表結構定義
CREATE TABLE user (id INT UNSIGNED NOT NULL AUTO_INCREMENT,name VARCHAR(32) NOT NULL DEFAULT '' COMMENT '姓名',sex TINYINT NOT NULL DEFAULT 0 COMMENT '性別:0-保密,1-男,2-女',mobile VARCHAR(20) NOT NULL DEFAULT '' COMMENT '手機',PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
(2)數據操作
-- 插入數據(顯式指定字段)
INSERT INTO user (name, sex, mobile)
VALUES ('張三', 1, '13811772277');-- 插入數據(隱式全字段賦值)
INSERT INTO user VALUES (19, '李四', 2, '13900112233');-- 查詢數據
SELECT id, name, mobile FROM user WHERE sex = 1;
2.3 數據庫訪問技術
數據庫訪問技術是應用程序與數據庫之間建立通信的核心橋梁,不同的技術棧和場景下會采用不同的實現方案。以下對主流技術進行深度解析:
2.31 ODBC(開放數據庫互連)
ODBC誕生于1992年,由微軟聯合多家廠商制定,旨在解決不同數據庫系統間的互操作性問題。作為首個跨平臺數據庫訪問標準,它通過抽象層屏蔽數據庫差異。
架構解析:
- 應用程序:調用ODBC API提交SQL請求
- 驅動程序管理器:加載/卸載驅動程序,管理連接池
- 數據庫驅動:廠商提供的具體實現(如MySQL ODBC Driver)
- 數據源:通過DSN(Data Source Name)配置連接參數
// C語言使用ODBC示例
#include <sql.h>
#include <sqlext.h>
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
SQLConnect(dbc, "MySQL_DSN", SQL_NTS, "user", SQL_NTS, "pass", SQL_NTS);
SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
SQLExecDirect(stmt, "SELECT * FROM employees", SQL_NTS);
- 優勢:
- 支持異構數據庫訪問(Oracle到SQL Server無縫切換)
- 與語言無關(C/C++/Python等均可調用)
- 局限:
- 配置復雜度高(需手動管理DSN)
- 性能開銷大于原生驅動
2.32 ADO(ActiveX Data Objects)
作為微軟COM體系的核心組件,ADO為VB、ASP等語言提供高層數據庫訪問接口,通過OLE DB底層驅動實現數據操作。
核心對象模型:
- Connection:管理數據庫連接
- Command:執行SQL語句或存儲過程
- Recordset:封裝查詢結果集
' VBScript使用ADO示例
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=SQLOLEDB;Data Source=.;Initial Catalog=Northwind;User ID=sa;"
Set rs = conn.Execute("SELECT * FROM Products WHERE Price > 20")
Do Until rs.EOFWScript.Echo rs("ProductName") & " - " & rs("Price")rs.MoveNext
Loop
演進與替代:
- ADO.NET:.NET Framework中的現代化替代方案,支持斷開式數據集
- Entity Framework:基于LINQ的ORM框架,進一步簡化數據操作
2.33 JDBC(Java數據庫連接)
架構分層:
- JDBC API:提供
java.sql
和javax.sql
接口 - JDBC Driver Manager:加載數據庫驅動(如
mysql-connector-java
) - JDBC Driver:實現廠商特定協議(Type 4純Java驅動為主流)
連接模式演進:
- 基本連接:
DriverManager.getConnection()
- 連接池優化:HikariCP/Druid管理資源復用
- 分布式事務:通過JTA(Java Transaction API)支持
// Java 8+ 使用Try-with-resources簡化JDBC操作
try (Connection conn = DataSource.getConnection();PreparedStatement stmt = conn.prepareStatement("INSERT INTO users(name,email) VALUES(?,?)")) {stmt.setString(1, "李雷");stmt.setString(2, "lilei@example.com");stmt.executeUpdate();
}
2.34 ORM(對象關系映射)框架
通過元數據映射(XML/注解)將數據庫表結構轉化為面向對象模型,實現以下目標:
- 消除手動編寫CRUD SQL
- 支持延遲加載(Lazy Loading)關聯數據
- 提供跨數據庫方言抽象
實現對比:
框架 | 語言 | 特點 | 適用場景 |
---|---|---|---|
Hibernate | Java | 全自動映射,HQL查詢語言 | 復雜領域模型 |
MyBatis | Java | SQL與代碼解耦,靈活度高 | 需精細控制SQL |
SQLAlchemy | Python | 支持ORM和原生SQL雙模式 | 數據分析和Web開發 |
Entity Framework | C# | LINQ集成,Code First遷移 | .NET生態應用 |
# SQLAlchemy ORM示例
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String(50))email = Column(String(120))# 查詢操作
session.query(User).filter(User.name.like('%張%')).all()
- 優點:開發效率提升50%以上,維護成本降低
- 缺點:復雜查詢可能生成低效SQL,需手動優化
2.4 數據庫引擎
數據庫引擎(Database Engine
)是數據庫管理系統的核心組件,負責數據的存儲、檢索、事務處理以及并發控制。它直接決定了數據庫的性能特性、可靠性及適用場景。
2.41 數據庫引擎核心組件
(1)存儲管理
- 數據組織:定義數據在磁盤上的存儲結構(如B+樹、LSM樹)
- 頁管理:以固定大小(通常4KB~16KB)管理磁盤數據塊
- 緩沖池:通過內存緩存(Buffer Pool)減少磁盤I/O,提升讀寫效率
(2) 事務處理
- ACID實現:
- 原子性:依賴Undo Log回滾機制
- 隔離性:通過MVCC(多版本并發控制)或鎖機制實現
- 持久性:Redo Log確保提交數據持久化
- 日志系統:WAL(Write-Ahead Logging)協議保障故障恢復
(3) 查詢處理
- 解析器:將SQL轉換為抽象語法樹(AST)
- 優化器:基于代價模型生成最優執行計劃
- 執行器:調用存儲引擎接口獲取數據
(4)索引管理
- 索引類型:B+樹、哈希索引、全文索引、空間索引
- 自適應優化:動態調整索引結構(如InnoDB的自適應哈希索引)
2.42 主流數據庫引擎對比
引擎 | 適用場景 | 核心特性 | 局限性 |
---|---|---|---|
InnoDB | OLTP事務處理 | - 支持ACID事務 - 行級鎖 - 聚簇索引組織表 - 外鍵約束 | 高并發寫入時Undo Log膨脹風險 |
MyISAM | 讀密集型分析 | - 表級鎖 - 全文索引 - 壓縮存儲格式 | 不支持事務,崩潰后數據易損壞 |
RocksDB | 嵌入式/高吞吐寫入 | - LSM樹結構 - 高壓縮率 - 分層存儲優化 | 范圍查詢性能較弱 |
Memory | 緩存/臨時表 | - 全內存存儲 - 哈希索引加速查詢 | 宕機數據丟失,不支持變長字段 |
ColumnStore | 實時分析(OLAP) | - 列式存儲 - 向量化計算 - 數據壓縮優化 | 事務支持有限,延遲較高 |
引擎切換示例(MySQL):
-- 創建表時指定引擎
CREATE TABLE log_events (id BIGINT PRIMARY KEY,content TEXT
) ENGINE = MyISAM;-- 動態修改引擎
ALTER TABLE log_events ENGINE = InnoDB;
2.43 引擎選型策略
- 工作負載類型:
- OLTP:InnoDB、SQL Server的Microsoft SQL Engine
- OLAP:ClickHouse的MergeTree、Amazon Redshift
- 數據規模:
- 海量數據:LSM樹引擎(Cassandra、ScyllaDB)
- 中等數據:B+樹引擎(InnoDB)
- 一致性要求:
- 強一致:支持ACID的引擎(InnoDB)
- 最終一致:AP架構引擎(DynamoDB)
OLTP
(Online Transaction Processing,聯機事務處理)和OLAP
(Online Analytical Processing,聯機分析處理)是數據庫領域的兩種不同應用場景,分別用于處理日常事務操作和數據分析。它們在設計目標、數據結構、操作類型和應用場景上有顯著區別。
OLTP(聯機事務處理)
OLTP 是一種面向事務處理的數據庫系統,主要用于實時處理和管理日常業務操作。它的核心目標是支持高并發的事務操作,確保數據的實時性和一致性
。特點
- 高并發性:支持大量用戶同時進行操作,例如銀行轉賬、在線購物等。
- 低延遲:操作響應時間非常短,用戶體驗至關重要。
- 事務性:強調 ACID 特性(原子性、一致性、隔離性、持久性),確保數據的正確性和完整性。
- 數據更新頻繁:主要涉及數據的插入、更新、刪除等操作。
- 面向行存儲:數據存儲和操作通常是針對單行或少量行的操作。
- 規范化設計:數據通常按照規范化的模式進行存儲,減少數據冗余。
應用場景
- 銀行系統:存款、取款、轉賬等。
- 電商網站:商品購買、訂單處理、用戶登錄等。
- 在線訂票系統:機票、火車票預訂等。
- 企業資源規劃(ERP)系統:訂單管理、庫存管理等。
常見數據庫
- MySQL:開源關系型數據庫,支持事務,適合中小型應用。
- PostgreSQL:開源關系型數據庫,支持復雜事務,適合高可用性需求。
- Oracle:商業數據庫,強大的事務處理能力,廣泛用于企業級應用。
- Microsoft SQL Server:商業數據庫,適用于 Windows 環境下的企業應用。
OLAP(聯機分析處理)
OLAP 是一種面向數據分析的系統,主要用于從大量數據中提取有價值的信息,支持復雜的查詢和數據分析。它的核心目標是幫助決策者
快速獲取數據洞察,支持業務決策
。特點
- 數據分析:主要用于數據的匯總、統計、分析和多維度查詢。
- 數據量大:通常處理的數據量非常大,數據來源可能是多個 OLTP 系統。
- 面向列存儲:為了優化分析查詢,數據通常以列存儲的方式組織。
- 多維數據模型:支持多維數據模型(如星型模型、雪花模型),便于從不同角度分析數據。
- 數據冗余:為了提高查詢效率,數據可能經過預處理和冗余存儲。
- 讀多寫少:主要操作是讀取和分析數據,寫入操作較少。
應用場景
- 數據倉庫:存儲企業歷史數據,支持復雜查詢和報表生成。
- 商業智能(BI):支持數據挖掘、趨勢分析、預測等。
- 市場分析:分析銷售數據、客戶行為等。
- 財務分析:生成財務報表、預算分析等。
常見工具
- 數據倉庫系統:如 Amazon Redshift、Google BigQuery、Snowflake。
- 分析數據庫:如 Apache Hive、Presto。
- BI 工具:如 Tableau、Power BI、QlikView。
三、相關概念中英文表格
(1)數據庫基礎
中文術語 | 英文術語 | 定義與擴展 |
---|---|---|
關系型數據庫 | Relational Database (RDB) | 基于關系模型的數據庫,使用二維表結構(如MySQL、Oracle) |
非關系型數據庫 | NoSQL Database | 非結構化數據存儲(鍵值、文檔、圖、時序等類型) |
數據庫模式 | Database Schema | 數據庫的全局邏輯結構定義(表、字段、關系約束) |
數據字典 | Data Dictionary | 存儲元數據的系統表(如表結構、索引信息) |
數據庫實例 | Database Instance | 運行中的數據庫進程與內存結構的集合 |
數據庫集群 | Database Cluster | 多個數據庫節點協同工作的集合(如Galera Cluster) |
數據庫分片 | Database Sharding | 水平拆分數據到多個物理節點(如按用戶ID哈希分片) |
數據庫快照 | Database Snapshot | 某一時間點的數據靜態副本(用于備份或分析) |
(2)存儲引擎與數據結構
中文術語 | 英文術語 | 定義與擴展 |
---|---|---|
B+樹 | B+ Tree | 多路平衡搜索樹,用于磁盤索引(InnoDB默認結構) |
LSM樹 | Log-Structured Merge Tree | 高寫入吞吐數據結構(RocksDB、Cassandra核心) |
跳表 | Skip List | 多層鏈表結構,用于內存數據庫索引(Redis Sorted Set實現) |
列式存儲 | Columnar Storage | 按列組織數據(ClickHouse、Redshift核心設計) |
內存數據庫 | In-Memory Database | 數據常駐內存(Redis、MemSQL) |
分布式文件系統 | Distributed File System | 跨節點文件存儲(HDFS、Ceph) |
段頁式存儲 | Segment-Page Storage | 物理存儲管理方式(Oracle ASM、MySQL表空間) |
壓縮算法 | Compression Algorithm | ZSTD(RocksDB)、LZ4(Kafka)、Snappy(Parquet) |
(3)事務與并發控制
中文術語 | 英文術語 | 定義與擴展 |
---|---|---|
ACID屬性 | ACID Properties | 原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability) |
事務隔離級別 | Transaction Isolation Levels | 讀未提交(Read Uncommitted)、讀已提交(Read Committed)、可重復讀(Repeatable Read)、串行化(Serializable) |
樂觀鎖 | Optimistic Locking | 通過版本號檢測沖突(CAS機制) |
悲觀鎖 | Pessimistic Locking | 預先加鎖(行鎖、表鎖) |
共享鎖 | Shared Lock (S Lock) | 允許并發讀,阻止寫操作 |
排他鎖 | Exclusive Lock (X Lock) | 獨占資源,阻止其他讀寫 |
兩階段提交協議 | Two-Phase Commit (2PC) | 分布式事務協議(協調者與參與者交互) |
CAP定理 | CAP Theorem | 一致性(Consistency)、可用性(Availability)、分區容忍性(Partition Tolerance)三選二 |
(4)查詢處理與優化
中文術語 | 英文術語 | 定義與擴展 |
---|---|---|
查詢優化器 | Query Optimizer | 生成最優執行計劃(基于規則/代價模型) |
執行計劃 | Execution Plan | 查詢的具體操作步驟(全表掃描、索引掃描、嵌套循環連接等) |
索引下推 | Index Condition Pushdown (ICP) | 將過濾條件下推到存儲引擎處理(減少回表次數) |
謂詞推導 | Predicate Derivation | 通過邏輯規則簡化查詢條件 |
物化視圖 | Materialized View | 預計算并存儲查詢結果(Oracle、Snowflake支持) |
并行查詢 | Parallel Query Execution | 多線程處理查詢(如Greenplum MPP架構) |
向量化執行 | Vectorized Execution | 批量處理數據單元(ClickHouse每秒億級數據處理) |
(5)高可用與容災
中文術語 | 英文術語 | 定義與擴展 |
---|---|---|
主從復制 | Master-Slave Replication | 異步/半同步數據同步(MySQL Replication) |
多主復制 | Multi-Master Replication | 多節點可寫(Galera Cluster) |
故障轉移 | Failover | 主節點故障時自動切換到備節點 |
腦裂問題 | Split-Brain | 集群網絡分區導致數據不一致 |
數據冗余 | Data Redundancy | RAID、EC(糾刪碼)技術保障數據可靠性 |
邏輯備份 | Logical Backup | 導出SQL語句(mysqldump) |
物理備份 | Physical Backup | 復制數據文件(Percona XtraBackup) |
時間點恢復 | Point-in-Time Recovery (PITR) | 基于WAL日志恢復到指定時間點 |
(6)分布式數據庫
中文術語 | 英文術語 | 定義與擴展 |
---|---|---|
一致性哈希 | Consistent Hashing | 分布式數據分片算法(Cassandra、DynamoDB使用) |
分片鍵 | Shard Key | 數據分片依據字段(如用戶ID) |
數據局部性 | Data Locality | 計算靠近存儲(Hadoop HDFS數據本地化) |
最終一致性 | Eventual Consistency | 數據副本經過一段時間后達成一致(Cassandra默認模式) |
分布式事務 | Distributed Transaction | 跨節點事務(Google Spanner TrueTime API) |
共識算法 | Consensus Algorithm | Paxos、Raft(Etcd)、ZAB(ZooKeeper) |
聯邦查詢 | Federated Query | 跨多個數據源聯合查詢(Presto、Trino) |
(7)數據模型
中文術語 | 英文術語 | 定義與擴展 |
---|---|---|
層次模型 | Hierarchical Model | 樹形結構(早期IBM IMS) |
網狀模型 | Network Model | 圖結構(CODASYL標準) |
文檔模型 | Document Model | JSON/BSON格式(MongoDB) |
鍵值模型 | Key-Value Model | 簡單鍵值對(Redis、DynamoDB) |
圖模型 | Graph Model | 節點與邊(Neo4j、TigerGraph) |
時序模型 | Time-Series Model | 時間戳索引(InfluxDB、TimescaleDB) |
寬列模型 | Wide-Column Model | 列族存儲(Cassandra、HBase) |
(8)安全與合規
中文術語 | 英文術語 | 定義與擴展 |
---|---|---|
角色訪問控制 | Role-Based Access Control (RBAC) | 按角色分配權限(DBA、ReadOnly User) |
透明數據加密 | Transparent Data Encryption (TDE) | 數據庫文件級加密(Oracle、SQL Server支持) |
數據脫敏 | Data Masking | 敏感信息替換(如手機號中間四位****) |
SQL注入防護 | SQL Injection Prevention | 參數化查詢(Prepared Statement) |
GDPR合規 | General Data Protection Regulation | 歐盟數據保護法規(要求數據可刪除、可審計) |
審計日志 | Audit Log | 記錄所有數據操作(如MySQL Enterprise Audit) |
數據血緣 | Data Lineage | 追蹤數據來源與變換過程(Apache Atlas) |
(9)云與新興技術
中文術語 | 英文術語 | 定義與擴展 |
---|---|---|
數據庫即服務 | Database as a Service (DBaaS) | 云托管數據庫(AWS RDS、Azure Database) |
無服務器數據庫 | Serverless Database | 按需自動擴縮容(PlanetScale、Aurora Serverless) |
HTAP數據庫 | Hybrid Transactional/Analytical Processing | 同時支持事務與分析(TiDB、Google F1) |
邊緣數據庫 | Edge Database | 靠近數據源的輕量級數據庫(SQLite Edge、Redis Edge) |
量子數據庫 | Quantum Database | 基于量子計算的數據庫原型(學術界研究階段) |
區塊鏈數據庫 | Blockchain Database | 不可篡改的分布式賬本(BigchainDB) |
向量數據庫 | Vector Database | 存儲與檢索高維向量(Milvus、Pinecone) |
(10)工具與生態系統
中文術語 | 英文術語 | 定義與擴展 |
---|---|---|
ETL工具 | Extract-Transform-Load | 數據集成工具(Informatica、Talend) |
BI工具 | Business Intelligence Tool | 數據分析可視化(Tableau、Power BI) |
CDC工具 | Change Data Capture | 數據變更捕獲(Debezium、Maxwell) |
數據庫監控 | Database Monitoring | Prometheus + Grafana、Percona Monitoring |
數據目錄 | Data Catalog | 元數據管理系統(Alation、Apache Atlas) |
數據湖 | Data Lake | 原始數據存儲倉庫(AWS S3 + Apache Iceberg) |
數據網格 | Data Mesh | 去中心化數據架構(強調領域自治與產品化) |