面試題:
數(shù)據(jù)庫事務(wù)的四大特性:ACID ? ??
? ? ? ? ?原子性:
????????????????????原子性是指事務(wù)包含的所有操作要么全部成功议纯,要么全部失敗回滾苏潜,這和前面兩篇博客介紹事務(wù)的功能是一樣的概念步责,因此事務(wù) 的操作如果成功就必須要完全應(yīng)用到數(shù)據(jù)庫,如果操作失敗則不能對數(shù)據(jù)庫有任何影響鹅搪。
? ? ? ? ?一致性:
????????????????????????一致性是指事務(wù)必須使數(shù)據(jù)庫從一個一致性狀態(tài)變換到另一個一致性狀態(tài)站绪,也就是說一個事務(wù)執(zhí)行之前和執(zhí)行之后都必須處于一致 ????????????????????????性狀態(tài)。
???????????????? 拿轉(zhuǎn)賬來說丽柿,假設(shè)用戶A和用戶B兩者的錢加起來一共是5000恢准,那么不管A和B之間如何轉(zhuǎn)賬,轉(zhuǎn)幾次賬甫题,事務(wù)結(jié)束后兩個用戶的錢相加起來應(yīng)該還得是5000馁筐,這就是事務(wù)的一致性。
? ? ? ? ?隔離性:
????????????????????????隔離性是當多個用戶并發(fā)訪問數(shù)據(jù)庫時幔睬,比如操作同一張表時眯漩,數(shù)據(jù)庫為每一個用戶開啟的事務(wù)芹扭,不能被其他事務(wù)的操作所干擾麻顶,多個并發(fā)事務(wù)之間要相互隔離。
即要達到這么一種效果:對于任意兩個并發(fā)的事務(wù)T1和T2舱卡,在事務(wù)T1看來辅肾,T2要么在T1開始之前就已經(jīng)結(jié)束,要么在T1結(jié)束之后才開始轮锥,這樣每個事務(wù)都感覺不到有其他事務(wù)在并發(fā)地執(zhí)行矫钓。
關(guān)于事務(wù)的隔離性數(shù)據(jù)庫提供了多種隔離級別,稍后會介紹到舍杜。
? ? ? ? ?持久性:
????????????????????????持久性是指一個事務(wù)一旦被提交了新娜,那么對數(shù)據(jù)庫中的數(shù)據(jù)的改變就是永久性的,即便是在數(shù)據(jù)庫系統(tǒng)遇到故障的情況下也不會丟失提交事務(wù)的操作既绩。
例如我們在使用JDBC操作數(shù)據(jù)庫時概龄,在提交事務(wù)方法后,提示用戶事務(wù)操作完成饲握,當我們程序執(zhí)行完成直到看到提示后私杜,就可以認定事務(wù)以及正確提交,即使這時候數(shù)據(jù)庫出現(xiàn)了問題救欧,也必須要將我們的事務(wù)完全執(zhí)行完成衰粹,否則就會造成我們看到提示事務(wù)處理完畢,但是數(shù)據(jù)庫因為故障而沒有執(zhí)行事務(wù)的重大錯誤笆怠。
mysql 引擎:(目前由8,9種)
? ??????MySQL有以下幾種引擎:ISAM铝耻、MyISAM、HEAP(也稱為MEMORY)蹬刷、CSV田篇、BLACKHOLE替废、ARCHIVE、PERFORMANCE_SCHEMA泊柬、InnoDB椎镣、 Berkeley、Merge兽赁、Federated和Cluster/NDB等状答,
最常用的是InnoDB ?mysql默認5.5版本后引用 ?支持事物和行鎖(數(shù)據(jù)庫鎖機制)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?mysql數(shù)據(jù)庫引擎的區(qū)別
數(shù)據(jù)庫的鎖(鎖機制):排它鎖 (寫鎖)、共享鎖(讀鎖)刀崖、
代碼對數(shù)據(jù)庫鎖的實現(xiàn):
????????悲觀鎖:數(shù)據(jù)庫不會出錯惊科、但是多線程變?yōu)閱尉€程、速度變慢亮钦。
? ? ? ? 樂觀鎖:多線程馆截、速度快
常見[NoSQL]數(shù)據(jù)庫 BSON==json
?????列存儲:Hbase、Cassandra蜂莉、Hypertable
????????? 文檔存儲:MongoDB蜡娶、CouchDB
??????? ? k-v存儲:TokyoCabinet、BerkeleyDB映穗、Memcache窖张、redis
??????? ? 對象(圖)存儲:Neo4J、Versant
????????? Xml數(shù)據(jù)庫:BerkeleyDB蚁滋、BaseX
CAP:原則
????????????CAP原則是NOSQL數(shù)據(jù)庫的基石宿接。Consistency(一致性)。 Availability(可用性)辕录。
????????????Partition tolerance(分區(qū)容錯性)
1睦霎、數(shù)據(jù)庫事務(wù)一致性需求?
? ? ? ? 很多web實時系統(tǒng)并不要求嚴格的數(shù)據(jù)庫事務(wù),對讀一致性的要求很低走诞,有些場合對寫一致性要求并不高副女。允許實現(xiàn)最終一致性。
?2速梗、數(shù)據(jù)庫的寫實時性和讀實時性需求
? ? ? ? ? 對關(guān)系數(shù)據(jù)庫來說肮塞,插入一條數(shù)據(jù)之后立刻查詢,是肯定可以讀出來這條數(shù)據(jù)的姻锁,但是對于很多web應(yīng)用來說枕赵,并不要求這么高的實時性,比方說發(fā)一條消息之 后位隶,過幾秒乃至十幾秒之后拷窜,我的訂閱者才看到這條動態(tài)是完全可以接受的。
3、對復(fù)雜的SQL查詢篮昧,特別是多表關(guān)聯(lián)查詢的需求?
????????任何大數(shù)據(jù)量的web系統(tǒng)赋荆,都非常忌諱多個大表的關(guān)聯(lián)查詢,以及復(fù)雜的數(shù)據(jù)分析類型的報表查詢懊昨,特別是SNS類型的網(wǎng)站窄潭,從需求以及產(chǎn)品設(shè)計角 度,就避免了這種情況的產(chǎn)生酵颁。往往更多的只是單表的主鍵查詢,以及單表的簡單條件分頁查詢躏惋,SQL的功能被極大的弱化