数据库测试|Elasticsearch和ClickHouse的对决

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 由于目前市场上主流的数据库有许多,这次我们选择其中一个比较典型的Elasticsearch来和ClickHouse做一次实战测试,让大家更直观地看到真实的比对数据,从而对这两个数据库有更深入的了解,也就能理解为什么我们会选择ClickHouse。

​前言
数据库作为产品架构的重要组成部分,一直是技术人员做产品选型的考虑因素之一。

ClkLog会经常遇到小伙伴问支持兼容哪几种数据库?为什么是选择ClickHouse而不是这个或那个。

由于目前市场上主流的数据库有许多,这次我们选择其中一个比较典型的Elasticsearch来和ClickHouse做一次实战测试,让大家更直观地看到真实的比对数据,从而对这两个数据库有更深入的了解,也就能理解为什么我们会选择ClickHouse。

比较Elasticsearch和ClickHouse,就像比较苹果和香蕉。两者都是很好的东西,有相似的功效,很多情况下都可以相互替代,同时各有特点,无法给出简单谁强谁弱的结论。

ClickHouse是为OLAP而生的,而Elasticsearch更早面世,也经常被用于生成统计报表。所以,我们将在这个交叉领域做实际测试,以便更好地做出决策。

先看测试结果
省流版测试比对结果,见下图。
​​image.png

如果你有兴趣了解详细的测试过程与结论,那就接着往下看吧。

概述
Web访问日志是最常见的日志之一,有基本统一的共识,比较适合作为测试数据。

测试将从 CPU、内存、存储、延迟等方面对比,服务器采用单节点部署形式,减少变量。

测试环境
硬件配置(最低要求配置)
CPU:4 核心

内存:16GB

磁盘:100GB SSD

数据集:模拟生成的Web访问日志,共计1千万条记录
网络环境:局域网
采用Docker Compose创建服务器环境

image.png

image.png

使用以下Python脚本生成日志文件:

image.png
image.png
image.png
image.png

日志文件参考大小为2.8G。

数据导入速度
测试数据集将包含大量的Web访问日志,以模拟实际应用场景中的数据流入情况。我们将比较在相同硬件环境 下,Elasticsearch和ClickHouse在数据导入速度上的表现。

使用vector读取日志文件,解析并发送到Elasticsearch和ClickHouse,配置如下:
image.png
image.png

注意,测试时sinks部分应该只保留当前的测试对象,避免互相干扰。

Elasticsearch导入速度如下图所示:

image.png

导入1千万条访问日志,花费12分钟18秒,平均13550条每秒。

在导入过程中,Vector没有告警信息。已对导入结果检查,日志数量没有问题。

测试ClickHouse导入前,需要预先创建表:

image.png
image.png

ClickHouse导入速度如下图所示:

image.png

导入1千万条访问日志,花费8分10秒,平均20408条每秒。

在导入过程中,Vector有告警信息。已对导入结果检查,日志数量没有问题。
image.png

资源占用(CPU和内存)
资源占用是评价系统性能的重要指标。我们将监控在数据导入过程中,Elasticsearch和ClickHouse的CPU和

内存使用情况。

Elasticsearch在导入过程中,CPU占用约70%,内存占用8GB,导入结束后内存维持占用。

ClickHouse在导入过程中,CPU占用100%,导入过程中及导入结束后内存占用均维持在2GB左右。缓存占用, 导入前为3GB,导入过程中缓存占用逐步上升,导入结束时达到最大值12GB左右,之后逐步下降,最终恢复为3GB。

存储需求
存储需求直接影响系统的扩展性和成本。我们将比较 Elasticsearch和ClickHouse在存储相同数据集时的存储占用情况,以及两者在数据压缩和存储优化方面的表现。

导入1千万条Web访问日志后:

Elasticsearch数据占用存储空间约为3.1GB。在导入过程中占用存储空间逐渐稳定上升。

ClickHouse数据占用存储空间约为1.1GB。注意,在导入过程中占用存储空间一度观察到达到19GB左右(导入结束时),在之后花费约10分钟逐步收缩到最终大小。

查询延迟
查询延迟是用户体验的重要指标。我们将测试 Elasticsearch和ClickHouse在处理不同复杂度查询时的延迟表现,包括简单查询和复杂聚合查询。

场景1
对这1千万条Web访问日志,按天统计,状态码大于等于400的次数前10名的路径。

Elasticsearch花费1700毫秒,使用以下查询:
image.png
image.png

ClickHouse花费500毫秒,使用以下SQL脚本:

image.png

  • 场景2

对这1千万条Web访问日志,查询耗时>=1秒的次数前10的路径,包含路径、总次数、最⼤耗时、平均耗时、超1秒的次数。

Elasticsearch花费7000毫秒,使用以下查询:

image.png

ClickHouse花费300毫秒,使用以下SQL脚本:

image.png

总结
通过以上几个方面的测试,我们将全面对比Elasticsearch和ClickHouse在Web访问日志统计分析应用中的表现。希望通过这次对比,能够为大家在选择合适的日志分析系统时提供有价值的参考。

总体而言,Elasticsearch开箱即用,特别是应对种类繁杂的日志时,非常灵活。甚至web访问日志这个单一领域,查询参数有很多变化,在写入时建模,省时省力。Elasticsearch使用一种名为 Query DSL(Domain Specific Language)的查询语言,与大多数工程师、数据分析师熟悉的技术栈差异比较大,设置了较高的学习和使用门槛,并需要学习大量的多新的概念和语法,即使学会之后还需要经常查阅手册才能写出正确的DSL语句。ClickHouse在写入、查询、存储、内存节省方面有明显优势,但需要实现定义表结构,应对字段经常变化的场景维护繁琐。ClickHouse的查询语言是基于SQL的,称为ClickHouse SQL,工程师和数据分析师对于 SQL非常熟悉,经验可以复用,不需要学习新的技术栈即可快速上手。

写在最后
从两方面因素考虑。其一,ClkLog作为用户行为分析系统,需要能够进行大规模的数据存储、繁琐的数据统计与聚合查询,对数据库的性能有比较高的要求。其二,ClkLog作为开源产品,更多的用户是具有开发能力的个人与公司,可以进行较为复杂的表结构维护。

综上,ClickHouse更符合ClkLog的产品需求与定位。

在数据库选型方面,4月我们完成了对火山引擎ByConity的兼容性测试,我们将持续进行对OLAP类型的数据库测试,类似Apache Doris、Apache Druid、Amazon Redshift等。如果你有想看的数据库测试,也可以私信我们(扫描下方二维码,添加好友)。


结束语.png

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
28天前
|
网络协议 Java API
SpringBoot整合Elasticsearch-Rest-Client、测试保存、复杂检索
这篇文章介绍了如何在SpringBoot中整合Elasticsearch-Rest-Client,并提供了保存数据和进行复杂检索的测试示例。
SpringBoot整合Elasticsearch-Rest-Client、测试保存、复杂检索
|
1月前
|
自然语言处理 索引
ElasticSearch 实现分词全文检索 - 测试数据准备
ElasticSearch 实现分词全文检索 - 测试数据准备
44 1
|
3月前
|
DataWorks API 调度
DataWorks产品使用合集之在调度配置配置了节点的上游节点输出,没办法自动生成这个flow的依赖,该怎么操作
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
3月前
|
DataWorks 安全 关系型数据库
DataWorks产品使用合集之建了 polar 与clickhouse的数据源。为什么数据库这里总是mysql呢
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
2月前
|
存储 大数据 关系型数据库
从 ClickHouse 到阿里云数据库 SelectDB 内核 Apache Doris:快成物流的数智化货运应用实践
目前已经部署在 2 套生产集群,存储数据总量达百亿规模,覆盖实时数仓、BI 多维分析、用户画像、货运轨迹信息系统等业务场景。
|
3月前
|
存储 SQL 运维
OLAP数据库选型指南:Doris与ClickHouse的深入对比与分析
OLAP数据库选型指南:Doris与ClickHouse的深入对比与分析
|
4月前
|
关系型数据库 MySQL 数据库
ClickHouse(07)ClickHouse数据库引擎解析
ClickHouse支持多种数据库引擎,包括Atomic(默认)、MySQL、MaterializeMySQL、Lazy、PostgreSQL、MaterializedPostgreSQL。Atomic提供非阻塞的表操作和原子的表交换,有UUID标识和延迟删除功能。MySQL引擎允许与远程MySQL服务器交互,支持INSERT和SELECT,不支持RENAME操作。PostgreSQL引擎类似,可与远程PostgreSQL服务进行读写操作。SQLite引擎用于连接SQLite数据库。实验性引擎如MaterializeMySQL和MaterializedPostgreSQL用于实现实时数据同步。
441 5
|
4天前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
25 7
Jmeter实现WebSocket协议的接口测试方法
|
4天前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
22 3
快速上手|HTTP 接口功能自动化测试
|
4天前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
16 5