先睹為快:甲骨文NoSQL數(shù)據(jù)庫
在過去的幾年里,NoSQL數(shù)據(jù)庫的世界里充滿了各種有趣的新項(xiàng)目,雄心勃勃的聲明和大量信誓旦旦的承諾。有傳聞稱***的NoSQL數(shù)據(jù)庫軟件套裝通過調(diào)整所有的結(jié)構(gòu)和數(shù)據(jù)庫創(chuàng)建者多年來一直希望增加的三倍校驗(yàn)來實(shí)現(xiàn)大幅度的性能提升??煽啃匀绾文兀繐?jù)那些沒有使用NoSQL數(shù)據(jù)庫來運(yùn)行大規(guī)模企業(yè)級應(yīng)用軟件而只是從事一些瑣碎交易的華爾街銀行編程人員表示,可靠性是被高估了。制表結(jié)構(gòu)如何呢?過于死板和有限了。如果我們將這些問題忽略的話,那么數(shù)據(jù)庫的優(yōu)勢是免費(fèi),且運(yùn)行速度很快。
NoSQL數(shù)據(jù)庫的面世也十分緩慢。甲骨文-高級NoSQL數(shù)據(jù)庫的***研發(fā)廠商推出了一款可靠的實(shí)用的和與甲骨文非常類似的NoSQL服務(wù)器。盡管瘋狂的夢想家們還在繼續(xù)構(gòu)建著NoSQL數(shù)據(jù)庫的存儲庫,但認(rèn)為還是希望能關(guān)注甲骨文版本。它不僅能提供很多讓NoSQL數(shù)據(jù)庫更加有趣的特性,但是可靠的性能號稱來自大型的工程師團(tuán)隊(duì)。
這款產(chǎn)品的面世可能會讓NoSQL數(shù)據(jù)庫的擁躉者們(那些一直對甲骨文數(shù)據(jù)庫引以為傲的守舊派們)倍感驚喜,但是甲骨文公司會暫時沿著這條路緩慢前進(jìn)。五年前,甲骨文收購了Sleepycat軟件公司,這家公司是開源貝克利數(shù)據(jù)庫的創(chuàng)建者(這是一款為C和后來的JAVA編程人員設(shè)計(jì)的靈活性關(guān)鍵值存儲上有著悠久且豐富傳統(tǒng)的工具)。同樣的貝克利數(shù)據(jù)庫技術(shù)據(jù)稱是甲骨文NoSQL數(shù)據(jù)庫的核心,雖然看起來還需要全部重新編寫代碼。
甲骨文NoSQL數(shù)據(jù)庫:實(shí)用的ACID
甲骨文NoSQL數(shù)據(jù)庫的有趣之處是關(guān)鍵值結(jié)構(gòu)。你不需要定義一個計(jì)劃或者拘泥于大型的表格式體系結(jié)構(gòu)中。你只需創(chuàng)建關(guān)鍵值并關(guān)聯(lián)到字節(jié)上。你可以將你的關(guān)鍵值連接到字符串或者映像文件或者任何東西上。數(shù)據(jù)庫可以接收字節(jié)而且無需考慮太多內(nèi)容。
甲骨文公司將關(guān)鍵值劃分為主要部分和次要部分。你可以將主要部分看做是目標(biāo)指示器,將次要部分看做是記錄里的域。這樣你可以將名字和社會保障號碼放在關(guān)鍵值的主要部分里,像街道地址和郵政編碼這樣的其他字符串放在次要部分里。和其他的一些NoSQL工具是可以進(jìn)行對比的,幫助用戶將多個域的目標(biāo)物體的價值對比考慮。甲骨文只是使用“次要關(guān)鍵值”這個數(shù)據(jù)來作為域的名稱。
甲骨文NoSQL數(shù)據(jù)庫重要的部分是實(shí)用的ACID,NoSQL數(shù)據(jù)庫可能提供的標(biāo)準(zhǔn)版。ACID指的是“細(xì)微的,相容的,獨(dú)立的,持久的處理”,對于這方面的細(xì)節(jié)展開了一場激烈的爭論。多數(shù)NoSQL數(shù)據(jù)庫承諾是“BASE”,即“基本的可用性,軟狀態(tài)和最終的一致性”的首字母縮寫。換句話說,你可以得到正確的答案,除非你不需要的時候。
對于甲骨文NoSQL數(shù)據(jù)庫是否能提供真正的ACID存在著大量的爭論。當(dāng)你編寫關(guān)聯(lián)到同一個關(guān)鍵值的主要部分的數(shù)據(jù)時你只能得到ACID的承諾。舉例來說,由于兩部分都被存儲在同一個主要關(guān)鍵值里,所以你可以更改同一個人的地址和郵政編碼并得到ACID的保證。但是不擔(dān)保兩個獨(dú)立人的改變將保持一致。換句話說,已將銀行可以使用甲骨文NoSQL數(shù)據(jù)庫來存儲個人記錄,但是不會用于賬戶間現(xiàn)金的安全交易,因?yàn)闆]有不會導(dǎo)致金錢損失的ACID擔(dān)保。
甲骨文NoSQL數(shù)據(jù)庫能夠做出這種承諾,因?yàn)樗梢员WC一臺主機(jī)能存儲所有關(guān)聯(lián)到主要關(guān)鍵值的次要關(guān)鍵值。將任何域的集合關(guān)聯(lián)到定義一個人的主要關(guān)鍵值上,這個數(shù)據(jù)的所有將集中在集群的同個節(jié)點(diǎn)上。但是來自不同主要關(guān)鍵值的數(shù)據(jù)會放置在不同的服務(wù)器上,甲骨文NoSQL數(shù)據(jù)庫沒有一個機(jī)制來確保數(shù)據(jù)被同時寫入主要關(guān)鍵值和次要關(guān)鍵值。
你還能增加復(fù)制和碎片,甲骨文將其稱為“分區(qū)”。本質(zhì)上來說就是安排矩陣中發(fā)生碎片的節(jié)點(diǎn)。如果你需要更多的可靠性和更快的讀取速度,你需要沿著復(fù)制軸增加更多的系統(tǒng)。如果你希望減少爭議,你可以沿著分區(qū)軸增加更多的系統(tǒng)。甲骨文NoSQL數(shù)據(jù)庫能為你應(yīng)對更多此類配置。
這不止是個二進(jìn)制的判斷。你可以讓甲骨文NoSQL數(shù)據(jù)庫終止寫入,或者多數(shù)節(jié)點(diǎn)已經(jīng)完成了數(shù)據(jù)到硬盤的發(fā)送。文件將這個特性稱之為持久力協(xié)議。
這種靈活性也可以供編程人員使用,如果你有時間來為此擔(dān)心的話。所有的關(guān)鍵值配對都伴隨著一個版本號。如果你想在修改記錄時提高性能這種方式是有幫助的。
持續(xù)性:備受爭議
耶魯大學(xué)計(jì)算科學(xué)系教授丹尼爾.阿巴迪的博客引發(fā)了有關(guān)最終持續(xù)性的爭議。阿巴迪指出在某些情況下,寫入到主關(guān)鍵值的新配對可能會在主關(guān)鍵值被切斷后丟失。美國哈佛大學(xué)計(jì)算機(jī)科學(xué)教授,同時也是甲骨文的員工馬格.賽爾查則持不同的觀點(diǎn)。她加入了被收購的Sleepycat公司。
賽爾查認(rèn)為一切都要取決與你對“最終持續(xù)性”的理解。數(shù)據(jù)庫所有者會選擇利用他們對持續(xù)性協(xié)議的機(jī)會。如果所有者希望確保一個配對不會丟失,他們必須所有寫入的數(shù)據(jù)要等到所有副本被升級以后。
為了測試甲骨文NoSQL數(shù)據(jù)庫的速度,筆者采用給了一種低端測試,將更多的壓力放在數(shù)據(jù)庫引擎上而不是網(wǎng)絡(luò)上。筆者從單節(jié)點(diǎn)NoSQL服務(wù)器開始,然后嘗試了358400個關(guān)聯(lián)到關(guān)鍵值的關(guān)鍵值(恰紅包含了大約30個字符的串),在老型號的Mac計(jì)算機(jī)上的速度是119秒。使用小容量隨機(jī)存儲器的老型號設(shè)備是測試有限資源下性能的一種方式。
作為對比,筆者有同樣的配對測試了Voldemort的新版本,這是一款來自于Linkedln的用JAVA開發(fā)的開源NoSQL數(shù)據(jù)庫。在同款設(shè)備上花費(fèi)了180秒。
由于在甲骨文NoSQL數(shù)據(jù)庫里存儲數(shù)據(jù)看起來會涉及到一些管理費(fèi)用,因此筆者只進(jìn)行了一些簡單的測試。創(chuàng)建需要構(gòu)建串序列的關(guān)鍵值,目標(biāo)實(shí)例通常是Java代碼的瓶頸??雌饋碓谶@些測試都沒有構(gòu)成問題。
總的來說,甲骨文NoSQL數(shù)據(jù)庫很愿意進(jìn)行嘗試,因?yàn)樗芴峁┤绱素S富的特性,可以進(jìn)行更加深入的數(shù)據(jù)管理。工具比簡單的NoSQL項(xiàng)目要更加的徹底和久經(jīng)考驗(yàn)。在面對節(jié)點(diǎn)故障時,你有各種不同的選擇來提高耐久力。
甲骨文NoSQL數(shù)據(jù)庫可能無法提供給你驚喜,只能積累對于開源NoSQL項(xiàng)目的經(jīng)驗(yàn),但是這確實(shí)不是它的角色。甲骨文從中吸取了***的想法來向企業(yè)市場傳遞***的性能。
甲骨文NoSQL數(shù)據(jù)庫會從甲骨文悠久的傳統(tǒng)中分離出來。筆者發(fā)現(xiàn)安裝和運(yùn)行甲骨文主要數(shù)據(jù)庫比較困難。對比之下,開源社區(qū)能做的更好。有用戶表示最重要的MySQL在測試和重新測試安裝配置上要做的更好。
甲骨文NoSQL數(shù)據(jù)庫顯然是來自擁有開源傳統(tǒng)經(jīng)驗(yàn)的研發(fā)團(tuán)隊(duì)。唯一的問題是在將本地主機(jī)更改為127.0.0.1時遇到的。這是一個很大的改進(jìn)。
原文鏈接:http://www.doserv.com/article/2011/1129/9722086.shtml
【編輯推薦】