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