天天看點

享學堂-架構師網課筆記-資料庫-L0(資料庫基礎)

Mysql 為什麼是這樣

說起Mysql 關系型資料庫,它最大的特點資料特點就是 1)有索引,索引好比是目錄有當你查詢的需要的記錄,直接查找 “name=zhangsan” 就可以找到相關的對象;2)就是存儲呈樹狀結構,對比與hash 結構,hash 的查找時間複雜度是O(1)而 樹是O(lg(1)),那為什麼要選擇樹呢?那是因為友善進行排序,分組,比較。

為什麼是B+樹?

一:如果是其他二叉樹,資料越多,樹的高度越高,随着插入越多查找就會越慢,而且存儲的節點越多,磁盤的IO 也越多。

二:如果是B樹,B樹的隻有兩層,B樹的好處是索引可以存在記憶體裡,資料存在磁盤上,加速查找,而且相似的資料以頁(4K)的形式存儲在磁盤上,容易批量讀取所需的資料,提高效率。

享學堂-架構師網課筆記-資料庫-L0(資料庫基礎)

三:B+樹,B+樹是在B樹上的一種更新,B數非葉子節點不存儲資料,資料隻存儲在同一層的葉子節點上,節點和節點之間用連結清單連結,友善範圍查找,定位了min 和max 後就可以周遊所有資料。

高并發

Mysql 如何做到高并發,一般來說有兩種手段,一種是鎖,一種是資料多版本。

一:鎖,鎖就是對其他使用者進行限制,鎖有幾種,一種是共享鎖,讀讀可并行,一種是排他鎖,寫讀,寫寫不并行。

二:就是資料多版本,資料多版本的核心就是當多個使用者讀一份資料但是同時存在寫請求的時候,克隆一份資料進行修改,不影響原來的讀取,過程如下:

T0 (寫請求)(讀請求)

T1 V0資料(讀請求) 克隆V0(寫請求)

T2 V0資料(讀請求) 修改V1(寫請求)

T3 送出V1 讀V1

InnoDB的實作

InnoDB 通過使用 redo, undo 復原段來實作事務,

redo: redo log,資料庫通過把批量的指令收集起來,當有一定數量時再寫入磁盤

undo: undo log, 資料庫通過記錄舊版本的資料,當資料庫需要復原時復原到資料庫

事務

復原段用于保證資料庫的ACID特性,ACID 特性是人為規定的

A: atomic 原子性,不可分割的單元,所有這些操作執行成功才成功

C:consistency 一緻性,事務執行前後的業務規則是不變的

I:Isolation 隔離性,事務間是隔離的,不會互相幹擾

D: Durability 持久性,資料被記錄了存在磁盤上

當事務交替執行時,可能會出現以下情形:

讀未送出:讀到其他事務未送出的資料,但是事務復原了

讀已送出:讀到其他事務已經送出的資料,但是會出現幻讀和不可重複讀(一個事務讀取同一條資料出現不同情況,有可能其他事務進行了修改并且送出)

可重複讀:同一個事務讀取同一條資料一緻

享學堂-架構師網課筆記-資料庫-L0(資料庫基礎)