Draft: 關聯式資料庫需要知道的幾件事
Last updated
Last updated
主要適用於描述 對於 Transaction 的操作,需具備的特性 Atomicity(A), Consistency(C), Isolation(I), Duration(D)。
RDBMS 中的 Transaction
是一系列的讀寫(Read/Write)操作直到 Commit 成功,而這一組操作會被當成一條 SQL 進行執行的。這一段我們稱為 Transaction
而單一個 Select, Insert, Update, Delete 是不被稱為 Transaction [1]。
Integrity Constraints
指的是預先設定的 DB Constraints。ex: Foriegn Key, Primary Key....
A: 針對 Transaction
只許成功,否則要回復上一動。也就是說 Transaction
包含一系列操作,如果中途失敗的時候,不會有做到一半失敗而造成資料不一致的問題,失敗就會回去未施作的狀態。
C: 當 Transaction
執行中的 Before
, After
。DB 的 Integrity Constraints 不應該被改變。
I: Transaction 之間保證不會相互影響
D: 只要 Transaction Committed 資料就是永久改變,而不會有因為 DB Crash 而無效
CAP 理論是分布式系統設計中的思考框架,主要講系統對 data model, operating 處理上的三個特性: Data model -> Consistency; Operating -> Availability, Partition-Tolerance 而經過證明三個特型是無法同時兼容的,只能同時兼容 2 者。
Consistency: 指的是data model 可以保證其一制性,且就像 multi-thread 共用記憶體一樣,每一次都只有一個 thread 可以影響。
Availability: 指的是當node 在運行的時候,每一個query 都一定會收到response
Partition-Tolerance: 允許 node 之間可以接受掉資料,且不影響運行
而從上述的三個特性,實際上不能玩全兼容,舉個例子[4],在一個 async 的網路中,同時具備 CAP 三的特性的系統正在運行,當有兩個 request 發生的同時,對兩個不同的 node 進行 read/write ,因為P的特性,可接受掉資訊,因此同時就違反 C 的原則,無法達到 data model 的 consistence 的特性。
因此可歸納出可行的特性如下:
AP: 不管是在 single-node 或者是 cluster,只有要 node 可用就能持續運作
CA: 在沒有任何的例外下,都是可用並保證資料的一致性。
CP: 在 node 之前不穩定的時候不接受 request。
[1] https://www.geeksforgeeks.org/sql-transactions/ [2] https://www.geeksforgeeks.org/acid-properties-in-dbms/ [3] Davoudian, Ali, Liu Chen, and Mengchi Liu. "A survey on NoSQL stores." ACM Computing Surveys (CSUR) 51.2 (2018): 1-43. [4] Rao, Vikram, and Steven Guan. "Brewer’s conjecture and the feasibility of consistent, available, partition-tolerant web services."