ClickHouse 在数据分析技术领域早已声名远扬,最近由于项目需求使用到了 ClickHouse 做分析数据库,于是用测试环境做了一个单表 6 亿数据量的性能测试。

图片来自 Pexels

本文记录一下测试结果,有做超大数据量分析技术选型需求的朋友可以参考下。

服务器信息

如下:

  • CPU:Intel Xeon Gold 6240 @ 8x 2.594GHz

  • 内存:32G

  • 系统:CentOS 7.6

  • Linux 内核版本:3.10.0

  • 磁盘类型:机械硬盘

  • 文件系统:ext4

Clickhouse 信息

如下:

  • 部署方式:单机部署

  • 版本:20.8.11.17

测试情况

测试数据和测试方法来自 Clickshouse 官方的 Star Schema Benchmark:

https://clickhouse.tech/docs/en/getting-started/example-datasets/star-schema/

按照官方指导造出了测试数据之后,先看一下数据量和空间占用情况。

①数据量和空间占用

如下图:

可以看到 Clickhouse 的压缩率很高,压缩率都在 50 以上,基本可以达到 70 左右。

数据体积的减小可以非常有效的减少磁盘空间占用、提高 I/O 性能,这对整体查询性能的提升非常有效。

supplier、customer、part、lineorder 为一个简单的「供应商-客户-订单-地区」的星型模型。

lineorder_flat 为根据这个星型模型数据关系合并的大宽表,所有分析都直接在这张大宽表中执行,减少不必要的表关联,符合我们实际工作中的分析建表逻辑。

以下性能测试的所有分析 SQL 都在这张大宽表中运行,未进行表关联查询。

查询性能测试详情

①Query 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,大约 9100 万

耗时(秒):0.242。

查询列数:2。

结果行数:1。

②Query 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,000,775 万。

耗时(秒):0.040。

查询列数:2。

返回行数:1。

③Query 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。

④Query 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。

⑤Query 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,大约 5 亿 4 千多万。

耗时(秒):3.533。

查询列数:4。

结果行数:150。

⑥Query 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,大约 5 亿 4 千多万。

耗时(秒):1.00。

查询列数:4。

结果行数:600。

⑦Query 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。

⑧Query 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 亿 4 千多万。

耗时(秒):0.826。

查询列数:4。

结果行数:100。

性能测试结果汇总

如下图:

在当前软硬件环境下,扫描 6 亿多行数据,常见的分析语句首次运行最慢在 8 秒左右能返回结果。

相同的分析逻辑更换条件再次查询的时候效率有明显的提升,可以缩短到 1 秒左右。

如果只是简单的列查询没有加减乘除、聚合等逻辑,扫描全表 6 亿多行数据首次查询基本可以在 2 秒内执行完成。

作者:LifeLogs

出处:cnblogs.com/asimov/p/14546106.html

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:长按订阅更多精彩▼如有收获,点个在看,诚挚感谢

6亿数据秒级查询,ClickHouse太快了!相关推荐

  1. ClickHouse留存分析工具十亿数据秒级查询方案

    作者:陈璐,腾讯 CSIG 高级数据分析师 本文实践了对于千万级别的用户,操作总数达万级别,每日几十亿操作流水的留存分析工具秒级别查询的数据构建方案.同时,除了留存分析,对于用户群分析,事件分析等也可 ...

  2. java按秒查询数据_ClickHouse留存分析工具十亿数据秒级查询方案

    作者:陈璐,腾讯 CSIG 高级数据分析师本文实践了对于千万级别的用户,操作总数达万级别,每日几十亿操作流水的留存分析工具秒级别查询的数据构建方案.同时,除了留存分析,对于用户群分析,事件分析等也可以 ...

  3. PostgreSQL 百亿数据 秒级响应 正则及模糊查询

    原文: https://yq.aliyun.com/articles/7444?spm=5176.blog7549.yqblogcon1.6.2wcXO2 摘要: 正则匹配和模糊匹配通常是搜索引擎的特 ...

  4. 万亿数据秒级响应,Apache Doris 在360 数科实时数仓中的应用

    作者|360数科中间件团队 编辑整理|SelectDB 作为以人工智能驱动的金融科技平台,360数科携手金融合作伙伴,为尚未享受到普惠金融服务的优质用户提供个性化的互联网消费金融产品,致力于成为连接用 ...

  5. 应用实践 | 10 亿数据秒级关联,货拉拉基于 Apache Doris 的 OLAP 体系演进

    分享人|货拉拉大数据引擎负责人 杨秋吉,张斌 业务背景 货拉拉成立于 2013 年,成长于粤港澳大湾区,是一家从事同城.跨城货运.企业版物流服务.搬家.汽车销售及车后市场服务的互联网物流公司.截至 2 ...

  6. Java 百万数据秒级导出到Excel中

    出自: 腾讯课堂 700多分钟干货实战Java多线程高并发高性能实战全集 , 我学习完了之后, 我给 老师在课上说的话做了个笔记,以及视频的内容,还有代码敲了一遍,然后添加了一些注释,把执行结果也整理 ...

  7. clickhouse 在货拉拉的应用实践,千亿级别数据实现秒级查询

    作者:扬大平仔 前携程.网易高级工程师,现为货拉拉高级工程师.热爱技术,敢于将新技术用于项目实践. 前言 为了解决线上问题定位慢,相应不及时等问题.所以我们决定开发一套智能问题定位系统.对于我们的一些 ...

  8. 耗时3天,上亿数据如何做到秒级查询?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:sohu.gg/jIp59N 最近在忙着优化集团公司的一个报 ...

  9. 耗时 3 天,上亿数据如何做到秒级查询?

    最近在忙着优化集团公司的一个报表.优化完成后,报表查询速度由从半小时以上(甚至查不出)到秒查的质变.从修改 SQL 查询语句逻辑到决定创建存储过程实现,花了我 3 天多的时间,在此总结一下,希望对朋友 ...

最新文章

  1. WPF第一章(XAML前台标记语言(Chapter02代码讲解))
  2. The 2014 ACM-ICPC Asia Mudanjiang Regional First Round A
  3. Dubbo入门介绍---搭建一个最简单的Demo框架
  4. token要加编码decode吗_彻底弄明白Base64 编码
  5. idea中二级包为什么创建不了_IDEA通过Maven打包JavaFX工程(OpenJFX11)
  6. 基于websocket的简单通信
  7. 学习MySQL / MariaDB初学者 - 第1部分
  8. Flex Module优化
  9. 事务到底是隔离的还是不隔离的?
  10. 第三季-第6课-静态函数库设计
  11. python 最准确的图片转文字软件_图片转文字软件哪个好用?免费的图片转文字软件...
  12. 三行代码,教你在python中将MP4转化为GIF,这不完胜迅捷视频转化器?
  13. 000-Opencv各版本汇总下载
  14. 整站下载工具webHttracker webside copier
  15. Shopify速度优化
  16. Word文档如何去掉最后一页的页码且不会影响其它页的页码
  17. Excel将多行相同数据合并成一行并居中显示
  18. ZooKeeper应用——解决分布式系统单点故障
  19. h5 video在微信自动播放问题
  20. sql 当为空值时置0_SQL查询值为空时默认输出0的方法

热门文章

  1. IPinfoga查询地理位置
  2. 甘肃省计算机二级考试题库,2011甘肃省计算机等级考试二级最新考试试题库(完整版)...
  3. ajax从mysql提取数据在html中_EXCEL混合内容中提取数据,其实很简单
  4. java if and_Java运算符-if分支语句
  5. python中url是什么_怎么在Python中实现URL的解析
  6. php跳转方式带rere_PHP翻页跳转功能实现方法
  7. java二级下拉菜单_航菜单栏中的二级下拉菜单
  8. LeetCode 7. 整数反转 Reverse Integer 官网答案的条件判定的一点思考
  9. 移动安全问题不可掉以轻心,Check Point剖析近日移动安全问题
  10. zabbix使用zabbix 数据库做数据分表