Elasticsearch专栏-8.es读写性能及优化

这篇具有很好参考价值的文章主要介绍了Elasticsearch专栏-8.es读写性能及优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写入性能

服务器资源

资源 数值
服务器 华为
系统 centos7.9
cpu Intel® Core™ i5-10500 CPU @ 3.10GHz、6核12线程
mem 62G
disk 机械硬盘、3.6T

单机写入性能

将es堆内存增大到20G,其余配置不做任何修改,数据单条写入。测试结果如下

线程 线程延迟时间(ms) 数据量(W) 平均响应时间(ms) QPS
300 0 5.9 338 222
300 0 81 369 217

附件一:
Elasticsearch专栏-8.es读写性能及优化

附件二:
Elasticsearch专栏-8.es读写性能及优化
  从上面测试结果来看,在不做优化前提下,es并发写入单条耗时约在360ms。这个性能相比大多数场景都已满足,不过如果项目对数据存储和周转的实时性要求高,那么还是要对写入性能做优化。

写入性能优化

方案一:业务优化
  在业务上,最常见的优化手段就是变单条写入为批量写入。而es本身支持批量插入,就是bulk操作。我在第三章“Elasticsearch专栏-3.es基本用法-基础api”中也提到了bulk的使用方法。
  本次测试,我的优化方式是:数据接入时,先不写库,而是直接推送到消息队列中(这里我使用的是rabbitmq)。然后监听该队列,批量拿消息。测试时,是一次拿去1000条。最后将这1000条数据批量写入es。实测结果是,1000条批量写入耗时和单条写入耗时相差不大。附图略。
  除了按数量批量写入外,还可以按照时间。比如每秒写入一次,有多少数量就写入多少。其实这种方法应该更合理,像mysql底层数据和日志落盘的策略,其中就有每秒落盘一次的策略。上篇文章中,也做了图说明,有兴趣可以参考下。

方案二:底层优化
  除了业务优化外,还有就是从底层优化。而底层优化,最常见的就是刷盘策略。因为我们都知道,正在的耗时就是磁盘IO。
  这里我直接贴出优化的参数,如下:

参数 优化后值 含义
index.refresh_interval 10s 缓存刷新时间,即10s后数据才能被搜索
index.translog.durability async 异步
index.translog.flush_threshold_size 1024mb translog大小达到多大时落盘
index.translog.sync_interval 30s translog每隔多久落盘

  其中,效果最明显的就是index.translog.durability。它表示的是日志持久化策略,默认情况下是同步策略,即写一条数据要等日志落盘后才返回。这种效率慢,但能保证数据安全性。
  将index.translog.durability改为async后,就是异步策略。数据写入缓存后,里面返回,不会等待日志是否落盘成功。这种效率很快,但数据安全性差。

测试结果如下:(后台无报错,es入库数据量和jemter发送量一致)

线程 线程延迟时间(ms) 数据量(W) 平均响应时间(ms) QPS
500 100 1000 13 4100

附件:

Elasticsearch专栏-8.es读写性能及优化
从上面测试结果来看,改同步为异步后,写入性能有了量级的提升。这个平均耗时(13ms)和吞吐量(4100)已经相当于消息队列了。

查询性能

因为业务需要,有考虑从mysql切换到es。所以查询性能,我采用es和mysql做对比。数据量选用680w,1050w,2000w。查询内容包括:总和统计、多条件列表查询、分页查询、详情查询等多个维度。下面列出对比的数据。(数据结构和查询逻辑后续专门章节说明,本次只展示比对结果。)
1.总和统计耗时:ms

数据量 680w 1050w 2000w
es 18 29 45
mysql 36 52 144

2.近5天数量趋势统计耗时:ms

数据量 680w 1050w 2000w
es 71 62 450
mysql 2.7s 4.2s 8s

3.分组统计耗时:ms

数据量 680w 1050w 2000w
es 20 74 54
mysql 2.8s 4.3s 8.4s

4.es列表查询及分页耗时:ms

数据量 第一页 第10页 第100页 第1000页
1050w 79 35 30 34

5.详情查询耗时:ms

数据量 680w 1050w 2000w
es 61 55 62
mysql 37 35 60

从对比结果来看,es整体性能要优于mysql。总结如下:
1.数据量从百万级到千万级,对es的查询耗时影响不大,基本每次查询都在几十毫秒。但对mysql影响很大,数据量越多,查询越慢,这也符合实际情况。
2.es分页没有想象的那样,越靠后翻页越慢。整个分页查询都很稳定。
3.查询单条数据时,mysql如果走索引情况下,速度是非常快的,有可能比es都要快。
4.总的来说,es的性能和稳定性要比mysql好。无论查询条件变化如何,数据量多少,es的查询耗时都不会相差很大。

资源占用情况

cpu

线程 300t 500t
es 9% 9%
mysql 64% 112%

随着线程的增加,mysql占用CPU明显比es高

mem

数据量 680w 1050w 2000w
es 23G 23G 23G
mysql 24G - 48G

随着压测数据量的增加,es内存并没有增大,而mysql增加了很多。因为mysql innodb_buff我设置的是40G,所以增加这么多内存也不难理解,都被mysql底层缓存占用了。

disk

数据量 680w 1050w 2000w
es 2.1G 2.9G 5G
mysql 1.9G 2.7G 5.3G

从结果来看,mysql存储数据占用磁盘还是比es多。
总结:es对cpu、mem、disk等资源占用,相比mysql来说要少。文章来源地址https://www.toymoban.com/news/detail-410981.html

到了这里,关于Elasticsearch专栏-8.es读写性能及优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【elasticsearch】elasticsearch es读写原理

    今天来学习下 es 的写入原理。 Elasticsearch底层使用Lucene来实现doc的读写操作: 没有并发设计 lucene 只是一个搜索引擎库,并没有涉及到分布式相关的设计,因此要想使用Lucene来处理海量数据,并利用分布式的能力,就必须在其之上进行分布式的相关设计。 非实时 将文件写入

    2023年04月08日
    浏览(48)
  • Elasticsearch(五)--ES文档的操作(上)---写入文档

    使用ES构建搜索引擎时需要经常对文档进行操作,除了简单的单条文档操作,有时还需要进行批量操作。我们这章主要学习ES文档的增删改的操作,由于涉及到的代码量会比较多,所以分为3篇文章分别说明文档的这个三个操作。那么我们对文档操作的学习除了在kibana客户端之

    2024年01月16日
    浏览(42)
  • elasticsearch 读写性能调优

    elasticSearch 读写性能调优 elasticSearch作为java后端和大数据核心的技术之一,肯定在面试当中它的性能调优肯定是要问的,看了好多人整理的性能调优方案,确实受益匪浅。自己整理一份简单的性能调优,能应付面试就行了。哈哈哈!!! 一、写入调优 增加flush时间间隔,目的

    2024年02月13日
    浏览(38)
  • ElasticSearch第十五讲 ES数据写入过程和写入原理以及数据如何保证一致性

    ES 数据并发冲突控制是基于的乐观锁和版本号的机制 一个document第一次创建的时候,它的_version内部版本号就是1;以后,每次对这个document执行修改或者删除操作,都会对这个_version版本号自动加1;哪怕是删除,也会对这条数据的版本号加1(假删除)。 对于更新操作 客户端对

    2024年02月12日
    浏览(45)
  • ElasticSearch--优化写入速度的方法--修改配置

    原文网址:ElasticSearch--优化写入速度的方法--修改配置_IT利刃出鞘的博客-CSDN博客 说明         本文介绍如何优化ElasticSearch的写入性能。 相关网址 ElasticSearch--写入数据的流程(原理)_IT利刃出鞘的博客-CSDN博客 方案说明         下边的方案,有的比较推荐改动,有的不推荐改

    2024年02月14日
    浏览(34)
  • 【Java程序员面试专栏 专业技能篇】MySQL核心面试指引(三):性能优化策略

    关于MySQL部分的核心知识进行一网打尽,包括三部分: 基础知识考察、核心机制策略、性能优化策略 ,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第三部分:性能优化策略,子节点表示追问或同级提问 分布式数据库的处

    2024年01月25日
    浏览(41)
  • Hbase基本使用,读写原理,性能优化学习

    HBase简介 HBase定义 Apache HBase 是以 hdfs 为数据存储的,一种分布式、可扩展的 NoSQL 数据库 HBase数据模型 HBase 的设计理念依据 Google 的 BigTable 论文,论文中对于数据模型的首句介绍。 Bigtable 是一个稀疏的、分布式的、持久的多维排序 map。之后对于映射的解释如下: 该映射由行

    2024年02月08日
    浏览(44)
  • ElasticSearch学习笔记-第四章 ES分片原理以及读写流程详解

    在学习ES分片原理以及读写流程之前,需要先学习一些ES的核心概念以及ES集群环境的相关知识 4.1 ES核心概念 4.1.1 索引 索引(Index)相当于MySQL中的数据库,一个索引就是一个拥有几分相似特征的文档的集合。 4.1.2 类型 类型(Type)相当于MySQL中的表,一个类型就是索引的一个逻辑上

    2024年02月06日
    浏览(60)
  • es 聚合性能优化

    适用场景 :高基数聚合 。高基数聚合场景中的高基数含义:一个字段包含很大比例的唯一值。 本质上就是通过预先加载全局字典到内存中来减少磁盘I/O操作,从而提高查询速度。以空间换时间。 global ordinals 中文翻译成全局序号,是一种数据结构,应用场景如下: 基于 ke

    2024年04月25日
    浏览(28)
  • ES性能优化最佳实践- 检索性能提升30倍!

            Elasticsearch是被广泛使用的搜索引擎技术,它的应用领域远不止搜索引擎,还包括日志分析、实时数据监控、内容推荐、电子商务平台、企业级搜索解决方案以及许多其他领域。其强大的全文搜索、实时索引、分布式性能和丰富的插件生态系统使其成为了许多不同

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包