栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 云计算 > 云平台

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

云平台 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

写入性能 服务器资源
资源数值
服务器华为
系统centos7.9
cpuIntel® Core™ i5-10500 CPU @ 3.10GHz、6核12线程
mem62G
disk机械硬盘、3.6T
单机写入性能

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

线程线程延迟时间(ms)数据量(W)平均响应时间(ms)QPS
30005.9338222
300081369217

附件一:

附件二:

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

写入性能优化

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

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

参数优化后值含义
index.refresh_interval10s缓存刷新时间,即10s后数据才能被搜索
index.translog.durabilityasync异步
index.translog.flush_threshold_size1024mbtranslog大小达到多大时落盘
index.translog.sync_interval30stranslog每隔多久落盘

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

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

线程线程延迟时间(ms)数据量(W)平均响应时间(ms)QPS
5001001000134100

附件:


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

查询性能

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/896060.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号