實時分析需要 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 數據庫支持實時分析所有必要的關鍵功能,包括。

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

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

來源:

https://www.toutiao.com/article/7119907352471470607/?log_from=54fd152fdac27_1658113238636

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/_RMjKt3TWm8bl2zn5eEo_w