JSON并不是問題的關(guān)鍵:當(dāng)心NoSQL在RDBMS中的大肆清洗
譯文想用數(shù)據(jù)庫(kù),我們?cè)撨x關(guān)系型還是NoSQL?曾幾何時(shí),二者之間還存在著明顯的差異,但隨著近年來一系列關(guān)系型數(shù)據(jù)庫(kù)中對(duì)JSON支持能力的引入,原本明確的邊界開始變得愈發(fā)模糊。
但納入JSON支持能力不是應(yīng)該讓RDBMS擁有更為雄厚的競(jìng)爭(zhēng)資本,從而與NoSQL展開更加激烈的市場(chǎng)對(duì)抗么?話是沒錯(cuò),但從長(zhǎng)遠(yuǎn)角度看卻并非如此。關(guān)系型數(shù)據(jù)庫(kù)與NoSQL產(chǎn)品之間的真正差異仍然深在root與core層面,而且二者絕不可能因此而“攻守之勢(shì)異也”,即Oracle沒辦法憑借著JSON支持轉(zhuǎn)型、Hadoop也絕不會(huì)借助SQL查詢而倒戈。
JSON并不是問題的關(guān)鍵
首先,JSON支持能力本身并不是決定一款數(shù)據(jù)庫(kù)產(chǎn)品應(yīng)否屬于NoSQL陣營(yíng)的標(biāo)準(zhǔn)。AdRem軟件公司的Tomasz Kunicki(曾創(chuàng)造出NetCrunch監(jiān)控系統(tǒng),其中使用了內(nèi)存內(nèi)、SQL以及NoSQL等多種技術(shù))贊同道:“JSON本身其實(shí)決定不了什么。它只是一種更為便捷的數(shù)據(jù)表示方式,特別是在大家利用JavaScript編寫代碼的場(chǎng)景之下。”
根據(jù)Kunicki的意見,NoSQL類方案的真正核心在于其“無模式數(shù)據(jù)庫(kù)與可擴(kuò)展能力——但與大多數(shù)人的印象相左,這并不意味著NoSQL不需要數(shù)據(jù)庫(kù)建模。”他同時(shí)指出,這種誤解引發(fā)了關(guān)于NoSQL技術(shù)的大量不切實(shí)際宣傳與濫用。事實(shí)上,此類方案“特別適用于以時(shí)間為基礎(chǔ)的數(shù)據(jù)(且這些數(shù)據(jù)由該應(yīng)用程序生成)處理場(chǎng)景”。
作為長(zhǎng)期效力于微軟公司的老員工兼Snowflake數(shù)據(jù)倉(cāng)庫(kù)即服務(wù)方案的聯(lián)合***之一,Bob Muglia認(rèn)為關(guān)系型與NoSQL數(shù)據(jù)庫(kù)之間的本質(zhì)差異在于二者在目標(biāo)用途方面的設(shè)計(jì)思路。
Muglia指出,關(guān)系型數(shù)據(jù)庫(kù)在創(chuàng)建過程中強(qiáng)調(diào)高度一致性,但同時(shí)以速度與規(guī)模作為妥協(xié)因素——至少以此構(gòu)建起速度出色且規(guī)模龐大的數(shù)據(jù)庫(kù)體系需要付出高昂的成本并面臨一系列難題。NoSQL則在一定程度上犧牲了不同節(jié)點(diǎn)之間的一致性水平,但借上實(shí)現(xiàn)了理想的速度表現(xiàn)與可擴(kuò)展能力。
但這并沒有阻止人們嘗試將NoSQL類型的速度與規(guī)模引入關(guān)系型數(shù)據(jù)庫(kù)的野心,只不過通常而言這是一項(xiàng)極難完成的突破。“我們構(gòu)建起Snowflake作為起點(diǎn),并將MySQL作為原初系統(tǒng)來保存元數(shù)據(jù),從而滿足事務(wù)對(duì)于基于ACID數(shù)據(jù)的全面需求,”Muglia指出。“除了規(guī)模擴(kuò)展,我們還需要實(shí)現(xiàn)理想的可用性水平,也就是五個(gè)九——要想在關(guān)系型數(shù)據(jù)庫(kù)當(dāng)中獲得五個(gè)九級(jí)別的可用性表現(xiàn)幾乎是癡人說夢(mèng)……因此為了實(shí)現(xiàn)元數(shù)據(jù)存儲(chǔ),我們將其由MySQL遷移到了全面基于ACID的NoSQL系統(tǒng)FoundationDB當(dāng)中。”
添加了SQL查詢機(jī)制的NoSQL存儲(chǔ)體系仍然算是NoSQL
將JSON支持能力加入關(guān)系型數(shù)據(jù)庫(kù)并不會(huì)使其轉(zhuǎn)變?yōu)镹oSQL系統(tǒng),反過來、將SQL查詢機(jī)制納入NoSQL存儲(chǔ)體系也絕不會(huì)把它變成關(guān)系型數(shù)據(jù)庫(kù)——二者甚至連競(jìng)爭(zhēng)關(guān)系都談不上。利用SQL對(duì)NoSQL存儲(chǔ)內(nèi)容進(jìn)行查詢能夠?yàn)橛脩魩順O大便利,且在其內(nèi)部無需對(duì)SQL(或者NoSQL)的運(yùn)作方式進(jìn)行任何再次定義。
正如Muglia所指出,由于SQL作為查詢系統(tǒng)的定位,目前已經(jīng)有趨勢(shì)將SQL引入分析體系,“無論其中包含哪些影響因素”(也就是深層當(dāng)中運(yùn)行的究竟是怎樣的機(jī)制),而由此引發(fā)的結(jié)果就是由SQL向事務(wù)系統(tǒng)轉(zhuǎn)型,“至少體現(xiàn)在高擴(kuò)展能力與高可用性方面”。
Kunicki認(rèn)為不同數(shù)據(jù)庫(kù)系統(tǒng)之間的固有差異必須得到認(rèn)同與尊重。“將SQL添加到NoSQL數(shù)據(jù)庫(kù)當(dāng)中,”他表示,“并將JSON文件的支持能力加入SQL數(shù)據(jù)庫(kù)只不過是一種嘗試欺騙用戶的表面性處理方式。”
當(dāng)然,也有不少?gòu)臉I(yè)者真心看好將關(guān)系型數(shù)據(jù)庫(kù)(ACID事務(wù))與NoSQL(速度與可擴(kuò)展能力)雙方優(yōu)勢(shì)加以合并的可行性與重要性。除了FoundationDB之外,目前還有包括Splice Machine(間接脫胎于Hadoop與Apache Derby項(xiàng)目)在內(nèi)的一系列其它項(xiàng)目與產(chǎn)品正努力實(shí)現(xiàn)這項(xiàng)目標(biāo)。
這一領(lǐng)域仍然處于起步階段,但真正的下一代產(chǎn)品很可能正來源于那些積極甚至有些激進(jìn)的實(shí)驗(yàn)性嘗試,而非簡(jiǎn)單將數(shù)據(jù)格式或者查詢系統(tǒng)等底層技術(shù)組件進(jìn)行彼此互換。
英文:http://www.infoworld.com/article/2863018/nosql/watch-out-for-nosql-washing-in-your-rdbms.html