新聞中心
Erlang是一種開(kāi)源的并發(fā)編程語(yǔ)言,由于其在并發(fā)編程方面的強(qiáng)大能力,被廣泛應(yīng)用于大規(guī)模的分布式系統(tǒng)中。其中,Erlang數(shù)據(jù)庫(kù)也是其一個(gè)重要的組成部分。然而,在Erlang數(shù)據(jù)庫(kù)中,存在著一個(gè)名為“臟查詢”的問(wèn)題,這一問(wèn)題可能會(huì)帶來(lái)一些不可預(yù)測(cè)的后果。本文將對(duì)erlang數(shù)據(jù)庫(kù)臟查詢的原因進(jìn)行分析,并提出解決方案。

一、什么是臟查詢
臟查詢是指,在數(shù)據(jù)庫(kù)中讀取到未提交的數(shù)據(jù)。例如,一個(gè)事務(wù)正在進(jìn)行中,它修改了某些數(shù)據(jù),但尚未提交。此時(shí),另一個(gè)事務(wù)讀取了這些被修改但未提交的數(shù)據(jù),這種情況就被稱為臟查詢。
二、臟查詢的原因
在Erlang數(shù)據(jù)庫(kù)中,臟查詢的原因主要有兩個(gè):
1.并發(fā)訪問(wèn)
Erlang是一種并發(fā)編程語(yǔ)言,它的數(shù)據(jù)庫(kù)系統(tǒng)也被設(shè)計(jì)成了一種并發(fā)數(shù)據(jù)庫(kù)。不同的進(jìn)程可能同時(shí)訪問(wèn)數(shù)據(jù)庫(kù),由于并發(fā)的存在,導(dǎo)致可能發(fā)生臟查詢。例如,兩個(gè)進(jìn)程同時(shí)訪問(wèn)同一個(gè)數(shù)據(jù)對(duì)象,一個(gè)進(jìn)程正在修改數(shù)據(jù),但還未提交,而另外一個(gè)進(jìn)程已經(jīng)讀取了這個(gè)數(shù)據(jù)對(duì)象,這時(shí)便會(huì)出現(xiàn)臟查詢。
2.長(zhǎng)事務(wù)
另一個(gè)導(dǎo)致臟查詢的原因是長(zhǎng)時(shí)間的事務(wù)。當(dāng)一個(gè)事務(wù)需要執(zhí)行很長(zhǎng)時(shí)間時(shí),也就意味著這個(gè)事務(wù)所進(jìn)行的修改操作將需要很長(zhǎng)時(shí)間才能得到提交。在這個(gè)過(guò)程中,其他事務(wù)可能會(huì)讀取到這個(gè)未提交的數(shù)據(jù),從而發(fā)生了臟查詢。
三、解決方案
為了解決Erlang數(shù)據(jù)庫(kù)中的臟查詢問(wèn)題,我們可以采用以下的一些解決方案:
1.設(shè)置并發(fā)控制
為了避免臟查詢,我們可以在Erlang數(shù)據(jù)庫(kù)中引入并發(fā)控制。通過(guò)鎖定數(shù)據(jù)對(duì)象,可以防止并發(fā)訪問(wèn)造成的臟查詢。例如,在實(shí)現(xiàn)一個(gè)事務(wù)模型時(shí),我們可以使用鎖來(lái)保護(hù)數(shù)據(jù),鎖可以在讀和寫之間進(jìn)行切換,以便控制并發(fā)。
2.減少長(zhǎng)事務(wù)
為了避免長(zhǎng)時(shí)間事務(wù)造成的臟查詢,我們可以采用一些方式使得事務(wù)執(zhí)行的時(shí)間更短。例如,可以根據(jù)需求將大事務(wù)分解成多個(gè)小事務(wù),或者提供更快的硬件設(shè)備以加速事務(wù)處理。
3.使用MVCC
MVCC是Multi-Version Concurrency Control的縮寫,也就是多版本并發(fā)控制。這種技術(shù)可以在并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)時(shí)避免臟查詢。MVCC可以讓事務(wù)在修改數(shù)據(jù)時(shí)不鎖住整個(gè)表,而是通過(guò)版本來(lái)管理并發(fā)訪問(wèn)。每個(gè)事務(wù)都有自己的版本號(hào),當(dāng)一個(gè)事務(wù)要提交時(shí),Erlang數(shù)據(jù)庫(kù)會(huì)進(jìn)行檢查,以確保該事務(wù)沒(méi)有讀取到任何未提交的數(shù)據(jù)。
Erlang數(shù)據(jù)庫(kù)臟查詢問(wèn)題是一個(gè)值得關(guān)注的話題,采用合適的解決方案可以有效避免這一問(wèn)題。在實(shí)際應(yīng)用中,我們應(yīng)該根據(jù)具體情況,選擇更為合適的解決方案。
相關(guān)問(wèn)題拓展閱讀:
- 關(guān)系型數(shù)據(jù)庫(kù)的局限性有哪些難以滿足高并發(fā)讀寫的需求
關(guān)系型數(shù)據(jù)庫(kù)的局限性有哪些難以滿足高并發(fā)讀寫的需求
隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,非關(guān)系型的數(shù)據(jù)庫(kù)現(xiàn)在成了一個(gè)極其熱門的新領(lǐng)域,非關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品的發(fā)展非常迅速。而傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動(dòng)態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問(wèn)題,例如:
1、High performance——對(duì)數(shù)據(jù)庫(kù)高并發(fā)讀寫的需求
Web2.0網(wǎng)站要根據(jù)用戶個(gè)性化信息來(lái)實(shí)時(shí)生成動(dòng)態(tài)頁(yè)面和提供動(dòng)態(tài)信息,所以基本上無(wú)法使用動(dòng)態(tài)頁(yè)面靜態(tài)化技術(shù),因此數(shù)據(jù)庫(kù)并發(fā)負(fù)載非常高,往往要達(dá)到每秒上萬(wàn)次讀寫請(qǐng)求。關(guān)系數(shù)據(jù)庫(kù)應(yīng)付上萬(wàn)次SQL查詢還勉強(qiáng)頂?shù)米。菓?yīng)付上萬(wàn)次SQL寫數(shù)據(jù)請(qǐng)求,硬盤IO就已經(jīng)無(wú)法承受了。其實(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ǔ)和訪問(wèn)的需求
類似鎮(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ù)庫(kù)來(lái)說(shuō),在一張2.5億條記錄的表里面進(jìn)行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網(wǎng)站的用戶登錄系統(tǒng),例如騰訊,盛大,動(dòng)輒數(shù)以億計(jì)的帳號(hào),關(guān)系數(shù)據(jù)庫(kù)也很難應(yīng)付。
3、High Scalability && High Availability——對(duì)數(shù)據(jù)庫(kù)的高可擴(kuò)展性和高可用性的需求
在基于web的架構(gòu)當(dāng)中,數(shù)據(jù)庫(kù)是最難進(jìn)行橫向擴(kuò)展的,當(dāng)一個(gè)應(yīng)用系統(tǒng)的用戶量和訪問(wèn)量與日俱增的時(shí)候,你的數(shù)據(jù)庫(kù)卻沒(méi)有辦法像web server和app server那樣簡(jiǎn)單的通過(guò)添加更多的硬件和服務(wù)節(jié)點(diǎn)來(lái)擴(kuò)展性能和負(fù)載能力。對(duì)于很多需要提供24小時(shí)不間斷服務(wù)的網(wǎng)站來(lái)說(shuō),對(duì)數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行升級(jí)和擴(kuò)展是非常痛苦的事情,往往需要停機(jī)維護(hù)和數(shù)據(jù)遷移,為什么數(shù)據(jù)庫(kù)不能通過(guò)不斷的添加服務(wù)器節(jié)點(diǎn)來(lái)實(shí)現(xiàn)擴(kuò)展呢?
在上面提到的“三高”需求面前,關(guān)系數(shù)據(jù)庫(kù)遇到了難以克服的障礙,而對(duì)于web2.0網(wǎng)站來(lái)說(shuō),關(guān)系數(shù)據(jù)庫(kù)的很多主要特性卻往往無(wú)用武之地,例如:
1. 數(shù)據(jù)庫(kù)事務(wù)一致性需求
很多web實(shí)時(shí)系統(tǒng)并不要求嚴(yán)格的數(shù)據(jù)庫(kù)事務(wù),對(duì)讀一致性的要求很低,有些場(chǎng)合對(duì)寫一致性要求也不高。因此數(shù)據(jù)庫(kù)事務(wù)管理成了數(shù)據(jù)庫(kù)高負(fù)載下一個(gè)沉重的負(fù)擔(dān)。
2. 數(shù)據(jù)庫(kù)的寫實(shí)時(shí)性和讀實(shí)時(shí)性需求
對(duì)關(guān)系數(shù)據(jù)庫(kù)來(lái)說(shuō),插入一條數(shù)據(jù)之后立刻查詢,是肯定可以讀出來(lái)這條數(shù)據(jù)的,但是對(duì)于很多web應(yīng)用來(lái)說(shuō),并不要求這么高的實(shí)時(shí)性,比方說(shuō)我(JavaEye的robbin)發(fā)一條消息之后,過(guò)幾秒乃至十幾秒之后,我的訂閱者才看到這條動(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)單條件分頁(yè)查詢,SQL的功能被極大的弱化了。
因此,關(guān)系數(shù)據(jù)庫(kù)在這些越來(lái)越多的應(yīng)用場(chǎng)景下顯得不那么合適了,為了解決這類問(wèn)題的非關(guān)系數(shù)據(jù)庫(kù)應(yīng)運(yùn)而生,現(xiàn)在這兩年,各種各樣非關(guān)系數(shù)據(jù)庫(kù),特別是鍵值數(shù)據(jù)庫(kù)(Key-Value Store DB)風(fēng)起云涌,多得讓人眼花繚亂。前不久國(guó)外剛剛舉辦了NoSQL Conference,各路NoSQL數(shù)據(jù)庫(kù)紛紛亮相,加上未亮相但是名聲在外的,起碼有超過(guò)10個(gè)開(kāi)源的NoSQLDB,例如:
Redis,Tokyo Cabinet,Cassandra,Voldemort,MongoDB,御攔兆Dynomite,HBase,CouchDB,Hypertable, Riak,Tin, Flare, Lightcloud, KiokuDB,Scalaris, Kai, ThruDB, ……
這些NoSQL數(shù)據(jù)庫(kù),有的是用C/C++編寫的,有的是用Java編寫的,還有的是用Erlang編寫的,每個(gè)都有自己的獨(dú)到之處,看都看不過(guò)來(lái)了,我(robbin)也只能從中挑選一些比較有特色,看起來(lái)更有前景的產(chǎn)品學(xué)習(xí)和了解一下。
erlang數(shù)據(jù)庫(kù)臟查詢的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于erlang數(shù)據(jù)庫(kù)臟查詢,Erlang數(shù)據(jù)庫(kù)臟查詢的原因和解決方案,關(guān)系型數(shù)據(jù)庫(kù)的局限性有哪些難以滿足高并發(fā)讀寫的需求的信息別忘了在本站進(jìn)行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開(kāi)發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)成都老牌IDC服務(wù)商,專注四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,可選線路電信、移動(dòng)、聯(lián)通等。
當(dāng)前標(biāo)題:Erlang數(shù)據(jù)庫(kù)臟查詢的原因和解決方案(erlang數(shù)據(jù)庫(kù)臟查詢)
文章地址:http://fisionsoft.com.cn/article/cdoccpp.html


咨詢
建站咨詢
