博客 / 詳情

返回

Doris Catalog 已上線!性能提升 200x,全面優於 JDBC Catalog,跨集羣查詢邁入高性能分析時代

“統一”是 Apache Doris 長期以來秉持的設計理念之一。在這一理念指引下,構建完善的 Catalog 生態是實現異構數據源統一查詢分析的關鍵。目前,Doris 已支持 Iceberg、Paimon、Hudi 等數據湖 Catalog,以及 JDBC Catalog,用户無需遷移數據,即可對不同數據湖和傳統數據庫進行聯邦查詢分析。

本文聚焦 Doris 多集羣間的查詢分析。實現跨 Doris 集羣的分析通查需要通過 JDBC Catalog,但該方式存在明顯短板,比如協議開銷較大、無法複用 Doris 查詢優化策略、查詢性能受限等等。同時,隨着生產環境中多 Doris 集羣部署愈加普遍,跨集羣的數據聯動分析需求也日益增長。在這種情況下,JDBC Catalog 很難滿足用户的性能要求。

為此,Apache Doris 4.0.2 版本推出重磅特性:Doris Catalog。該功能專為跨 Doris 集羣聯邦分析設計,支持通過 Arrow Flight 和虛擬集羣兩種模式,進行更高效、更貼合原生優化的跨集羣查詢

特此説明:Doris Catalog 當前為實驗性特,歡迎大家體驗並反饋,我們將持續優化

Doris Catalog vs. JDBC Catalog

JDBC Catalog 主要藉助 MySQL 兼容的 JDBC 協議訪問其他 Doris 集羣數據。由前文可知,該方式在跨集羣大數據量交互時性能受限,難以滿足聯邦分析高吞吐與低延遲的性能要求。不同於 JDBC Catalog 的交互方式, Doris Catalog 通過 Arrow Flight 或虛擬集羣這兩種方式,能夠直接、高效的訪問其他 Doris 集羣,進行多集羣聯邦分析。

01 功能對比

那麼,與 JDBC Catalog 相比,Doris Catalog 到底具備哪些能力優勢呢?

01 功能對比.png

02 性能對比

為了更直觀地展示二者在實際查詢中的表現,我們基於跨集羣的 TPC-DS 查詢場景,對比了 Doris Catalog(兩種連接模式) 與 JDBC Catalog 的執行性能。以下是測試結果概要:

02 性能對比.png

結果顯示,在涉及聚合、Join 等複雜查詢場景下,Doris Catalog 相比 JDBC Catalog 展現出不同程度的性能優勢。其中,在單表聚合查詢場景下優勢尤為突出:Doris Catalog(虛擬集羣)的查詢耗時僅為 0.21 秒,相較於 JDBC Catalog,速度提升超過 200 倍

具體測試如下

  1. 在單表簡單查詢(直接查詢遠端集羣)模式下:Doris Catalog 與 JDBC Catalog 基本持平。
SELECT
    ss_sold_date_sk,
    ss_store_sk,
    ss_item_sk,
    ss_ticket_number,
    ss_quantity,
    ss_sales_price,
    ss_ext_sales_price,
    ss_net_profit
FROM jdbc_mode.tpcds100.store_sales
WHERE ss_sold_date_sk = 2450816
  AND ss_store_sk = 10
  AND ss_quantity BETWEEN 1 AND 3
LIMIT 100;

02 性能對比-1.png

  1. 在單表聚合查詢(直接查詢遠端集羣)模式下:Doris Catalog 兩種模式均優於 JDBC Catalog,Doris Catalog(虛擬集羣)的查詢耗時僅為 0.21 秒,相較於 JDBC Catalog,速度提升超過 200 倍
SELECT
    ss_sold_date_sk,
    ss_store_sk,
    SUM(ss_ext_sales_price) AS total_sales,
    SUM(ss_net_profit)      AS total_profit,
    COUNT(*)                AS txn_cnt
FROM tpcds100.store_sales
WHERE ss_sold_date_sk BETWEEN 2450816 AND 2451179
GROUP BY
    ss_sold_date_sk,
    ss_store_sk
ORDER BY
    ss_sold_date_sk,
    ss_store_sk
LIMIT 100;

02 性能對比-2.png

  1. 在多表關聯查詢(兩個大表分別存儲在本地和遠端集羣,進行關聯查詢)模式下:Doris Catalog 兩種模式均優於 JDBC Catalog,相較於 JDBC Catalog,速度提升約 42%
SELECT count(ss_item_sk), count(store_sales_amt), count(catalog_sales_amt) FROM
(
SELECT
    ss.ss_item_sk as ss_item_sk,
    SUM(ss.ss_ext_sales_price) AS store_sales_amt,
    SUM(cs.cs_ext_sales_price) AS catalog_sales_amt
FROM internal.tpcds100.store_sales ss
JOIN external.tpcds100.catalog_sales cs
    ON ss.ss_item_sk = cs.cs_item_sk
WHERE ss.ss_sold_date_sk BETWEEN 2450815 AND 2451079
  AND cs.cs_sold_date_sk BETWEEN 2450815 AND 2451079
GROUP BY ss.ss_item_sk) x;

02 性能對比-3.png

03 方案選擇

由上可知,不同的查詢場景中,需要選擇適合的的訪問模式,以獲取最佳的查詢性能:

  • 對於複雜 Join/Agg 查詢或依賴 Doris 內表優化特性時,優先選擇 Doris Catalog 虛擬集羣模式
  • 對於簡單單表查詢、UNION 查詢、遠端集羣規模大且無需複雜 Join 優化或 Doris 集羣版本不一致,優先選擇 Doris Catalog Arrow Flight 模式

Doris Catalog 核心設計

Doris Catalog 本質是跨集羣訪問的“中間代理”,核心職責包括

  • 元數據同步:通過 HTTP 協議從遠端 Doris 集羣 FE 拉取表結構、分區、副本、 Tablet 位置等元數據;
  • 執行計劃生成:根據訪問模式,將用户查詢轉換為適配遠端集羣的執行計劃;
  • 數據路由與傳輸:協調本地 BE 與遠端 BE 進行數據傳輸,支持並行拉取與分片處理;
  • 結果聚合:將遠端返回的數據聚合後,返回給用户或上層應用。

Doris Catalog 支持 Arrow Flight 和 虛擬集羣兩種訪問模式。在瞭解具體實現之前,先了解兩種模式的區別

 Doris Catalog 核心設計.png

01 Arrow Flight 模式

01 Arrow Flight 模式.png

該模式的工作流程如下(假設本地集羣為 ClusterA,遠端集羣為 ClusterB):

  • 查詢規劃:ClusterA 的 FE 節點先進行完整的查詢規劃,針對存儲在 ClusterB 中的表,生成 RemoteDorisScanNode節點。RemoteDorisScanNode 會生成一條應用謂詞下推規則後的單表查詢 SQL,通過 HTTP 協議向 ClusterB 的 FE 節點發送並執行這條 Arrow Flight SQL。
  • 查詢計劃執行:ClusterA 的 FE 節點將物理執行計劃發送給 ClusterA 的 BE 節點,並告知 BE 節點 Arrow Flight 的數據流獲取位置。
  • 數據查詢與傳輸:ClusterA 的 BE 節點的 Scan Node 通過 Arrow Flight 協議直接從 ClusterB 的 BE 節點獲取 Arrow Flight SQL 的執行結果。然後在 ClusterA 中執行 Join、Agg 等其他算子,並返回最終結果。

02 虛擬集羣模式

02 虛擬集羣模式.png

該模式的工作流程如下(假設本地集羣為 ClusterA,遠端集羣為 ClusterB):

  • 元數據同步:ClusterA 的 FE 節點通過 HTTP 協議同步 ClusterB 中完整的元數據,包括表結構、分區、副本、Tablet 位置等。
  • 查詢規劃:ClusterA 的 FE 節點將 ClusterB 的 BE 節點視為“虛擬 BE”,生成全局統一的執行計劃(與單集羣查詢邏輯一致)。
  • 查詢計劃執行:執行計劃會將 ClusterA 與 ClusterB 的 BE 節點視作一個統一 BE 集羣,並在其上執行查詢計劃。因此,各類算子會同時在 ClusterA 和 ClusterB 的 BE 節點中執行。
  • 數據查詢與傳輸:ClusterA 與 ClusterB 的 BE 節點間使用內部通信協議進行數據交互。

實戰演示:10 分鐘完成跨集羣訂單履約率分析

迴歸到實際使用中,Doris Catalog 可有效支撐以下五大核心業務場景,精準解決跨集羣分析痛點:

  1. 多業務集羣聯合分析:如在電商場景中,交易集羣存儲訂單數據、物流集羣存儲履約數據,通過 Doris Catalog 直接關聯計算“訂單履約率”“物流時效”等核心指標,無需跨集羣數據同步。
  2. 地域分佈式集羣全局統計:如零售企業在多地域部署 Doris 集羣,通過 Doris Catalog 一站式彙總各區域銷售數據,實時計算全國總銷售額、區域佔比、用户活躍度等全局指標。
  3. 實時數據跨集羣關聯查詢:如用户行為分析場景中,通過 Doris Catalog 實時關聯用户實時行為集羣(點擊、瀏覽等)與長期用户畫像集羣,支撐個性化推薦、精準營銷等實時決策場景。
  4. 跨地域超大規劃集羣分治:不同地域的分公司採用相同的業務模式部署和使用 Doris 集羣。母公司通過 Doris Catalog 完成對全地域多集羣的集中訪問,實現超大規模業務數據管理。
  5. 跨集羣數據遷移驗證與對比分析:新舊集羣遷移過程中,通過 Doris Catalog 直接對比兩端數據一致性,無需導出導入工具,簡化遷移驗證流程,降低數據丟失風險。

接下來,我們以常見場景 1:多業務集羣聯合分析為例,實戰演示如何在 10 分鐘完成跨集羣訂單履約率分析

  1. 背景介紹
    現有兩個 Doris 集羣,需跨集羣關聯計算核心業務指標:
  • 本地集羣(Trading-Cluster):存儲訂單基礎數據,庫表為 trading_db.order_info(訂單表);
  • 遠端集羣(Logistics-Cluster):存儲物流履約數據,庫表為 logistics_db.delivery_info(履約表);
  • 業務需求:計算近 7 天各訂單類型的履約率(已履約訂單數/總訂單數),支撐運營決策。
  1. 表結構定義
  2. 本地訂單表 trading_db.order_info

    CREATE TABLE trading_db.order_info (

     order_id STRING COMMENT '訂單ID',
     order_type STRING COMMENT '訂單類型:實物訂單/虛擬訂單',
     create_time DATETIME COMMENT '創建時間',
     amount DECIMAL(10,2) COMMENT '訂單金額'

    ) ENGINE=OLAP
    DUPLICATE KEY(order_id)
    PARTITION BY RANGE(create_time) (

     PARTITION p202511 VALUES [('2025-11-01 00:00:00'), ('2025-12-01 00:00:00'))

    )
    DISTRIBUTED BY HASH(order_id) BUCKETS 10;

  3. 遠端履約表 logistics_db.delivery_info

    CREATE TABLE logistics_db.delivery_info (

     order_id STRING COMMENT '訂單ID',
     delivery_status TINYINT COMMENT '履約狀態:1-已履約,0-未履約',
     delivery_time DATETIME COMMENT '履約時間'

    ) ENGINE=OLAP
    DUPLICATE KEY(order_id)
    PARTITION BY RANGE(delivery_time) (

     PARTITION p202511 VALUES [('2025-11-01 00:00:00'), ('2025-12-01 00:00:00'))

    )
    DISTRIBUTED BY HASH(order_id) BUCKETS 10;

  4. 數據準備
    向兩張表分別插入測試數據(本地表 100 萬行訂單數據,遠端表 80 萬行履約數據),確保訂單 ID 存在關聯關係。
  5. 配置 Doris Catalog
    在本地 Doris 集羣執行以下 SQL,創建連接遠端物流集羣的 Catalog(虛擬集羣模式):
-- 創建Doris Catalog,啓用虛擬集羣模式(複用內表優化)
CREATE CATALOG IF NOT EXISTS logistics_ctl PROPERTIES (
    'type' = 'doris', -- 固定類型
    'fe_http_hosts' = 'http://logistics-fe1:8030,http://logistics-fe2:8030', -- 遠端FE HTTP地址
    'fe_arrow_hosts' = 'logistics-fe1:8040,http://logistics-fe2:8040', -- 遠端FE Arrow Flight地址
    'fe_thrift_hosts' = 'logistics-fe1:9020,http://logistics-fe2:9020', -- 遠端FE Thrift地址
    'use_arrow_flight' = 'false', -- false=虛擬集羣模式,true=Arrow Flight模式
    'user' = 'doris_admin', -- 遠端集羣登錄用户
    'password' = 'Doris@123456', -- 遠端集羣登錄密碼
    'compatible' = 'false', -- 集羣版本接近(4.0.3 vs 4.0.2),無需兼容
    'query_timeout_sec' = '30' -- 延長查詢超時時間(默認15秒)
);
  1. 跨集羣查詢
  2. 切換 Catalog 後查詢

    -- 切換到遠端物流集羣的Catalog
    SWITCH logistics_ctl;
    -- 使用本地訂單庫
    USE trading_db;
    -- 關聯本地訂單表與遠端履約表,計算履約率
    SELECT

     o.order_type,
     COUNT(DISTINCT o.order_id) AS total_orders,
     COUNT(DISTINCT CASE WHEN d.delivery_status = 1 THEN o.order_id END) AS delivered_orders,
     ROUND(COUNT(DISTINCT CASE WHEN d.delivery_status = 1 THEN o.order_id END) / COUNT(DISTINCT o.order_id), 4) * 100 AS delivery_rate

    FROM internal.trading_db.order_info o
    JOIN delivery_info d ON o.order_id = d.order_id
    WHERE o.create_time >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
    GROUP BY o.order_type
    ORDER BY delivery_rate DESC;

  3. 全限定名查詢

    SELECT

     o.order_type,
     COUNT(DISTINCT o.order_id) AS total_orders,
     COUNT(DISTINCT CASE WHEN d.delivery_status = 1 THEN o.order_id END) AS delivered_orders,
     ROUND(COUNT(DISTINCT CASE WHEN d.delivery_status = 1 THEN o.order_id END) / COUNT(DISTINCT o.order_id), 4) * 100 AS delivery_rate

    FROM internal.trading_db.order_info o
    JOIN logistics_ctl.logistics_db.delivery_info d ON o.order_id = d.order_id
    WHERE o.create_time >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
    GROUP BY o.order_type
    ORDER BY delivery_rate DESC;

  4. 查詢結果與優化驗證

    1. 執行結果示例
      實戰演示.png
    2. 優化特性驗證

      • 執行 EXPLAIN 查看執行計劃,可發現:
      • 虛擬集羣模式下,執行計劃中遠端表掃描節點為 VOlapScanNode(與本地表一致),説明覆用了 Doris 內表掃描優化;
      • Join 操作中自動啓用 Runtime Filter,減少遠端數據傳輸量。

總結與展望

Doris Catalog 的推出,補齊了 Doris 跨集羣聯邦查詢的性能短板。在此特別感謝社區同學的 Chen768959 和 HonestManXin 貢獻,幫助延續了 Doris Catalog 生態“無需遷移、一站式分析”的核心優勢,讓多 Doris 集羣從“數據孤島”變為“互聯一體”。

作為實驗性特性,Doris Catalog 後續將持續迭代優化:

  • 增強 Arrow Flight 模式,使其能夠訪問任意支持標準 Arrow Flight 協議的數據源。
  • 降低虛擬集羣模式 FE 內存開銷,優化元數據存儲和同步策略;
  • 支持存算分離部署的 Doris 集羣(虛擬集羣模式)
  • 新增更多監控指標,方便排查跨集羣查詢故障。

更多信息,請訪問 Doris 官網文檔:

https://doris.apache.org/zh-CN/docs/4.x/lakehouse/catalogs/do...

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.