Oracle已稱霸數(shù)據(jù)庫世界多年,但在未來,霸權(quán)的衰落不可避免的。在NoSQL和大數(shù)據(jù)浪潮的沖擊下,基于邏輯范式設(shè)計(jì)的RDBMS已然搖搖欲墜。雖然Oracle及其盟友已經(jīng)做出了快速的反映,并推出了自己的NoSQL數(shù)據(jù)庫,但是Oracle所面對(duì)的尷尬情形就如同當(dāng)年的Novell一樣。
關(guān)系型數(shù)據(jù)庫不會(huì)立刻消亡,它是一種影響深遠(yuǎn)的技術(shù),在數(shù)據(jù)庫領(lǐng)域曾獨(dú)領(lǐng)風(fēng)騷。關(guān)系型數(shù)據(jù)庫有著嚴(yán)密的數(shù)學(xué)背景,其事務(wù)處理具有著名的ACID屬性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。
但我并不認(rèn)為事務(wù)處理是關(guān)系型數(shù)據(jù)庫的優(yōu)勢(shì)。事務(wù)處理跨越多個(gè)請(qǐng)求和響應(yīng)周期,保證數(shù)據(jù)一致性的能力往往被夸大了。除了事務(wù)處理機(jī)制,我們還有其它方法保證數(shù)據(jù)一致性。
關(guān)系型數(shù)據(jù)庫最大的優(yōu)勢(shì)其實(shí)是標(biāo)準(zhǔn)化。關(guān)系型數(shù)據(jù)庫自身的發(fā)展史也證明,即便是最基本的標(biāo)準(zhǔn)化也比漫無章法更能占據(jù)市場。事實(shí)上,標(biāo)準(zhǔn)化也成為數(shù)據(jù)庫融合、收購的極大障礙。
從關(guān)系型數(shù)據(jù)庫到NoSQL的過渡是不可避免的。關(guān)系型數(shù)據(jù)庫早在硬盤只有10MB的時(shí)代就被創(chuàng)造出來,而在現(xiàn)在,存儲(chǔ)已經(jīng)非常便宜,我們對(duì)性能和擴(kuò)展性的期望也變得非常高。另一方面,隨著互聯(lián)網(wǎng)信息的膨脹,我們對(duì)數(shù)據(jù)分析和數(shù)據(jù)挖掘的要求也與日俱增。毫無疑問,在互聯(lián)網(wǎng)時(shí)代,NoSQL才是數(shù)據(jù)庫的未來。
許多公司并不具備能力極強(qiáng)的IT部門,也有許多公司通過外包的方式維持IT的運(yùn)營。以O(shè)racle數(shù)據(jù)庫為例,在許多公司可能很缺乏具備專業(yè)知識(shí)的DBA,甚至其職責(zé)往往由系統(tǒng)管理員代理。傳統(tǒng)數(shù)據(jù)庫的復(fù)雜度成為阻礙公司發(fā)展的瓶頸。
所有的一切都意味著,我們不必使用結(jié)構(gòu)化的數(shù)據(jù),我們追求數(shù)據(jù)庫的分布式、低延遲,以及快速處理海量數(shù)據(jù)的能力。
然而,這種轉(zhuǎn)變困難重重。NoSQL缺乏一種主導(dǎo)力量。以關(guān)系型數(shù)據(jù)庫為例,不管你選擇哪種數(shù)據(jù)庫產(chǎn)品(例如,DB2、Oracle或者SQL Server),它們都會(huì)遵循ANSI SQL標(biāo)準(zhǔn),這讓我們有所依賴。對(duì)于新的數(shù)據(jù)庫,Pig、Hive等查詢語言,也讓我們覺得有共通之處。關(guān)系型數(shù)據(jù)庫為我們提供了標(biāo)準(zhǔn)的訪問接口,即便是最古老的ODBC。而對(duì)于NoSQL,你必須使用特定的數(shù)據(jù)庫連接器。
大家都知道,NoSQL并不是為所有人設(shè)計(jì)的,但是標(biāo)準(zhǔn)的設(shè)計(jì)有助于市場的拓展。不論是對(duì)于可能成為潛在客戶的大型機(jī)構(gòu),還是對(duì)于獨(dú)立的風(fēng)險(xiǎn)投資商,標(biāo)準(zhǔn)化的產(chǎn)品、供應(yīng)商、長期的技術(shù)支持都是吸引其注意力的籌碼。當(dāng)今,幾乎沒有人樂意采購昂貴的軟件,但標(biāo)準(zhǔn)化仍然可以為技術(shù)的發(fā)展提供良好的空間。
為什么NoSQL要與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫一決雌雄?原因就在于爭奪數(shù)據(jù)庫驅(qū)動(dòng)SPI(服務(wù)編程接口)和API對(duì)主要編程語言平臺(tái)的支持,這和構(gòu)建標(biāo)準(zhǔn)化的查詢語言別無二致。
不必追求完美的標(biāo)準(zhǔn)。關(guān)系型數(shù)據(jù)庫供應(yīng)商也沒有在標(biāo)準(zhǔn)化方面做到盡善盡美,NoSQL只要將標(biāo)準(zhǔn)化做到足夠好,足夠吸引人,以至于人們樂意遷移到NoSQL平臺(tái)就可以了。另一方面,我們要考慮到如何為不同類型的NoSQL數(shù)據(jù)庫制定標(biāo)準(zhǔn),比如文檔類型的MongoDB,圖形數(shù)據(jù)庫Neo4j。
對(duì)圖形數(shù)據(jù)庫設(shè)計(jì)的查詢語言不一定適用于文檔數(shù)據(jù)庫或鍵值結(jié)構(gòu)數(shù)據(jù)庫。當(dāng)然,在常規(guī)情況下,我們的查詢都很簡單,非常容易得到支持。這些非關(guān)系型數(shù)據(jù)庫也有許多共通之處,例如,它們都支持層次化查詢(hierarchical query)。我認(rèn)為,一種標(biāo)準(zhǔn)不是一種強(qiáng)制,而是一種建議。
微軟的一些研究人員也曾提出NoSQL的標(biāo)準(zhǔn)化問題。他們?cè)噲D使MongoDB支持UnQL和LINQ。在Java的世界里,Spring Data是通用的CRUD接口,但一切還沒有眉目。
NoSQL供應(yīng)商及所有NoSQL支持者是時(shí)候走到一起了!乘風(fēng)破浪,共同制定NoSQL的標(biāo)準(zhǔn),迎接NoSQL的未來!