このトピックでは、ClickBench と Star Schema Benchmark(SSB)単一テーブルデータセットを使用して、Hologres と ClickHouse のパフォーマンステストを実行し、テスト結果を比較する方法について説明します。
ClickBench
ClickBench は、ClickHouse の公式ベンチマークツールです。 ClickBench は、オンライン分析処理(OLAP)や大量データの取り込みなど、実際のワークロードをシミュレートして、ユーザーがデータベースのパフォーマンスを検証し、さまざまな構成またはハードウェア環境における効率を比較し、開発者にパフォーマンスチューニングの参考資料を提供するのに役立ちます。 詳細については、「ClickBench」をご参照ください。
テスト環境
Hologres は、32 CU、64 CU、128 CU の 3 つのインスタンス仕様でテストに参加しました。 テストプロセスの詳細については、「ClinkBench-Hologres」をご参照ください。
オープンソースの ClickHouse、Doris、StarRocks は、
c6a.metalインスタンス(192 vCPU コア)を使用しました。 詳細については、「C6a インスタンス」をご参照ください。ByteHouse は、次の計算リソース仕様を利用しました。
8×L:32 コア
4×M:16 コア
2×S:8 コア
XS:4 コア
テスト結果の比較
上記のテスト環境に基づいて ClickBench によって生成されたテスト結果は、同等の計算リソースでは、Hologres が ClickHouse、Doris、StarRocks、ByteHouse などのオープンソースの代替手段よりも大幅に優れたパフォーマンスを発揮することを示しています。 詳細な比較結果は次のとおりです。
Hologres と ClickHouse

Hologres と Doris

Hologres と StarRocks

Hologres と ByteHouse

SSB 単一テーブルデータセット
背景情報
SSB は、学術界や産業界で広く使用されているスタースキーマテストセットです。 このテストセットは、さまざまなオンライン分析処理(OLAP)システムの基本的なパフォーマンスメトリックを比較するために使用されます。 ClickHouse は、SSB のスタースキーマをフラットスキーマに変換し、ワイドテーブルを作成して、テスト用の単一テーブルデータセットを生成します。 詳細については、ClickHouse 公式 Web サイトの「Star Schema Benchmark」をご参照ください。
このトピックでは、SSB に基づく単一テーブルデータセットを使用して、Hologres と ClickHouse でパフォーマンステストを実行する方法について説明します。次の図は、テスト結果を示しています。

単一テーブルに対する 13 件のクエリの中で、Hologres は 11 件のクエリで ClickHouse よりも高速です。
単一テーブルに対する 13 件のクエリにおいて、ClickHouse で使用された合計時間は Hologres の 1.35 倍です。
テスト環境
ネットワーク帯域幅の影響を排除するために、このパフォーマンステストでは、同じエラスティック・コンピュート・サービス ( ECS ) インスタンスを使用して、仮想プライベートクラウド ( VPC ) 内の Hologres と ClickHouse にクエリリクエストを送信します。Hologres では、結果キャッシュ機能は無効になっています。次の表に、具体的なテスト環境を示します。
ClickHouse のテスト環境
項目
説明
サーバー
ECS インスタンス
CPU
Intel Xeon (Ice Lake) Platinum 8369B、64 vCPU コア
メモリ
256 GiB
内部帯域幅
32 Gbit/s
ディスク
拡張 SSD ( ESSD )、200 GB、PL1、ディスクあたり最大 50,000 IOPS
オペレーティングシステム
CentOS 8.4 64 ビット
ハードウェア料金 (インターネット帯域幅を除く)
USD 1370.04 per month
IPv4 経由のインターネット帯域幅
200 Mbit/s
ネットワークトラフィック料金
USD 2323.85 per month
ClickHouse バージョン
V21.8.3.44
Hologres のテスト環境
項目
説明
コンピューティングリソース
64 CPU コアと 256 GB のメモリ
ストレージリソース
論理ストレージ: 200 GB
インターネット帯域幅
5 Gbit/s 以上
合計料金
USD 1653.73 per month
Hologres バージョン
V0.10.33
テストデータ
テーブル名 | データ行数 | 説明 |
lineorder | 6 億 | SSB の商品注文テーブル。 |
customer | 300 万 | SSB の顧客テーブル。 |
part | 140 万 | SSB の部品テーブル。 |
supplier | 20 万 | SSB のサプライヤーテーブル。 |
dates | 2,556 | SSB の日付テーブル。 |
lineorder_flat | 6 億 | SSB のテーブルに基づくフラットスキーマのワイドテーブル。 |
SQL ステートメント
ClickHouse の SQL ステートメント
使用される DDL ステートメントとクエリステートメントは、ClickHouse 公式 Web サイトで提供されているものと同じです。詳細については、ClickHouse 公式 Web サイトのスタースキーマベンチマークをご参照ください。
Hologres の SQL ステートメント
DDL ステートメント
DROP TABLE IF EXISTS lineorder_flat; BEGIN; CREATE TABLE IF NOT EXISTS lineorder_flat ( lo_orderdate date NOT NULL , -- 注文日 lo_orderkey int NOT NULL , -- 注文キー lo_linenumber int NOT NULL , -- 行番号 lo_custkey int NOT NULL , -- 顧客キー lo_partkey int NOT NULL , -- 部品キー lo_suppkey int NOT NULL , -- サプライヤキー lo_orderpriority text NOT NULL , -- 注文優先度 lo_shippriority int NOT NULL , -- 出荷優先度 lo_quantity int NOT NULL , -- 数量 lo_extendedprice int NOT NULL , -- 拡張価格 lo_ordtotalprice int NOT NULL , -- 注文合計価格 lo_discount int NOT NULL , -- 割引 lo_revenue int NOT NULL , -- 売上 lo_supplycost int NOT NULL , -- 仕入原価 lo_tax int NOT NULL , -- 税金 lo_commitdate date NOT NULL , -- 確定日 lo_shipmode text NOT NULL , -- 出荷モード c_name text NOT NULL , -- 顧客名 c_address text NOT NULL , -- 顧客住所 c_city text NOT NULL , -- 顧客都市 c_nation text NOT NULL , -- 顧客国 c_region text NOT NULL , -- 顧客地域 c_phone text NOT NULL , -- 顧客電話番号 c_mktsegment text NOT NULL , -- 顧客市場セグメント s_region text NOT NULL , -- サプライヤ地域 s_nation text NOT NULL , -- サプライヤ国 s_city text NOT NULL , -- サプライヤ都市 s_name text NOT NULL , -- サプライヤ名 s_address text NOT NULL , -- サプライヤ住所 s_phone text NOT NULL , -- サプライヤ電話番号 p_name text NOT NULL , -- 部品名 p_mfgr text NOT NULL , -- 部品メーカー p_category text NOT NULL , -- 部品カテゴリ p_brand text NOT NULL , -- 部品ブランド p_color text NOT NULL , -- 部品色 p_type text NOT NULL , -- 部品タイプ p_size int NOT NULL , -- 部品サイズ p_container text NOT NULL, -- 部品コンテナ PRIMARY KEY (lo_orderkey,lo_linenumber) ); CALL set_table_property('lineorder_flat', 'distribution_key', 'lo_orderkey'); -- 分散キーの設定 CALL set_table_property('lineorder_flat', 'segment_key', 'lo_orderdate'); -- セグメントキーの設定 CALL set_table_property('lineorder_flat', 'clustering_key', 'lo_orderdate'); -- クラスタリングキーの設定 CALL set_table_property('lineorder_flat', 'bitmap_columns', 'p_category,s_region,c_region,c_nation,s_nation,c_city,s_city,p_mfgr,p_brand'); -- ビットマップカラムの設定 CALL set_table_property('lineorder_flat', 'time_to_live_in_seconds', '31536000'); -- TTLの設定 COMMIT;クエリステートメント
Q1.1
SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS REVENUE -- 売上合計の算出 FROM LINEORDER_FLAT -- lineorder_flat テーブルから WHERE LO_ORDERDATE >= DATE '1993-01-01' -- 注文日が 1993 年 1 月 1 日以降 AND LO_ORDERDATE <= DATE '1993-12-31' -- 注文日が 1993 年 12 月 31 日以前 AND LO_DISCOUNT BETWEEN 1 AND 3 -- 割引が 1 から 3 の間 AND LO_QUANTITY < 25; -- 数量が 25 未満Q1.2
SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS REVENUE -- 売上合計の算出 FROM LINEORDER_FLAT -- lineorder_flat テーブルから WHERE LO_ORDERDATE >= DATE '1994-01-01' -- 注文日が 1994 年 1 月 1 日以降 AND LO_ORDERDATE <= DATE '1994-01-31' -- 注文日が 1994 年 1 月 31 日以前 AND LO_DISCOUNT BETWEEN 4 AND 6 -- 割引が 4 から 6 の間 AND LO_QUANTITY BETWEEN 26 AND 35; -- 数量が 26 から 35 の間Q1.3
SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS REVENUE -- 売上合計の算出 FROM LINEORDER_FLAT -- lineorder_flat テーブルから WHERE EXTRACT(WEEK FROM LO_ORDERDATE ) = 6 -- 注文日が第 6 週 AND LO_ORDERDATE >= DATE '1994-01-01' -- 注文日が 1994 年 1 月 1 日以降 AND LO_ORDERDATE <= DATE '1994-12-31' -- 注文日が 1994 年 12 月 31 日以前 AND LO_DISCOUNT BETWEEN 5 AND 7 -- 割引が 5 から 7 の間 AND LO_QUANTITY BETWEEN 26 AND 35; -- 数量が 26 から 35 の間Q2.1
SELECT SUM(LO_REVENUE), -- 売上合計の算出 EXTRACT(YEAR FROM LO_ORDERDATE) AS YEAR, -- 注文年から年を抽出 P_BRAND -- 部品ブランド FROM LINEORDER_FLAT -- lineorder_flat テーブルから WHERE P_CATEGORY = 'MFGR#12' -- 部品カテゴリが 'MFGR#12' AND S_REGION = 'AMERICA' -- サプライヤ地域が 'AMERICA' GROUP BY YEAR, P_BRAND -- 年と部品ブランドでグループ化 ORDER BY YEAR, P_BRAND; -- 年と部品ブランドでソートQ2.2
SELECT SUM(LO_REVENUE), -- 売上合計の算出 EXTRACT(YEAR FROM LO_ORDERDATE) AS YEAR, -- 注文年から年を抽出 P_BRAND -- 部品ブランド FROM LINEORDER_FLAT -- lineorder_flat テーブルから WHERE P_BRAND BETWEEN 'MFGR#2221' AND 'MFGR#2228' -- 部品ブランドが 'MFGR#2221' から 'MFGR#2228' の間 AND S_REGION = 'ASIA' -- サプライヤ地域が 'ASIA' GROUP BY YEAR, P_BRAND -- 年と部品ブランドでグループ化 ORDER BY YEAR, P_BRAND; -- 年と部品ブランドでソートQ2.3
SELECT SUM(LO_REVENUE), -- 売上合計の算出 EXTRACT(YEAR FROM LO_ORDERDATE) AS YEAR, -- 注文年から年を抽出 P_BRAND -- 部品ブランド FROM LINEORDER_FLAT -- lineorder_flat テーブルから WHERE P_BRAND = 'MFGR#2239' -- 部品ブランドが 'MFGR#2239' AND S_REGION = 'EUROPE' -- サプライヤ地域が 'EUROPE' GROUP BY YEAR, P_BRAND -- 年と部品ブランドでグループ化 ORDER BY YEAR, P_BRAND; -- 年と部品ブランドでソートQ3.1
SELECT C_NATION, -- 顧客国 S_NATION, -- サプライヤ国 EXTRACT(YEAR FROM LO_ORDERDATE) AS YEAR, -- 注文年から年を抽出 SUM(LO_REVENUE) AS REVENUE -- 売上合計 FROM LINEORDER_FLAT -- lineorder_flat テーブルから WHERE C_REGION = 'ASIA' -- 顧客地域が 'ASIA' AND S_REGION = 'ASIA' -- サプライヤ地域が 'ASIA' AND LO_ORDERDATE >= DATE '1992-01-01' -- 注文日が 1992 年 1 月 1 日以降 AND LO_ORDERDATE <= DATE '1997-12-31' -- 注文日が 1997 年 12 月 31 日以前 GROUP BY C_NATION,S_NATION,YEAR -- 顧客国、サプライヤ国、年でグループ化 ORDER BY YEAR ASC,REVENUE DESC; -- 年の昇順、売上の降順でソートQ3.2
SELECT C_CITY, -- 顧客都市 S_CITY, -- サプライヤ都市 EXTRACT(YEAR FROM LO_ORDERDATE) AS YEAR, -- 注文年から年を抽出 SUM(LO_REVENUE) AS REVENUE -- 売上合計 FROM LINEORDER_FLAT -- lineorder_flat テーブルから WHERE C_NATION = 'UNITED STATES' -- 顧客国が 'UNITED STATES' AND S_NATION = 'UNITED STATES' -- サプライヤ国が 'UNITED STATES' AND LO_ORDERDATE >= DATE '1992-01-01' -- 注文日が 1992 年 1 月 1 日以降 AND LO_ORDERDATE <= DATE '1997-12-31' -- 注文日が 1997 年 12 月 31 日以前 GROUP BY C_CITY, S_CITY, YEAR -- 顧客都市、サプライヤ都市、年でグループ化 ORDER BY YEAR ASC, REVENUE DESC; -- 年の昇順、売上の降順でソートQ3.3
SELECT C_CITY, -- 顧客都市 S_CITY, -- サプライヤ都市 EXTRACT(YEAR FROM LO_ORDERDATE) AS YEAR, -- 注文年から年を抽出 SUM(LO_REVENUE) AS REVENUE -- 売上合計 FROM LINEORDER_FLAT -- lineorder_flat テーブルから WHERE C_CITY IN ( 'UNITED KI1' ,'UNITED KI5') -- 顧客都市が 'UNITED KI1' または 'UNITED KI5' AND S_CITY IN ( 'UNITED KI1' ,'UNITED KI5') -- サプライヤ都市が 'UNITED KI1' または 'UNITED KI5' AND LO_ORDERDATE >= DATE '1992-01-01' -- 注文日が 1992 年 1 月 1 日以降 AND LO_ORDERDATE <= DATE '1997-12-31' -- 注文日が 1997 年 12 月 31 日以前 GROUP BY C_CITY, S_CITY, YEAR -- 顧客都市、サプライヤ都市、年でグループ化 ORDER BY YEAR ASC, REVENUE DESC; -- 年の昇順、売上の降順でソートQ3.4
SELECT C_CITY, -- 顧客都市 S_CITY, -- サプライヤ都市 EXTRACT(YEAR FROM LO_ORDERDATE) AS YEAR, -- 注文年から年を抽出 SUM(LO_REVENUE) AS REVENUE -- 売上合計 FROM LINEORDER_FLAT -- lineorder_flat テーブルから WHERE C_CITY IN ('UNITED KI1', 'UNITED KI5') -- 顧客都市が 'UNITED KI1' または 'UNITED KI5' AND S_CITY IN ( 'UNITED KI1', 'UNITED KI5') -- サプライヤ都市が 'UNITED KI1' または 'UNITED KI5' AND LO_ORDERDATE >= DATE '1997-12-01' -- 注文日が 1997 年 12 月 1 日以降 AND LO_ORDERDATE <= DATE '1997-12-31' -- 注文日が 1997 年 12 月 31 日以前 GROUP BY C_CITY, S_CITY, YEAR -- 顧客都市、サプライヤ都市、年でグループ化 ORDER BY YEAR ASC, REVENUE DESC; -- 年の昇順、売上の降順でソートQ4.1
SELECT EXTRACT(YEAR FROM LO_ORDERDATE) AS YEAR, -- 注文年から年を抽出 C_NATION, -- 顧客国 SUM(LO_REVENUE - LO_SUPPLYCOST) AS PROFIT -- 利益合計 FROM LINEORDER_FLAT -- lineorder_flat テーブルから WHERE C_REGION = 'AMERICA' -- 顧客地域が 'AMERICA' AND S_REGION = 'AMERICA' -- サプライヤ地域が 'AMERICA' AND P_MFGR IN ( 'MFGR#1' , 'MFGR#2') -- 部品メーカーが 'MFGR#1' または 'MFGR#2' GROUP BY YEAR, C_NATION -- 年と顧客国でグループ化 ORDER BY YEAR ASC, C_NATION ASC; -- 年と顧客国の昇順でソートQ4.2
SELECT EXTRACT(YEAR FROM LO_ORDERDATE) AS YEAR, -- 注文年から年を抽出 S_NATION, -- サプライヤ国 P_CATEGORY, -- 部品カテゴリ SUM(LO_REVENUE - LO_SUPPLYCOST) AS PROFIT -- 利益合計 FROM LINEORDER_FLAT -- lineorder_flat テーブルから WHERE C_REGION = 'AMERICA' -- 顧客地域が 'AMERICA' AND S_REGION = 'AMERICA' -- サプライヤ地域が 'AMERICA' AND LO_ORDERDATE >= DATE '1997-01-01' -- 注文日が 1997 年 1 月 1 日以降 AND LO_ORDERDATE <= DATE '1998-12-31' -- 注文日が 1998 年 12 月 31 日以前 AND P_MFGR IN ( 'MFGR#1' , 'MFGR#2') -- 部品メーカーが 'MFGR#1' または 'MFGR#2' GROUP BY YEAR, S_NATION, P_CATEGORY -- 年、サプライヤ国、部品カテゴリでグループ化 ORDER BY YEAR ASC, S_NATION ASC, P_CATEGORY ASC; -- 年、サプライヤ国、部品カテゴリの昇順でソートQ4.3
SELECT EXTRACT(YEAR FROM LO_ORDERDATE) AS YEAR, -- 注文年から年を抽出 S_CITY, -- サプライヤ都市 P_BRAND, -- 部品ブランド SUM(LO_REVENUE - LO_SUPPLYCOST) AS PROFIT -- 利益合計 FROM LINEORDER_FLAT -- lineorder_flat テーブルから WHERE S_NATION = 'UNITED STATES' -- サプライヤ国が 'UNITED STATES' AND LO_ORDERDATE >= DATE '1997-01-01' -- 注文日が 1997 年 1 月 1 日以降 AND LO_ORDERDATE <= DATE '1998-12-31' -- 注文日が 1998 年 12 月 31 日以前 AND P_CATEGORY = 'MFGR#14' -- 部品カテゴリが 'MFGR#14' GROUP BY YEAR, S_CITY, P_BRAND -- 年、サプライヤ都市、部品ブランドでグループ化 ORDER BY YEAR ASC, S_CITY ASC, P_BRAND ASC; -- 年、サプライヤ都市、部品ブランドの昇順でソート
テスト結果
クエリステートメント | Hologres で使用された時間 (単位: ミリ秒) | ClickHouse で使用された時間 (単位: ミリ秒) | ClickHouse で使用された時間 / Hologres で使用された時間 (単位: 倍) |
Q1.1 | 43.66 | 59.00 | 1.35 |
Q1.2 | 20.68 | 21.00 | 1.02 |
Q1.3 | 57.98 | 22.00 | 0.38 |
Q2.1 | 247.63 | 254.00 | 1.03 |
Q2.2 | 251.90 | 281.00 | 1.12 |
Q2.3 | 165.73 | 214.00 | 1.29 |
Q3.1 | 332.84 | 434.00 | 1.30 |
Q3.2 | 247.79 | 348.00 | 1.40 |
Q3.3 | 117.46 | 299.00 | 2.55 |
Q3.4 | 30.05 | 25.00 | 0.83 |
Q4.1 | 298.48 | 456.00 | 1.53 |
Q4.2 | 116.47 | 171.00 | 1.47 |
Q4.3 | 97.68 | 146.00 | 1.49 |
合計 | 2,028.35 | 2,730.00 | 1.35 |