聊聊分散式 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
  • 最近做項目過程中,使用到了海康相機,官方只提供了C/C++的SDK,沒有搜尋到一個合適的封裝了的C#庫,故自己動手,簡單的封裝了一下,方便大家也方便自己使用和二次開發 ...
  • 前言 MediatR 是 .NET 下的一個實現消息傳遞的庫,輕量級、簡潔高效,用於實現進程內的消息傳遞機制。它基於中介者設計模式,支持請求/響應、命令、查詢、通知和事件等多種消息傳遞模式。通過泛型支持,MediatR 可以智能地調度不同類型的消息,非常適合用於領域事件處理。 在本文中,將通過一個簡 ...
  • 前言 今天給大家推薦一個超實用的開源項目《.NET 7 + Vue 許可權管理系統 小白快速上手》,DncZeus的願景就是做一個.NET 領域小白也能上手的簡易、通用的後臺許可權管理模板系統基礎框架。 不管你是技術小白還是技術大佬或者是不懂前端Vue 的新手,這個項目可以快速上手讓我們從0到1,搭建自 ...
  • 第1章:WPF概述 本章目標 瞭解Windows圖形演化 瞭解WPF高級API 瞭解解析度無關性概念 瞭解WPF體繫結構 瞭解WPF 4.5 WPF概述 ​ 歡迎使用 Windows Presentation Foundation (WPF) 桌面指南,這是一個與解析度無關的 UI 框架,使用基於矢 ...
  • 在日常開發中,並不是所有的功能都是用戶可見的,還在一些背後默默支持的程式,這些程式通常以服務的形式出現,統稱為輔助角色服務。今天以一個簡單的小例子,簡述基於.NET開發輔助角色服務的相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 第3章:佈局 本章目標 理解佈局的原則 理解佈局的過程 理解佈局的容器 掌握各類佈局容器的運用 理解 WPF 中的佈局 WPF 佈局原則 ​ WPF 視窗只能包含單個元素。為在WPF 視窗中放置多個元素並創建更貼近實用的用戶男面,需要在視窗上放置一個容器,然後在這個容器中添加其他元素。造成這一限制的 ...
  • 前言 在平時項目開發中,定時任務調度是一項重要的功能,廣泛應用於後臺作業、計劃任務和自動化腳本等模塊。 FreeScheduler 是一款輕量級且功能強大的定時任務調度庫,它支持臨時的延時任務和重覆迴圈任務(可持久化),能夠按秒、每天/每周/每月固定時間或自定義間隔執行(CRON 表達式)。 此外 ...
  • 目錄Blazor 組件基礎路由導航參數組件參數路由參數生命周期事件狀態更改組件事件 Blazor 組件 基礎 新建一個項目命名為 MyComponents ,項目模板的交互類型選 Auto ,其它保持預設選項: 客戶端組件 (Auto/WebAssembly): 最終解決方案裡面會有兩個項目:伺服器 ...
  • 先看一下效果吧: isChecked = false 的時候的效果 isChecked = true 的時候的效果 然後我們來實現一下這個效果吧 第一步:創建一個空的wpf項目; 第二步:在項目裡面添加一個checkbox <Grid> <CheckBox HorizontalAlignment=" ...
  • 在編寫上位機軟體時,需要經常處理命令拼接與其他設備進行通信,通常對不同的命令封裝成不同的方法,擴展稍許麻煩。 本次擬以特性方式實現,以兼顧維護性與擴展性。 思想: 一種命令對應一個類,其類中的各個屬性對應各個命令段,通過特性的方式,實現其在這包數據命令中的位置、大端或小端及其轉換為對應的目標類型; ...