10亿数据秒级查询,ClickHouse太快了!


点击上方蓝色“终端研发部”,选择“设为星标”
学最好的别人,做最好的我们

在数据分析技术领域早已声名远扬,最近由于项目需求使用到了做分析数据库,于是用测试环境做了一个单表 10亿数据量的性能测试 。
本文记录一下测试结果,有做超大数据量分析技术选型需求的朋友可以参考下 。
服务器信息
如下:
信息
如下:
测试情况
测试数据和测试方法来自官方的 Star:
https://clickhouse.tech/docs/en/getting-started/example-datasets/star-schema/
按照官方指导造出了测试数据之后,先看一下数据量和空间占用情况 。
①数据量和空间占用
如下图:
可以看到的压缩率很高,压缩率都在 50 以上,基本可以达到 70 左右 。
数据体积的减小可以非常有效的减少磁盘空间占用、提高 I/O 性能,这对整体查询性能的提升非常有效 。
、、part、 为一个简单的「供应商-客户-订单-地区」的星型模型 。
为根据这个星型模型数据关系合并的大宽表,所有分析都直接在这张大宽表中执行,减少不必要的表关联,符合我们实际工作中的分析建表逻辑 。
以下性能测试的所有分析 SQL 都在这张大宽表中运行,未进行表关联查询 。
查询性能测试详情
①Query 1.1
SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenueFROM lineorder_flatWHERE (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,大约 9100 万
耗时(秒):0.242 。
查询列数:2 。
结果行数:1 。
②Query 1.2

10亿数据秒级查询,ClickHouse太快了!

文章插图
SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenueFROM lineorder_flatWHERE (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,000,775 万 。
耗时(秒):0.040 。
查询列数:2 。
返回行数:1 。
③Query 2.1
SELECT sum(LO_REVENUE),toYear(LO_ORDERDATE) AS year,P_BRANDFROM lineorder_flatWHERE (P_CATEGORY = 'MFGR#12') AND (S_REGION = 'AMERICA')GROUP BY year,P_BRANDORDER 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 。
④Query 2.2
SELECT sum(LO_REVENUE),toYear(LO_ORDERDATE) AS year,P_BRANDFROM lineorder_flatWHERE ((P_BRAND >= 'MFGR#2221') AND (P_BRAND