1.概述
本篇博客将对MySQL、InfluxDB、Clickhouse在写入时间、聚合查询时间、磁盘使用等方面的性能指标来进行比较。
2.内容
比较的数据集,是使用的Clickhouse官网提供的6600万的数据集来进行测试比较的,当MySQL、InfluxDB、Clickhouse也分配4CPU和16GB内存的资源时,Clickhouse完全是在导入速度、磁盘使用和查询性能等方面体现非常好的效果。结论如下所示:
为了保证测试结果比较准确,上面的每条SQL至少执行10次,然后取中间值。其中InfluxDB的性能比预期差,甚至比MySQL差,这可能是由于数据样本和测试用例不合适InfluxDB场景造成的。
2.1 MySQL
MySQL是Oracle的产品,是目前最流行的关系型数据库管理系统之一。它使用的SQL语言是用于访问数据库的最常见的标准化语言。采用双授权策略,分为社区版和商业版。由于体积小、速度快、总体拥有成本低,尤其是其开源特性,一般选择MySQL作为中小型网站开发的网站数据库。
MySQL并不完美,但是它足够灵活,是架构中的最佳选择之一,并且在复杂的非单一项目中总能拥有一席之地。
2.2 InfluxDB
InfluxDB是InfluxData开发的开源时序数据库,专注于海量时序数据的高性能读、高性能写、高效存储和实时分析。在数据库引擎排名时序数据库中,它位居第一,广泛应用与开发运维监控、物联网监控、实时分析等场景。
传统数据库通常记录数据的当前值,而时序数据库记录所有历史数据。在处理当前时序数据时,必须不断接收新的时序数据。同时,时序数据的查询始终是基于时间的。它重点解决以下海量数据场景:
- 时序数据的写入:如何支持每条千万条数据的写入;
- 时序数据的读取:如何支持每条千万条数据的聚合查询;
- 成本问题:海量数据存储带来的成本问题,如何以更低的成本存储这些数据。
2.3 Clickhouse
Clickhouse是由Yandex开源的基于列存储的数据库,用于实时数据分析,其处理数据的速度比传统方法快100~1000倍。Clickhouse优于当前市场上类似的面向列的DBMS,每台服务器每秒处理数亿到超过10亿行和超过10GB的数据。
它是一个用于在线分析(OLAP)的列式数据库管理系统(DBMS),对OLTP和OLAP的做如下区别介绍:
- OLTP:它是一个传统的关系型数据库,主要操作增删改查,强调交易一致性,比如银行系统、电子商务系统等;
- OLAP:是一个仓库型的数据库,主要用于读取数据,做复杂的数据分析,专注于技术决策支持,提供直观简单的结果。
Clickhouse用于OLAP的适用场景如下:
- 读取多于写入;
- 一个大的宽表读取大量的行和很少的列,同时导入较小的结果集;
- 数据时分批写入的,数据不更新或者更新频率很低;
- 无需事务,数据一致性要求较低;
- 灵活多变,不适合模型预构建(类似Kylin的Cube)
3.测试数据准备
直接使用Clickhouse提供的测试数据地址:https://clickhouse.com/docs/en/getting-started/example-datasets/opensky/,这个数据集中的数据是从完整的OpenSky数据集中导出和清洗过的。
该数据集涵盖了自2019年1月1日以来,该网络2500多名成员看到的所有航班信息。
3.1 下载数据
执行如下命令:
wget -O- https://zenodo.org/record/5092942 | grep -oP 'https://zenodo.org/record/5092942/files/flightlist_\d+_\d+\.csv\.gz' | xargs wget