在過去的幾年里,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)隊。

這款產(chǎn)品的面世可能會讓NoSQL數(shù)據(jù)庫的擁躉者們(那些一直對甲骨文數(shù)據(jù)庫引以為傲的守舊派們)倍感驚喜,但是甲骨文公司會暫時沿著這條路緩慢前進(jìn)。五年前,甲骨文收購了Sleepycat軟件公司,這家公司是開源貝克利數(shù)據(jù)庫的創(chuàng)建者(這是一款為C和后來的JAVA編程人員設(shè)計的靈活性關(guān)鍵值存儲上有著悠久且豐富傳統(tǒng)的工具)。同樣的貝克利數(shù)據(jù)庫技術(shù)據(jù)稱是甲骨文NoSQL數(shù)據(jù)庫的核心,雖然看起來還需要全部重新編寫代碼。
甲骨文NoSQL數(shù)據(jù)庫:實(shí)用的ACID
甲骨文NoSQL數(shù)據(jù)庫的有趣之處是關(guān)鍵值結(jié)構(gòu)。你不需要定義一個計劃或者拘泥于大型的表格式體系結(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)鍵值配對都伴隨著一個版本號。如果你想在修改記錄時提高性能這種方式是有幫助的。