新一代實時數(shù)倉:阿里云數(shù)據(jù)庫 SelectDB 版--100% 兼容 Apache Doris 的全托管云原生實時數(shù)倉
阿里云數(shù)據(jù)庫 SelectDB 版是 100% 兼容 Apache Doris 的云原生數(shù)倉產(chǎn)品,具有存算分離和實時彈性的核心優(yōu)勢。同時提供離線及實時流式數(shù)據(jù)同步鏈路;實時更新和萬級 QPS 高并發(fā)點查特性。提供基于倒排的文本檢索和日志分析能力,同時支持基于 Multi-Catalog 的湖倉一體方案和開放的生態(tài)產(chǎn)品協(xié)同能力。本文將介紹 SelectDB 產(chǎn)品能力及其所支持的場景,為數(shù)倉選型提供參考和借鑒。
一、阿里云 SelectDB 產(chǎn)品產(chǎn)生背景
1. Apache Doris 是全球流行的開源實時數(shù)倉產(chǎn)品

SelectDB 是基于 Apache Doris 提供的一個商業(yè)化的云原生產(chǎn)品。Apache Doris 是一款國產(chǎn)的開源數(shù)據(jù)庫,專注于實時數(shù)倉領(lǐng)域。該項目始于 2013 年,并于 2022 年在 Apache 基金會的支持下成為頂級項目。經(jīng)過將近 10 年的演進,Apache Doris 的內(nèi)核已經(jīng)非常穩(wěn)定和成熟。現(xiàn)在,該項目在社區(qū)中的關(guān)注度和活躍度都非常高。
2. Apache Doris 被 4000+ 國內(nèi)外企業(yè)生產(chǎn)系統(tǒng)使用

目前,在國內(nèi)外使用 Apache Doris 的企業(yè)范圍非常廣泛,遍布各個行業(yè),包括一些行業(yè)的頭部企業(yè)。其成熟度毋庸置疑,已經(jīng)在客戶業(yè)務(wù)中得到了廣泛驗證。
二、SelectDB 核心能力
SelectDB 是在 Doris 基礎(chǔ)上孵化出來的一個商業(yè)化的實時數(shù)倉,在 Doris 上做了云原生改造,并在阿里云上提供托管服務(wù)。接下來將從用戶使用實時數(shù)倉的整個鏈路,展示 SelectDB 在各個環(huán)節(jié)上的產(chǎn)品能力的匹配。
1. 全面數(shù)據(jù)導(dǎo)入及同步鏈路

首先來看數(shù)據(jù)導(dǎo)入層面。對于數(shù)倉產(chǎn)品來說,客戶最先面臨的問題就是如何將數(shù)據(jù)同步到數(shù)倉中,以便向上層業(yè)務(wù)提供數(shù)據(jù)服務(wù),包括實時分析等業(yè)務(wù)構(gòu)建。在這一層面,SelectDB 是基于 Apache Doris 的,因此具有良好的開放性和生態(tài)兼容性。它支持各種數(shù)據(jù)源,包括流式和批量的大數(shù)據(jù)鏈路加速導(dǎo)入。
SelectDB 支持的數(shù)據(jù)類型和數(shù)據(jù)源非常豐富,如 CSV、MySQL、SQLServer、Oracle 等數(shù)據(jù)源,能夠進行數(shù)據(jù)類型的轉(zhuǎn)換和導(dǎo)入。對于流式數(shù)據(jù),SelectDB 與 Flink、Kafka 等常見鏈路有完善的對接方式;對于大數(shù)據(jù)體系如 hive,Hadoop,MC 等,SelectDB 支持通過 DataWorks 和 DataX 等平臺及工具,進行批量離線數(shù)據(jù)的導(dǎo)入。
此外,對于數(shù)據(jù)湖的數(shù)據(jù),為了進行數(shù)據(jù)湖的聯(lián)邦查詢和湖倉統(tǒng)一管理,SelectDB 與 Iceberg、Hudi 有良好的兼容性。這使得在數(shù)據(jù)湖層面可以進行很好的數(shù)據(jù)分析,在業(yè)務(wù)層面可以通過統(tǒng)一的 SelectDB 訪問層向上層業(yè)務(wù)提供數(shù)據(jù)湖和數(shù)倉的統(tǒng)一服務(wù)接口。
總而言之,SelectDB 在流式數(shù)據(jù)、離線數(shù)據(jù)和數(shù)據(jù)湖數(shù)據(jù)方面,提供了全面的技術(shù)對接,可以幫助我們便捷地將數(shù)據(jù)導(dǎo)入數(shù)倉,解決了數(shù)據(jù)入倉這一首要問題。
2. 高吞吐數(shù)據(jù)寫入及實時更新

在數(shù)據(jù)入倉以后,我們面臨的第二個問題是數(shù)據(jù)可能會需要進行更新。數(shù)據(jù)進入數(shù)據(jù)倉庫以后,例如訂單、物流等實時業(yè)務(wù)的數(shù)據(jù)需要進行實時狀態(tài)更新。SelectDB 針對不同場景提供了不同的數(shù)據(jù)實時更新能力:
- 對于 TP 庫的數(shù)據(jù),分析時業(yè)務(wù)對數(shù)據(jù)的唯一性要求比較高,SelectDB 提供了主鍵(Unique)模型,可以保證數(shù)據(jù)從 TP 到數(shù)倉中的數(shù)據(jù)一致性,支持全列和部分列的更新。同時基于業(yè)務(wù)場景,提供了兩種更新方式:
MoR (Merge On Read):這種方式適用于人群畫像標(biāo)簽導(dǎo)入等涉及低頻、大批量數(shù)據(jù)更新的場景。人群畫像有很多標(biāo)簽,離線標(biāo)簽通過 T+1 或小時級別的計算進行批量導(dǎo)入。MOR 方式下,數(shù)據(jù)能夠以更大的吞吐量批量寫入,吞吐量可達 100 萬每秒。
MoW (Merge On Write):適用于實時分析場景,極致的時效性和實時性要求。如訂單狀態(tài)變更,需要進行實時更新。這種方式面向高頻、小批量更新,在數(shù)據(jù)進倉時同步更新原有數(shù)據(jù),消耗更多 IO 資源,對 IOPS 要求較高。這種模式下,數(shù)據(jù)寫入過程中事務(wù)性保證完成一致性處理,查詢時直接獲取一致性的數(shù)據(jù)結(jié)果,減少查詢時數(shù)據(jù)一致性處理,查詢性能相比批量導(dǎo)入方式可提升 5-10 倍。 - 對于聚合場景,提供了 Agg 聚合引擎類型。此類業(yè)務(wù)查詢多是進行聚合結(jié)算結(jié)果的查詢。如用戶積分的寫入和更新,新增積分記錄會進行存量和新增計費的聚合計算。那么基于聚合引擎和聚合函數(shù)就可以完成增量寫入過程的的聚合更新。對于聚合表引擎中進行替換更新的列,也支持通過 replace_if_not_null 方式實現(xiàn)部分列的更新操作。
3. 毫秒級實時查詢能力

接下來將討論衡量 OLAP 實時數(shù)倉的一個核心指標(biāo),即實時查詢能力,這里看主要分析場景來進行說明。
首先是寬表分析場景,通常涉及到人群畫像和 BI 等場景,數(shù)據(jù)在 ETL 清洗和處理之后形成一張大寬表,對外提供服務(wù)。這里主要關(guān)注的是單表分析的性能,業(yè)界常用的衡量標(biāo)準(zhǔn)之一是 ClickBench 測試。在最新的 ClickBench 測試中,SelectDB 榮登榜首。這充分證明了 SelectDB 在寬表分析場景下的數(shù)據(jù)分析性能處于在業(yè)界領(lǐng)先位置。
4. 萬級 QPS 高并發(fā)點查能力

另外一種場景是數(shù)據(jù)詳情的查詢。比如 Trace 的場景,日志進到數(shù)倉以后,查詢某個用戶具體的行為軌跡,這就需要根據(jù) QueryID 或者 UID 進行精準(zhǔn)匹配查詢。又如用戶畫像的數(shù)據(jù),經(jīng)過 ETL 清洗后,可以在數(shù)倉中提供一些人群畫像的查詢分析,但如果要獲取某個具體用戶的標(biāo)簽,就需要根據(jù)用戶 ID 去查詢對應(yīng)的標(biāo)簽列,這些情況就是一個點查的詳情查詢。數(shù)據(jù)在 OLAP 中默認是列存排序,基于排序結(jié)果進行數(shù)據(jù)塊存儲。當(dāng)進行離散的精準(zhǔn) ID 匹配查詢時,每次查詢命中的數(shù)據(jù)結(jié)果需要在多個數(shù)據(jù)塊中進行大量的 IO 檢索,引起 IO 放大,會明顯影響查詢性能,因此在默認列存模式下,效率是比較低的。
SelectDB 的解決方案是提供行存和列存混合存儲的方式,在具體業(yè)務(wù)場景中只需開啟行存模式,通過冗余方式行列同時存儲并創(chuàng)建索引,提升點查性能。這樣在 Data serving 場景下,數(shù)倉可以直接對外提供高并發(fā)的點查服務(wù)?;跍y試結(jié)果,在 1 億條記錄規(guī)模下,用 48 核 BE 資源測試可以支持萬級別的點查 QPS,滿足了大部分業(yè)務(wù)場景的高并發(fā)查詢需求。
5. 高性價比日志分析方案

日志分析是 OLAP 中的一個通用情景。傳統(tǒng)用戶日志分析使用 Elasticsearch 這種日志檢索引擎的較多。但由于 ES 的寫入過程索引構(gòu)建成本高,以及大量依賴內(nèi)存來支持請求加速,大數(shù)據(jù)規(guī)模下資源用量高且容易發(fā)生 OOM,且壓縮率較低,造成存儲成本高,整體性價比不是很高。
SelectDB 提供了倒排索引的能力,允許對文本列進行分詞,并在其上創(chuàng)建倒排索引,從而支持關(guān)鍵字的模糊匹配和全文檢索。同時對于非文本列,如 Decimal 或 Int 類型的數(shù)據(jù),同樣可以加速查詢,特別是針對非排序列的 Ad-Hoc 查詢場景。通過這種方式,SelectDB 在日志分析中能夠顯著提升寫入和查詢效率,同時降低資源消耗,有效解決了以往 Elasticsearch 在性能上的瓶頸問題,整體性價比是 ES 的 10 倍以上。
6. 多租戶管理和資源隔離

除了完整的數(shù)據(jù)導(dǎo)入和點查服務(wù),包括聚合分析、日志分析和全文檢索等能力,針對具有高合規(guī)性要求的金融客戶,為滿足其數(shù)據(jù)安全和權(quán)限管理方面的特殊需求,SelectDB 提供了兼容 MySQL 協(xié)議賬號和數(shù)據(jù)訪問安全認證體系,確??梢詫崿F(xiàn)細粒度的資源權(quán)限控制,支持庫級、行級和列級角色授權(quán)及數(shù)據(jù)權(quán)限管理。
在數(shù)據(jù)傳輸層面,支持 SSL/TLS 安全加密傳輸,全面保障數(shù)據(jù)存儲和訪問安全。在內(nèi)核層面,實現(xiàn)了基于用戶角色的資源隔離和權(quán)限限制,有效防止了單一用戶或角色在多用戶使用集群中對資源的過度使用,從而確保了整個集群的穩(wěn)定性和實例的資源限制,為合規(guī)性和數(shù)據(jù)安全性提供了全方位保障。
7. 基于 Multi-Catalog 的湖倉一體能力

另外,Lakehouse 成為當(dāng)前大數(shù)據(jù)處理的一種流行方式之一?;?Lakehouse 的方案可以減少數(shù)據(jù)冗余成本,同時提供一體化的處理處理能力。SelectDB 提供了基于 Multi-Catalog 的湖倉一體能力,可以為各種數(shù)據(jù)湖和對象存儲的數(shù)據(jù)提供統(tǒng)一管理,實現(xiàn)了實時的元數(shù)據(jù)結(jié)構(gòu)同步,從而在整個 SelectDB 平臺上實現(xiàn)了統(tǒng)一的邏輯層面的數(shù)據(jù)管理。在引擎層面,實現(xiàn)了數(shù)據(jù)湖查詢的加速處理和數(shù)據(jù)緩存,利用引擎本身的加速能力優(yōu)化數(shù)據(jù)湖的查詢。同時,通過聯(lián)邦查詢的能力,可以將數(shù)據(jù)湖的數(shù)據(jù)導(dǎo)入到 SelectDB 本地存儲引擎上,以加速實時數(shù)據(jù)分析。這樣,通過 SelectDB 統(tǒng)一的 API 接口,業(yè)務(wù)可以輕松訪問數(shù)據(jù)湖和實時數(shù)倉,整個技術(shù)棧更加統(tǒng)一,業(yè)務(wù)開發(fā)難度大大降低。
三、SelectDB 云原生特性

SelectDB 的云原生特性主要體現(xiàn)在四個方面:
- 存算分離:即存儲和計算可以獨立擴展,實現(xiàn)了資源解耦。
- 實時彈性:資源彈性調(diào)整完全實時,無需停機或大量數(shù)據(jù)遷移。
- 多計算負載隔離:讀寫分離,確保不同業(yè)務(wù)在共享存儲后能進行物理隔離。
- 數(shù)據(jù)共享:在多集群環(huán)境下實現(xiàn)了數(shù)據(jù)在隔離的同時保持一致性。
接下來將詳細分析 SelectDB 在這四個方面的具體實現(xiàn)。
1. 存算分離,獨立擴容

SelectDB 整體架構(gòu)劃分為三個層次。首先,我們將計算層拆分為兩部分:第一部分是純粹的計算引擎,另一部分則是在計算引擎層面引入了本地盤,這部分曾在 MPP 架構(gòu)下用于全量數(shù)據(jù)存儲,現(xiàn)在則退化為緩存作用,利用云盤等進行數(shù)據(jù)緩存。這兩部分構(gòu)成了計算層的資源,即區(qū)分了純計算能力與緩存能力。而原先在 MPP 架構(gòu)下全量數(shù)據(jù)存儲層的數(shù)據(jù),現(xiàn)在則放置于基于阿里云 OSS 對象存儲構(gòu)建的共享數(shù)據(jù)存儲層。通過這種架構(gòu)實現(xiàn)了存儲和計算的分離。中間的 Cache 用于加速讀寫操作。
這種架構(gòu)相比于 MPP 架構(gòu)帶來了明顯的優(yōu)勢,特別是對于 Doris、StarRocks 相關(guān)技術(shù)體系,在以前的架構(gòu)中,數(shù)據(jù)高可用性主要通過副本實現(xiàn),每份數(shù)據(jù)需要在多個節(jié)點上存儲多個副本以保證服務(wù)的連續(xù)性和可靠性。而現(xiàn)在,在云原生存算分離架構(gòu)下,數(shù)據(jù)的全量存儲轉(zhuǎn)移到了基于阿里云的 OSS 對象存儲的共享存儲上,而阿里云 OSS 對象存儲本身就具備容災(zāi)備份的能力,所以在數(shù)據(jù)庫引擎層面,數(shù)據(jù)只需存儲一份副本即可,其可靠性完全依賴于存儲介質(zhì)本身。這樣對存儲資源的使用量就減少到了之前的三分之一。
考慮到緩存也會占用一部分存儲資源,所以我們根據(jù)業(yè)務(wù)需求設(shè)置了緩存命中率,建議從 10% 起步逐步調(diào)整緩存分配比例。如果數(shù)據(jù)分布比較離散,完全可以最大程度地利用整個 Cache 的容量,使其與共享存儲所占比例持平。這樣做的好處是,一方面可以通過共享存儲保證數(shù)據(jù)的持久可靠性,同時還可以通過 Cache 加速讀寫能力。即使在這種情況下,我們整體數(shù)據(jù)的副本數(shù)量最多只需做到兩副本,相比之前的三副本存儲方式可以減少三分之一的存儲用量,同時 OSS 的單位存儲成本也更具優(yōu)勢。
2. 實時彈性

通過云原生的方式解決了存算分離的問題,使得計算層和存儲層能夠獨立擴展。當(dāng)需要擴展計算層時,不再需要進行數(shù)據(jù)的 Reshard 或 Rebalance 操作。相比于傳統(tǒng)的 MPP 架構(gòu),SelectDB 水平擴展僅進行元數(shù)據(jù)刷新和主動緩存加載即可完成擴容,不需要復(fù)雜的數(shù)據(jù)遷移過程。因此整體的擴容效率不依賴數(shù)據(jù)量,可以實時完成擴容。存儲層采用 serverless 方式,根據(jù)需求靈活使用,業(yè)務(wù)完全不感知其擴容和縮容的過程。
單副本寫&讀寫 Cache 加速性能

在數(shù)據(jù)存儲和查詢過程中,緩存起著至關(guān)重要的作用。SelectDB 通過在計算層添加緩存來加速讀寫操作。具體而言,數(shù)據(jù)寫入過程中,首先緩存至存儲介質(zhì),同時也寫入到 OSS 上,確保在緩存和持久化層都有最新寫入的熱數(shù)據(jù),以便查詢時能夠迅速獲取最新結(jié)果,保證查詢性能。
在緩存數(shù)據(jù)淘汰策略上,SelectDB 采用兩級緩存淘汰策略:
第一級基于 TTL 策略,定義數(shù)據(jù)生命周期以防止數(shù)據(jù)在緩存期間被清除;
第二級策略則根據(jù)訪問熱度使用 LRU 算法,優(yōu)先保留高頻訪問熱數(shù)據(jù),從而在保證數(shù)據(jù)存儲效率的同時,有效提升系統(tǒng)查詢性能。
在性能消耗方面,相較于傳統(tǒng)的 MPP 架構(gòu),云原生模式下單副本的模式,寫入數(shù)據(jù)處理量減少了 2/3,顯著減少了 CPU 資源的消耗。數(shù)據(jù)的批量寫入和 CPU 計算能力的高效利用,使得整體寫入效率明顯提升,同時保持了數(shù)據(jù)存儲的可靠性和查詢的實時性,從而在大數(shù)據(jù)處理場景下表現(xiàn)出色。
3. 單實例多計算組資源隔離

另外,SelectDB 提供了單實例多計算資源隔離的能力,主要是為了滿足多業(yè)務(wù)隔離需求。通過業(yè)務(wù)訪問隔離和讀寫分離的設(shè)置,確保了高業(yè)務(wù)負載情況下數(shù)據(jù)資源的完全隔離,從而保證了數(shù)據(jù)導(dǎo)入和查詢過程中不會出現(xiàn)業(yè)務(wù)相互干擾的情況。
具體做法是在計算層面實現(xiàn)邏輯計算資源的隔離,邏輯資源對應(yīng)的物理資源也是完全獨立的。這樣從用戶角度來看是不同的計算集群,還基于容器化技術(shù)實現(xiàn)了集群的快速部署和釋放,有效地保證了強隔離。再結(jié)合 Doris 內(nèi)核在用戶級別提供的軟負載的隔離,可以滿足不同級別的隔離需求。
四、SelectDB 開放生態(tài)和產(chǎn)品協(xié)同

在數(shù)倉選型過程中,還需要考慮產(chǎn)品的生態(tài)開放性。SelectDB 作為一個基于 Apache Doris 的云原生商業(yè)化改造產(chǎn)品,本身就是基于 Apache Doris 內(nèi)核構(gòu)建的,因此協(xié)議上完全兼容 Apache Doris,避免了技術(shù)綁定帶來的困擾。SelectDB 提供的是開放的生態(tài)系統(tǒng),允許客戶從 Doris 或 StarRocks 技術(shù)棧無縫切換到 SelectDB,幾乎沒有切換成本。
SelectDB 兼容 MySQL 協(xié)議,這也意味著開發(fā)成本較低。它采用標(biāo)準(zhǔn)的 MySQL 語法,允許使用 MySQL 客戶端工具(如 Navicat、DBeaver)直接對接,開發(fā)者可以按照標(biāo)準(zhǔn)的 MySQL 開發(fā)模式進行 SelectDB 開發(fā)工作。
SelectDB 作為一個開放的生態(tài)系統(tǒng),與 MySQL 以及 Flink、Kafka 等大數(shù)據(jù)技術(shù)棧的兼容性良好,涵蓋了離線批處理和實時數(shù)據(jù)流的接入。并且在云端實現(xiàn)了與整個云生態(tài)系統(tǒng)的緊密銜接,通過云控制臺進行操作,可以顯著減少生態(tài)鏈路構(gòu)建及運維的成本。
此外,SelectDB 支持從 RDS 和 PolarDB、MySQL 等技術(shù)棧實時導(dǎo)入數(shù)據(jù),并計劃在未來推出 Zero-ETL 服務(wù),同時支持與阿里云上下游其他數(shù)據(jù)庫產(chǎn)品的無縫流轉(zhuǎn),進一步優(yōu)化數(shù)據(jù)流動,實現(xiàn)價值放大。對于大數(shù)據(jù)工具,在云上也提供了良好的對接和支持。
以上就是 SelectDB 在數(shù)據(jù)引入、更新、分析能力、成本和彈性擴容等各方面所提供的核心能力。

目前,我們提供了一個包含 8 核集群和相應(yīng)存儲資源的優(yōu)惠套餐,感興趣可以掃描上圖中的二維碼進行體驗。


































