【MySQL_03】數據庫基本--核心概念

文章目錄

  • 一、數據庫基礎
    • 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 數據庫基礎定義

數據庫 (DatabaseDB) 是按照特定的數據模型組織、存儲和管理數據的計算機化系統,通常存儲在計算機存儲設備中。它可以包含多種類型的數據,如文本、數字、圖像、視頻和文件等。數據庫的核心目標是便于有效地存儲、檢索、修改、刪除和管理數據。

數據庫管理系統(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 數據庫層次結構

數據庫的層次結構通常分為物理層、邏輯層和用戶層。每一層負責不同的功能,從數據存儲到用戶訪問,都由這些層次共同協作。

  1. 物理層:物理層負責數據庫數據的存儲方式和優化,它包括文件組織(如堆文件、索引文件等)、存儲引擎(如InnoDB、RocksDB)以及緩存機制。該層關注數據在硬件中的存儲形式,確保數據的有效存取
  2. 邏輯層:邏輯層則定義了數據庫的邏輯結構,包括表結構、視圖、以及數據完整性約束(如主鍵、外鍵等)。這一層不關心數據的具體存儲形式,而是定義了如何通過SQL語句來操作數據庫
  3. 用戶層:用戶層為最終用戶提供數據訪問接口,包括權限控制、虛擬表、以及數據庫與應用程序之間的接口協議(如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支持的常見數據類型包括整數類型、浮點數類型、日期時間類型和字符串類型等。

類別具體類型存儲范圍使用建議
整數型TINYINTINTBIGINT1字節 ~ 8字節根據數據范圍選擇最小類型(節省空間)
浮點型FLOATDOUBLEDECIMAL單精度、雙精度、精確小數(DECIMAL(10,2))金融計算必須使用DECIMAL避免精度丟失
時間型DATETIMEDATETIMETIMESTAMPTIMESTAMP自動時區轉換記錄時間戳優先用TIMESTAMP(4字節節省空間)
字符串型CHARVARCHARTEXTBLOBCHAR定長(0-255)、VARCHAR變長(0-65535)短文本用VARCHAR,長文本用TEXT+壓縮算法

1.9 數據庫范式化

數據庫范式化旨在通過分解關系來減少冗余數據,確保數據的一致性和完整性。

范式規則示例
1NF(第一范式)消除重復列,屬性原子性拆分“地址”字段為省、市、街道
2NF(第二范式)消除部分函數依賴(非主屬性完全依賴主鍵)訂單表中不應存儲客戶姓名(應通過外鍵關聯)
3NF(第三范式)消除傳遞函數依賴(非主屬性不依賴其他非主屬性)員工表中不應包含部門地址(應通過部門ID關聯部門表)

二、 數據庫技術構成

2.1 系統構成

數據庫系統由三個核心組成部分構成:

  1. 數據庫(Database)
    用于持久化存儲數據的物理容器,通常以文件形式存在于存儲設備中。

  2. 數據庫管理系統(DBMS):管理數據庫的軟件系統,提供以下功能:

    • 數據定義與結構管理
    • 數據操作與事務控制
    • 安全權限與訪問控制
    • 備份恢復與性能優化
  3. 數據庫應用程序:用于增強DBMS功能的輔助工具,例如:

    • 數據可視化工具(如Tableau)
    • 數據同步工具(如Debezium)
    • 監控管理工具(如Percona Monitoring)

2.2 SQL語言

SQL(Structured Query Language)是用于與數據庫通信的標準語言,具備以下特點:

  1. 跨平臺性:主流DBMS(MySQL、Oracle、PostgreSQL等)均支持
  2. 易學性:基于自然英語的關鍵詞(SELECT/INSERT/UPDATE等)
  3. 功能強大:支持從簡單查詢到復雜事務處理
  4. 擴展性:不同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年,由微軟聯合多家廠商制定,旨在解決不同數據庫系統間的互操作性問題。作為首個跨平臺數據庫訪問標準,它通過抽象層屏蔽數據庫差異。

架構解析:

  1. 應用程序:調用ODBC API提交SQL請求
  2. 驅動程序管理器:加載/卸載驅動程序,管理連接池
  3. 數據庫驅動:廠商提供的具體實現(如MySQL ODBC Driver)
  4. 數據源:通過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數據庫連接)

架構分層:

  1. JDBC API:提供java.sqljavax.sql接口
  2. JDBC Driver Manager:加載數據庫驅動(如mysql-connector-java
  3. 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)關聯數據
  • 提供跨數據庫方言抽象

實現對比:

框架語言特點適用場景
HibernateJava全自動映射,HQL查詢語言復雜領域模型
MyBatisJavaSQL與代碼解耦,靈活度高需精細控制SQL
SQLAlchemyPython支持ORM和原生SQL雙模式數據分析和Web開發
Entity FrameworkC#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 主流數據庫引擎對比

引擎適用場景核心特性局限性
InnoDBOLTP事務處理- 支持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 是一種面向事務處理的數據庫系統,主要用于實時處理和管理日常業務操作。它的核心目標是支持高并發的事務操作,確保數據的實時性和一致性

特點

  1. 高并發性:支持大量用戶同時進行操作,例如銀行轉賬、在線購物等。
  2. 低延遲:操作響應時間非常短,用戶體驗至關重要。
  3. 事務性:強調 ACID 特性(原子性、一致性、隔離性、持久性),確保數據的正確性和完整性。
  4. 數據更新頻繁:主要涉及數據的插入、更新、刪除等操作。
  5. 面向行存儲:數據存儲和操作通常是針對單行或少量行的操作。
  6. 規范化設計:數據通常按照規范化的模式進行存儲,減少數據冗余。

應用場景

  • 銀行系統:存款、取款、轉賬等。
  • 電商網站:商品購買、訂單處理、用戶登錄等。
  • 在線訂票系統:機票、火車票預訂等。
  • 企業資源規劃(ERP)系統:訂單管理、庫存管理等。

常見數據庫

  • MySQL:開源關系型數據庫,支持事務,適合中小型應用。
  • PostgreSQL:開源關系型數據庫,支持復雜事務,適合高可用性需求。
  • Oracle:商業數據庫,強大的事務處理能力,廣泛用于企業級應用。
  • Microsoft SQL Server:商業數據庫,適用于 Windows 環境下的企業應用。

OLAP(聯機分析處理)

OLAP 是一種面向數據分析的系統,主要用于從大量數據中提取有價值的信息,支持復雜的查詢和數據分析。它的核心目標是幫助決策者快速獲取數據洞察,支持業務決策

特點

  1. 數據分析:主要用于數據的匯總、統計、分析和多維度查詢。
  2. 數據量大:通常處理的數據量非常大,數據來源可能是多個 OLTP 系統。
  3. 面向列存儲:為了優化分析查詢,數據通常以列存儲的方式組織。
  4. 多維數據模型:支持多維數據模型(如星型模型、雪花模型),便于從不同角度分析數據。
  5. 數據冗余:為了提高查詢效率,數據可能經過預處理和冗余存儲。
  6. 讀多寫少:主要操作是讀取和分析數據,寫入操作較少。

應用場景

  • 數據倉庫:存儲企業歷史數據,支持復雜查詢和報表生成。
  • 商業智能(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 AlgorithmZSTD(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 RedundancyRAID、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 AlgorithmPaxos、Raft(Etcd)、ZAB(ZooKeeper)
聯邦查詢Federated Query跨多個數據源聯合查詢(Presto、Trino)

(7)數據模型

中文術語英文術語定義與擴展
層次模型Hierarchical Model樹形結構(早期IBM IMS)
網狀模型Network Model圖結構(CODASYL標準)
文檔模型Document ModelJSON/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 MonitoringPrometheus + Grafana、Percona Monitoring
數據目錄Data Catalog元數據管理系統(Alation、Apache Atlas)
數據湖Data Lake原始數據存儲倉庫(AWS S3 + Apache Iceberg)
數據網格Data Mesh去中心化數據架構(強調領域自治與產品化)

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

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

相關文章

FreeRTOS第16篇:FreeRTOS鏈表實現細節04_為什么FreeRTOS選擇“侵入式鏈表”

文/指尖動聽知識庫-星愿 文章為付費內容,商業行為,禁止私自轉載及抄襲,違者必究!!! 文章專欄:深入FreeRTOS內核:從原理到實戰的嵌入式開發指南 1 傳統鏈表 vs. 侵入式鏈表 在嵌入式系統中,內存和性能的優化至關重要。FreeRTOS選擇侵入式鏈表而非傳統鏈表,其背后是內…

STM32讀寫片內FLASH 筆記

文章目錄 前言STM32F105的內部ROM分布STM32F10x的閃存擦寫解鎖FPECMain FLASH 的編寫 main Flash的擦除注意點 前言 在通過OTA的方式對設備進行升級&#xff0c;若在使用內部FLASH裝載固件程序的方式下&#xff0c;需要擦寫 內部FLASH 從而實現把新的固件程序寫入到 內部FLASH…

Python爬蟲實戰:爬取財金網實時財經信息

注意:以下內容僅供技術研究,請遵守目標網站的robots.txt規定,控制請求頻率避免對目標服務器造成過大壓力! 一、引言 在當今數字化時代,互聯網數據呈爆炸式增長,其中蘊含著巨大的商業價值、研究價值和社會價值。從金融市場動態分析到行業趨勢研究,從輿情監測到學術信息收…

3.3.2 用仿真圖實現點燈效果

文章目錄 文章介紹Keil生成.hex代碼Proteus仿真圖中導入.hex代碼文件開始仿真 文章介紹 點燈之前需要準備好仿真圖keil代碼 仿真圖參考前文&#xff1a;3.3.2 Proteus第一個仿真圖 keil安裝參考前文&#xff1a;3.1.2 Keil4安裝教程 keil新建第一個項目參考前文&#xff1a;3.1…

996引擎-問題處理:實現自定義道具變身卡

996引擎-問題處理:實現自定義道具變身卡 方案一、修改角色外觀(武器、衣服、特效) 實現變身先看效果創建個NPC測試效果方案二、利用 Buff 實現變身創建:變身Buff配buff表,實現人物變形測試NPC創建道具:變身卡配item表,添加道具:變身卡觸發函數參考資料方案一、修改角色外…

AI視頻領域的DeepSeek—阿里萬相2.1圖生視頻

讓我們一同深入探索萬相 2.1 &#xff0c;本文不僅介紹其文生圖和文生視頻的使用秘籍&#xff0c;還將手把手教你如何利用它實現圖生視頻。 如下為生成的視頻效果&#xff08;我錄制的GIF動圖&#xff09; 如下為輸入的圖片 目錄 1.阿里巴巴全面開源旗下視頻生成模型萬相2.1模…

驅動 AI 邊緣計算新時代!高性能 i.MX 95 應用平臺引領未來

智慧浪潮崛起&#xff1a;AI與邊緣計算的時代 正悄然深植于我們的日常生活之中&#xff0c;無論是火熱的 ChatGPT 與 DeepSeek 語言模型&#xff0c;亦或是 Meta 智能眼鏡&#xff0c;AI 技術已經無形地影響著我們的生活。這股變革浪潮并未停歇&#xff0c;而是進一步催生了更高…

如何快速判斷IP是否為代理

1.探究IP地址的地理分布 代理IP的所在位置&#xff0c;往往與用戶實際所在地不吻合。可以通過運用WHOIS查詢工具或在線IP地址定位服務&#xff0c;輸入所需查詢的IP&#xff0c;即可獲得其地理位置信息。 若該信息顯示的位置并非用戶所在城市或顯示為知名代理服務器節點&…

從CL1看生物計算機的創新突破與發展前景:技術、應用與挑戰的多維度剖析

一、引言 1.1 研究背景與意義 隨著科技的飛速發展&#xff0c;計算機技術已經成為推動現代社會進步的核心力量之一。從最初的電子管計算機到如今的大規模集成電路計算機&#xff0c;計算機的性能得到了極大的提升&#xff0c;應用領域也不斷拓展。然而&#xff0c;傳統計算機…

AI革命先鋒:DeepSeek與藍耘通義萬相2.1的無縫融合引領行業智能化變革

云邊有個稻草人-CSDN博客 目錄 引言 一、什么是DeepSeek&#xff1f; 1.1 DeepSeek平臺概述 1.2 DeepSeek的核心功能與技術 二、藍耘通義萬相2.1概述 2.1 藍耘科技簡介 2.2 藍耘通義萬相2.1的功能與優勢 1. 全鏈條智能化解決方案 2. 強大的數據處理能力 3. 高效的模型…

zabbix圖表中文顯示方框

問題&#xff1a; zabbix安裝完成后&#xff0c;查看圖形&#xff0c;下方中文顯示為方框 思路&#xff1a; 替換字體文件&#xff0c;或者修改配置文件指向中文可以正常顯示的字體文件 方案&#xff1a; 查找資料確認影響因素 通過資料查詢得知&#xff0c;使用的字體文…

【Linux-網絡】HTTP的清風與HTTPS的密語

&#x1f3ac; 個人主頁&#xff1a;誰在夜里看海. &#x1f4d6; 個人專欄&#xff1a;《C系列》《Linux系列》《算法系列》 ?? 道阻且長&#xff0c;行則將至 目錄 &#x1f4da; 引言 &#x1f4da; 一、HTTP &#x1f4d6; 1.概述 &#x1f4d6; 2.URL &#x1f5…

通過數據庫網格架構構建現代分布式數據系統

在當今微服務驅動的世界中&#xff0c;企業在跨分布式系統管理數據方面面臨著越來越多的挑戰。數據庫網格架構已成為應對這些挑戰的強大解決方案&#xff0c;它提供了一種與現代應用架構相匹配的分散式數據管理方法。本文將探討數據庫網格架構的工作原理&#xff0c;以及如何使…

RangeError: Radix must be an integer between 2 and 36

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

荊為好的專欄推薦

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點下班 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 專欄推薦特別篇1. 后端專欄推薦2. 云原生專欄…

Bean 的生命周期主要包括以下階段:

Bean 的生命周期主要包括以下階段&#xff1a; 定義 &#xff1a;在配置文件或注解中定義 Bean&#xff0c;包括其類、作用域等信息。 實例化 &#xff1a;Spring 容器根據定義創建 Bean 的實例。 屬性賦值 &#xff1a;容器為 Bean 設置配置的屬性值。 初始化 &#xff1a;…

計算機基礎:二進制基礎06,用八進制來計數

專欄導航 本節文章分別屬于《Win32 學習筆記》和《MFC 學習筆記》兩個專欄&#xff0c;故劃分為兩個專欄導航。讀者可以自行選擇前往哪個專欄。 &#xff08;一&#xff09;WIn32 專欄導航 上一篇&#xff1a;計算機基礎&#xff1a;二進制基礎05&#xff0c;八進制簡介 回…

圖論-腐爛的橘子

994.腐爛的橘子 在給定的 m x n 網格 grid 中&#xff0c;每個單元格可以有以下三個值之一&#xff1a;值 0 代表空單元格&#xff1b; 值 1 代表新鮮橘子&#xff1b; 值 2 代表腐爛的橘子。 每分鐘&#xff0c;腐爛的橘子 周圍 4 個方向上相鄰 的新鮮橘子都會腐爛。返回 直到…

TypeError: Cannot create property ‘xxx‘ on string ‘xxx‘

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

嵌入式硬件設計SPI時需要注意什么?

嵌入式硬件設計SPI時需要注意什么? 1. 硬件設計注意事項 關鍵點注意事項1. 信號完整性- 縮短SCK、MOSI、MISO的走線長度,避免反射干擾。- 使用屏蔽線或差分信號(高速場景)。- 阻抗匹配(特別是高頻信號,如50Ω端接)。2. 電源與地線- 電源去耦:每個SPI芯片的VCC附近放置0…