跳至主內容

SQL四部曲: SQL的未來在何方?

SQL四部曲: SQL的未來在何方?
Gordon Lau 劉偉中
2019-10-25

先前三篇關於SQL的文章,分別講述了SQL的歷史、功能、誤解,這一篇筆者將會大膽預測,預測SQL的未來發展的可能方向。到底SQL在未來會是比現在更廣泛使用,成為每一個數據分析師的必備工具?還是被另外一種語言所取代?還是關聯式資料庫不會再受歡迎呢?

SQL_Futures.png

關聯式資料庫不會被取代

筆者認為關聯式資料庫(Relational Database)會繼續廣泛使用,世界上大多數資料本質上都有關聯性質,一個教師要教多個學生,一個學生由多個教師身上學習,學生跟教師就成為了一個多對多關係(Many-to-Many Relation); 一夫一妻制,在資料庫表示就是一對一關係(One-to-One Relation)。關聯式資料基本上無處不在,這亦是為何關聯式資料庫出現了四十年還是歷久不衰的主要原因。

SQL會支援愈來愈多非傳統RDBMS的功能

現今SQL已經支援了不少原本NoSQL才支援的功能。今年九月,國際制定數據庫語言標準的組織正為圖資料庫(Graph Database) 設計一種名為GQL的語言,全名為(Graph Query Language)。GQL的語法的靈感從何而來呢?

只要看看一段PGQL(一種GQL考慮整合的圖資料庫查詢語言)的例子就可以知道。

gql.png

Source

很明顯的是,GQL看起來很像SQL,其實就是由SQL的語法出發,加上本身不是RDBMS的功能,去表達與關聯式資料庫迥異的概念。

SQL在大數據世界會成為數據查詢語言之標準

在現今大數據時代之前,SQL一直都是數據查詢語言的標準,因為絕大多數數據本身都是儲存在SQL資料庫之內; 及至大數據時代,大數據工具諸如Apache Hadoop、Apache Spark亦開始有廣泛使用。當這些工具廣泛使用後,就出現了一個實在的問題,不同工具的查詢方法截然不同,令開發者相當不方便。Spark SQL正好於這樣的情況下開發,令開發者只需撰寫SQL,就可以查詢儲存之數據。

Google cloud spanner是另一個例子,一開始Cloud Spanner亦不支援SQL,但Google的工程師很快發現沒有熟悉的SQL,查詢數據不太方便,因此後來又加上了Cloud Spanner SQL 去統一資料查詢的方法。

SELECT l.LOCATION[offset(0)].*
FROM (SELECT ARRAY<STRUCT<city STRING, state STRING>>[
                         ("Seattle", "Washington"),
                         ("Phoenix", "Arizona")] AS location) AS l;

+---------+------------+
| city    | state      |
+---------+------------+
| Seattle | Washington |
+---------+------------+

Source

Query Builder的程式庫將慢慢取代ORM成為框架的基本部件

上一篇提過ORM的一些問題,亦由於SQL的功能日漸方便完善,開發者不再需要如以前般需要使用ORM. 因此筆者預計 愈來愈多網站框架(Web Frameworks)會開始將Query Builder作為基本部件。 更甚者,可以像.NET平台的LINQ一樣,像SQL放在代碼之中,令SQL與代碼完全整合。

// Query #1.
List<int> numbers = new List<int>() { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

// The query variable can also be implicitly typed by using var
IEnumerable<int> filteringQuery =
    from num in numbers
    where num < 3 || num > 7
    select num;

// Query #2.
IEnumerable<int> orderingQuery =
    from num in numbers
    where num < 3 || num > 7
    orderby num ascending
    select num;

// Query #3.
string[] groupingQuery = { "carrots", "cabbage", "broccoli", "beans", "barley" };
IEnumerable<IGrouping<char, string>> queryFoodGroups =
    from item in groupingQuery
    group item by item[0];

Source

由Microsoft的例子可見,LINQ與C#融合得非常好。可以看成是未來其他語言內嵌SQL的發展方向。

總結

綜合上面所有預測,相信大家都知道筆者對SQL的前景相當樂觀,其實不只筆者,還有不少其他作者都抱持類似看法,因此想開學習的朋友,就不用再猶豫了!

留言

閱讀更多

SQL首部曲:NoSQL? No! SQL!

SQL首部曲:NoSQL? No! SQL!

SQL首部曲:NoSQL? No! SQL!
Gordon Lau 劉偉中
2019-10-08

由本篇開始,接連四篇都是與SQL有關的文章,會想寫SQL的原因,是因為SQL在現今軟件開發及數據科學佔有舉足輕重之地位,卻總是在背後默默無名,從未見得到像其他新興技術之關注,有見及此,筆者決定介紹SQL之特點,順便破除一些對使用SQL上常有的誤解。


SQL二部曲:五件事,你不知道SQL勝任有餘

SQL二部曲:五件事,你不知道SQL勝任有餘

SQL二部曲:五件事,你不知道SQL勝任有餘
Gordon Lau 劉偉中
2019-10-15

上一篇文章講到了SQL的發展歷史,也提到了NoSQL的出現曾經為SQL資料庫帶來不少挑戰。正是這些挑戰,令現今SQL內置功能愈來愈豐富。近年SQL資料庫功能上大有進展,其中PostgreSQL功能日臻完善,運用PostgreSQL,連帶不少大家本以為只能運用NoSQL解決的問題,也可以輕鬆解決。 因此,本文主要會以PostgreSQL作舉例,當然以下很多功能在其他SQL實作如Oracle、SQL Server 、MySQL等都已逐漸支援,因此可看成是普遍SQL在不久將來廣泛支援的功能。


SQL三部曲:你不需要ORM

SQL三部曲:你不需要ORM

SQL三部曲:你不需要ORM
Gordon Lau 劉偉中
2019-10-22

曾經學習軟件開發的朋友,都應該在框架中,學過如何從資料庫讀取資料,而十之八九學到的方法,就是使用框架中的ORM程式庫。例如Ruby on Rails 內置了Active Record、Django內置了Django ORM、 Spring Boot則通常與 Hibernate一齊使用,C#則有一套本身的.Net Entity Framework。基本上通用的程式開發框架,都必然有自己的ORM程式庫。


私隱政策網站地圖

© 2022 Tecky Academy Limited

hello@tecky.io
t.me/TeckyAcademy+852 9725 6400
商界展關懷 2019-2022
英國頒證機構 TQUK 認可中心
aws_partner
薯片叔叔共創社 重塑教育挑戰大獎