05-doc-values-es控制聚合内存使用-elasticsearch权威指南翻译

在内存中的doc values是被heap限制的,横向进行扩展可以一定情况下解决这个问题,但你会发现你即使扩充节点后,重重的agg会在其他节点没有充分利用的时候花光你的HEAP空间。

认fielddata会写入内存中,但这不是唯一的选择,也可以写入到硬盘中,同时能达到同样的功能,但不是内存中的fielddata而是硬盘上的docvalue了。

doc value在1.0被加入进去,直到最近,doc value变的很慢,从多个方面,es和lucene已经把瓶颈问题解决了。

现在doc value比fielddata慢10%-25%,主要来自两个因素:

doc value存在于硬盘,但这个允许执行足够大的数据,同时可以使得ES_HEAP_SIZE设小,来提高垃圾回收以及系统稳定性。

doc values是在index的时候建立,而不是在search的时候建立,fielddata是在query倒排索引的时候建立,这样可以提高doc values的效率。

在内存和硬盘间的数据交换也会轻微的减慢fielddata,而doc value是异常的高效,所以对于很多的查询,你甚至感觉不到轻微的减慢,同时加快垃圾回收,提高初始时间可能是赚了。

这样充分利用了filesystem cache,如果这些数据常驻filesystem cache,等同于RAM了


enabling doc values

doc values除了不能用在analyzed字段上都能用,而且设置是field级别的,这样你可以fielddata和doc value结合使用。

PUT /music/_mapping/song

{

"properties" : {

"tag": {

"type": "string",

"index" : "not_analyzed",

"doc_values": true

}

}

}



将来可能doc value会成为认值。

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...