聊聊分散式 SQL 資料庫Doris(一)

来源:https://www.cnblogs.com/zhiyong-ITNote/archive/2023/11/20/17844295.html
-Advertisement-
Play Games

MPP MPP:Massively Parallel Processing, 即大規模並行處理. 一般用來指多個SQL資料庫節點搭建的數據倉庫系統. 執行查詢的時候, 查詢可以分散到多個SQL資料庫節點上執行, 然後彙總返回給用戶. Doris Doris 作為一款開源的 MPP 架構 OLAP 高 ...


MPP

MPP:Massively Parallel Processing, 即大規模並行處理.

一般用來指多個SQL資料庫節點搭建的數據倉庫系統. 執行查詢的時候, 查詢可以分散到多個SQL資料庫節點上執行, 然後彙總返回給用戶.

Doris

Doris 作為一款開源的 MPP 架構 OLAP 高性能、實時的分析型資料庫,能夠運行在絕大多數主流的商用伺服器上。

使用場景

如下圖所示,數據源經過各種數據集成和加工處理後,通常會入庫到實時數倉 Doris 和離線湖倉(Hive, Iceberg, Hudi 中),Apache Doris 被廣泛應用在以下場景中。

1.png

  • 報表分析

    • 實時看板 (Dashboards)
    • 面向企業內部分析師和管理者的報表
    • 面向用戶或者客戶的高併發報表分析(Customer Facing Analytics)。比如面向網站主的站點分析、面向廣告主的廣告報表,併發通常要求成千上萬的 QPS ,查詢延時要求毫秒級響應。著名的電商公司京東在廣告報表中使用 Apache Doris ,每天寫入 100 億行數據,查詢併發 QPS 上萬,99 分位的查詢延時 150ms。
  • 即席查詢(Ad-hoc Query):面向分析師的自助分析,查詢模式不固定,要求較高的吞吐。小米公司基於 Doris 構建了增長分析平臺(Growing Analytics,GA),利用用戶行為數據對業務進行增長分析,平均查詢延時 10s,95 分位的查詢延時 30s 以內,每天的 SQL 查詢量為數萬條。

  • 統一數倉構建 :一個平臺滿足統一的數據倉庫建設需求,簡化繁瑣的大數據軟體棧。海底撈基於 Doris 構建的統一數倉,替換了原來由 Spark、Hive、Kudu、Hbase、Phoenix 組成的舊架構,架構大大簡化。

  • 數據湖聯邦查詢:通過外表的方式聯邦分析位於 Hive、Iceberg、Hudi 中的數據,在避免數據拷貝的前提下,查詢性能大幅提升。

架構概述

Doris整體架構如下圖所示,Doris 架構非常簡單,只有兩類進程

  • Frontend(FE), 主要負責用戶請求的接入、查詢解析規劃、元數據的管理、節點管理、生成查詢計劃相關工作。
  • Backend(BE), 主要負責數據存儲、查詢計劃的執行。

這兩類進程都是可以橫向擴展的,單集群可以支持到數百台機器,數十 PB 的存儲容量。並且這兩類進程通過一致性協議來保證服務的高可用和數據的高可靠。這種高度集成的架構設計極大的降低了一款分散式系統的運維成本。

FE主要分為三個角色:Leader、Follower、Observer及其作用:

  • leader, follower: 在Leader宕機之後,Follower節點能夠迅速代替Leader的工作,能夠實現實時恢復元數據,從而保證對Doris集群不造成任何影響;leader負責數據的寫入.
  • observer: 用來拓展查詢節點, 僅從leader節點同步元數據, Observer只參與讀取,不參與寫入

類似Zookeeper中的節點角色及其職責。

2.png

使用介面方面,Doris 採用 MySQL 協議,高度相容 MySQL 語法,支持標準 SQL,用戶可以通過各類客戶端工具來訪問 Doris,並支持與 BI 工具的無縫對接。Doris 當前支持多種主流的 BI 產品,包括不限於 SmartBI、DataEase、FineBI、Tableau、Power BI、SuperSet 等,只要支持 MySQL 協議的 BI 工具,Doris 就可以作為數據源提供查詢支持。

存儲引擎方面,Doris 採用列式存儲,按列進行數據的編碼壓縮和讀取,能夠實現極高的壓縮比,同時減少大量非相關數據的掃描,從而更加有效利用 IO 和 CPU 資源。

列式存儲(column-based) 是相對於傳統關係型資料庫的行式存儲(Row-basedstorage)來說的。簡單來說兩者的區別就是如何組織表:
3.png

Doris 也支持比較豐富的索引結構,來減少數據的掃描:

  • Sorted Compound Key Index,可以最多指定三個列組成複合排序鍵,通過該索引,能夠有效進行數據裁剪,從而能夠更好支持高併發的報表場景
  • Min/Max :有效過濾數值類型的等值和範圍查詢
  • Bloom Filter :對高基數列的等值過濾裁剪非常有效
  • Invert Index :能夠對任意欄位實現快速檢索

在存儲模型方面,Doris 支持多種存儲模型,針對不同的場景做了針對性的優化:

  • Aggregate Key 模型:相同 Key 的 Value 列合併,通過提前聚合大幅提升性能
  • Unique Key 模型:Key 唯一,相同 Key 的數據覆蓋,實現行級別數據更新
  • Duplicate Key 模型:明細數據模型,滿足事實表的明細存儲

Doris 也支持強一致的物化視圖,物化視圖的更新和選擇都在系統內自動進行,不需要用戶手動選擇,從而大幅減少了物化視圖維護的代價。

在查詢引擎方面,Doris 採用 MPP 的模型,節點間和節點內都並行執行,也支持多個大表的分散式 Shuffle Join,從而能夠更好應對複雜查詢。

4.png


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 文章記錄了作者曲折的探索過程,最終成功將AMD cpu的Thinkbook 14p筆記本電腦從21h2版本更新到了23h2版本,而且系統的應用配置和數據基本沒變。 ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是IAR下手動拷貝自定義程式段到RAM中執行的方法。 在痞子衡舊文 《IAR下RT-Thread工程自定義函數段重定向失效分析》 里,我們知道 IAR 鏈接器處理自定義程式段重定向是有一些限制的,只要用戶重寫了底層 __low_level ...
  • Data Defination Language,數據定義語言。這類 SQL 語句用於定義或修改資料庫結構。主要的 DDL 操作包括 CREATE(創建新表或資料庫)、ALTER(修改現有資料庫對象的結構)和 DROP(刪除表、視圖或其他資料庫對象)。 表操作 創建表 CREATE TABLE 創建 ...
  • Data Manipulation Language 數據操縱語言,用於數據的增加、刪除、更新等操作。包括 INSERT(向表中插入新數據)、UPDATE(修改表中的數據)和 DELETE(從表中刪除數據)。 插入數據 INSERT 插入一行數據 插入數據的時候,不指定列名直接使用 VALUES指定 ...
  • Linux常用命令記錄 文件與目錄管理命令 Linux的文件目錄是樹狀結構,最頂級的目錄為根目錄/,其他目錄是通過掛載將其添加到文件樹上,通過解除掛載將其移除。 首先先瞭解什麼是絕對路徑和相對路徑 絕對路徑:從根目錄開始的完整路徑描述,通常以 / 開頭,從根目錄root一直到目標目錄 相對路徑:相對 ...
  • 關於Anolis8/Centos8系統重啟後ip地址丟失的原因 #、今天把之前在VMware安裝的Anolis8系統重啟了,啟動之後發現Xshell連接不上。在VMware上登錄後執行ip a命令發現ip地址不見了 #、我的網卡配置信息如下: [[email protected] ~]# cat /etc ...
  • SQL NULL 值 什麼是 NULL 值? NULL 值是指欄位沒有值的情況。如果表中的欄位是可選的,那麼可以插入新記錄或更新記錄而不向該欄位添加值。此時,該欄位將保存為 NULL 值。需要註意的是,NULL 值與零值或包含空格的欄位不同。具有 NULL 值的欄位是在記錄創建期間留空的欄位。 如何 ...
  • 一條 SQL 查詢語句結構如下: SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY < ...
一周排行
    -Advertisement-
    Play Games
  • 下麵是一個標準的IDistributedCache用例: public class SomeService(IDistributedCache cache) { public async Task<SomeInformation> GetSomeInformationAsync (string na ...
  • 這個庫提供了在啟動期間實例化已註冊的單例,而不是在首次使用它時實例化。 單例通常在首次使用時創建,這可能會導致響應傳入請求的延遲高於平時。在註冊時創建實例有助於防止第一次Request請求的SLA 以往我們要在註冊的時候實例單例可能會這樣寫: //註冊: services.AddSingleton< ...
  • 最近公司的很多項目都要改單點登錄了,不過大部分都還沒敲定,目前立刻要做的就只有一個比較老的項目 先改一個試試手,主要目標就是最短最快實現功能 首先因為要保留原登錄方式,所以頁面上的改動就是在原來登錄頁面下加一個SSO登錄入口 用超鏈接寫的入口,頁面改造後如下圖: 其中超鏈接的 href="Staff ...
  • Like運算符很好用,特別是它所提供的其中*、?這兩種通配符,在Windows文件系統和各類項目中運用非常廣泛。 但Like運算符僅在VB中支持,在C#中,如何實現呢? 以下是關於LikeString的四種實現方式,其中第四種為Regex正則表達式實現,且在.NET Standard 2.0及以上平... ...
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他們的程式記憶體會偶發性暴漲,自己分析了下是非托管記憶體問題,讓我幫忙看下怎麼回事?哈哈,看到這個dump我還是非常有興趣的,居然還有這種游戲幣自助機類型的程式,下次去大玩家看看他們出幣的機器後端是不是C#寫的?由於dump是linux上的程式,剛好win ...
  • 前言 大家好,我是老馬。很高興遇到你。 我們為 java 開發者實現了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何處理的,可以參考我的另一個項目: 手寫從零實現簡易版 tomcat minicat 手寫 ngin ...
  • 上一次的介紹,主要圍繞如何統一去捕獲異常,以及為每一種異常添加自己的Mapper實現,並且我們知道,當在ExceptionMapper中返回非200的Response,不支持application/json的響應類型,而是寫死的text/plain類型。 Filter為二方包異常手動捕獲 參考:ht ...
  • 大家好,我是R哥。 今天分享一個爽飛了的面試輔導 case: 這個杭州兄弟空窗期 1 個月+,面試了 6 家公司 0 Offer,不知道問題出在哪,難道是杭州的 IT 崩盤了麽? 報名面試輔導後,經過一個多月的輔導打磨,現在成功入職某上市公司,漲薪 30%+,955 工作制,不咋加班,還不捲。 其他 ...
  • 引入依賴 <!--Freemarker wls--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.30</version> </dependency> ...
  • 你應如何運行程式 互動式命令模式 開始一個互動式會話 一般是在操作系統命令行下輸入python,且不帶任何參數 系統路徑 如果沒有設置系統的PATH環境變數來包括Python的安裝路徑,可能需要機器上Python可執行文件的完整路徑來代替python 運行的位置:代碼位置 不要輸入的內容:提示符和註 ...