原文地址: https://www.elastic.co/guide/cn/elasticsearch/guide/current/_closing_thoughts.html, 版权归 www.elastic.co 所有
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/_closing_thoughts.html
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/_closing_thoughts.html
请注意:
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
总结edit
本小节涵盖了许多基本理论以及很多深入的技术问题。聚合给 Elasticsearch 带来了难以言喻的强大能力和灵活性。桶(bucket)与度量(metric)的嵌套能力,基数(cardinality)与百分位数(Percentiles)的快速估算能力,定位信息中统计异常的能力, 所有的这些都在近乎实时的情况下操作的,而且全文搜索是并行的,它们改变了很多企业的游戏规则。
聚合有这样一个特点:一旦我们开始使用它,我们就能找到很多其他的可用场景。实时报表与分析对于很多组织来说都是核心功能(无论是应用于商业智能还是服务器日志)。
Elasticsearch 默认给 大多数 字段启用 doc values,所以在一些搜索场景大大的节省了内存使用量,但是需要注意的是只有不分词的字符串(unanalyzed string) 类型的字段才能使用这种特性。
内存的管理形式可以有多种形式,这取决于我们特定的应用场景:
-
在规划时,组织好数据,使聚合运行在
not_analyzed
字符串而不是analyzed
字符串,这样可以有效的利用 doc values 。 - 在测试时,验证分析链不会在之后的聚合计算中创建 高基数(high cardinality) 字段。
- 在搜索时,合理利用近似聚合(approximate aggregations)和数据过滤。
- 在节点层,设置硬内存大小以及动态的断熔限制。
- 在应用层,通过监视内存使用情况和控制缓慢的垃圾收集周期,可以向集群中添加更多的节点
大多数实施会应用到以上一种或几种方法。确切的组合方式与我们特定的系统环境高度相关。
无论采取何种方式,对于现有的选择进行评估,并同时创建短期和长期计划,都十分重要。先决定当前内存的使用情况和需要做的事情(如果有),通过评估数据增长速度,来决定未来半年或者一年的集群的规划,使用何种方式来扩展。
最好提前计划好集群的这些生命周期,而不是在凌晨3点因为集群的堆利用率达到90%而惊慌失措。