SQL 是指稱一種 Query Language(查詢語言)。
NoSQL 是指稱某一類型的 Databases(資料庫系統)。
這兩個詞彙不算同類。但是,常常會被放在一起說。我也不知道為何國內外都喜歡用「SQL vs. NoSQL」,而少用 「RDB vs. NoSQL」,而且還很少人搞錯,可能看起來比較對稱?這個議題很難短篇幅去談,我挑一些比較少結合一起講的內容說,姑且稱為「雜談」。
我個人堅定支持 SQL 是程式語言。 我特別找來 IEEE(電機電子工程師學會) 來背書,2022 的統計中,以職位數量來看,SQL 才是最大開發者社群。全球程式開發工程師、資料庫管理師、資料分析人員、商業分析人員,每日都有大批的使用者。
圖片來源:https://spectrum.ieee.org/top-programming-languages-2022
不過,若是從社群聲量、科技趨勢等層面綜合統計,Python 第一,SQL 只佔到第六位。
我個人一直不能理解開發工程師之間為何會有開發語言鄙視鏈,這些都只是「語言」,軟體開發重點在「思想」與「表達」,這部分是跨越語言的。
在 Data Project (資料專案, 後面有一篇會說明其定義)中,經常需要開發 Data Pipeline (資料管線,後面有一篇會說明其定義),由於 Data Pipeline 是強調「資料來源端」到「資料使用端」的整合開發,可能需要跨越數個系統接起管線,為了符合各站點的環境要求,混合使用 Python, Java, SQL 是常有的狀況。
NoSQL 是不支持 SQL 查詢的意思,它是反關聯性的,跟 Relational Databases (RDB, 關聯式資料庫系統) 相比較, NoSQL 有較弱的一致性,因此就跟 Distributed System (分散式系統架構)一拍即合。而關聯式資料庫系統是強一致性,尤其是作為交易系統更不能允許多次查詢出現不一致的結果,而跟單體式系統有較高的相性。
圖片來源:https://stackoverflow.com/questions/33760290/how-many-types-of-database-are-there
圖片來源:https://www.infoq.com/presentations/NoSQL-History/