目前關係型資料庫系統中有兩種鎖定模型:
一種是mvcc(Multi-Version Concurrency Control),方便併發控制的。
大多數rdbms都是使用這種方式實現。讀不加鎖,寫加鎖的機制。
另外一種是Lock-Based Concurrency Control
要多補充點資料庫理論知識了
術語
ACID概念
原子性(Atomicity) A
一致性(Consistency) C
隔離性(Isolation)I
永續性(Durability)D
傳統的關係型資料庫必須會實現上面幾個點的。而mongodb是不會的。發生crash(意外崩潰)資料容易出現問題。
mongodb採用的mmap機制,在斷電和某些異常情況下有可能丟失資料或者crash,好訊息是1.8以後可以開啟journal日誌來避免此類問題
schema less是一把雙刃劍,因為什麼資料都可以往裡面存,不像mysql那樣會有欄位的概念可以對資料有效性把最後一道關,需要在編寫程式的時候特別注意一下資料有效性
關係型資料庫是怎麼避免突然掉電、機器崩潰等意外事情資料仍然持久化?
通過寫日誌的形式。實際上關係型資料庫在寫入資料的時候,並不會馬上寫入到磁碟上去。而是在記憶體中,這樣做的目的是,避免磁碟的i/0能力限制。所以它們一般是有個機制定期重新整理資料到磁碟上。但是記憶體中的資料是不持久的,一旦掉電,記憶體中的資料都會沒了,所以為了解決臨時掉電等問題,保證資料持久化,所以每次操作都會寫入一個日誌檔案。
下回啟動,就根據這個日誌檔案來恢復資料。
歡迎指正!