对于性能优化,Elasticsearch(以下简称ES)的索引优化是提高性能的关键因素之一。合理的设计索引,合理的分片和副本以及合理的缓存设置等,都有利于提升ES的索引性能和查询效率。
一、合理的索引设计
合理的索引设计是确保 ES 高效运行的关键因素之一。以下是一些设计ES索引时应考虑的最佳实践:
1. 理解数据和查询需求
数据特性:了解数据的类型(文本、数字、地理位置等)、大小和复杂性。
查询模式:明确你的查询需求,包括查询的频率、类型(全文搜索、精确匹配、范围查询等)以及期望的响应时间。
2. 索引结构优化
合理使用字段类型:根据数据的性质选择合适的字段类型,如text、keyword、date等。
控制索引映射:通过显式定义索引映射来控制字段的索引方式和格式化。
避免过度索引:不要索引那些永远不会被搜索的字段,可以在映射中将其设置为false。
3. 利用别名和索引模板
索引别名:使用索引别名可以更灵活地管理索引,如无缝切换索引或实现索引的滚动升级。
索引模板:利用索引模板可以自动应用预定义的设置和映射到新创建的索引,简化管理工作。
4. 考虑数据生命周期管理
使用ILM(Index Lifecycle Management):Elasticsearch提供了索引生命周期管理功能,允许你基于索引的大小或年龄自动执行优化、滚动升级和删除操作。
二、合理的分片和副本
合理设置Elasticsearch中的分片和副本是确保高效性能和数据可靠性的关键。它是一个需要根据具体情况不断调整和优化的过程,没有一成不变的规则。理解自己的数据特性和业务需求,做出选择,这里提供一些指导原则和建议:
1. 分片 (Shards)
分片是Elasticsearch进行数据分布和并行处理的基本单位,一个索引可以被分成多个分片。合理设置分片数量对于优化存储、查询性能和扩展性至关重要。
分片大小:理想的分片大小通常在几GB到几十GB之间。太大的分片会增加恢复时间和降低某些操作的速度,而太小的分片则可能浪费资源并增加集群的管理开销,这会严重影响搜索性能。
默认分片数:Elasticsearch 7.x版本以后,默认创建的索引有1个主分片。主分片的设置需要结合集群节点规模、全部数据量和日增数据等维度综合考量才给出的值,一般建议设置为数据节点的1~3倍。
预估数据量:在确定分片数量时,考虑预期的数据增长。可以通过预估总数据量除以理想的分片大小来计算理想的分片数量。
扩展性:分片一旦被创建,其数量就不能更改(除非重新索引)。如果预计数据量会显著增长,应该规划额外的分片以便未来扩展。
2. 副本 (Replicas)
副本是分片的拷贝,用于提供数据冗余、提高查询吞吐量和提升系统的容错能力。
副本数量:至少设置一个副本是一个好习惯,这样即使失去一个节点也不会丢失数据。更多的副本可以提高读取性能,但会占用更多的硬盘空间和资源。Elasticsearch 7.x版本以后,默认创建的索引有1个副分片。对于一般的非高可用场景,一个副本基本足够。
读写比例:如果读请求远多于写请求,增加副本数量可以提高读取性能,因为查询可以在多个副本上并行执行。
资源和性能权衡:增加副本会提高查询性能,但同时也会增加索引和更新操作的开销,因为所有的写操作都必须在所有副本上执行。增加副本前,要考虑磁盘存储空间的容量上限和磁盘警戒水位线,其本质还是以空间换时间。
动态调整:副本数量可以根据需要动态调整,不会影响现有数据的完整性或可用性。
3. 实践建议
使用Index Templates:通过索引模板自动应用分片和副本的设置,以确保新索引遵循最佳实践。
监控和调整:利用Elasticsearch提供的监控工具,如Elasticsearch自身的监控API和Kibana,定期检查分片和副本的状态,并根据需要进行调整。
测试和评估:在生产环境部署前,通过测试来评估不同分片和副本配置下的性能表现,找到最适合自己数据和查询特性的设置。
三、合理的索引设置
1. 合理调整堆内存的索引缓冲区大小
堆内存中,索引缓冲区用于存储新索引的文档。填满后,缓冲区中的文档将最终写入磁盘上的某个段。索引缓冲的设置可以控制多少内存分配给索引进程。这是一个全局配置,会应用于一个节点上所有不同的分片上。 index_buffer_size的默认值为堆内存的10%,如下:
indices.memory.index_buffer_size: 10%
比如,给JVM提供31G的内存,它将为索引缓冲区提供3.1G的内存,一般情况下足以容纳大量的数据和写入操作。如果数据量着实非常大,则建议调大该默认值,比如调整为对内存的20%。但是必须在集群中的每个数据节点上进行配置。缓冲区越大,意味着能缓存的数据量越大,相同时间内,写入磁盘的频次低、磁盘IO小,间接提升写入性能。
indices.memory.min_index_buffer_size: 48mb
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
(备注大数据获取)**
[外链图片转存中…(img-BPHyG4tP-1712957292102)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!