您好,登錄后才能下訂單哦!
原文: https://www.enmotech.com/web/detail/1/861/1.html
導(dǎo)讀:經(jīng)過多年的沉寂之后,今天的SQL正在復(fù)出。緣由如何?這對(duì)數(shù)據(jù)社區(qū)有什么影響?看看本文的分析。以下為譯文。
自從可以利用計(jì)算機(jī)做事以來,我們一直在收集的數(shù)據(jù)以指數(shù)級(jí)的速度在增長(zhǎng),因此對(duì)于數(shù)據(jù)存儲(chǔ)、處理和分析技術(shù)的要求也越來越高。在過去的十年里,由于SQL無法滿足這些要求,軟件開發(fā)人員就拋棄了它,NoSQL也就因此而漸漸發(fā)展起來:MapReduce,Bigtable,Cassandra,MongoDB等。
然而,如今SQL正在重新復(fù)出。云端的主要供應(yīng)商們現(xiàn)在都提供了廣受大眾歡迎的托管關(guān)系型數(shù)據(jù)庫服務(wù):例如Amazon RDS,谷歌Cloud SQL,Azure的PostgreSQL數(shù)據(jù)庫(Azure將于今年發(fā)布)。用亞馬遜自己的話來說就是Aurora數(shù)據(jù)庫結(jié)合了PostgreSQL和MySQL數(shù)據(jù)庫,因此該產(chǎn)品一直是“AWS歷史上增長(zhǎng)最快的服務(wù)”。在Hadoop和Spark之上的SQL接口繼續(xù)蓬勃發(fā)展。就在上個(gè)月,Kafka推出了SQL支持。
在這篇文章中,我們將研究SQL現(xiàn)在為什么會(huì)復(fù)出的原因,以及這對(duì)未來的數(shù)據(jù)社區(qū)工程和分析意味著什么。
SQL為何卷土重來?
要理解SQL為何會(huì)卷土重來,先從為什么設(shè)計(jì)SQL開始。
我們的故事始于20世紀(jì)70年代早期的IBM研究,那時(shí)關(guān)系型數(shù)據(jù)庫就誕生了。當(dāng)時(shí)的查詢語言依賴于復(fù)雜的數(shù)學(xué)邏輯和符號(hào)。Donald Chamberlin和Raymond Boyce兩個(gè)人剛剛完成哲學(xué)博士學(xué)位,對(duì)關(guān)系型數(shù)據(jù)模型印象深刻,但是發(fā)現(xiàn)查詢語言將成為其發(fā)展的一個(gè)主要瓶頸。于是他們便開始設(shè)計(jì)一種新的查詢語言(用他們自己的話說):“讓那些沒有接受過數(shù)學(xué)和計(jì)算機(jī)編程方面正規(guī)訓(xùn)練的用戶更容易使用”。
兩個(gè)查詢語言的比較
仔細(xì)想想這件事。在互聯(lián)網(wǎng)出現(xiàn)之前,在個(gè)人電腦出現(xiàn)之前,當(dāng)編程語言C首次被引入世界時(shí),兩位年輕的計(jì)算機(jī)科學(xué)家意識(shí)到,“計(jì)算機(jī)行業(yè)的成功很大程度上依賴于培養(yǎng)一種除了訓(xùn)練有素的計(jì)算機(jī)專家以外的用戶。”他們想要的是一種像英語一樣易于閱讀的查詢語言,這也將包括數(shù)據(jù)庫管理和操作。
其結(jié)果就是在1974年首次將SQL引入世界。在接下來的幾十年里,SQL將被證明是非常受歡迎的。隨著諸如System R、Ingres、DB2、Oracle、SQL Server、PostgreSQL、MySQL(等等)關(guān)系型數(shù)據(jù)庫接管了軟件行業(yè),SQL也成為了與數(shù)據(jù)庫交互的卓越語言,成為了一個(gè)日益擁擠、競(jìng)爭(zhēng)激烈的生態(tài)系統(tǒng)的通用語言。
(遺憾的是,Raymond Boyce從來沒有機(jī)會(huì)見證SQL的成功。1個(gè)月后他便死于腦動(dòng)脈瘤,只做了一個(gè)最早的SQL演講,當(dāng)時(shí)他只有26歲,留下了一個(gè)妻子和一個(gè)年輕的女兒。)
有一段時(shí)間,似乎SQL成功地完成了它的任務(wù),但后來互聯(lián)網(wǎng)出現(xiàn)了。
NoSQL的反擊
在Chamberlin和Boyce都在開發(fā)SQL的同時(shí),令他們沒有想到的是在加州的第二組工程師正在研究另一個(gè)正在萌芽的項(xiàng)目,該項(xiàng)目后來會(huì)廣泛擴(kuò)散并威脅到SQL的存在。這個(gè)項(xiàng)目就是ARPANET,1969年10月29日,它誕生了。
ARPANET的一些創(chuàng)造者,最終演變成今天的互聯(lián)網(wǎng)
SQL一直發(fā)展的都很好,但是直到1989年,另一個(gè)工程師出現(xiàn)并發(fā)明了萬維網(wǎng)。
像那些茂密的野草一樣,互聯(lián)網(wǎng)和網(wǎng)絡(luò)蓬勃發(fā)展,極大地?cái)_亂了我們的世界,但對(duì)于數(shù)據(jù)社區(qū)來說,它還造成了一個(gè)特別的麻煩:跟以前相比,新的數(shù)據(jù)源以更高的數(shù)量和速度生成數(shù)據(jù)。
隨著互聯(lián)網(wǎng)的不斷發(fā)展,軟件社區(qū)發(fā)現(xiàn),當(dāng)時(shí)的關(guān)系型數(shù)據(jù)庫無法處理這一新的負(fù)載。因此出現(xiàn)了一陣騷動(dòng)的力量,就好像一百萬個(gè)數(shù)據(jù)庫突然過載了。
然后,兩個(gè)新的互聯(lián)網(wǎng)巨人取得了突破,并開發(fā)了他們自己的非關(guān)系型分布式系統(tǒng)來幫助解決這一新的數(shù)據(jù)沖擊:由谷歌發(fā)布的MapReduce和Bigtable,以及亞馬遜發(fā)布的 Dynamo。這些開創(chuàng)性的論文導(dǎo)致出現(xiàn)了更多的非關(guān)系數(shù)據(jù)庫,包括Hadoop,Cassandra和MongoDB。因?yàn)檫@些新系統(tǒng)基本上都是從零開始編寫的,所以它們也沒有使用SQL,導(dǎo)致了NoSQL運(yùn)動(dòng)的興起。
開發(fā)者社區(qū)的軟件工程師們也接受了NoSQL,而且跟SQL當(dāng)時(shí)的出現(xiàn)相比,接受的群眾范圍更廣了。這個(gè)原因很容易理解:NoSQL是現(xiàn)在流行的;它承諾了規(guī)模和權(quán)力;這似乎是項(xiàng)目通往成功的捷徑。但后來出現(xiàn)了問題。
典型的被NoSQL誘惑的軟件開發(fā)人員。不要學(xué)這家伙。
開發(fā)人員很快發(fā)現(xiàn),沒有SQL實(shí)際上是非常有限的。。每個(gè)NoSQL數(shù)據(jù)庫都提供了自己獨(dú)特的查詢語言,這意味著:學(xué)習(xí)更多的語言(并在同事之間傳播知識(shí));增加了將數(shù)據(jù)庫連接到應(yīng)用程序的難度,導(dǎo)致代碼之間有很強(qiáng)的耦合性;缺乏第三方生態(tài)系統(tǒng),需要公司開發(fā)自己的操作和可視化工具。
這些NoSQL語言是新的,但也沒有完全開發(fā)出來。例如,關(guān)系型數(shù)據(jù)庫已經(jīng)運(yùn)行很多年了,像為SQL添加必要的特性(例如JOIN)這些工作早都已經(jīng)完成了;NoSQL語言的不成熟意味著在應(yīng)用程序級(jí)別就會(huì)有更多的復(fù)雜性。缺乏JOIN也導(dǎo)致了反規(guī)格化,從而又導(dǎo)致數(shù)據(jù)膨脹和僵化。
一些NoSQL數(shù)據(jù)庫添加了自己的“類sql”查詢語言,比如Cassandra的CQL。但這常常會(huì)使問題變得更糟。如果使用跟別的東西完全一樣的界面,如果越常見,實(shí)際上會(huì)導(dǎo)致心理產(chǎn)生更多的疑問:工程師壓根就不知道支持什么,不支持什么。
類sql的查詢語言就像《星球大戰(zhàn)》假日特別節(jié)目。接受不模仿。
(而且總是避免《星球大戰(zhàn)》的特別節(jié)目)
社區(qū)中的一些人在早期就看到了NoSQL的問題(例如德維特和斯通布雷克在2008年就發(fā)現(xiàn)了)。隨著時(shí)間的推移,通過使用過程中個(gè)人經(jīng)驗(yàn)的辛苦積累,越來越多的軟件開發(fā)人員也同意了這一點(diǎn)。
第三章:SQL的回歸
最初被黑暗勢(shì)力所誘惑的軟件社區(qū)開始看到了光明,SQL也上演了英雄回歸的一幕。
首先是Hadoop上的SQL接口(Spark之后也是),導(dǎo)致該行業(yè)興起了NoSQL,NoSQL表示“不只是SQL”(Not Only SQL)。
緊接著NewSQL興起了:完全接納了SQL的新的可擴(kuò)展數(shù)據(jù)庫。來自于麻省理工學(xué)院(MIT)和布朗大學(xué)(Brown)研究人員的H-Store(2008年出版)是最早的擴(kuò)展OLTP數(shù)據(jù)庫之一。谷歌再次引領(lǐng)了風(fēng)向標(biāo),根據(jù)他們的Spanner 論文(出版于2012年)(其作者包括原始的MapReduce作者)開創(chuàng)了地緣重復(fù)的SQL界面的數(shù)據(jù)庫,其次再是CockroachDB(2014)這樣的其他先驅(qū)者。
與此同時(shí),PostgreSQL社區(qū)開始復(fù)蘇,添加了一些關(guān)鍵的改進(jìn),比如JSON數(shù)據(jù)類型(2012),以及PostgreSQL 10中的新特性的potpourri:對(duì)分區(qū)和復(fù)制更好的本地支持,支持對(duì)JSON的全文搜索,以及其它更多的特性(定于今年晚些時(shí)候發(fā)布的版本)。其他如CitusDB(2016)以及其他的公司(今年發(fā)布的TimescaleDB)找到了新方法從而針對(duì)特定數(shù)據(jù)工作負(fù)載的擴(kuò)展PostgreSQL。
事實(shí)上,我們開發(fā)TimescaleDB的過程與這個(gè)行業(yè)的發(fā)展軌跡是密切相關(guān)。早期的TimescaleDB內(nèi)部版本使用了我們自己的類sql查詢語言“ioQL”。是的,我們也沒能抵擋住黑暗一面的誘惑:我們感覺能夠構(gòu)建自己的查詢語言應(yīng)該會(huì)非常強(qiáng)大。然而,盡管這似乎是一條簡(jiǎn)單的道路,但我們很快意識(shí)到其實(shí)需要做更多的工作。我們還發(fā)現(xiàn)自己需要不斷地去查找合適的語法,去查詢那些已經(jīng)可以用SQL進(jìn)行查詢的內(nèi)容。
有一天,我們意識(shí)到構(gòu)建自己的查詢語言毫無意義。最關(guān)鍵的還是要接受SQL。這是我們做出的最好的設(shè)計(jì)決定之一。頓時(shí),一個(gè)全新的世界出現(xiàn)了?,F(xiàn)在盡管我們的數(shù)據(jù)庫才問世5個(gè)月,但是用戶卻可以在生產(chǎn)環(huán)境上使用我們的數(shù)據(jù)庫,還有很多其他的美好事物:可視化工具(Tableau),與常見的ORM的連接器,各種工具和備份選項(xiàng),豐富的在線教程和語法解釋等等。
信谷歌,得永生
谷歌已經(jīng)在數(shù)據(jù)工程和基礎(chǔ)架構(gòu)領(lǐng)域領(lǐng)先了十多年了。我們應(yīng)該密切關(guān)注他們正在做的事情。
看看谷歌的第二大Spanner論文,就在四個(gè)月前發(fā)布的(Spanner:成為一個(gè)SQL系統(tǒng),2017年5月),你會(huì)發(fā)現(xiàn)它支持我們的發(fā)現(xiàn)成果。
例如,谷歌開始的時(shí)候是在Bigtable上面構(gòu)建,但后來發(fā)現(xiàn)不用SQL會(huì)造成很多問題(強(qiáng)調(diào)了我們下面的所有引用):
雖然這些系統(tǒng)提供了數(shù)據(jù)庫系統(tǒng)的某些優(yōu)點(diǎn),但它們?nèi)鄙僭S多應(yīng)用程序開發(fā)人員經(jīng)常依賴的傳統(tǒng)數(shù)據(jù)庫特性。舉一個(gè)關(guān)鍵的例子就是一個(gè)健壯的查詢語言,這意味著開發(fā)人員必須編寫復(fù)雜的代碼來處理和聚合應(yīng)用程序中的數(shù)據(jù)。因此,我們決定將Spanner變成一個(gè)完整的SQL系統(tǒng),查詢執(zhí)行與Spanner的其他架構(gòu)特性緊密集成(例如強(qiáng)一致性和全局復(fù)制)。
在論文的后面,他們進(jìn)一步抓住了從NoSQL過渡到SQL的基本原理:
Spanner的原始API提供了對(duì)單個(gè)和交叉表的點(diǎn)查找和范圍掃描的NoSQL方法。雖然NoSQL方法提供了一個(gè)簡(jiǎn)單的啟動(dòng)扳手的方法,并且在簡(jiǎn)單的檢索場(chǎng)景中繼續(xù)有用,但是SQL在表達(dá)更復(fù)雜的數(shù)據(jù)訪問模式和將計(jì)算推到數(shù)據(jù)上提供了重要的附加價(jià)值。
本文還描述了SQL的采用是如何在扳手上不停止的,但實(shí)際上擴(kuò)展到了谷歌的其余部分,這里的多個(gè)系統(tǒng)現(xiàn)在共享一個(gè)通用的SQL方言:
扳手的SQL引擎共享一個(gè)共同的SQL方言,稱為“標(biāo)準(zhǔn)SQL”,與其他幾個(gè)系統(tǒng)在谷歌上鉆包括內(nèi)部系統(tǒng)如F1和小孔(等)和外部系統(tǒng)如BigQuery…
對(duì)于谷歌的用戶來說,這降低了跨系統(tǒng)工作的障礙。一個(gè)開發(fā)人員或數(shù)據(jù)分析人員編寫了針對(duì)Spanner數(shù)據(jù)庫的SQL,可以將他們對(duì)該語言的理解轉(zhuǎn)移到Dremel,而不必?fù)?dān)心語法、空處理等細(xì)微的差異。
這種方法的成功不言自明。Spanner已經(jīng)成為主要谷歌系統(tǒng)的“真相之源”,包括AdWords和谷歌游戲,而“潛在的云客戶對(duì)使用SQL非常感興趣”。
考慮到谷歌首先幫助發(fā)起了NoSQL運(yùn)動(dòng),很值得注意的是,它現(xiàn)在正在接受SQL。(導(dǎo)致一些人最近想:“谷歌在10年的假時(shí)間里發(fā)送了大數(shù)據(jù)產(chǎn)業(yè)嗎?”)
SQL將變成細(xì)腰
在計(jì)算機(jī)網(wǎng)絡(luò)中,有一個(gè)概念叫做“細(xì)腰結(jié)構(gòu)”。
這個(gè)想法的出現(xiàn)解決了一個(gè)關(guān)鍵問題:在任何給定的網(wǎng)絡(luò)設(shè)備上,想象一個(gè)堆棧,底層的硬件層和頂部的軟件層。中間可能會(huì)存在各種網(wǎng)絡(luò)硬件;同樣,也存在存在各種各樣的軟件和應(yīng)用程序。需要某種可以確保無論硬件發(fā)生了什么情況,軟件仍然可以連接到網(wǎng)絡(luò)的方法;同樣的也能確保無論軟件發(fā)生什么,網(wǎng)絡(luò)硬件都知道如何處理網(wǎng)絡(luò)請(qǐng)求。
在網(wǎng)絡(luò)中,細(xì)腰的角色由互聯(lián)網(wǎng)協(xié)議(IP)扮演,它是為局域網(wǎng)設(shè)計(jì)的底層聯(lián)網(wǎng)協(xié)議和更高級(jí)別的應(yīng)用程序和傳輸協(xié)議的公共接口。(這是一個(gè)很好的解釋。)而且(在一個(gè)廣泛的簡(jiǎn)化中),這個(gè)公共接口成為了計(jì)算機(jī)的通用語言,使網(wǎng)絡(luò)能夠相互連接,設(shè)備可以通信,而這種“網(wǎng)絡(luò)網(wǎng)絡(luò)”可以發(fā)展成為今天豐富多樣的互聯(lián)網(wǎng)。
我們認(rèn)為SQL已經(jīng)成為數(shù)據(jù)分析的細(xì)腰。
我們生活的時(shí)代,數(shù)據(jù)正在成為“世界上最有價(jià)值的資源”(《經(jīng)濟(jì)學(xué)人》,2017年5月)。因此,我們看到了專業(yè)數(shù)據(jù)庫(OLAP、時(shí)間序列、文檔、圖表等),數(shù)據(jù)處理工具(Hadoop,Spark,Flink),數(shù)據(jù)總線(Kafka,RabbitMQ)等呈現(xiàn)出了寒武紀(jì)大爆發(fā)式的情形。我們也有了更多需要依靠這些數(shù)據(jù)基礎(chǔ)設(shè)施的應(yīng)用程序,無論是第三方數(shù)據(jù)可視化工具(Tableau,Grafana PowerBI,Superset),web框架(Rails,Django)或定制的數(shù)據(jù)驅(qū)動(dòng)的應(yīng)用程序。
像網(wǎng)絡(luò)一樣,我們也有一個(gè)復(fù)雜的堆棧,底層的基礎(chǔ)設(shè)施和頂部的應(yīng)用程序。通常,我們最終會(huì)編寫大量的膠水代碼來完成這個(gè)堆棧工作。但是膠水代碼可能很脆弱:需要精心的運(yùn)維。
我們需要的是一個(gè)公共接口,允許堆棧的各個(gè)部分彼此通信。理想情況下,這個(gè)行業(yè)已經(jīng)標(biāo)準(zhǔn)化了。它能讓不同層之間的通信阻礙能夠降到最小。
這就是SQL的力量。和IP一樣,SQL也是一個(gè)公共接口。
但SQL實(shí)際上比IP復(fù)雜得多。因?yàn)閿?shù)據(jù)還需要支持人類分析。而且,SQL創(chuàng)建者最初給它設(shè)定的目標(biāo)之一就是可讀性要高。
SQL是完美的嗎?不,但社區(qū)中的大多數(shù)人都已經(jīng)了解了這門語言。雖然已經(jīng)有工程師在開發(fā)更自然的語言界面,但是這些系統(tǒng)最終會(huì)連接到哪里?還是SQL。
所以在堆棧的頂部還有一層。那一層就是我們?nèi)祟悺?/span>
SQL回歸
SQL回來了。不只是因?yàn)樵诮M裝NoSQL工具時(shí)編寫膠水代碼的做法十分令人反感。不僅僅是因?yàn)閷W(xué)習(xí)各種各樣的新語言是困難的。也不只是因?yàn)闃?biāo)準(zhǔn)會(huì)帶來各種優(yōu)點(diǎn)。
也因?yàn)檫@個(gè)世界充滿了數(shù)據(jù)。它包圍著我們,束縛著我們。起初,我們依靠人類的感覺神經(jīng)系統(tǒng)來處理它?,F(xiàn)在,軟件和硬件系統(tǒng)也變得足夠智能,可以幫助我們。隨著收集的數(shù)據(jù)越來越多,我們也可以更好地認(rèn)識(shí)這個(gè)世界,系統(tǒng)的復(fù)雜性、存儲(chǔ)、處理、分析以及對(duì)這些數(shù)據(jù)可視化的需求只會(huì)繼續(xù)增長(zhǎng)。
我們生活在一個(gè)脆弱的世界和一百萬個(gè)不同界面的世界?;蛟S我們可以繼續(xù)擁抱SQL。一切都將遵循能量守恒定律。
想了解更多關(guān)于數(shù)據(jù)庫、云技術(shù)的內(nèi)容嗎?
快來關(guān)注“數(shù)據(jù)和云"、"云和恩墨,"公眾號(hào)及"云和恩墨"官方網(wǎng)站,我們期待大家一同學(xué)習(xí)與進(jìn)步!
數(shù)據(jù)和云小程序”DBASK“在線問答,隨時(shí)解惑,歡迎了解和關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。