新聞中心
隨著互聯(lián)網(wǎng)的快速發(fā)展,越來越多的企業(yè)開始將業(yè)務(wù)向線上轉(zhuǎn)移,例如電商、在線旅游等等。這種轉(zhuǎn)移給數(shù)據(jù)庫帶來了前所未有的挑戰(zhàn),超高并發(fā)的訪問量、快速的數(shù)據(jù)變更等等,都使得數(shù)據(jù)庫的穩(wěn)定性、性能等方面的要求提高了很多。因此,對(duì)于數(shù)據(jù)庫事務(wù)設(shè)計(jì)的精要,也就成為了業(yè)內(nèi)人士關(guān)注的熱點(diǎn)。

創(chuàng)新互聯(lián)建站始終堅(jiān)持【策劃先行,效果至上】的經(jīng)營理念,通過多達(dá)10多年累計(jì)超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的全網(wǎng)營銷推廣解決方案,現(xiàn)已廣泛運(yùn)用于各行各業(yè)的客戶,其中包括:樓梯護(hù)欄等企業(yè),備受客戶贊譽(yù)。
一、事務(wù)概念
在數(shù)據(jù)庫中,事務(wù)(Transaction)是指一組在邏輯上被看成是一個(gè)整體,要么全部執(zhí)行,要么都不執(zhí)行的操作。例如,在一個(gè)銀行轉(zhuǎn)賬的操作中,涉及到從一個(gè)賬戶中扣除一定金額,同時(shí)向另一個(gè)賬戶中增加相應(yīng)的金額,這兩個(gè)操作的執(zhí)行應(yīng)該是“不可分割”的。
二、事務(wù)特性
數(shù)據(jù)庫事務(wù)有四個(gè)特性,即原子性、一致性、隔離性和持久性。
1. 原子性(ACID的”A”)
原子性是指一個(gè)事務(wù)中包含的所有操作要么全部成功,要么全部失敗。事務(wù)的執(zhí)行結(jié)果不能部分提交,也不能部分成功。如果事務(wù)在執(zhí)行過程中發(fā)生了錯(cuò)誤,那么整個(gè)事務(wù)都會(huì)被回滾到開始執(zhí)行時(shí)的狀態(tài)。
2. 一致性(ACID的”C”)
一致性指的是事務(wù)執(zhí)行前后,數(shù)據(jù)庫的狀態(tài)保持一致。事務(wù)所執(zhí)行的操作應(yīng)該滿足業(yè)務(wù)要求,例如在某個(gè)賬戶中存入一定金額,那么執(zhí)行完事務(wù)后,該賬戶的余額應(yīng)該與執(zhí)行前的余額相加得到。
3. 隔離性(ACID的”I”)
隔離性是指一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。同一個(gè)時(shí)間,多個(gè)事務(wù)在數(shù)據(jù)庫中同時(shí)進(jìn)行,它們的執(zhí)行過程之間應(yīng)該互不干擾,即一個(gè)事務(wù)中所做的改變對(duì)其他事務(wù)來說不可見。
4. 持久性(ACID的”D”)
持久性是指一個(gè)事務(wù)執(zhí)行結(jié)束后,其結(jié)果應(yīng)該永久保存在數(shù)據(jù)庫中。確保在數(shù)據(jù)庫退出或者服務(wù)器崩潰等異常情況下,數(shù)據(jù)能夠得到恢復(fù)。
三、多個(gè)事務(wù)之間的并發(fā)
由于互聯(lián)網(wǎng)應(yīng)用的特殊性,很多時(shí)候會(huì)面對(duì)多個(gè)數(shù)據(jù)庫事務(wù)之間的并發(fā)。例如某個(gè)購物網(wǎng)站,有兩個(gè)用戶同時(shí)在下單,兩個(gè)事務(wù)都試圖向訂單表中插入一條記錄,那么就需要考慮這種并發(fā)下,事務(wù)的執(zhí)行效率與數(shù)據(jù)的一致性如何平衡。一般來說,數(shù)據(jù)庫系統(tǒng)中會(huì)采用鎖機(jī)制來解決并發(fā)問題。
1. 鎖的種類
共享鎖(Shared Lock):當(dāng)一個(gè)事務(wù)在讀一個(gè)數(shù)據(jù)時(shí),使用共享鎖對(duì)數(shù)據(jù)進(jìn)行加鎖,其他事務(wù)只能讀該數(shù)據(jù),不能進(jìn)行修改操作。
排他鎖(Exclusive Lock):當(dāng)一個(gè)事務(wù)在修改一個(gè)數(shù)據(jù)時(shí),使用排他鎖對(duì)數(shù)據(jù)進(jìn)行加鎖,其他事務(wù)無法讀取或修改該數(shù)據(jù)。
2. 鎖的級(jí)別
事務(wù)的隔離級(jí)別是指在多個(gè)事務(wù)處理的同時(shí),能否操作同一個(gè)數(shù)據(jù)。SQL標(biāo)準(zhǔn)定義了4個(gè)事務(wù)隔離級(jí)別:Read Uncommitted(讀未提交)、Read Committed(讀已提交)、Repeatable Read(可重復(fù)讀)和Serializable(可串行化)。這些級(jí)別從上到下逐步提高。事務(wù)的隔離級(jí)別越高,性能方面的開銷一般越大。
3. 并發(fā)帶來的問題
鎖雖然可以解決并發(fā)問題,但也會(huì)帶來一些問題。例如死鎖、饑餓等等。死鎖是指多個(gè)事務(wù)互相占有對(duì)方需要的資源,最終導(dǎo)致所有事務(wù)都無法繼續(xù)執(zhí)行。饑餓則是指某個(gè)事務(wù)因?yàn)闊o法取得必要的資源而一直無法執(zhí)行下去。
四、數(shù)據(jù)庫事務(wù)設(shè)計(jì)
1. 高并發(fā)下的性能問題
高并發(fā)下,系統(tǒng)的性能會(huì)變得很重要。為了保證系統(tǒng)的高性能,需要考慮以下因素:
優(yōu)化SQL語句,減少數(shù)據(jù)庫的無效讀取
增加緩存層,避免重復(fù)讀取
分庫分表,減少單個(gè)表的數(shù)據(jù)量
2. 事務(wù)的設(shè)計(jì)
為了保證事務(wù)的原子性、一致性、隔離性和持久性,需要注意以下幾點(diǎn):
避免人為錯(cuò)誤,例如在一個(gè)事務(wù)中修改了多個(gè)表,但只提交了部分修改,導(dǎo)致數(shù)據(jù)一致性問題
盡量采用較短的事務(wù),避免長時(shí)間占用數(shù)據(jù)庫資源
盡量先進(jìn)行讀操作,避免對(duì)同一個(gè)數(shù)據(jù)進(jìn)行多次更新
對(duì)于一些非常重要的事務(wù),可以采用事務(wù)超時(shí)機(jī)制,強(qiáng)制事務(wù)在一定時(shí)間內(nèi)執(zhí)行完畢。
五、
對(duì)于數(shù)據(jù)庫事務(wù)的設(shè)計(jì),需要考慮多個(gè)方面,例如事務(wù)的原子性、一致性、隔離性和持久性、鎖機(jī)制的運(yùn)用、事務(wù)的設(shè)計(jì)等等。要想在高并發(fā)下保證系統(tǒng)的高效穩(wěn)定運(yùn)行,需要引入一些優(yōu)化手段,例如優(yōu)化SQL語句、增加緩存層、分庫分表等。只有在綜合考慮了這些方面之后,才能給用戶帶來更好的使用體驗(yàn)。
相關(guān)問題拓展閱讀:
- 關(guān)系型數(shù)據(jù)庫的局限性有哪些難以滿足高并發(fā)讀寫的需求
關(guān)系型數(shù)據(jù)庫的局限性有哪些難以滿足高并發(fā)讀寫的需求
隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,非關(guān)系型的數(shù)據(jù)庫現(xiàn)在成了一個(gè)極其熱門的新領(lǐng)域,非關(guān)系數(shù)據(jù)庫產(chǎn)品的發(fā)展非常迅速。而傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動(dòng)態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,例如:
1、High performance——對(duì)數(shù)據(jù)庫高并發(fā)讀寫的需求
Web2.0網(wǎng)站要根據(jù)用戶個(gè)性化信息來實(shí)時(shí)生成動(dòng)態(tài)頁面和提供動(dòng)態(tài)信息,所以基本上無法使用動(dòng)態(tài)頁面靜態(tài)化技術(shù),因此數(shù)據(jù)庫并發(fā)負(fù)載非常高,往往要達(dá)到每秒上萬次讀寫請(qǐng)求。關(guān)系數(shù)據(jù)庫應(yīng)付上萬次SQL查詢還勉強(qiáng)頂?shù)米。菓?yīng)付上萬次SQL寫數(shù)據(jù)請(qǐng)求,硬盤IO就已經(jīng)無法承受了。其實(shí)對(duì)于普通的BBS網(wǎng)站,往往也存在對(duì)高并發(fā)寫請(qǐng)求的需求,例如像JavaEye網(wǎng)站的實(shí)時(shí)統(tǒng)計(jì)在線用戶狀態(tài),記錄熱門帖子的點(diǎn)擊次數(shù),投票計(jì)數(shù)等,因此這是一個(gè)相當(dāng)普衡肢遍的需求。
2、Huge Storage——對(duì)海量數(shù)據(jù)的高效率存儲(chǔ)和訪問的需求
類似鎮(zhèn)租Facebook,twitter,F(xiàn)riendfeed這樣的SNS網(wǎng)站,每天用戶產(chǎn)生海量的用戶動(dòng)態(tài),以Friendfeed為例,一個(gè)月就達(dá)到了2.5億條用戶動(dòng)態(tài),對(duì)于關(guān)系數(shù)據(jù)庫來說,在一張2.5億條記錄的表里面進(jìn)行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網(wǎng)站的用戶登錄系統(tǒng),例如騰訊,盛大,動(dòng)輒數(shù)以億計(jì)的帳號(hào),關(guān)系數(shù)據(jù)庫也很難應(yīng)付。
3、High Scalability && High Availability——對(duì)數(shù)據(jù)庫的高可擴(kuò)展性和高可用性的需求
在基于web的架構(gòu)當(dāng)中,數(shù)據(jù)庫是最難進(jìn)行橫向擴(kuò)展的,當(dāng)一個(gè)應(yīng)用系統(tǒng)的用戶量和訪問量與日俱增的時(shí)候,你的數(shù)據(jù)庫卻沒有辦法像web server和app server那樣簡(jiǎn)單的通過添加更多的硬件和服務(wù)節(jié)點(diǎn)來擴(kuò)展性能和負(fù)載能力。對(duì)于很多需要提供24小時(shí)不間斷服務(wù)的網(wǎng)站來說,對(duì)數(shù)據(jù)庫系統(tǒng)進(jìn)行升級(jí)和擴(kuò)展是非常痛苦的事情,往往需要停機(jī)維護(hù)和數(shù)據(jù)遷移,為什么數(shù)據(jù)庫不能通過不斷的添加服務(wù)器節(jié)點(diǎn)來實(shí)現(xiàn)擴(kuò)展呢?
在上面提到的“三高”需求面前,關(guān)系數(shù)據(jù)庫遇到了難以克服的障礙,而對(duì)于web2.0網(wǎng)站來說,關(guān)系數(shù)據(jù)庫的很多主要特性卻往往無用武之地,例如:
1. 數(shù)據(jù)庫事務(wù)一致性需求
很多web實(shí)時(shí)系統(tǒng)并不要求嚴(yán)格的數(shù)據(jù)庫事務(wù),對(duì)讀一致性的要求很低,有些場(chǎng)合對(duì)寫一致性要求也不高。因此數(shù)據(jù)庫事務(wù)管理成了數(shù)據(jù)庫高負(fù)載下一個(gè)沉重的負(fù)擔(dān)。
2. 數(shù)據(jù)庫的寫實(shí)時(shí)性和讀實(shí)時(shí)性需求
對(duì)關(guān)系數(shù)據(jù)庫來說,插入一條數(shù)據(jù)之后立刻查詢,是肯定可以讀出來這條數(shù)據(jù)的,但是對(duì)于很多web應(yīng)用來說,并不要求這么高的實(shí)時(shí)性,比方說我(JavaEye的robbin)發(fā)一條消息之后,過幾秒乃至十幾秒之后,我的訂閱者才看到這條動(dòng)態(tài)是完全可以接受的。
3、對(duì)復(fù)雜的SQL查詢,特別是多表關(guān)聯(lián)查詢的需求
任何大數(shù)據(jù)量的web系統(tǒng),都非常忌諱多個(gè)大表的關(guān)聯(lián)查詢,以及復(fù)雜的數(shù)據(jù)分析類型的復(fù)雜SQL報(bào)表查詢,特別是SNS類型的網(wǎng)站,從需求以及產(chǎn)品設(shè)計(jì)角度,就避免了這種情況的產(chǎn)生。往往更多的只是單表的主鍵查詢,以及單表的簡(jiǎn)單條件分頁查詢,SQL的功能被極大的弱化了。
因此,關(guān)系數(shù)據(jù)庫在這些越來越多的應(yīng)用場(chǎng)景下顯得不那么合適了,為了解決這類問題的非關(guān)系數(shù)據(jù)庫應(yīng)運(yùn)而生,現(xiàn)在這兩年,各種各樣非關(guān)系數(shù)據(jù)庫,特別是鍵值數(shù)據(jù)庫(Key-Value Store DB)風(fēng)起云涌,多得讓人眼花繚亂。前不久國外剛剛舉辦了NoSQL Conference,各路NoSQL數(shù)據(jù)庫紛紛亮相,加上未亮相但是名聲在外的,起碼有超過10個(gè)開源的NoSQLDB,例如:
Redis,Tokyo Cabinet,Cassandra,Voldemort,MongoDB,御攔兆Dynomite,HBase,CouchDB,Hypertable, Riak,Tin, Flare, Lightcloud, KiokuDB,Scalaris, Kai, ThruDB, ……
這些NoSQL數(shù)據(jù)庫,有的是用C/C++編寫的,有的是用Java編寫的,還有的是用Erlang編寫的,每個(gè)都有自己的獨(dú)到之處,看都看不過來了,我(robbin)也只能從中挑選一些比較有特色,看起來更有前景的產(chǎn)品學(xué)習(xí)和了解一下。
高并發(fā)數(shù)據(jù)庫事務(wù)設(shè)計(jì)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于高并發(fā)數(shù)據(jù)庫事務(wù)設(shè)計(jì),高效應(yīng)對(duì)高并發(fā):數(shù)據(jù)庫事務(wù)設(shè)計(jì)精要,關(guān)系型數(shù)據(jù)庫的局限性有哪些難以滿足高并發(fā)讀寫的需求的信息別忘了在本站進(jìn)行查找喔。
成都網(wǎng)站設(shè)計(jì)制作選創(chuàng)新互聯(lián),專業(yè)網(wǎng)站建設(shè)公司。
成都創(chuàng)新互聯(lián)10余年專注成都高端網(wǎng)站建設(shè)定制開發(fā)服務(wù),為客戶提供專業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)服務(wù);成都創(chuàng)新互聯(lián)服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),小程序開發(fā),營銷網(wǎng)站建設(shè),網(wǎng)站改版,服務(wù)器托管租用等互聯(lián)網(wǎng)服務(wù)。
網(wǎng)頁題目:高效應(yīng)對(duì)高并發(fā):數(shù)據(jù)庫事務(wù)設(shè)計(jì)精要 (高并發(fā)數(shù)據(jù)庫事務(wù)設(shè)計(jì))
轉(zhuǎn)載注明:http://m.fisionsoft.com.cn/article/ccoppee.html


咨詢
建站咨詢
