@Elasticsearch与Clickhouse数据存储对比
1.使用背景
随着公司业务发展,Elasticsearch开始暴露出一些弊端,不适合大批量的数据查询,高频次分页导出导致宕机、存储成本较高。Elasticsearch的查询语句维护成本较高、在聚合计算场景下出现数据不精确等问题。Clickhouse是列式数据库,列式型数据库适合OLAP场景,类似SQL语法降低开发和学习成本,采用快速压缩算法节省存储成本,采用向量执行引擎技术大幅缩减计算耗时。
2.OLAP
OLAP意思是On-Line-Analytical-Processing联机分析处理,Clickhouse就是典型的OLAP联机分析型数据库管理系统(DBMS)。OLAP主要针对数据进行复杂分析汇总操作,与OLAP类似的还有一个OLTP类数据处理,意思是On-Line-Transaction-Processing联机事务处理,在OLTP场景中用户并发操作量会很大,要求系统实时进行数据操作的响应,需要支持事务,Mysql、Oracle、SQLServer等都是OLTP型数据库。
2.1OLAP场景的特征
- 宽表,即每个表包含着大量的列
- 对于读取,从数据库中提取相当多的行,但只提取列的一小部分。
- 查询相对较少(通常每台服务器每秒查询数百次或更少)
- 查询结果明显小于源数据。换句话说,数据经过过滤或聚合,因此结果适合于单个服务器的RAM中
- 绝大多数是读请求
- 数据以相当大的批次(>1000行)更新,而不是单行更新;或者根本没有更新
- 对于简单查询,允许延迟大约50毫秒
- 列中的数据相对较小:数字和短字符串(例如,每个URL 60个字节)
- 处理单个查询时需要高吞吐量(每台服务器每秒可达数十亿行)
- 事务不是必须的
- 对数据一致性要求低
3.特点
3.1Elasticsearch
- 搜索:适用倒排索引,每个字段都可被索引且可用于搜索,海量数据下近实时实现秒级的响应,基于Lucene的开源搜索引擎,为全文检索、高亮、搜索推荐等提供了检索能力。百度搜索、淘宝商品搜索、日志搜索等
- 数据分析:Elasticsearch提供了大量数据分析的API和丰富的聚合能力,支持在海量数据的基础上进行数据分析处理。统计订单量、爬虫爬取不同电商的某个商品数据,通过Elasticsearch进行数据分析(各个平台的历史价格、购买力等等)
3.2 Clickhouse
- 列式存储
- 压缩算法:采用lz4和zstd算法数据压缩,高压缩比降低数据大小,降低磁盘IO,降低CPU使用率。
- 索引:按照主键对数据进行排序,clickhouse能在几十毫秒内完成在大量数据对特定数据或范围数据进行查找。
- 多核心并行处理:ClickHouse会使用服务器上一切可用的资源,来全力完成一次查询。
- 支持SQL:一种基于SQL的声明式查询语言,在许多情况下与ANSI SQL标准相同。支持group by,order by,from, join,in以及非相关子查询等。
- 向量引擎:为了高效的使用CPU,数据不仅仅按列存储,同时还按向量(列的一部分)进行处理,这样可以更加高效地使用CPU。
- 实时的数据更新:数据总是以增量的方式有序的存储在MergeTree中。数据可以持续不断高效的写入到表中,不会进行任何加锁等操作。写入流量在50M-200M/s
- 适合在线查询:响应速度快延迟极低
- 丰富的聚合计算函数
4.Clickhouse与Elasticsearch对比Clickhouse的优缺点
优点:
- 硬件资源成本更低,同等场景下,Clickhouse占用的资源更小。
- 人力成本更低,新人学习、开发单测以及测试方面都更加友好,更容易介入。
- OLAP场景下Clickhouse比Elasticsearch更适合,聚合计算比Elasticsearch更精缺、更快,更节省服务器计算资源。
- 写入性能更高,同等情况下是Elasticsearch的5倍,写入时消耗的服务器资源更小。
- Elasticsearch在大量导出情况下频繁GC,严重可能导致宕机,不如Clickhouse稳定。
- 查询性能平均是Elasticsearch的12.7倍,Clickhouse的查询性能受服务器配置影响较小
- 月服务器消费相同情况Clickhouse能够得到更好的性能。
缺点: - 在全文搜索上不如Elasticsearch支持的更好,在高并发查询上支持的不如Elasticsearch支持的更好