1、什么是Elasticsearch
1.1 官方定义
Elasticsearch
(后称为 ES )是一个天生支持分布式的搜索、聚合分析和存储引擎。
1.2 民间叫法
- 搜索引擎
- 全文检索引擎
- 分布式文档系统
- 分布式数据库
- OLAP系统
- 分布式搜索中间件
不要去死背概念,概念应该作为一种辅助的手段帮助我们去理解一项技术或知识,总之,等你真正会用了,你就知道它是一个啥玩意儿了。
1.3 Elastic Stack(ELK Stack)
2、特点
- 开源、免费:基于Apache License 2.0开源协议,并且完全免费。
- 基于Java语言:Elasticsearch基于Java语言开发,运行在Jvm环境中。
- 基于Lucene框架:基于开源的Apache Lucene框架开发。
- 原生分布式:不依赖与Zookeeper,自带分布式解决方案。
- 高性能:支持海量数据的全文检索。支持PB级数据秒内响应!对于ES来说,上亿级别数据只不过是起点!性能几乎没有上限,足以满足各种对性能要求极高的场景。
- 可伸缩:弹性搜索,可根据不同规模服务对性能需要的不同而动态扩展或收缩性能。既可以基于自己的笔记本电脑部署,也可以在承载了 PB 级数据的成百上千台服务器上运行
- 易扩展:支持非常方便的横向扩展集群。
- 开箱即用:对于小公司,解压后零配置启动服务即可立即使用,门槛极低
- 跨编程语言:支持Java、Golang、Python、C#、PHP等多种变成语言,几乎所有语言开发者都可以使用Elasticsearch。
3、应用场景
3.1 为何要学习ES
3.2 应用场景广泛
众所周知!几乎没有一款软件是没有搜索功能的。而毫不客气的说,只要是用到搜索的场景,ES几乎都可以说是最好的选择。
3.3 起步薪资高
搜索相关的岗位,包括不仅限于如 “搜索算法工程师”、“搜索排序优化”、“搜索引擎架构师”、“ELK日志系统组件开发”、“搜索推荐工程师”等。
4、常见指标速记
4.1 ES支持的搜索类型
- 结构化搜索
- 非结构化搜索
- 文本搜索
- 地理位置搜索
这里相关的面试题有:ES支持哪些类型的查询
推荐阅读:2022最新ES面试题整理
4.2 擅长与不擅长
ES 最擅长从海量数据中检索少量相关数据,但不擅长单次查询大量数据(大单页)
4.3 写入实时性
ES是OLAP系统,侧重于海量数据的检索,而写入实时性并不是很高,默认1秒,也就是ES缓冲区Buffer的刷新间隔时间,不了解Elasticsearch写入原理的同学可以暂时忽略。ES并非忽略了对写入性能的优化,而是“有意为之”,其原因就在于基于 ES 的写入机制,其写入实时性和大数据检索性能是一个二选一的行为。实际上生产环境中我们经常通过“牺牲写入实时性”的操作来换取更高更快的“数据检索”性能。
4.4 不支持事务
正因为ES的写入实时性并不高,如果我们需要快速响应用户请求,我们常采取的手段就是使用缓存,但是在很多高并发的场景下,我们需要数据保持强一致性(如银行系统),因此需要使用具有ACID特性的数据库来支持,而MySQL就是一个比较好的选择。
4.5 极限的性能
彪悍!快到无与伦比,快到不可思议!
PB(1PB = 1024TB = 1024²GB)级数据秒内响应。
经常有同学问,老师我们公司集群几百万条数据,ES查询很慢,是不是达到瓶颈了。我只能告诉你,学完这套课程,你的问题不攻自破。以“亿”为单位的数据量对 ES 来说都只是起点,远远谈不上瓶颈。
4.6 看看大家喜闻乐见的排行榜
以下是权威评测机构对主流数据库(Search-Engines类目)的排行,ES 常年霸榜
https://db-engines.com/en/ranking/search+engine
5、选型
如果不是工作需要,无脑选 ES
Elasticsearch | Solr | MongoDB | MySQL | |
DB类型 | 搜索引擎 | 搜索引擎 | 文档数据库 | 关系型数据库 |
基于何种框架开发 | Lucene | Lucene | ||
基于何种开发语言 | Java | Java | C++ | C、C++ |
数据结构 | FST、Hash等 | B+ Trees | ||
数据格式 | Json | Json/XML/CSV | Json | Row |
分布式支持 | 原生支持 | 支持 | 原生支持 | 不支持 |
数据分区方案 | 分片 | 分片 | 分片 | 分库分表 |
业务系统类型 | OLAP | OLAP | OLTP | OLTP |
事务支持 | 不支持 | 不支持 | 多文档ACID事务 | 支持 |
数据量级 | PB级 | TB级~PB级 | PB级 | 单库3000万 |
一致性策略 | 最终一致性 | 最终一致性 | 最终一致性即时一致性 | 即时一致性 |
擅长领域 | 海量数据全文检索大数据聚合分析 | 大数据全文检索 | 海量数据CRUD | 强一致性ACID事务 |
劣势 | 不支持事务写入实时性低 | 海量数据的性能不如ES随着数据量的不断增大,稳定性低于ES | 弱事务支持不支持join查询 | 大数据全文搜索性能低 |
查询性能 | ★★★★★ | ★★★★ | ★★★★★ | ★★★ |
写入性能 | ★★ | ★★ | ★★★★ | ★★★ |