聊聊分散式 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
  • 當使用Autofac處理一個介面有多個實現的情況時,通常會使用鍵(key)進行區分或者通過IIndex索引註入,也可以通過IEnumerable集合獲取所有實例,以下是一個具體的例子,演示如何在Autofac中註冊多個實現,並通過構造函數註入獲取指定實現。 首先,確保你已經安裝了Autofac Nu ...
  • 本篇將分享Prometheus+Grafana的監控平臺搭建,並監控之前文章所搭建的主機&服務,分享日常使用的一些使用經驗本篇將配置常用服務的監控與面板配置:包括 MySQL,MongoDB,CLickHouse,Redis,RabbitMQ,Linux,Windows,Nginx,站點訪問監控,已... ...
  • 使用Aspirate可以將Aspire程式部署到Kubernetes 集群 工具安裝 dotnet tool install -g aspirate --prerelease 註意:Aspirate 正在開發中,該軟體包將作為預覽版進行版本控制,--prelease 選項將獲得最新的預覽版。 容器註 ...
  • 前言 本文要說的這種開發模式,這種模式並不是只有blazor支持,js中有一樣的方案next.js nuxt.js;blazor還有很多其它內容,本文近關註漸進式開發模式。 是的,前後端是主流,不過以下情況也許前後端分離並不是最好的選擇: 小公司,人員不多,利潤不高,創業階段能省則省 個人開發者,接 ...
  • 在.NET中,Microsoft.Extensions.Logging是一個靈活的日誌庫,它允許你將日誌信息記錄到各種不同的目標,包括資料庫。在這個示例中,我將詳細介紹如何使用Microsoft.Extensions.Logging將日誌保存到MySQL資料庫。我們將使用Entity Framewo ...
  • chatgpt介面開發筆記3: 語音識別介面 1.文本轉語音 1、瞭解介面參數 介面地址: POST https://api.openai.com/v1/audio/speech 下麵是介面文檔描述內容: 參數: { "model": "tts-1", "input": "你好,我是饒坤,我是ter ...
  • 前面兩篇文章主要是介紹瞭如何解決高併發情況下資源爭奪的問題。但是現實的應用場景中除了要解決資源爭奪問題,高併發的情況還需要解決更多問題,比如快速處理業務數據等, 本篇文章簡要羅列一下與之相關的更多技術細節。 1、非同步編程:使用async和await關鍵字進行非同步編程,這可以避免阻塞線程,提高程式的響 ...
  • 大家好,我是棧長。 Nacos 2.3.0 前幾天正式發佈了,新增了不少實用性的新功能,真是史上最強版本。 Nacos 2.3.0 還真是一個比較重要的大版本,因為它涉及了太多重大更新,今天棧長給大家來解讀下。 Nacos 先掃個盲: Nacos 一個用於構建雲原生應用的動態服務發現、配置管理和服務 ...
  • IDEA的遠程開發功能,可以將本地的編譯、構建、調試、運行等工作都放在遠程伺服器上執行,而本地僅運行客戶端軟體進行常規的開發操作即可,舊版本IDEA目前不支持該功能.,本例使用的是IDEA2023.2.5版本 下麵介紹如何在IDEA中設置遠程連接伺服器開發環境並結合Cpolar內網穿透工具實現無公網 ...
  • 本文解釋為啥會有響應式編程,為什麼它在開發者中不太受歡迎,以及引入 Java 虛擬線程後它可能最終會消失。 命令式風格編程一直深受開發者喜愛,如 if-then-else、while 迴圈、函數和代碼塊等結構使代碼易理解、調試,異常易追蹤。然而,像所有好的東西一樣,通常也有問題。這種編程風格導致線程 ...