Clickhouseの10億レベルのデータパフォーマンステスト

Clickhouseは、データ分析テクノロジーの分野で長年の評判があります。まだわからない場合は、ここをクリックして詳細を確認してください。

最近、プロジェクトの要件からクリックハウスが分析データベースとして使用されていたので、テスト環境で6億データの単一テーブルを使用してパフォーマンステストを行い、テスト結果を記録しました。超大規模データ分析が必要な友人技術選択はそれを参照することができます。

サーバー情報

オンラインショッピングm.cqfenfa.com
  • CPU:Intel Xeon Gold 6240 @ 8x 2.594GHz
  • メモリ:32G
  • システム:CentOS 7.6
  • Linuxカーネルバージョン:3.10.0
  • ディスクタイプ:メカニカルハードディスク
  • ファイルシステム:ext4

クリックハウス情報

  • 展開方法:スタンドアロン展開
  • バージョン:20.8.11.17

テスト状況

テストデータとテスト方法は、クリックハウスの公式スタースキーマベンチマークから取得されます

公式ガイダンスに従ってテストデータを作成した後、データ量とスペース占有率を見てみましょう。

データ量とスペースの占有

テーブル名 列の数 データ行の数 オリジナルサイズ 圧縮サイズ 圧縮比
サプライヤー 6 200,000 11.07 MiB 7.53 MiB 68
お客様 7 3,000,000 168.83 MiB 114.72 MiB 68
8 1,400,000 34.29 MiB 24.08 MiB 70
lineorder 16 600,037,902 24.03 GiB 16.67 GiB 69
lineorder_flat 37 688,552,212 111.38 GiB 61.05 GiB 55

クリックハウスの圧縮率は非常に高く、圧縮率は50を超えており、基本的に約70に達する可能性があることがわかります。データ量の削減は、ディスクスペースの占有を効果的に削減し、I / Oパフォーマンスを向上させることができます。これは、クエリ全体のパフォーマンスを向上させるのに非常に効果的です。

サプライヤー、顧客、部品、ラインオーダーは「supplier-customer-order-region」の単純なスターモデルであり、lineorder_flatはこのスター型モデルのデータ関係に従ってマージされた大規模なテーブルであり、すべての分析は直接行われます。この大規模なテーブルで実装では、実際の作業分析とテーブル作成ロジックに沿って、不要なテーブルの関連付けを減らします。

以下のパフォーマンステストのすべての分析SQLは、この大きな幅の広いテーブルで実行され、テーブルの関連付けクエリは実行されません。

パフォーマンステストの詳細を照会する

クエリ1.1

SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
FROM lineorder_flat
WHERE (toYear(LO_ORDERDATE) = 1993) AND ((LO_DISCOUNT >= 1) AND (LO_DISCOUNT <= 3)) AND (LO_QUANTITY < 25)

┌────────revenue─┐
│ 44652567249651 │
└────────────────┘

1 rows in set. Elapsed: 0.242 sec. Processed 91.01 million rows, 728.06 MB (375.91 million rows/s., 3.01 GB/s.)

走査線数:91,010,000 約9,100万

時間(秒):0.242

クエリ列の数:2

結果行の数:1

クエリ1.2

SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
FROM lineorder_flat
WHERE (toYYYYMM(LO_ORDERDATE) = 199401) AND ((LO_DISCOUNT >= 4) AND (LO_DISCOUNT <= 6)) AND ((LO_QUANTITY >= 26) AND (LO_QUANTITY <= 35))

┌───────revenue─┐
│ 9624332170119 │
└───────────────┘

1 rows in set. Elapsed: 0.040 sec. Processed 7.75 million rows, 61.96 MB (191.44 million rows/s., 1.53 GB/s.)

スキャンライン数:7,750,000775

時間(秒):0.040

クエリ列の数:2

返される行数:1

クエリ2.1

SELECT 
    sum(LO_REVENUE),
    toYear(LO_ORDERDATE) AS year,
    P_BRAND
FROM lineorder_flat
WHERE (P_CATEGORY = 'MFGR#12') AND (S_REGION = 'AMERICA')
GROUP BY 
    year,
    P_BRAND
ORDER BY 
    year ASC,
    P_BRAND ASC
    
┌─sum(LO_REVENUE)─┬─year─┬─P_BRAND───┐
│     64420005618 │ 1992 │ MFGR#121  │
│     63389346096 │ 1992 │ MFGR#1210 │
│     ........... │ .... │ ..........│
│     39679892915 │ 1998 │ MFGR#128  │
│     35300513083 │ 1998 │ MFGR#129  │
└─────────────────┴──────┴───────────┘

280 rows in set. Elapsed: 8.558 sec. Processed 600.04 million rows, 6.20 GB (70.11 million rows/s., 725.04 MB/s.)

走査線数:600,040,000 約6億

時間(秒):8.558

クエリ列の数:3

結果行数:280

クエリ2.2

SELECT 
    sum(LO_REVENUE),
    toYear(LO_ORDERDATE) AS year,
    P_BRAND
FROM lineorder_flat
WHERE ((P_BRAND >= 'MFGR#2221') AND (P_BRAND <= 'MFGR#2228')) AND (S_REGION = 'ASIA')
GROUP BY 
    year,
    P_BRAND
ORDER BY 
    year ASC,
    P_BRAND ASC

┌─sum(LO_REVENUE)─┬─year─┬─P_BRAND───┐
│     66450349438 │ 1992 │ MFGR#2221 │
│     65423264312 │ 1992 │ MFGR#2222 │
│     ........... │ .... │ ......... │
│     39907545239 │ 1998 │ MFGR#2227 │
│     40654201840 │ 1998 │ MFGR#2228 │
└─────────────────┴──────┴───────────┘

56 rows in set. Elapsed: 1.242 sec. Processed 600.04 million rows, 5.60 GB (482.97 million rows/s., 4.51 GB/s.) 

走査線数:600,040,000 約6億

時間(秒):1.242

クエリ列の数:3

結果行数:56

クエリ3.1

SELECT 
    C_NATION,
    S_NATION,
    toYear(LO_ORDERDATE) AS year,
    sum(LO_REVENUE) AS revenue
FROM lineorder_flat
WHERE (C_REGION = 'ASIA') AND (S_REGION = 'ASIA') AND (year >= 1992) AND (year <= 1997)
GROUP BY 
    C_NATION,
    S_NATION,
    year
ORDER BY 
    year ASC,
    revenue DESC

┌─C_NATION──┬─S_NATION──┬─year─┬──────revenue─┐
│ INDIA     │ INDIA     │ 1992 │ 537778456208 │
│ INDONESIA │ INDIA     │ 1992 │ 536684093041 │
│ .....     │ .......   │ .... │ ............ │
│ CHINA     │ CHINA     │ 1997 │ 525562838002 │
│ JAPAN     │ VIETNAM   │ 1997 │ 525495763677 │
└───────────┴───────────┴──────┴──────────────┘

150 rows in set. Elapsed: 3.533 sec. Processed 546.67 million rows, 5.48 GB (154.72 million rows/s., 1.55 GB/s.) 

走査線数:546,670,000 54000

時間(秒):3.533

クエリ列の数:4

結果行数:150

クエリ3.2

SELECT 
    C_CITY,
    S_CITY,
    toYear(LO_ORDERDATE) AS year,
    sum(LO_REVENUE) AS revenue
FROM lineorder_flat
WHERE (C_NATION = 'UNITED STATES') AND (S_NATION = 'UNITED STATES') AND (year >= 1992) AND (year <= 1997)
GROUP BY 
    C_CITY,
    S_CITY,
    year
ORDER BY 
    year ASC,
    revenue DESC

┌─C_CITY─────┬─S_CITY─────┬─year─┬────revenue─┐
│ UNITED ST6 │ UNITED ST6 │ 1992 │ 5694246807 │
│ UNITED ST0 │ UNITED ST0 │ 1992 │ 5676049026 │
│ .......... │ .......... │ .... │ .......... │
│ UNITED ST9 │ UNITED ST9 │ 1997 │ 4836163349 │
│ UNITED ST9 │ UNITED ST5 │ 1997 │ 4769919410 │
└────────────┴────────────┴──────┴────────────┘

600 rows in set. Elapsed: 1.000 sec. Processed 546.67 million rows, 5.56 GB (546.59 million rows/s., 5.56 GB/s.)

走査線数:546,670,000 54000

時間(秒):1.00

クエリ列の数:4

結果行数:600

クエリ4.1

SELECT 
    toYear(LO_ORDERDATE) AS year,
    C_NATION,
    sum(LO_REVENUE - LO_SUPPLYCOST) AS profit
FROM lineorder_flat
WHERE (C_REGION = 'AMERICA') AND (S_REGION = 'AMERICA') AND ((P_MFGR = 'MFGR#1') OR (P_MFGR = 'MFGR#2'))
GROUP BY 
    year,
    C_NATION
ORDER BY 
    year ASC,
    C_NATION ASC

┌─year─┬─C_NATION──────┬────────profit─┐
│ 1992 │ ARGENTINA     │ 1041983042066 │
│ 1992 │ BRAZIL        │ 1031193572794 │
│ .... │ ......        │  ............ │
│ 1998 │ PERU          │  603980044827 │
│ 1998 │ UNITED STATES │  605069471323 │
└──────┴───────────────┴───────────────┘

35 rows in set. Elapsed: 5.066 sec. Processed 600.04 million rows, 8.41 GB (118.43 million rows/s., 1.66 GB/s.)  

走査線数:600,040,000 約6億

時間(秒):5.066

クエリ列の数:4

結果行数:35

クエリ4.2

SELECT 
    toYear(LO_ORDERDATE) AS year,
    S_NATION,
    P_CATEGORY,
    sum(LO_REVENUE - LO_SUPPLYCOST) AS profit
FROM lineorder_flat
WHERE (C_REGION = 'AMERICA') AND (S_REGION = 'AMERICA') AND ((year = 1997) OR (year = 1998)) AND ((P_MFGR = 'MFGR#1') OR (P_MFGR = 'MFGR#2'))
GROUP BY 
    year,
    S_NATION,
    P_CATEGORY
ORDER BY 
    year ASC,
    S_NATION ASC,
    P_CATEGORY ASC

┌─year─┬─S_NATION──────┬─P_CATEGORY─┬───────profit─┐
│ 1997 │ ARGENTINA     │ MFGR#11    │ 102369950215 │
│ 1997 │ ARGENTINA     │ MFGR#12    │ 103052774082 │
│ .... │ .........     │ .......    │ ............ │
│ 1998 │ UNITED STATES │ MFGR#24    │  60779388345 │
│ 1998 │ UNITED STATES │ MFGR#25    │  60042710566 │
└──────┴───────────────┴────────────┴──────────────┘

100 rows in set. Elapsed: 0.826 sec. Processed 144.42 million rows, 2.17 GB (174.78 million rows/s., 2.63 GB/s.)

走査線数:144,420,000 約1億4000万

時間(秒):0.826

クエリ列の数:4

結果行数:100

パフォーマンステスト結果の要約

文章を確認する SQLの簡単な説明 スキャンライン 行数を返します クエリ列の数 経過時間(秒)
Q1.1 製品、概要、4つの条件、初回実行 91,010,000 1 2 0.242
Q1.2 Q1.1条件付き演算を1つ追加 7,750,000 1 2 0.040
Q2.1 要約、関数、2列のグループ化、2列の並べ替え、初回実行 600,040,000 280 3 8.558
Q2.2 Q2.1条件付き演算を1つ追加 600,040,000 56 3 1.242
Q3.1 要約、関数、3列のグループ化、2列の並べ替え、初回実行 546,670,000 150 4 3.533
Q3.2 Q3.1交換時の操作 546,670,000 600 4 1
Q4.1 減算、要約、関数、2列のグループ化、2列の並べ替え、初回実行 600,040,000 35 4 5.006
Q4.2 Q4.1実行する2つの条件を追加します 144,420,000 100 4 0.826

現在のソフトウェアおよびハードウェア環境では、6億行を超えるデータをスキャンし、一般的な分析ステートメントの最初の実行が最も遅い場合、約8秒で結果が返されます。同じ分析ロジックにより、再度クエリを実行するときに条件が変更され、効率が大幅に向上します。 、および1に短縮できます。約数秒で、加算、減算、乗算、除算、集計、およびその他のロジックを含まない単純な列クエリの場合、全体で6億行を超えるデータをスキャンする最初のクエリテーブルは基本的に2秒以内に実行できます。

おすすめ

転載: blog.csdn.net/weixin_48967543/article/details/114932476