SQL 和關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)都是在上世紀(jì)70 年代早期開發(fā)的。Edgar F. Codd 開發(fā)了 RDBMS,而 Donald D. Chamberling 和 Raymond F. Boyce 開發(fā)了 SQL。二者都誕生在計(jì)算機(jī)技術(shù)的早期,而且在 90% 的時(shí)間里都非常有效,使得數(shù)據(jù)庫(kù)成為了一項(xiàng) “已經(jīng)被解決的問題”。就像 MailChimp 已經(jīng)成為了發(fā)送新聞簡(jiǎn)訊的同義詞。如果你想使用數(shù)據(jù)庫(kù),你就得使用 RDBMS 和 SQL。不過,仍然還是有人使用其他 email 軟件,正如還是用人使用非 SQL 的數(shù)據(jù)庫(kù)。但即使是存在著其他可供使用的數(shù)據(jù)庫(kù)技術(shù),SQL 依舊占據(jù)霸主地位。以下 8 條,就是我們?cè)?SQL 誕生 50 年后依舊使用它的原因。
SQL 最初基于關(guān)系代數(shù)和元組關(guān)系演算——由 Codd 特別為關(guān)系數(shù)據(jù)庫(kù)開發(fā)的兩種數(shù)學(xué)模式。所以,SQL 是特別為處理數(shù)據(jù)而設(shè)計(jì)的,而事實(shí)證明,它非常善于存取和組織數(shù)據(jù)。那么第一個(gè)原因就是:作為一種數(shù)據(jù)庫(kù)技術(shù),SQL 非常稱職。
RDBMS 已經(jīng)問世很長(zhǎng)時(shí)間了,所以已經(jīng)用于了大量不同的情況。在 “前網(wǎng)絡(luò)時(shí)代”,它就作為線下數(shù)據(jù)庫(kù)使用,到如今,有了重大修改的 SQL 數(shù)據(jù)庫(kù),仍在 Facebook 這樣的全球性 app 中扮演中核心角色——RDBMS 和 SQL 已經(jīng)久經(jīng)沙場(chǎng)。而在眾多產(chǎn)品中運(yùn)行過的無(wú)數(shù)個(gè)小時(shí),證明了它們是可信賴的。有些軟件就是能解決問題,尤其是當(dāng)你在處理充斥著丟失、損壞和失敗等問題的數(shù)據(jù)庫(kù)時(shí),這種優(yōu)勢(shì)尤為明顯。作為成熟的軟件,SQL 有著備份計(jì)劃、變化管理和操作嚴(yán)謹(jǐn)性,而這些會(huì)使棘手的情況大為好轉(zhuǎn)。因此,SQL 數(shù)據(jù)庫(kù)幾乎總是最好的選擇。
當(dāng)事物存在一段時(shí)間之后,圍繞著它的知識(shí)體系就會(huì)被建立。SQL 也不例外。最過去的時(shí)間里,大量的 SQL 知識(shí)被寫成文檔,SQL 社區(qū)快速發(fā)展,許許多多的技術(shù)人才成長(zhǎng)了起來(lái)。因?yàn)?SQL 社區(qū)如此活躍,SQL 文檔又如此豐富,所以它便吸引了大量的人才和商業(yè)活動(dòng)。而又因?yàn)?SQL 吸引了大量的人才,所以 SQL 社區(qū)更加壯大,知識(shí)更加深入。這就是多年來(lái) SQL 的發(fā)展?fàn)顩r。
計(jì)算機(jī)語(yǔ)言發(fā)展了這么久,直到今天,SQL 仍然是一種非常易學(xué)的語(yǔ)言。短短幾天,你就可以學(xué)會(huì)基本的功能,能夠進(jìn)行查詢和返回?cái)?shù)據(jù)。非常簡(jiǎn)單。即使是傳統(tǒng)意義上的非技術(shù)崗位,比如市場(chǎng),公司高管,以及非技術(shù)性的產(chǎn)品經(jīng)理,都會(huì)去學(xué)習(xí)基本的 SQL 功能,來(lái)支持他們的工作。而深入地了解 SQL 基于的關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng),完全是另一件事。對(duì)于大多數(shù)只需要使用查詢功能的人來(lái)說,SQL 真是太好用了。
因?yàn)橛邪霐?shù)的開發(fā)者都會(huì)使用 SQL 和 RDBMS,所以我們可以肯定地說,這兩者高度普及。這絕不是一件壞事。正如上文所說,由于使用人數(shù)多,相關(guān)知識(shí)和社區(qū)得以快速發(fā)展。而又由于其簡(jiǎn)單,故而對(duì)于開發(fā)者以及其他相關(guān)人員來(lái)說,SQL 知識(shí)幾乎是常識(shí)。于是,相關(guān)知識(shí)就極易在公司、產(chǎn)業(yè)之間傳播,人才儲(chǔ)備充足。而這又反過來(lái)促進(jìn)了知識(shí)的創(chuàng)造和社區(qū)的成長(zhǎng)。可見,SQL 數(shù)據(jù)庫(kù)普及度極高的特性,已經(jīng)為其自身的成長(zhǎng)構(gòu)筑了一個(gè)良性循環(huán)。
從 1995 年至今,開源的 SQL 技術(shù)(MySQL 和 PostgreSQL)已經(jīng)成為了主要的 SQL 數(shù)據(jù)庫(kù)技術(shù)。2023年,Stack Overflow面向90000名開發(fā)人員進(jìn)行的一項(xiàng)調(diào)查顯示,PostgreSQL在數(shù)據(jù)庫(kù)引擎的選擇上領(lǐng)先于MySQL,這與往年的調(diào)查相比有了顯著變化。這種向開源 SQL 數(shù)據(jù)庫(kù)切換的趨勢(shì),對(duì)于已經(jīng)規(guī)模龐大的 SQL 社區(qū)來(lái)說是一件好事。同時(shí)這種趨勢(shì)的存在也印證了,SQL 社區(qū)中的開發(fā)者們正在努力地使 SQL 變得更好。
能用 SQL server 做好的事情就別寫代碼。這句話背后的邏輯是,在絕大多數(shù)情況下,SQL 都能找到最有效的辦法來(lái)完成你的任務(wù),而且做得比任何能自己寫代碼來(lái)解決的人更好。舉個(gè)例子。假設(shè)我們需要建立一份關(guān)于 “加利福尼亞 2020 年第三季稅收” 的報(bào)告,具體做法是,選出列表中加利福尼亞的用戶,并按照數(shù)據(jù)進(jìn)行排列。那么你只需要一句 SQL 語(yǔ)句就可以完成:SELECT SUM(Value_USD) AS California_Revenue_Q3 FROM Transactions WHERE Location = ‘California’ AND DATEPART(q, Date) = 3 AND YEAR(Date) = 2020;
而如果你要按照不同的地區(qū)對(duì)數(shù)據(jù)進(jìn)行分解,那么 SQL 語(yǔ)句是這樣的:SELECT Location, SUM(Value_USD) AS Revenue_Q3 FROM Transactions WHERE DATEPART(q, Date) = 3 AND YEAR(Date) = 2020 GROUP BY Location ORDER BY Location;
如果你想得到稅收最高的 5 個(gè)區(qū)域:SELECT TOP 5 Location, SUM(Value_USD) AS Revenue_Q3 FROM Transactions WHERE DATEPART(q, Date) = 3 AND YEAR(Date) = 2020 GROUP BY Location ORDER BY SUM(Value_USD) DESC;
如果你想用其他語(yǔ)言來(lái)進(jìn)行這些查詢,情況就會(huì)復(fù)雜很多,既耗時(shí)間,語(yǔ)句也長(zhǎng)得多。設(shè)計(jì) SQL 就是為了切割數(shù)據(jù),而且看起來(lái) SQL 做得非常好。畢竟,不是數(shù)據(jù)因計(jì)算而存在,而是計(jì)算因數(shù)據(jù)而存在。
八、SQL/RDBMS 和 NoSQL/DBMS 數(shù)據(jù)庫(kù)各司其職
數(shù)據(jù)庫(kù)是工具。工具不應(yīng)該只有斧子,還應(yīng)該有扳手,螺絲刀,鋸子等等。每一種工具各司其職,解決不同的問題。而每一種數(shù)據(jù)庫(kù)都長(zhǎng)于一些事情,而短于另一些事情。
當(dāng)你無(wú)法預(yù)見數(shù)據(jù)匯總或數(shù)據(jù)用途的所有可能性,但又需要表示一個(gè)系統(tǒng)中各部分的關(guān)系時(shí),關(guān)系數(shù)據(jù)庫(kù)就是最好的選擇。而且老實(shí)說,大部分系統(tǒng)在這方面做得并不好。再者,SQL 語(yǔ)言本身提供了一種用戶友好型的數(shù)據(jù)組織方式。
SQL/RDBMS 只是眾多工具中的一種,且剛好在很多情況下都是切實(shí)能用的那種。而當(dāng)需要保證數(shù)據(jù)的完整性、一致性時(shí)(比如金融領(lǐng)域),SQL/RDBMS 就是最好用的工具。
SQL 數(shù)據(jù)庫(kù)有它們自身的缺點(diǎn),且對(duì)于某些工作來(lái)說,并不是最好的選擇。但在大部分情況下,它們可以輕松打敗其他非 SQL 數(shù)據(jù)庫(kù)。
有些人會(huì)擔(dān)心數(shù)據(jù)規(guī)模的問題,但實(shí)際上,只有很小一部分人需要解決 RDBMS 的擴(kuò)容問題——畢竟你不是 Facebook 或者 Google。因此,你仍然可以用 SQL 數(shù)據(jù)庫(kù)管理數(shù)一百萬(wàn)計(jì)的用戶信息,而不出現(xiàn)任何問題。
更何況,只要知道如何權(quán)衡利弊,RDBMS 是可以擴(kuò)容的。
盡管數(shù)不清的其他數(shù)據(jù)庫(kù)系統(tǒng)和技術(shù),都在不斷擴(kuò)大著使用人群,但是,毫無(wú)疑問地,SQL 數(shù)據(jù)庫(kù)在可預(yù)見的未來(lái)甚至更遠(yuǎn),會(huì)一直發(fā)揮作用。隨著大數(shù)據(jù),深度學(xué)習(xí)和物聯(lián)網(wǎng)的到來(lái),即使 SQL 數(shù)據(jù)庫(kù)再流行 50 年也不奇怪。
確實(shí),SQL 數(shù)據(jù)庫(kù)是有缺點(diǎn)的。但在絕大多數(shù)的案例中,龐大的社區(qū),簡(jiǎn)單的語(yǔ)言,以及有強(qiáng)大的 RDBMS 作為其基礎(chǔ),使得 SQL 成為了最好的選擇之一。
為什么我們?cè)?SQL 誕生 50 年后還一直使用它呢?因?yàn)樗苡?,而且?90% 的情況中都能完成任務(wù)。這對(duì)于身處越來(lái)越復(fù)雜的技術(shù)與集成環(huán)境中的開發(fā)者而言,就是最大的優(yōu)點(diǎn)。
該文章在 2024/5/7 17:25:49 編輯過