1 背景

京喜达技术部在社区团购场景下采用 JDQ+Flink+Elasticsearch 架构来打造实时数据报表。随着业务的发展 Elasticsearch 开始暴露出一些弊端,不适合大批量的数据查询,高频次分页导出导致宕机、存储成本较高。

Elasticsearch 的查询语句维护成本较高、在聚合计算场景下出现数据不精确等问题。Clickhouse 是列式数据库,列式型数据库天然适合 OLAP 场景,类似 SQL 语法降低开发和学习成本,采用快速压缩算法节省存储成本,采用向量执行引擎技术大幅缩减计算耗时。所以做此对比,进行 Elasticsearch 切换至 Clickhouse 工作。

2 OLAP

OLAP 意思是 On-Line Analytical Processing 联机分析处理,Clickhouse 就是典型的 OLAP 联机分析型数据库管理系统 (DBMS)。OLAP 主要针对数据进行复杂分析汇总操作,比如我们业务系统每天都对当天所有运输团单做汇总统计,计算出每个省区的妥投率,这个操作就属于 OLAP 类数据处理。与 OLAP 类似的还有一个 OLTP 类数据处理,意思是 On-Line Transaction Processing 联机事务处理,在 OLTP 场景中用户并发操作量会很大,要求系统实时进行数据操作的响应,需要支持事务,Mysql、Oracle、SQLServer 等都是 OLTP 型数据库。

2.1 OLTP 场景的特征

3 特性

3.1 Elasticsearch

3.2 Clickhouse

4 我们的业务场景

  1. 大宽表,读大量行少量列进行指标聚合计算查询,结果集比较小。数据表都是通过 Flink 加工出来的宽表,列比较多。在对数据进行查询或者分析时,经常选择其中的少数几列作为维度列、对其他少数几列作为指标列,对全表或者一定范围内的数据做聚合计算。这个过程会扫描大量的行数据,但是只用了少数几列。
  2. 大量的列表分页查询与导出
  3. Flink 中数据大批量追加写入,不做更新操作
  4. 有时某个指标计算需要全表扫描做聚合计算
  5. 很少进行全文搜索

结论:数据报表、数据分析场景是典型的 OLAP 场景,在业务场景上列式存储数据库 Clickhouse 比 Elasticsearch 更有优势,Elasticsearch 在全文搜索上更占优势,但是我们这种全文搜索场景较少。

5 成本

结论:同等数据量情况下,Elasticsearch 使用的存储空间是 Clickhouse 的 3-10 倍,平均在 6 倍。综合学习、开发、测试、维护方面,Clickhouse 比 Elasticsearch 更友好

6 测试

6.1 服务器配置

以下均基于下图配置进行测试

6.2 写入压测

以下基于 wms_order_sku 表,通过 Flink 在业务平稳情况下双写 Elasticsearch 和 Clickhouse1000W+ 数据进行测试得到的结果

结论:批量写入数据时 Elasticsearch 比 Clickhouse 更吃内存和 CPU,Elasticsearch 消耗的内存是 Clickhouse 的 5.3 倍,消耗的 CPU 是 Clickhouse 的 27.5 倍。吞吐量是 Elasticsearch 的 5 倍

6.3 查询性能 (单并发测试)

以下场景是我们数据报表以及数据分析中出现的高频场景,所以基于此进行查询性能测试

数据对比情况

结论:查询数据时 Elasticsearch 比 Clickhouse 慢,在配置相近的情况下 Clickhouse 的响应速度是 Elasticsearch 的 12.7 倍,特别是基于时间的多字段进行聚合查询是 Clickhouse 比 Elasticsearch 快 32 倍。Clickhouse 的查询响应素速度受集群配置大小的影响较小。

6.4 查询压测 (高并发测试,数据来源于互联网)

由于准备高并发测试比较复杂耗时多,后续会基于我们的业务数据以及业务场景进行查询压力测试。以下数据来源于互联网在用户画像场景(数据量 262933269)下进行的测试,与我们的场景非常类似。

结论:Clickhouse 对于高并发支持的不够,官方建议最大 QPS 为 100。高并发情况下吞吐量不如 Elasticsearch 更友好

7 总结

Clickhouse 与 Elasticsearch 对比 Clickhouse 的优缺点。

优点:

缺点:

作者:京东物流 马红岩

内容来源:京东云开发者社区


↙↙↙阅读原文可查看相关链接,并与作者交流