主要分為關係型資料庫和非關係型資料庫。
關係型資料庫是依據關係模型來建立的資料庫,所謂關係模型就是「一對
一、一對多、多對多」等關係模型,關係模型就是指二維**模型,因此乙個關係型資料庫就是由二維表及其之間的聯絡組成的乙個資料組織。
常見的關係型資料庫:oracle、db2、microsoft sql server、mysql等;
acid,是指在資料庫管理系統(dbms)中事務所具有的四個特性:原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)。
在資料庫系統中,乙個事務是指由一系列資料庫操作組成的乙個完整的邏輯過程。例如銀行轉帳,從原賬戶扣除金額,以及向目標賬戶新增金額,這兩個資料庫操作的總和構成乙個完整的邏輯過程,不可拆分。這個過程被稱為乙個事務,為了保證事務的順利執行,事務必須具備acid特性。
原子性:原子性是指乙個事務是乙個不可分割的工作單位,其中的操作要麼都做,要麼都不做。即要麼轉賬成功,要麼轉賬失敗,是不存在中間的狀態。
如果無法保證原子性會怎麼樣?就會出現資料不一致的情形,a賬戶減去50元,而b賬戶增加50元操作失敗。系統將無故丟失50元。
隔離性:隔離性是指多個事務併發執行的時候,事務內部的操作與其他事務是隔離的,併發執行的各個事務之間不能互相干擾。如下圖所示:
永續性:永續性是指事務一旦提交,它對資料庫的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。
一致性:一致性是指事務執行前後,資料處於一種合法的狀態,這種狀態是語義上的(即資料自己所編寫的邏輯)。 也可以說是事務在完成時,必須使所有的資料都保持一致狀態。
例一:a賬戶有200元,轉賬300元出去,此時a賬戶餘額為-100元。你自然就發現了此時資料是不一致的,為什麼呢?因為你定義了乙個狀態,餘額這列必須大於0。
問題一:mysql怎麼保證一致性的?
從資料庫層面,資料庫通過原子性、隔離性、永續性來保證一致性。也就是說acid四大特性之中,c(一致性)是目的,a(原子性)、i(隔離性)、d(永續性)是手段,是為了保證一致性,資料庫提供的手段。資料庫必須要實現aid三大特性,才有可能實現一致性。例如,原子性無法保證,顯然一致性也無法保證。
事務中不能存在違反約束的**,一旦存在,一致性還是無法保證的。例如,你在轉賬的例子中,你的**裡故意不給b賬戶加錢,那一致性還是無法保證。因此,還必須從應用層角度考慮,通過**判斷資料庫資料是否有效,然後決定回滾還是提交資料
問題二: mysql怎麼保證原子性的?
利用innodb的undo log。
undo log名為回滾日誌,是實現原子性的關鍵,當事務回滾時能夠撤銷所有已經成功執行的sql語句,他需要記錄你要回滾的相應日誌資訊。
問題三: mysql怎麼保證永續性的?
利用innodb的redo log。
對於mysql是先把磁碟上的資料載入到記憶體中,在記憶體中對資料進行修改,再刷回磁碟上。如果此時突然宕機,記憶體中的資料就會丟失。為解決這個問題,事務提交前直接把資料寫入了磁碟。
但這樣做問題是?
只修改乙個頁面裡的乙個位元組,就要將整個頁面刷入磁碟,太浪費資源了。畢竟乙個頁面16kb大小,你只改其中一點點東西,就要將16kb的內容刷入磁碟,聽著也不合理。畢竟乙個事務裡的sql可能牽涉到多個資料頁的修改,而這些資料頁可能不是相鄰的,也就是屬於隨機io。顯然操作隨機io,速度會比較慢。
於是,決定採用redo log解決上面的問題。當做資料修改的時候,不僅在記憶體中操作,還會在redo log中記錄這次操作。當事務提交的時候,會將redo log日誌進行刷盤(redo log一部分在記憶體中,一部分在磁碟上)。當資料庫宕機重啟的時候,會將redo log中的內容恢復到資料庫中,再根據undo log和binlog內容決定回滾資料還是提交資料。
採用redo log的好處?
其實好處就是將redo log進行刷盤比對資料頁刷盤效率高,具體表現如下
redo log體積小,只記錄了哪一頁修改內容,所以體積小,刷盤快。
redo log是一直往末尾進行追加,屬於順序io。效率顯然比隨機io來的快。
問題四: mysql怎麼保證隔離性的?
利用的是鎖和mvcc機制。
鎖:事務1未提交前,鎖沒有釋放,事務2無法進行操作。
mvcc機制:即多版本併發控制大多數的mysql事務型儲存引擎。如,innodb,falcon以及pbxt都不使用一種簡單的行鎖機制。事實上,他們都和mvcc–多版本併發控制來一起使用。由於鎖機制可以控制併發操作,但是其系統開銷較大,而mvcc可以在大多數情況下代替行級鎖,使用mvcc,能降低其系統開銷。mvcc是通過儲存資料在某個時間點的快照(快照資料在undo log)來實現的。 不同儲存引擎的mvcc. 不同儲存引擎的mvcc實現是不同的,典型的有樂觀併發控制和悲觀併發控制。
關係型資料庫 非關係型資料庫
關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個...
關係型資料庫 非關係型資料庫
2019 02 25 20 38 36 關係型資料庫和非關係型資料的比較 一 關係型資料庫 關係型資料庫最典型的資料結構是表,由二維表及其之間的聯絡所組成的乙個資料組織 優點 1 易於維護 都是使用表結構,格式一致 2 使用方便 sql語言通用,可用於複雜查詢 3 複雜操作 支援sql,可用於乙個表...
資料庫 關係型資料庫
關係型資料庫 使用資料模型建立起來的資料結構。瓶頸 a.對資料庫高併發讀寫的需求 b.對海量資料的高效率儲存和訪問的需求 c.對資料庫的高擴充套件性和高可用性的需求 nosql 全稱 not only sql 非關係型資料庫,目的是使用簡單api進行資料儲存,儲存自由 可以儲存大量資料。特點 a.可...