一次性带你搞明白面试必问题,谈谈你对ES的理解

开源
ES并不是万能,如果使用不恰当,也会带来一些性能瓶颈。不太建议使用复杂的关联查询,这对ES的性能影响非常大。

​有粉丝在评论区留言说,让我拍一期关于ES的视频。今天,我给大家分享一下我对ES的理解。

1、ES是什么

ES全称是Elastic Search,它是一个建立在全文搜索引擎库Lucene基础上的开源搜索和分析引擎。ES它本身具有分布式存储、检索速度快的特性。所以,我们经常会用它来实现全文检索的功能。

Elastic官网对ES的定义已经不再是ElasticSearch这一个组件,而是指Elastic Stack生态。

图片

而Elastic Stack主要包括ElasticSearch、Logstash、Kibana,这三个经典组合也称之为ELK。ElasticSearch主要用来做数据存储、Logstash主要用来做数据采集,Kibana主要用来做数据可视化展示。

图片

因为ES应用更广泛的场景还是ElasticSearch,所以,下面我们给大家分享的ES还是单指ElasticSearch。比如,网站搜索,日志聚集和检索,这些都可能会涉及到TB级别的数据场景,用ES是一个比较好的选择。

2、ES为什么这么快

ES之所以这么快,我认为主要有以下几个方面的原因:

图片

1、ES是基于Lucene开发的一个全文搜索引擎,一方面Lucene是擅长管理大量的索引数据;另外一方面,它会对数据进行分词以后再保存索引。这样,能够去提升数据的检索效率。

2、ES采用了倒排索引。所谓倒排索引就是通过属性值来确定数据记录位置的索引,从而避免全表扫描的问题。

3、ES存储数据采用了分片机制。

4、ES扩展性很好,支持通过水平扩展的方式来动态增加节点,从而提升ES的处理性能。能够支持上百台服务器节点的扩展,并且支持TB级别的结构化数据和非结构化数据。

5、ES内部提供的数据汇总和索引生命周期管理的功能,更加便于高效地存储和检索数据。

​3、ES应用指南

图片

当然,ES并不是万能,如果使用不恰当,也会带来一些性能瓶颈。不太建议使用复杂的关联查询,这对ES的性能影响非常大。

另外,还要避免深度分页查询。因为,ES的分页是通过from和size参数来实现,也就是说,在查询的时候,每个分片必须要先构造一个长度为from + size的优先队列,然后回传的网关节点。网关节点再对这些优先队列进行排序,再找到正确的size文档。而当from足够大的情况下,容易造成OOM以及网络传输性能下降的问题。

以上就是我对ES的理解。

责任编辑:姜华 来源: Tom弹架构
相关推荐

2019-08-06 09:21:45

2021-12-20 10:39:30

TopK排序代码

2024-02-28 08:18:13

Java日志项目

2024-09-27 15:43:52

零拷贝DMAIO

2024-10-24 16:14:43

数据传输CPU零拷贝

2022-03-21 09:05:18

volatileCPUJava

2022-06-30 09:10:33

NoSQLHBaseRedis

2023-11-28 12:25:02

多线程安全

2018-11-01 14:30:09

Redis数据库面试题

2013-04-17 09:16:37

2014-08-04 14:38:25

LinuxToken

2024-08-27 12:36:33

2020-07-08 15:30:29

Java面试题代码

2022-11-24 17:34:04

TCC分布式

2024-06-13 08:01:19

2019-07-26 06:42:28

PG架构数据库

2024-10-12 16:25:12

2023-09-26 07:11:15

KubernetesJob节点

2021-08-12 09:48:21

Webpack Loa工具Webpack

2024-08-26 14:52:58

JavaScript循环机制
点赞
收藏

51CTO技术栈公众号