這款產品的面世可能會讓NoSQL數據庫的擁躉者們(那些一直對甲骨文數據庫引以為傲的守舊派們)倍感驚喜,但是甲骨文公司會暫時沿著這條路緩慢前進。五年前,甲骨文收購了Sleepycat軟件公司,這家公司是開源貝克利數據庫的創(chuàng)建者(這是一款為C和后來的JAVA編程人員設計的靈活性關鍵值存儲上有著悠久且豐富傳統的工具)。同樣的貝克利數據庫技術據稱是甲骨文NoSQL數據庫的核心,雖然看起來還需要全部重新編寫代碼。

甲骨文NoSQL數據庫:實用的ACID

甲骨文NoSQL數據庫的有趣之處是關鍵值結構。你不需要定義一個計劃或者拘泥于大型的表格式體系結構中。你只需創(chuàng)建關鍵值并關聯到字節(jié)上。你可以將你的關鍵值連接到字符串或者映像文件或者任何東西上。數據庫可以接收字節(jié)而且無需考慮太多內容。

甲骨文公司將關鍵值劃分為主要部分和次要部分。你可以將主要部分看做是目標指示器,將次要部分看做是記錄里的域。這樣你可以將名字和社會保障號碼放在關鍵值的主要部分里,像街道地址和郵政編碼這樣的其他字符串放在次要部分里。和其他的一些NoSQL工具是可以進行對比的,幫助用戶將多個域的目標物體的價值對比考慮。甲骨文只是使用“次要關鍵值”這個數據來作為域的名稱。

甲骨文NoSQL數據庫重要的部分是實用的ACID,NoSQL數據庫可能提供的標準版。ACID指的是“細微的,相容的,獨立的,持久的處理”,對于這方面的細節(jié)展開了一場激烈的爭論。多數NoSQL數據庫承諾是“BASE”,即“基本的可用性,軟狀態(tài)和最終的一致性”的首字母縮寫。換句話說,你可以得到正確的答案,除非你不需要的時候。

對于甲骨文NoSQL數據庫是否能提供真正的ACID存在著大量的爭論。當你編寫關聯到同一個關鍵值的主要部分的數據時你只能得到ACID的承諾。舉例來說,由于兩部分都被存儲在同一個主要關鍵值里,所以你可以更改同一個人的地址和郵政編碼并得到ACID的保證。但是不擔保兩個獨立人的改變將保持一致。換句話說,已將銀行可以使用甲骨文NoSQL數據庫來存儲個人記錄,但是不會用于賬戶間現金的安全交易,因為沒有不會導致金錢損失的ACID擔保。

甲骨文NoSQL數據庫能夠做出這種承諾,因為它可以保證一臺主機能存儲所有關聯到主要關鍵值的次要關鍵值。將任何域的集合關聯到定義一個人的主要關鍵值上,這個數據的所有將集中在集群的同個節(jié)點上。但是來自不同主要關鍵值的數據會放置在不同的服務器上,甲骨文NoSQL數據庫沒有一個機制來確保數據被同時寫入主要關鍵值和次要關鍵值。

你還能增加復制和碎片,甲骨文將其稱為“分區(qū)”。本質上來說就是安排矩陣中發(fā)生碎片的節(jié)點。如果你需要更多的可靠性和更快的讀取速度,你需要沿著復制軸增加更多的系統。如果你希望減少爭議,你可以沿著分區(qū)軸增加更多的系統。甲骨文NoSQL數據庫能為你應對更多此類配置。

這不止是個二進制的判斷。你可以讓甲骨文NoSQL數據庫終止寫入,或者多數節(jié)點已經完成了數據到硬盤的發(fā)送。文件將這個特性稱之為持久力協議。

這種靈活性也可以供編程人員使用,如果你有時間來為此擔心的話。所有的關鍵值配對都伴隨著一個版本號。如果你想在修改記錄時提高性能這種方式是有幫助的。

持續(xù)性:備受爭議

耶魯大學計算科學系教授丹尼爾.阿巴迪的博客引發(fā)了有關最終持續(xù)性的爭議。阿巴迪指出在某些情況下,寫入到主關鍵值的新配對可能會在主關鍵值被切斷后丟失。美國哈佛大學計算機科學教授,同時也是甲骨文的員工馬格.賽爾查則持不同的觀點。她加入了被收購的Sleepycat公司。

賽爾查認為一切都要取決與你對“最終持續(xù)性”的理解。數據庫所有者會選擇利用他們對持續(xù)性協議的機會。如果所有者希望確保一個配對不會丟失,他們必須所有寫入的數據要等到所有副本被升級以后。

為了測試甲骨文NoSQL數據庫的速度,筆者采用給了一種低端測試,將更多的壓力放在數據庫引擎上而不是網絡上。筆者從單節(jié)點NoSQL服務器開始,然后嘗試了358400個關聯到關鍵值的關鍵值(恰紅包含了大約30個字符的串),在老型號的Mac計算機上的速度是119秒。使用小容量隨機存儲器的老型號設備是測試有限資源下性能的一種方式。

作為對比,筆者有同樣的配對測試了Voldemort的新版本,這是一款來自于Linkedln的用JAVA開發(fā)的開源NoSQL數據庫。在同款設備上花費了180秒。

由于在甲骨文NoSQL數據庫里存儲數據看起來會涉及到一些管理費用,因此筆者只進行了一些簡單的測試。創(chuàng)建需要構建串序列的關鍵值,目標實例通常是Java代碼的瓶頸。看起來在這些測試都沒有構成問題。

總的來說,甲骨文NoSQL數據庫很愿意進行嘗試,因為它能提供如此豐富的特性,可以進行更加深入的數據管理。工具比簡單的NoSQL項目要更加的徹底和久經考驗。在面對節(jié)點故障時,你有各種不同的選擇來提高耐久力。

甲骨文NoSQL數據庫可能無法提供給你驚喜,只能積累對于開源NoSQL項目的經驗,但是這確實不是它的角色。甲骨文從中吸取了最好的想法來向企業(yè)市場傳遞最佳的性能。

甲骨文NoSQL數據庫會從甲骨文悠久的傳統中分離出來。筆者發(fā)現安裝和運行甲骨文主要數據庫比較困難。對比之下,開源社區(qū)能做的更好。有用戶表示最重要的MySQL在測試和重新測試安裝配置上要做的更好。

甲骨文NoSQL數據庫顯然是來自擁有開源傳統經驗的研發(fā)團隊。唯一的問題是在將本地主機更改為127.0.0.1時遇到的。這是一個很大的改進。

分享到

xuzhenxin

相關推薦