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

前言

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

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

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

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

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

先看测试结果

省流版测试比对结果,见下图。

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

概述

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

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

测试环境

  • 硬件配置(最低要求配置

CPU:4 核心

内存:16GB

磁盘:100GB SSD

  • 数据集:模拟生成的Web访问日志,共计1千万条记录
  • 网络环境:局域网

采用Docker Compose创建服务器环境

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

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

数据导入速度

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

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

​​​​​​

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

Elasticsearch导入速度如下图所示:

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

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

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

ClickHouse导入速度如下图所示:

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

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

资源占用(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毫秒,使用以下查询:

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

  • 场景2

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

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

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

总结

通过以上几个方面的测试,我们将全面对比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等。如果你有想看的数据库测试,也可以私信我们(扫描下方二维码,添加好友)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/373584.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

日本IT工程师的工资水平?一篇带你了解

今天来说下日本IT工程师的工资水平是根据什么来决定的呢? 如何才能提高IT工程师的工资? 首先,这里分享一个日本经济产业部门的最新调查数据,希望对小伙伴们有所帮助。 (引用) レベル1 新人・初…

从零开始搭建vite开发环境

准备 nodejs 18 pnpm https://vitejs.cn/ 开始 pnpm init pnpm add -D vite新建index.html <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width…

ArcGis将同一图层的多个面要素合并为一个面要素

这里写自定义目录标题 1.加载面要素的shp数据 2.点击菜单栏的地理处理–融合&#xff0c;如下所示&#xff1a; 3.将shp面要素输入&#xff0c;并设置输出&#xff0c;点击确定即可合并。合并后的属性表就只有一个数据了。

【模块化与包管理】:解锁【Python】编程的高效之道

目录 1.什么是模块&#xff1f; 2. 模块的导入过程 3. 理解命名空间 4. import语句的多种形式 5. 模块的执行与重新导入 6. 包&#xff08;Package&#xff09; 7. sys模块和os模块 sys模块 常用属性 示例&#xff1a;使用sys模块 os模块 常用功能 示例&#xff1…

C++ 【 PCL 】点云添加随机均匀噪声及源代码

PCL向点云添加均匀随机噪声&#xff1a; #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/random.h>int main() {// 加载点云文件pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::Poi…

android deep links即scheme uri跳转以及googlePlay跳转配置

对于googlePlay的Custom URL就是googlePlay上APP网址&#xff1a; https://play.google.com/store/apps/details?idcom.yourapp如果是国内一些应用&#xff0c;则考虑market://包名等方式&#xff0c;自行百度。 对于Android URI Scheme&#xff1a; 首先需要在Manifest xm…

Win11常用快捷键整理,带你重启电脑体验(动图演示)

名人说&#xff1a;人生到处知何似&#xff0c;应似飞鸿踏雪泥。 ——苏轼《和子由渑池怀旧》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、常用快捷键1、Win X2、Win Q3、Win E4、Win T5、Win Tab6、W…

国际网课平台Udemy上的亚马逊云科技AWS免费高分课程和创建、维护EC2动手实践

亚马逊云科技(AWS)是全球云行业最&#x1f525;火的云平台&#xff0c;在全球经济形势不好的大背景下&#xff0c;通过网课学习亚马逊云科技AWS基础备考亚马逊云科技AWS证书&#xff0c;对于找工作或者无背景转行做AWS帮助巨大。欢迎大家关注小李哥&#xff0c;及时了解世界最前…

Go 中的类型推断

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

商城源码从哪里找

商城源码可以从多个渠道获取&#xff0c;具体包括开源平台、专门的商城系统提供商、代码分享网站等。不同的渠道可能适合不同的需求和技术水平。下面将详细分析各个渠道的特点及优缺点&#xff1a; 开源平台 Gitee&#xff1a;Gitee是一个知名的代码托管平台&#xff0c;提供…

Git本地仓库的搭建与使用

目录 一、前言 二、Linux下搭建 git 仓库 三、Windows下搭建 git 仓库 一、前言 做项目时&#xff0c;我们常常需要将自己的代码进行托管&#xff0c;但有时候 Github 的速度属实叫人流泪。有的人会选择 Gitee 等进行托管代码&#xff0c;这当然是可以的。那如果没有其他代码…

怎么判断自己是否适合学习PMP?

判断自己是否适合学习PMP项目管理专业人士认证&#xff0c;可以从以下几个方面进行考量&#xff1a; 1、职业发展需求&#xff1a; 如果您在项目管理领域工作&#xff0c;或计划未来从事相关工作&#xff0c;PMP认证能显著提升您的竞争力。 对于项目经理、产品经理、技术领导…

LabVIEW中使用 DAQmx Connect Terminals作用意义

该图展示了如何在LabVIEW中使用 DAQmx Connect Terminals.vi 将一个信号从一个源端口连接到一个目标端口。这种处理有以下几个主要目的和作用&#xff1a; 同步操作&#xff1a; 在多任务、多通道或多设备系统中&#xff0c;可能需要不同的组件在同一时刻执行某些操作。通过将触…

【LLM大模型】机器学习导论(西瓜书)[推荐阅读]

哈喽啊大家&#xff0c;今天又来给大家推荐一本机器学习方面的书籍<机器学习西瓜书>。本书作为该领域的入门教材&#xff0c;在内容上尽可能涵盖机器学习基础知识的各方面。 为了使尽可能多的读者通过本书对机器学习有所了解&#xff0c;作者试图尽可能少地使用数学知识…

李良济“小儿推拿妈妈班”圆满结课,以中医智慧守护儿童健康成长!

孩子生场病&#xff0c;妈妈半条命&#xff01;作为妈妈最害怕的就是孩子生病&#xff0c;自己又无能为力&#xff01; 为了帮助妈妈们&#xff0c;正确应对孩子健康问题&#xff0c;日常生活中科学帮助孩子提升体质少生病&#xff01; 参加此次课程的&#xff0c;不仅有妈妈&a…

【开源】基于RMBG的一键抠图与证件照制作系统【含一键启动包】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【Python】已解决:(paddleocr导包报错)ModuleNotFoundError: No module named ‘paddle’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;&#xff08;paddleocr导包报错&#xff09;ModuleNotFoundError: No module named ‘paddle’ 一、分析问题背景 近日&#xff0c;一些使用PaddleOCR库进行文字…

windwos下mysql的udf提权

MySql UDF提权介绍 UDF(User Defined Functions)即用户自定义函数&#xff0c;通过这种方式可以实现命令执行&#xff0c;其原理是通过lib_mysqludf_sys提供的函数可以执行系统命令 攻击场景:同之前利用日志写WebShell的场景&#xff0c;即堆叠注入或MySQL终端权限或类似phpMy…

关于《中国PostgreSQL考试认证体系》通知

为响应国家大数据战略发展的号召&#xff0c;进一步推动PostgreSQL开源数据库在国内的快速发展&#xff0c;加强PostgreSQL 数据库相关人才培养&#xff0c;由政府相关部门批准发起&#xff0c;组成中国PostgreSQL认证考试中心及PostgreSQL 中国大学&#xff0c;旨在共同规范和…

【保姆级介绍下C语言中的运算符的优先级】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…