带你读《Elastic Stack 实战手册》之83:——4.3.2.Elasticsearch 开发人员最佳实践指南(3)

简介: 带你读《Elastic Stack 实战手册》之83:——4.3.2.Elasticsearch 开发人员最佳实践指南(3)

《Elastic Stack 实战手册》——四、应用实践——4.3 性能优化场景——4.3.2.Elasticsearch 开发人员最佳实践指南(2): https://developer.aliyun.com/article/1225222spm=a2c6h.13148508.setting.15.438f4f0e18NXNE


实战技巧(Strategy)

在最后一节中,我收集了解决上述未解决问题的便捷的实战技巧。

始终(尝试)坚持使用最新的 JVM 和 Elasticsearch 版本

Elasticsearch 是一个 Java 应用程序。像其他所有 Java 应用程序一样,它也有 hot paths

和垃圾回收问题。几乎每个新的 JVM 版本都会带来很多优化,你可以不费吹灰之力利用这些

优化。

Elasticsearch 有一个官方页面,列出了支持的 JVM 版本和垃圾收集器。在尝试任何 JVM 升

级之前,请务必先翻一翻如下文章清单:

·  https://www.elastic.co/guide/en/elasticsearch/guide/current/_don_8217_t_touch_thes

e_settings.html

·  https://www.elastic.co/cn/support/matrix#matrix_jvm


注意:Elasticsearch 升级也是免费获得性能提升的来源。

使用 Elasticsearch 完整和部分快照进行备份


Elasticsearch 可以便捷的实现全部索引的全量快照,或者部分索引数据的增量快照。

根据你的更新模式和索引大小,找到适合你的用例的快照最佳组合。


也就是说,例如,在 00:00 时有 1 个完整快照,在 06:00、12:00 和 18:00 时有 3 个 局部

增量快照。将它们存储在第三方存储也是一种好习惯。


有一些第三方 插件 可以简化这些情况。


举例:https://www.elastic.co/guide/en/elasticsearch/plugins/master/repository.html

与每份备份方案一样,安全起见,请确保快照可以还原并反复练习几次。


有一个持续的性能测试平台


像任何其他数据库一样,Elasticsearch 在不同条件下显示不同的性能:

·  索引,文档大小;

·  更新,查询/检索模式;

·  索引,集群设置;

·  硬件,操作系统,JVM 版本等。

很难跟踪每个设置的改变以观察其对整体性能的影响。确保你(至少)进行每日性能测试,以

帮助缩小范围,快速定位最近引入的、导致性能下降的可能的原因。

这种性能测试说起来容易做起来难。你需要确保测试环境:


·  能有代表性的生产环境数据

·   配置和生产环境一致

·  完全覆盖用例

·  考虑包括操作系统缓存的测试的影响。

使用别名

告诉你一些颇有见地的实操经验:永远不要查询索引,而要查询别名。


别名是指向实际索引的指针。你可以将一个或多个索引归为一个别名。


许多 Elasticsearch 索引在索引名称上都有内部上下文,例如 events-20190515 代表 201905

15 这一天的数据。


现在,在查询 events-* 索引时,应用程序代码中有两个选择:

选择 1:通过特定日期格式即时确定索引名称:events-YYYYMMDD。

这种方法有两个主要缺点:

1)需要回退到特定日期的索引,因此需要对整个代码库进行相应的设计以支持这种操作。

2)撇开所有时钟同步问题,在凌晨,你需要用程序或者脚本控制索引切换,确保数据写入下一

天索引。

选择 2:创建一个 events 别名,指向 events-* 相关的索引。负责创建新索引的组件如:

curator 或者 ILM(索引生命周期管理)可以自动将别名切换到新索引。

这种方法将带来两个明显的好处:

1)它没有以前方法的缺点。

2)只需指向 events 别名,代码就会更简洁。


避免拥有大量同义词


Elasticsearch 支持索引阶段和查询阶段指定 同义词。


没有同义词,搜索引擎是不完整的,但实战使用环境,注意如下问题:


·索引阶段同义词增加了索引大小,并增加了运行时开销。

·查询阶段同义词不会增加索引的大小,但顾名思义,这会增加运行时开销。

·使用同义词,很容易在尝试修复其他问题时无意间破坏某些其他内容。


所以,要持续监视同义词对性能的影响,并尝试为添加的每个同义词编写测试用例。


同义词官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis

-synonym-tokenfilter.html


《Elastic Stack 实战手册》——四、应用实践——4.3 性能优化场景——4.3.2.Elasticsearch 开发人员最佳实践指南(4): https://developer.aliyun.com/article/1225219?spm=a2c6h.13148508.setting.17.438f4f0e18NXNE

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
缓存 开发框架 监控
路由拦截器
路由拦截器
211 8
|
Java
数据结构之栈的讲解
数据结构之栈的讲解
170 0
|
10月前
|
存储 自然语言处理 Linux
《探秘计算机启动幕后英雄:BIOS/UEFI与GRUB/bootloader》
计算机启动过程看似瞬间完成,实则依赖BIOS/UEFI与GRUB/bootloader的精密协作。BIOS/UEFI负责硬件初始化与加载引导程序,如同“排头兵”确保硬件正常并找到操作系统;GRUB/bootloader则接管后续任务,加载内核并支持多系统选择。两者各司其职,无缝衔接,共同筑起计算机启动的基石,为我们带来快速稳定的使用体验。
362 20
|
12月前
|
物联网 程序员 芯片
你知道Hi3861芯片吗,支持OpenHarmony系统
本文介绍华为Hi3861芯片,该芯片集成了WiFi和蓝牙功能,具备低功耗、高集成度、强大通信能力和丰富接口资源,广泛应用于智能家居、智能穿戴、工业物联网和智慧城市等领域,助力开发者实现高效物联网解决方案。
654 0
你知道Hi3861芯片吗,支持OpenHarmony系统
|
JavaScript
jQuery+HTML5实现的微信大转盘抽奖源码
这是一款基于jQuery+HTML5实现的微信大转盘抽奖效果源码,是一款可配置奖品抽奖的jQuery大转盘抽奖代码,可实现点击按钮转轮旋转实现抽奖功能,效果逼真自然,代码里面有详细的注释,可以修改文字或者二次开发都可以
354 11
|
存储 SQL 关系型数据库
mysql中MyISAM和InnoDB的区别是什么
mysql中MyISAM和InnoDB的区别是什么
288 0
|
存储 消息中间件 JSON
LevelDB 存储模块 Go 语言封装及持久化队列实现
LevelDB 存储模块 Go 语言封装及持久化队列实现
|
机器学习/深度学习 存储 缓存
如何实现2000万QPS?Meta揭秘背后的AI平台MultiRay:日均处理8000亿次请求!
如何实现2000万QPS?Meta揭秘背后的AI平台MultiRay:日均处理8000亿次请求!
513 0
如何实现2000万QPS?Meta揭秘背后的AI平台MultiRay:日均处理8000亿次请求!
|
存储 Java 编译器
【JVM原理探索】Java各种类型对象占用内存情况分析(补充)
【JVM原理探索】Java各种类型对象占用内存情况分析(补充)
643 0
【JVM原理探索】Java各种类型对象占用内存情况分析(补充)

热门文章

最新文章

相关产品

  • 检索分析服务 Elasticsearch版