Elasticsearch干货(九):Elasticsearch崩溃风险,elasticsearch干货
我们在使用Elasticsearch时应该选择性的避免一些可能导致集群变慢甚至崩溃的操作,这是非常必要的。
通配符
我们在查询时,或多或少可能会用到通配符(比如:*)来进行查询操作。但是一个通配符下对应的往往是非常大的数据集,这种情况下,很容易导致集群变慢。所以我们在使用通配符时一定要注意,通配符下的数据集是否过大。
对于分词字段聚合查询
我们一定要避免对分词字段的聚合操作,尤其是类似content这类字段,分词结果往往数量级很大。Elasticsearch中对于分词字段的聚合是针对分词结果的term进行聚合,而非整个field_value,这种操作结果就是占用大量的系统内存。所以,需要聚合的字段我们不要分词,一般设置keyword即可。
聚合基数
对于聚合字段,如果聚合的基数很大,一样会导致系统很大的开销。什么是聚合基数呢?举个例子说就是,你将要对人名进行分组聚合,可以想像,一旦你的系统中用户数过亿,那这个基数就非常大了。所以对于基数过大的聚合,最好还是通过其他办法来实现聚合操作。
Mapping
我们都知道,Elasticsearch中每个节点都是可以处理index、delete、update、search请求的。但是在index时,如果插入的doc中存在一个未知字段,那就涉及到mapping的修改(增加新field)。但是mapping修改是要锁住整个索引的,因为mapping作为集群状态信息是维护在Master,虽然所有节点都有同步集群状态,但只有Master可以进行修改,就是说要等待Master修改Mapping信息并同步到所有节点后,才能进行下一步插入操作,这期间整个索引都是锁住的。这在一些场景是很致命的,所以一般建议配置Mapping:dynamic=false,来禁止Mapping动态修改,但这只是从一定程度上减少了Mapping对集群的影响。
参考:Elasticsearch原理(五):Master机制及脑裂分析
更多:Elasticsearch深入理解专栏
——————————————————————————————————
作者:桃花惜春风
转载请标明出处,原文地址:
https://blog.csdn.net/xiaoyu_BD/article/details/82842689
如果感觉本文对您有帮助,您的支持是我坚持写作最大的动力,谢谢!