ElasticSearch QueryCache源码理解(基于6.0.0-rc2版本)

本文深入探讨了ElasticSearch中的三种核心缓存机制:query缓存、field缓存和request缓存,重点分析了QueryCache的工作原理,包括其缓存策略、命中率低的原因及实现流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于频繁的查询,查询结果缓存是提高效率的有效做法。

ElasticSearch缓存分为node缓存与index缓存;

其中node缓存:

1.query缓存(是属于lucene的)

2.field缓存

3.request缓存

以下分析一下QueryCache;

QueryCache是主要dsl的子查询语句的结果集缓存,对于后续相同的查询可以直接取缓存数据

以上是核心三种缓存的源代码

本集群query_cache情况:

总缓存量960.18M

命中率:0.06, 非常低

场景分析原因:现阶段的大多数查询都是带上秒级别的时间查询,所以导致大量缓存失效,而且数据实时存储segment不断合并,也会导致缓存不断失效。缓存利用率非常低,即使加大indices.queries.cache.count与indices.queries.cache.size也效果不明显,过大反而会容易OOM。

缓存实现流程:

IndicesQueryCache --->  LRUQueryCache  --->  QueryCachingPolicy  其中UsageTrackingQueryCachingPolicy实现了QueryCachingPolicy接口

IndicesQueryCache 会使用最近使用算法的LRUQueryCache与QueryCachingPolicy 去具体实现缓存细节。

接下来分析UsageTrackingQueryCachingPolicy的缓存策略:

isCostly方法的作用:判断是否是复杂的查询,一般并联的都是复杂查询

shouldNeverCache方法的作用:应该是不缓存的查询,比如说term查询,MatchAllDocs查询,etc.

minFrequencyToCache 方法中,对于高昂查询语句,查询两次就缓存进入缓存。一般查询5次将进入缓存,对于BooleanQuery与DisjunctionMaxQuery这两个查询4次保存缓存。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值