實時分析需要SQL和複雜查詢

今天的資料驅動型企業不僅需要針對實時資料作出快速響應要,而且還必須執行復雜的查詢以解決複雜的業務問題。

例如,客戶個性化系統需要將歷史資料集與實時資料流結合起來,以便立即向客戶提供最相關的產品建議。提供關鍵任務的實時業務觀察能力的運營分析系統也必須如此,例如,線上支付供應商需要監測其全球範圍內的交易,以發現可能預示金融欺詐的異常情況。

或者想象一個網上學習平臺需要為學區客戶和內部客戶團隊提供關於學生和教師使用情況的最新洞察力。或者是一個市場新聞供應商,需要監測並確保其金融客戶在狹窄的視窗內獲得準確的、相關的更新,以實現盈利的交易。

NoSQL的侷限性

SQL支援複雜的查詢,因為它是一種非常具有表現力的。 是成熟的語言。複雜的SQL查詢在商業智慧(BI)中早已司空見慣。而當Hadoop和Hive這樣的系統出現時,它首次將複雜的查詢與大資料結合起來。Hive在Hadoop的本地MapReduce程式設計正規化上實現了一個SQL層。這些第一代基於SQL的大資料系統的代價是,它們以更高的查詢延遲為代價,提高了資料處理的吞吐量。因此,這些使用案例仍然是執行在批處理模式中。

當NoSQL資料庫(如鍵值和文件儲存)出現時,情況發生了變化。設計目標是低延遲和規模。現在,公司可以把一個龐大的資料集,組織成簡單的鍵值或文件對,並立即執行查詢和其他簡單的查詢。這些大規模、可擴充套件的鍵值儲存或文件資料庫的設計者決定,只有當查詢性質簡單時,規模和速度才有可能。在鍵值儲存中查詢一個值,可以做到快如閃電。相比之下,SQL查詢,由於過濾器、排序和聚合的固有複雜性,在技術上太有挑戰性,無法在大量資料上快速執行。

不要注意那個幕後的人

不幸的是,由於上述原因,當查詢複雜、巢狀且必須返回精確答案時,NoSQL資料庫往往會遇到問題。這故意不是他們的強項。他們的查詢語言,無論是類似SQL的變體,如 CQL (Cassandra)和Druid SQL等類似SQL的變體,還是MQL(MongoDB)等完全自定義的語言,都不支援連線和其他複雜的查詢命令。

NoSQL資料庫的供應商就像綠野仙蹤一樣,用煙霧和鏡子分散你的注意力,高談闊論狹義的速度定義,這樣你就不會注意到NoSQL資料庫在實時分析方面的實際弱點。使用NoSQL資料庫的開發人員最終被迫將Join和其他資料邏輯嵌入到他們自己的應用程式程式碼中——從單獨的表中獲取資料到進行連線最佳化和其他分析工作的一切。

雖然走NoSQL的道路是可能的,但它是繁瑣和緩慢的。以一個申請抵押貸款的人為例。為了分析他們的信用度,你會建立一個數據應用來計算資料,比如這個人的信用歷史、未償貸款和還款歷史。要做到這一點,你需要結合幾個資料表格,其中一些可能是歸一化的,哪些資料是真實的,哪些是不真實的。你還可能分析當前和歷史上的抵押貸款利率,以確定提供什麼利率。

使用SQL,你可以簡單地將信用記錄和貸款支付表連線在一起,並聚合大規模的歷史資料集,如每日抵押貸款利率。然而,使用像Python或Java這樣的東西來手動重新建立連線和聚合,與SQL相比,你的應用程式中的程式碼行數會增加幾十甚至一百。

更多的應用程式程式碼不僅需要更多的時間來建立,而且幾乎總是導致更慢的查詢。如果不能使用基於SQL的查詢最佳化器,加速查詢是很困難和費時的,因為應用程式中的業務邏輯和應用程式使用的基於查詢的資料訪問路徑之間沒有分界。像一個普通的東西 join table一樣的東西,SQL可以有效而優雅地處理,但在其他語言中卻可能成為一個臃腫的記憶體佔用者。

最後,用應用程式程式碼編寫的查詢也是比較脆弱的,需要不斷的維護和測試,如果資料量發生變化,還可能需要重寫。而大多數開發人員缺乏時間和專業知識來進行這種持續的維護。

只有一個NoSQL系統我認為可以合理地勝任複雜的查詢。GraphQL。GraphQL系統可以將資料型別與特定的資料欄位聯絡起來,並提供函式來檢索文件的選定欄位。它的查詢API支援複雜的操作,例如根據一組匹配欄位過濾文件,並有選擇地從匹配的文件中返回欄位的子集。GraphQL的主要分析缺陷是它缺乏表達能力,無法根據兩個不同的資料集中特定欄位的值來連線這兩個資料集。大多數分析性查詢需要這種能力,以便在查詢時連線多個數據源。

為工作選擇最佳工具--SQL

在技術和生活中,每項工作都有一個為其設計的最佳工具。對於複雜的分析查詢,SQL無疑是最好的工具。SQL擁有半個世紀以來開發的豐富的強大命令集。建立查詢很容易,調整和最佳化查詢更容易,以加快結果,縮小中間表,降低查詢成本。

有一些關於SQL資料庫的神話,但它們是基於1990年代的傳統關係型系統。事實是,現代雲原生SQL資料庫支援實時分析所有必要的關鍵功能,包括。

可變資料,以實現令人難以置信的快速資料攝取和對晚到事件的順利處理。

靈活的模式Schema,可以根據傳入的流媒體資料的結構自動調整。

即時擴大資料寫入或查詢的規模,以處理突發的資料。

SQL仍然非常流行,在所有程式語言中排名最靠前。正如我們所看到的,它支援複雜的查詢,這是現代實時資料分析的一個要求。相比之下,NoSQL資料庫在執行連線和其他複雜的查詢命令方面比較弱。此外,尋找一個不太知名的自定義查詢語言的專家可能會很費時和昂貴。

底線是,你將沒有問題找到熟練的資料工程師和資料運營人員,他們知道SQL及其複雜查詢的能力。他們將能夠利用這些知識和能力,推動你的組織從批次分析到實時分析的飛躍。