参与过搜索、数据分析等项目的开发者对于ElasticSearch较为熟悉,虽说ES目前应用广泛,但其实它的性能并非我们想像的那么好。
ElasticSearch的定位是什么?
ElasticSearch(简称ES)是用Java编程语言开发的基于Lucene的一款企业级搜索引擎服务器。它支持分布式部署,而且对外提供了RESTful API,便于各类编程语言调用。
ES性能并非想像中的那么好
ES数据量一大时,特别是第一次搜索的时候耗时会很久(甚至10s以上)。也不要认为改个参数就能改善所有性能慢的场景。
通过ES慢日志可分析查询效率
ES提供了慢日志,但默认是没有开启的。ES中的慢日志主要分两类:索引慢日志、搜索慢日志。如何开启呢?参考如下:
PUT /my_index/_settings{
"index.search.slowlog.threshold.query.warn" : "10s",
"index.search.slowlog.threshold.fetch.debug": "500ms",
"index.indexing.slowlog.threshold.index.info": "5s"
}
ES查询性能优化方案
1、升级硬件配置(硬盘、内存)
对于硬盘建议选用SSD,它比机械硬盘读写速度更快,另外内存需要适时调整。
2、JVM参数调优
要知道ES是用Java开发的,跑在JVM中,如果JVM参数设置不当也会影响ES的性能!ES安装后默认的堆内存是1G,这个值太小了,需要适当调大。
3、加大文件系统缓存设置
ES依懒底层的FileSystem Cache,文件系统缓存值若太小则会导致ES查询时会从硬盘中查询,效率低。若文件系统缓存大小设置合理,则很多查询可以直接从缓存内查询。
4、减少副本数量
ES默认副本是3个,副本越多虽然能提高集群的可用性,但是也增加了搜索的并发数、也会影响索引写入效率。所以建议副本不要过多,一般1~3个足够了。
5、禁止深度分页
ES它的分页效率很低(若每页10条,查询第100页时,ES实际查询的是每个Shard中的1000条数据进行处理后再返回第100页里的10条数据),页数越靠后,CPU消耗越大,查询效率越低!所以我们要禁止深度分页。
6、Filter 比 Query 效率好
Filter查询结果可以缓存,而且不需要像Query那样计算相关性分值,所以Filter效率更高。
以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!
ES(Elasticsearch)的大索引处理可以采取以下几种方法:
1. 使用分片和副本:ES将索引分为多个分片(shard),每个分片存储部分数据,可以水平扩展。同时,每个分片还可以创建多个副本(replica)来提高数据的可靠性和查询性能。
2. 提前划分分片:可以在创建索引时就指定分片数量,以适应预期的数据量和查询负载。可以根据数据量、节点数量和硬件性能等因素,进行合理的分片设置。
3. 优化查询性能:利用ES的查询性能优化功能,如使用适当的查询类型、过滤器、聚合操作等,减少查询的响应时间。
4. 使用路由参数:当索引数据量很大时,可以使用路由参数来将数据分配到特定的分片中。这样可以避免某些热点数据集中在单个分片上,提高整体查询性能。
5. 增加硬件资源:如果数据量超过了单个节点的处理能力,可以通过增加硬件资源,如CPU、内存、存储空间等,来提高整体索引的性能。
6. 定期维护索引:定期执行索引的刷新、优化、合并等维护操作,可以提高索引的查询性能和空间利用率。
需要根据具体的业务需求和系统资源情况,采取合适的方法来处理大索引问题。
评论列表 (0条)