ByConity與開源OLAP引擎(Clickhouse、Doris、Presto)性能對比

技術聯盟總壇 發佈 2023-06-06T01:25:56.917226+00:00

王蘊博 InfoQ 2023-06-04 10:15 發表於遼寧作者|王蘊博隨著數據量和數據複雜性的不斷增加,越來越多的企業開始使用 OLAP(聯機分析處理)引擎來處理大規模數據並提供即時分析結果。在選擇 OLAP 引擎時,性能是一個非常重要的因素。

王蘊博 InfoQ 2023-06-04 10:15 發表於遼寧

作者|王蘊博

隨著數據量和數據複雜性的不斷增加,越來越多的企業開始使用 OLAP(聯機分析處理)引擎來處理大規模數據並提供即時分析結果。在選擇 OLAP 引擎時,性能是一個非常重要的因素。因此,本文將使用 TPC-DS 基準測試的 99 個查詢語句來對比開源的 ClickHouse、Doris、Presto 以及 ByConity 這 4 個 OLAP 引擎的性能表現,以便為企業選擇合適的 OLAP 引擎提供參考。

TPC-DS 基準測試簡介

TPC-DS(Transaction Processing Performance Council Decision Support Benchmark)是一個面向決策支持系統(Decision Support System,簡稱 DSS)的基準測試,該工具是由 TPC 組織開發,它模擬了多維分析和決策支持場景,並提供了 99 個查詢語句,用於評估資料庫系統在複雜的多維分析場景下的性能。每個查詢都設計用於模擬複雜的決策支持場景,包括跨多個表的連接、聚合和分組、子查詢等高級 SQL 技術。

OLAP 引擎介紹

ClickHouse、Doris、Presto 和 ByConity 都是當前比較流行的開源 OLAP 引擎,它們都具有高性能和可擴展性的特點。

  • ClickHouse 是由俄羅斯搜尋引擎公司 Yandex 開發的一個列式資料庫管理系統,它專注於大規模數據的快速查詢和分析。
  • Doris 是一個分布式列式存儲和分析系統,它支持實時查詢和分析,並可以與 Hadoop、Spark 和 Flink 等大數據技術進行集成。
  • Presto 是一個分布式 SQL 查詢引擎,它由 Facebook 開發,可以在大規模數據集上進行快速查詢和分析。
  • ByConity 是由字節開源的雲原生數倉,採用了存儲計算分離的架構,實現租戶資源隔離、彈性擴縮容,並具有數據讀寫的強一致性等特性,它支持主流的 OLAP 引擎優化技術,讀寫性能非常優異。

本文將使用這四個 OLAP 引擎對 TPC-DS 基準測試的 99 個查詢語句進行性能測試,並對比它們在不同類型的查詢中的性能差異。

測試環境和方法

測試環境配置:

伺服器配置:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                48
On-line CPU(s) list:   0-47
Thread(s) per core:    2
Core(s) per socket:    12
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 79
Model name:            Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
Stepping:              1
CPU MHz:               2494.435
CPU max MHz:           2900.0000
CPU min MHz:           1200.0000
BogoMIPS:              4389.83
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              30720K
NUMA node0 CPU(s):     0-11,24-35
NUMA node1 CPU(s):     12-23,36-47

測試方法:

  • 使用 TPC-DS 基準測試的 99 個查詢語句,和 1TB(28 億行)的數據測試 4 個 OLAP 引擎的性能。
  • 在每個引擎中使用相同的測試數據集,並保持相同的配置和硬體環境。
  • 對於每個查詢,多次執行並取平均值,以減少測量誤差,設置每次查詢超時時間為 500 秒。
  • 記錄查詢執行的細節,例如查詢執行計劃、I/O 和 CPU 使用情況等。

性能測試結果

我們使用了相同的數據集和硬體環境來測試這四個 OLAP 引擎的性能。測試數據集大小為 1TB,硬體和軟體環境如上介紹,我們使用了 TPC-DS 基準測試中的 99 個查詢語句分別在四個 OLAP 引擎上進行了連續三次的測試,並取三次平均結果。其中 ByConity 跑通了所有 99 個查詢測試。Doris 在 SQL15 出現 Crash,另外有 4 次的 Timeout,分別是 SQL54、SQL67、SQL78 和 SQL95。Presto 只在 SQL67 和 SQL72 發生 Timeout,其他查詢測試都跑通了。而 Clickhouse 只跑通了 50% 的查詢語句,大概有一部分是 Timeout,另一部分是系統報錯,分析原因是 Clickhouse 不能有效的支持多表關聯查詢導致,只能把這類 SQL 語句做手動改寫拆分才能執行。因此在對比總耗時我們暫時排除 Clickhouse,其他三個 OLAP 引擎 TPC-DS 測試總耗時如下圖 1 所示,從圖 1 中我們可以看出開源的 ByConity 查詢性能明顯優於其他引擎,性能約是其他的 3-4 倍。(註:以下所有圖表縱坐標單位為秒)

圖 1 TPC-DS 99 條查詢總耗時

針對 TPC-DS 基準測試的 99 個查詢語句,我們接下來按照查詢場景的不同進行分類,例如基礎查詢、連接查詢、聚合查詢、子查詢、窗口函數查詢等。下面我們將使用這些分類方式來對 ClickHouse、Doris、Presto 和 ByConity 四個 OLAP 引擎進行性能分析對比:

基礎查詢場景下

該場景包含簡單的查詢操作,例如從單個表中查詢數據,過濾和排序結果等。基礎查詢的性能測試主要關注處理單個查詢的能力。其中 ByConity 的表現最佳,Presto 和 Doris 的性能也表現都不錯,這是因為基礎查詢通常只涉及到少量的數據表和欄位,因此能夠充分利用 Presto 和 Doris 的分布式查詢特性和內存計算能力,Clickhouse 對多表關聯支持不好,出現一些跑不通的現象,其中 SQL5、8、11、13、14、17、18 均超時,我們按 Timeout=500 秒計算,但希望顯示更清晰截取 Timeout=350 秒。下圖 2 是基礎查詢場景下四個引擎的平均查詢時間:

圖 2 TPC-DS 基礎查詢的性能對比

連接查詢場景

連接查詢是常見的多表查詢場景,它通常使用 JOIN 語句連接多個表,並根據指定條件進行數據檢索。如圖 3 我們看到 ByConity 的性能最佳,主要得益於對查詢優化器的優化,引入了基於代價的優化能力(CBO),在多表 Join 時候進行 re-order 的等優化操作。其次是 Presto 和 Doris,Clickhouse 在多表 Join 的效果相比其他三個性能不是很好,且對很多複雜語句的支持不夠好。

圖 3 TPC-DS 連接查詢的性能對比

聚合查詢場景

聚合查詢是對數據進行統計計算的場景,例如測試 SUM、AVG、COUNT 等聚合函數的使用。ByConity 依然表現優異,其次是 Doris 和 Presto,Clickhouse 出現了四次 Timeout,為了方便看出差異,我們截取 Timeout 值到 250 秒。

圖 4 TPC-DS 聚合查詢的性能對比

子查詢場景

子查詢是在 SQL 語句中嵌套使用的查詢場景,它通常作為主查詢的條件或限制條件。如下圖 5 所示,ByConity 表現最佳,原因是 ByConity 實現了基於規則的優化能力(RBO)進行查詢優化,通過算子下推、列裁剪和分區裁剪等技術,把複雜的嵌套查詢進行整體優化,替除所有的子查詢,把常見算子轉化成 Join+Agg 的形式。其次是 Doris 和 Presto 表現相對較好,但 Presto 在 SQL68 和 SQL73 出現 Timeout,Doris 也在 3 個 SQL 查詢出現 Timeout,Clickhouse 同樣出現了部分超時和系統報錯,原因上面有提到。同樣為方便看出差異,我們截取 Timeout 值等於 250 秒。

圖 5 TPC-DS 子查詢的性能對比

窗口函數查詢場景

窗口函數查詢是一種高級的 SQL 查詢場景,它可以在查詢結果中進行排名、分組、排序等操作。如下圖 6 所示,ByConity 的性能最優,其次是 Presto,Doris 出現了一次 Timeout 的情況,Clickhouse 依然有部分沒有跑通 TPC-DS 測試。

圖 6 TPC-DS 窗口函數查詢的性能對比

總 結

本文對 ClickHouse、Doris、Presto 和 ByConity 四個 OLAP 引擎在 TPC-DS 基準測試的 99 個查詢語句下的性能進行了分析和比較。我們發現,在不同的查詢場景下,四個引擎的性能表現存在差異。ByConity 在所有 TPC-DS 的 99 個查詢場景下都表現優異,超過其他三個 OLAP 引擎;Presto 和 Doris 在連接查詢、聚合查詢和窗口函數查詢場景下表現較好;由於 Clickhouse 的設計和實現並不是專門針對關聯查詢進行優化,因此在多表關聯查詢方面整體表現差強人意。

需要注意的是,性能測試結果取決於多個因素,包括數據結構、查詢類型、數據模型等。在實際應用中,需要綜合考慮各種因素,以選擇最適合自己的 OLAP 引擎。在選擇 OLAP 引擎時,還需要考慮其他因素,如可擴展性、易用性、穩定性等。在實際應用中,需要根據具體業務需求進行選擇,並對引擎進行合理的配置和優化,以獲得最佳的性能表現。

總之,ClickHouse、Doris、Presto、ByConity 都是非常優秀的 OLAP 引擎,具有不同的優點和適用場景。在實際應用中,需要根據具體業務需求進行選擇,並進行合理的配置和優化,以獲得最佳的性能表現。同時,需要注意選擇具有代表性的查詢場景和數據集,並針對不同的查詢場景進行測試和分析,以便更全面地評估引擎的性能。

今日好文推薦

關鍵字: