震驚!No-SQL正淘汰SQL?
No-SQL正淘汰SQL?
上周,朋友給我轉發了某成功企業家的郵件,里面宣稱“SQL已經過時了”。
該企業家聲稱,MongoDB和Redis 這樣受歡迎的 No-SQL 數據庫,會慢慢地將基于SQL的數據庫淘汰。因此,身為數據科學家,學習SQL是“抱殘守缺”
看到他的郵件我非常震驚,他是怎么得出這么離譜的結論的?但這也令我好奇......別人會不會也這樣誤解了呢?該企業家有大量擁躉,他本人也直言不諱:新的數據科學家收到建議別再學習SQL了嗎?
可能其他人也認為SQL正在被淘汰,在此,我想公開向該企業家作出回應。
在從事數據科學的職業生涯里,學習SQL非常有必要。No-SQL無法撼動學習SQL的意義。
基本上,有兩個理由可以保證SQL在未來幾十年都不會過時。
理由1:No-SQL數據庫不會取代Presto、Redshift、BigQuery等分析數據庫
不論應用程序使用的是MySQL這樣的SQL后端,還是像MongoDB那樣的No-SQL后端,該后端中的數據最終都會被加載到專門的分析數據庫中,比如Redshift、Snowflake、BigQuery或 Presto。

公司為什么把數據轉移到Redshift這樣的專欄存儲中?因為專欄存儲能更快地運行分析查詢,不論是NoSQL還是像MySQL這樣的行存儲數據庫。事實上,我敢打賭,專欄存儲數據庫的普及速度與NoSQL數據庫一樣快。
因此,像NoSQL以及其他數據庫還有匹配的應用程序,它們的技術通常與數據科學家無關,因為他們不使用數據庫應用程序。當然也有一些例外,將在后文討論。
理由2:NOSQL數據庫的優勢并非不支持SQL語言
事實證明,如果支持基于SQL的查詢引擎是有意義的,那么No-SQL存儲可以實現它。類似地,SQL數據庫也可以支持NoSQL查詢語言,但是它們選擇不支持。
那么,為什么專欄存儲數據庫有意選擇提供SQL接口呢?
他們做出這樣的選擇,是因為SQL語言在表達數據操作指令上非常強大。
以一個簡單的查詢為例,它是NoSQL數據庫下MongoDB的計算集合中的文檔數量。
注意:MongoDB中的文檔類似于行,而集合則類似于表。
- db.sales.aggregate( [
- {
- $group: {
- _id: null,
- count: { $sum: 1 }
- }
- }
- ] )
將其與等效SQL進行比較。
- select count(1) from sales
顯而易見,對于想要提取數據的人來說,SQL語言是更好的選擇。NoSQL數據庫支持不同的語言,因為在數據庫接口的應用程序庫方面,正確構造SQL比較困難。
前文提到過,應用程序數據庫的技術與數據科學家無關,但是這一規則有一些例外。我的第一家公司實際上沒有像Redshift那樣的分析數據庫,所以必須直接查詢應用程序的數據庫。更準確地說,是在查詢應用程序數據庫的讀副本。
該公司的應用程序還使用了No-SQL數據庫Redis,而且不止一次我需要直接從Redis提取數據,所以確實需要學習Redis的NoSQL API的一些組件。

因此,在主要應用程序專門使用NoSQL數據庫的環境中,學習哪種SQL可能都無關緊要。但在非常罕見情況下,隨著公司的成長,他們幾乎肯定會投資建立一個支持SQL的分欄存儲分析數據庫。