開(kāi)源數(shù)據(jù)領(lǐng)域被分成了兩派,NoSQL狂熱支持者喜歡發(fā)表長(zhǎng)篇大論批評(píng)關(guān)系型數(shù)據(jù)庫(kù)的局限性,MySQL愛(ài)好者則固執(zhí)地捍衛(wèi)關(guān)系型數(shù)據(jù)庫(kù)——堅(jiān)持讓數(shù)據(jù)整齊地存放在表中。
你肯定會(huì)認(rèn)為這兩方?jīng)Q不可能和睦相處,但事實(shí)上,成千上萬(wàn)的公司一直都在努力將關(guān)系型和非關(guān)系型數(shù)據(jù)庫(kù)結(jié)合起來(lái),而且很多年前就有這樣的嘗試了。
但新技術(shù)的發(fā)展往往和過(guò)去的技術(shù)對(duì)立。當(dāng)NoSQL發(fā)展起來(lái)時(shí),光這個(gè)名字聽(tīng)起來(lái)就像是要宣告關(guān)系數(shù)據(jù)庫(kù)的終結(jié),但這是不可能的,至少不會(huì)這么快。
Craigslist的成功
Craigslist公司無(wú)縫集成結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)檢索是個(gè)很好的例子。過(guò)去,該公司一直用MySQL處理頻繁的任務(wù)和分類廣告。
盡管工作量很大,MySQL還是能輕松地完成這項(xiàng)任務(wù)。只有當(dāng)存檔數(shù)據(jù)達(dá)到超紀(jì)錄的級(jí)別時(shí),才會(huì)產(chǎn)生對(duì)NoSQL的需求。由于管理的要求,Craigslist必須將所有歷史數(shù)據(jù)存檔——即使是SXSW期間為奧斯汀那昏暗、高價(jià)的公寓所做的廣告也得存檔。
如果一個(gè)關(guān)系型數(shù)據(jù)庫(kù)依靠數(shù)據(jù)之間的邏輯,那前端架構(gòu)的更改必然會(huì)影響到存檔數(shù)據(jù)。這是一個(gè)高風(fēng)險(xiǎn)、高時(shí)耗的過(guò)程,而且它會(huì)造成停機(jī)時(shí)間損失。想象一下去更新帶有10億條記錄的MySQL服務(wù)器集群!
Craigslist發(fā)現(xiàn)需要以離散方式處理兩類數(shù)據(jù)——當(dāng)前數(shù)據(jù)和歷史數(shù)據(jù)。Craigslist或許已經(jīng)轉(zhuǎn)而使用MongoDB幫助應(yīng)對(duì)數(shù)據(jù)的增長(zhǎng),但是與MySQL一起運(yùn)行的NoSQL也從沒(méi)有出現(xiàn)過(guò)問(wèn)題,這說(shuō)明MySQL和NoSQL可以很好的結(jié)合。
開(kāi)源同盟
越來(lái)越多的應(yīng)用開(kāi)發(fā)商和托管服務(wù)提供商認(rèn)識(shí)到NoSQL和MySQL一直是開(kāi)源同盟,沒(méi)有因數(shù)據(jù)庫(kù)類型不同而成為不相往來(lái)的仇敵。歸于一點(diǎn),數(shù)據(jù)就是數(shù)據(jù),它應(yīng)該用來(lái)為應(yīng)用程序和用戶服務(wù),不應(yīng)該受到后端數(shù)據(jù)庫(kù)的限制。
越來(lái)越多的Rackspace客戶發(fā)現(xiàn)自己面臨和Craigslist同樣的處境。當(dāng)關(guān)系型數(shù)據(jù)庫(kù)涵蓋所有他們的數(shù)據(jù)領(lǐng)域時(shí),他們構(gòu)建了自己的數(shù)據(jù)結(jié)構(gòu),而現(xiàn)在他們已經(jīng)進(jìn)入應(yīng)用時(shí)代了。
達(dá)到100萬(wàn)客戶原先需要數(shù)年時(shí)間,現(xiàn)在只需要幾周就可以了,而且社會(huì)共享和實(shí)時(shí)查詢對(duì)數(shù)據(jù)提出了新的要求——也需要支持這些數(shù)據(jù)的基礎(chǔ)設(shè)施,這一系列變化使他們面臨的數(shù)據(jù)量達(dá)到了每月10億之巨。
他們不一定要挖掘MySQL數(shù)據(jù)庫(kù),但他們需要增加數(shù)據(jù)引擎。為了增加數(shù)據(jù)庫(kù)的速度和靈活性,MongoDB、Cassandra或者Redis(這類數(shù)據(jù)庫(kù))會(huì)被納入數(shù)據(jù)結(jié)構(gòu)中。但這些開(kāi)源數(shù)據(jù)庫(kù)不太可能用于存儲(chǔ)用戶機(jī)密信息或者財(cái)務(wù)記錄,因?yàn)檫@些內(nèi)容必須始終保持一致性。
目前,技術(shù)公司在聘請(qǐng)傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)管理員同時(shí),組建一個(gè)NoSQL應(yīng)用開(kāi)發(fā)團(tuán)隊(duì)也很常見(jiàn)。有時(shí),基于關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)的同一個(gè)應(yīng)用甚至可以在Web層進(jìn)行通信。
過(guò)去的數(shù)據(jù)庫(kù)管理員必須和新一代使用NoSQL編程的開(kāi)發(fā)人員合作,進(jìn)行有關(guān)部署和體系結(jié)構(gòu)的決策(也許這些數(shù)據(jù)庫(kù)管理員和開(kāi)發(fā)人員也能成為朋友)。
可能這類公司連數(shù)據(jù)庫(kù)管理員也沒(méi)有,它們將所有的應(yīng)用和數(shù)據(jù)層外包給托管服務(wù)供應(yīng)商,這樣的話,它們就得充分利用深厚的專業(yè)知識(shí)和團(tuán)隊(duì)合作,才能跨越SQL與NoSQL之間的鴻溝。
選擇其中一個(gè)?還是兩者都要?
應(yīng)用程序是否應(yīng)該與關(guān)系型數(shù)據(jù)庫(kù)或NoSQL(也許是兩者)相一致,當(dāng)然,這得基于被生成或被檢索數(shù)據(jù)的性質(zhì)。和大多數(shù)科技領(lǐng)域的事物一樣,做決定時(shí)要折中考慮。
如果規(guī)模和性能比24小時(shí)的數(shù)據(jù)一致性更重要,那NoSQL是一個(gè)理想的選擇 (NoSQL依賴于BASE模型——基本可用、軟狀態(tài)、最終一致性)。
但如果要保證到“始終一致”,尤其是對(duì)于機(jī)密信息和財(cái)務(wù)信息,那么MySQL很可能是最優(yōu)的選擇(MySQL依賴于ACID模型——原子性、一致性、獨(dú)立性和耐久性)。
作為開(kāi)源數(shù)據(jù)庫(kù),無(wú)論是關(guān)系型數(shù)據(jù)庫(kù)還是非關(guān)系型數(shù)據(jù)庫(kù)都在不斷成熟,我們可以期待還會(huì)有一大批基于ACID和BASE模型的新應(yīng)用產(chǎn)生。
暫且把它稱為混合方案。有時(shí)這些應(yīng)用程序的設(shè)計(jì)需要認(rèn)真地權(quán)衡利弊,有時(shí)還能意外的得到發(fā)展,做出一系列調(diào)整以適應(yīng)不斷變化的數(shù)據(jù)需求,畢竟,誰(shuí)能預(yù)測(cè)到今天社會(huì)共享數(shù)據(jù)的大規(guī)模增加(即使是在五年前)?
像往常一樣,開(kāi)發(fā)人員處于這種創(chuàng)新的最前沿,他們促使托管服務(wù)提供商將這兩個(gè)數(shù)據(jù)領(lǐng)域結(jié)合到一起。在必要時(shí)候,他們還會(huì)對(duì)開(kāi)源數(shù)據(jù)技術(shù)進(jìn)行修正。
比如,在Oracle占有了MySQL后,MySQL有閉源的風(fēng)險(xiǎn),基于MySQL的MariaDB很好的替代了MySQL。開(kāi)發(fā)者社區(qū)要求其開(kāi)源工具完全透明,包括開(kāi)放對(duì)測(cè)試用例bug修復(fù)的權(quán)限。
此混合方案在2014年將繼續(xù)發(fā)展,托管公司也會(huì)提供更好的支持。在媒體上,我們就不會(huì)再說(shuō)“要么關(guān)系型數(shù)據(jù)庫(kù),要么非關(guān)系型數(shù)據(jù)庫(kù)”這樣的話了。
這和混合云領(lǐng)域所用方法是類似的。專用硬件有著優(yōu)越的性能,而公共云有很好的可擴(kuò)展性,結(jié)合兩者優(yōu)點(diǎn)可以帶來(lái)更大的靈活性,產(chǎn)生最合適的解決方案,這才是解決問(wèn)題的最優(yōu)辦法。
畢竟,數(shù)據(jù)收集和解釋的最終目標(biāo)是捕獲這個(gè)瞬息萬(wàn)變世界發(fā)生的每一條信息。數(shù)據(jù),無(wú)論來(lái)自何處,都只是一個(gè)窗口,真正重要的是透過(guò)這個(gè)窗口看到的景象。