關於SQL,你的認識可能是錯的
LukasEder是jOOQ母公司DataGeekeryGmbH的創建者兼首席執行官。關於SQL,他經常聽到一些錯誤的觀點,比如:
SQL已經老化。我們為什麼不使用更現代的技術?
像彙編一樣,SQL是低級語言。你是喜歡使用彙編還是Java呢?類似地,你是喜歡使用SQL還是Hibernate呢?
近日,他發表了一篇博文,逐一反駁了類似的偏見和謬論。
謬論1:SQL已經老化
Lukas認為,許多人之所以認為SQL已經老化,是因為它是一項已經超過了30年的ISO/IEC標準,而且是以更為古老的關係代數學為基礎。但他指出,知名網站UseTheIndex,Luke的作者MarkusWinand已經很好地展示了SQL這些年的發展。現代SQL已經可以做許多超出通用編程語言開發人員意料的事。
謬論2:SQL是低級語言
Lukas並不認為SQL是同彙編一樣的低級語言。相反,他認為SQL是主流語言中最高級的,因為SQL是唯一真正流行的第四代編程語言。而且,SQL還是唯一真正流行的聲明式編程語言。使用SQL,只需要告訴機器需要什麼數據,如何獲取這些數據則由查詢分析器完成。
謬論3:NoSQL更現代
「NoSQL比SQL更現代」,Lukas認為,這是NoSQL資料庫供應商的宣傳之詞。他指出,如果(層次化)的JSON數據存儲就是現代的話,那麼SQL並不落後。許多關係型資料庫提供商都已經集成了JSON。而且,即使是對半結構化數據而言,SQL仍然是最好的查詢和數據批處理語言。實際上,SQL就是針對SQL出現之前的混亂而設計的。關於這一點,感興趣的讀者可以閱讀《Codd的關係型觀點——NoSQL兜了個圈又回到了原點?》。現如今,許多大數據資料庫提供商都押寶SQL作為查詢語言,MarkMadsen已經在StrataConf大會上做了很好地展示。
謬論4:資料庫不適合編寫業務邏輯
在Lukas看來,這是最大的謬論,因為事實正好相反,資料庫是進行統計運算的最佳之處。它有許多信息可以幫助運算,而且是在內存中進行。它還有約束、索引和其它各種元數據來幫助優化查詢。這種優化使用純Java代碼可能是無法實現的。另外,這種方法還有一個巨大的優勢,就是業務邏輯在一個地方實現,卻可以供多個應用程序使用。
此外,Lukas還以窗口函數為例說明了SQL的簡潔性,並指出,窗口函數及其它許多很棒的SQL特性自SQL:2003起已經實現標準化,使用這些特性,無需擔心被資料庫供應商鎖定。
最後,Lukas總結道:
SQL能做的事比你知道的要多許多;
SQL比許多其它技術都要先進得多;
SQL是實現業務邏輯的理想之地。
推薦閱讀:
※機器數據的探索性分析 - SQL引擎與BI的銜接
※第五課 資料庫之mysql
※優化:mysql查詢最近一條記錄
※SQL(七、集合運算)
※配置MySQL開啟遠程連接的方法