“超越” SQL 的資料查詢語言“新秀”Top8:GraphQL、PRQL、WebAssembly上榜

MissD發表於2022-05-04

幾十年來,SQL(結構化查詢語言)一直在資料查詢語言領域處於主導地位,幾乎成了資料庫的“代名詞”,任何想從資料庫中檢索資訊的人都必須學習 SQL。但隨著時代的變遷,SQL 對資料檢索的主導力量正在減弱。

眾所周知,世界上其他地方都使用小寫字母,但 SQL 使用者卻仍在輸入 SELECT 或 WHERE 等單詞,這本身就是一種“倒退”。也正因為如此,現在市面上已經出現了一批使用全新語言的新資料庫。

近日,InfoWorld 評選出了 8 款“超越” SQL 的資料查詢語言,不僅為現代用例提供了更多的優雅、簡單和靈活性,有些甚至還更好用,一起來看看吧!

GraphQL

GraphQL 的名字乍一聽會讓人有點困惑,因為它並非一種利用圖形資料庫中所有可能性的語言,反而更像一種查詢類似於 JSON 的巢狀格式儲存資料的優雅速記。

GraphQL 資料查詢語言只是對結果的查詢做快速描述,通過後端檢視該欄位列表,這些欄位可能對值有限制,並嘗試查詢匹配的結果。SQL 一般是指定資料庫應該如何完成請求,而 GraphQL 使用者只需提供一個欄位列表。

特別對於某些 JSON 資料庫來說,GraphQL 語言是一種天然的匹配語言,且 GraphQL 在使用表格模式搜尋關聯式資料庫時也越來越流行,智慧後端可以將巢狀請求轉換為符合模式的連線模式。

GraphQL 最初由 Facebook 構建,用於 API 的查詢語言,允許開發人員選擇他們想要發出的請求型別,並在單個請求中接收所需的資訊。在作為一個獨立的開源專案被髮布後,開發人員開始開發 GraphQL 後端。

PRQL

PRQL 語言為 Pipelined Relational Query Language(發音為“Prequel”)的縮寫。這種語言中的查詢被構造為一系列小命令,這些命令只使用所需的資料生成結果。

與許多現代程式語言類似,PRQL 查詢的思考模型採用函式方法,變數等簡單功能可以減少重複,簡化流程。一行的結果以長鍊形式輸入下一行,如果您想刪除一個步驟,通常只需註釋掉這一行,其餘的 pipeline 仍然可以工作。

PRQL 的程式碼採用了 Rust 編寫,以此將 PRQL 轉換為 SQL 的傳輸工具,因此基本結構是可擴充套件的,這種簡單的實驗確保了語言的快速發展。

WebAssembly

許多開發人員認為 WebAssembly(縮寫為 Wasm)是一種用於建立在 web 瀏覽器中執行的快速應用程式的工具,當 Redpanda 開始構建一個資料流工具來取代 Kafka 時,他們希望新增一種機制,不僅可以傳遞資料,而且可以在過程中偶爾轉換資料,WebAssembly 就是最好的選擇。

當然,WebAssembly 甚至比某些資料庫中的儲存過程功能更強、級別更低。並非所有開發人員都想編寫位元組級程式碼。但是這個選項開啟了資料流,使其能夠進行復雜的轉換,遠遠超出了 SQL 所能實現的範圍。

GQL

圖形查詢語言(Graph Query Language,簡稱GQL)是一種被提議的標準,它融合了類似 Cypher、PGQL 和 GSQL 的宣告式程式語言。

開發人員通過為一組節點指定特定模型來建立查詢,然後資料庫負責查詢匹配項。GQL 使用更復雜的屬性圖,允許成對的節點共享多個不同的連線。

Gremlin

Gremlin 是搜尋圖形的原始語言之一,它要求執行一組步驟來搜尋節點之間的連線,因此被一些人稱為“基於路徑”或“圖形遍歷”語言。

Gremlin 語言每個查詢都是基於步驟構建的,每個步驟都可能涉及對映當前節點、過濾列表或以某種方式將結果製成表格。

Gremlin 語言通常只是一個起點,如在擴充套件 Gremlin 時,在其中嵌入 Python 直譯器,以便查詢可以包含 Python 程式碼。也有人將 Gremlin 嵌入 Java 等標準程式語言中,以此來從該語言中挖掘 Gremlin 的威力。

Gremlin 最初是為 Apache 的 TinkerPop 專案構建的,它已被主要的事務性分散式圖形資料庫(如 Amazon 的 Neptune)和使用 Apache Spark 或 Hadoop 的圖形處理框架所採用。

N1QL

N1QL(發音為“nickel”)旨在讓 SQL 原生使用者更容易處理可能儲存在 Couchbase 中的 JSON 物件。與 SQL 一樣,基本查詢有幾個由關鍵字 SELECT、FROM 和 WHERE 指定的部分,指定資料將來自的資料結構路徑的細節將根據 JSON 物件的巢狀世界進行調整和調整。

多年來,資料庫軟體公司 Couchbase 一直在尋找查詢一般文件的最佳方式。一開始,查詢是作為一個 JavaScript 函式編寫的,然後交給資料庫執行。儘管這是一個很好的、通用的解決方案,但有時需要花費很長時間才能生成結果,因此開發者創造出了 N1QL。

為了鼓勵實驗,N1QL 提供了一個帶有視覺化介面的查詢工作臺,用於測試和優化查詢。此外,Couchbase 還提供了一個通用的全文搜尋選項,可獨立執行,用於搜尋文字詞而非結構化資料的查詢。

Malloy

Malloy 的建立者曾表示,SQL 的問題在於語法細節 —— 表達哪怕是最簡單的查詢也需要時間,因為語言冗長且充滿隱藏的效能陷阱。因此,他們創造了一種具有自然預設值和更簡單語法的現代程式語言 —— Malloy,可以編譯成 SQL,因此沒有人需要改造 stock database。

其結果是一種類似於更強大的 GraphQL 的語法,查詢更像是結果的模型或願景,包括任何限制、匹配或預設值。Malloy 可在後臺處理一些優化,如可以自動生成更智慧的連線,以避免一些效能陷進;而子查詢可以聚合以節省時間,還可根據需要新增索引。因此,編寫查詢更像是編寫現代程式碼,標點符號可以保持結構簡潔。

Malloy 的開源核心是在 TypeScript 中構建的,用於包含在 Node.js 中的程式碼,VS Code 外掛簡化了開發。

Basis

大多數查詢語言都直接繫結到特定的資料庫,而 Basis 正在構建更多的管道,在使用 SQL 和 Python 混合過濾之前,可以從各種源中提取資料,最後再將資料交付給各種標準選項進行輸出,從執行程式碼到人工智慧演算法再到圖表和儀表盤。

Basis 只是更新的資料管道工具的一個例子,這些工具正在開啟查詢過程,從多個源中提取資料,使用多個語言進行過濾,並以多種形式交付資料。

綜述

上面 8 個新型資料查詢語言的出現,也並非意味著 SQL 越來越不受歡迎。如果說有什麼區別的話,那就是編寫的 SQL 比以往任何時候都多,而資料儲存的世界正在以更快的速度發展,而這些發展和增長正在激發更多新嘗試和新擴充。

當然,也並非所有這些新型別語言都比 SQL 更好,並不是所有這些都是開發者們正在尋找的,但他們的而出現都提供了一個新的機會,讓你有機會以不同的方式思考某些伺服器上的海量位元組,期待你能找到一種新的方法來闡明自我所需,不是嗎?

相關文章