ElasticSearch查询优化routing

Posted WannaRunning

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch查询优化routing相关的知识,希望对你有一定的参考价值。

如果一个索引分片多达一百,再加上每个分片数据量大的情况下ES查询速度会慢,这种情况可以根据业务情况考虑使用_routing优化。

_routing 路由

当索引一个文档的时候,文档会被存储在一个主分片上。在存储时一般都会有多个主分片。Elasticsearch 如何知道一个文档应该放置在哪个分片呢?其实ES默认会有一个routing的概念,并根据shard = hash(routing) % number_of_primary_shards 计算决定每个doc应该存储在哪个分片上。

借助_routing进行批量写入优化

ES写入性能本身就不是很强,特别是当用户采用bulk批量写入时,ES默认采用_id作为单个文档写入的routing,路由打散分片。这样一个bulk请求将会被均匀拆分打散为分片数量的子写入请求,发送给每个分片执行写入,协调节点需要等待所有分片写入完毕才会返回给客户端。当分片数过多时,就容易出现长尾子请求,即有可能部分子请求因节点故障或OldGC、网络抖动等延迟响应,导致整个bulk请求响应缓慢而堆积,最终导致节点写入队列打满出现写入拒绝。另一方面,拆分过多的子请求无法提升数据节点写入吞吐,无法充分利用 CPU。

创建索引时指定index.bulk_routing.enabled 参数为true即可实现定向路由。

通过 routing 的方式可以实现一个 bulk 只写入到一个分片,降低网络开销、提升数据节点 CPU 使用率、避免长尾分片影响整个 bulk 请求。

提升查询效率

如果不使用_routing时,执行查询时ElasticSearch内部流程是:

1.请求到达协调节点后,协调节点

以上是关于ElasticSearch查询优化routing的主要内容,如果未能解决你的问题,请参考以下文章

黄啊码什么是ElasticSearch?它会替代MySQL成为主流吗?如何优化?TP5如何接入ElasticSearch?

亿级规模的Elasticsearch优化实战

ElasticSearch实战(五十)-让Elasticsearch飞起来!百亿级数据存储与查询优化实战!!!

ElasticSearch实战(五十)-让Elasticsearch飞起来!百亿级数据存储与查询优化实战!!!

elasticsearch 查询优化

elasticsearch检索,聚合,建模,优化--《elasticsearch核心技术与实战》笔记