原文:ES(入门二):ElasticSearch简介及其发展历史
前言
在上篇文章ES(入门一):走进ElasticSearch中已经dui ES的简介做了介绍。这篇文章还是想就“ElasticSearch简介及其发展历史”作进一步补充。希望可以对ES的背景有更深的了解,个人觉得背景的了解也会有助于后面系统的学习。
背后的公司、愿景
我们都知道ES它是一款开源的、近实时、高性能的分布式搜索引擎,但是很多人可能不知道其背后的公司已经在纽约上市了,去年10月份的时候美国股市十分的萧条(很多人可能知道这个),但是有家公司他在上市首天开盘的涨幅就达到了94%,这其实就是ES背后的公司Elastic。
那我们先来看一个数字,ES为什么在资本市场受到这样的追捧:
- 从开源到上市
- ElasticSearch 客户
-
DBRanking2019年5月的数据库评测中 ,ES在Search Engine(搜索引擎)分类中名列第一
ElasticSearch简介
起源 - Lucene
这个看着很帅气的男人他叫Doug Cutting,是Lucene的创始人,同时他也是Hadoop的创始人,被称为Hadoop之父。重点还是来看下Lucene有哪些特点:
(1)基于Java语言开大的搜索引擎类库
(2)创建于1999年,2005年成为Apache顶级开源项目
(3)Lucene具有高性能、以扩展的有点
(4)Lucene的局限性:
- 只能基于Java语言开发
- 类库的接口学习成本高
- 原生并不支持水平扩展(这对于搜索引擎来说是一个非常大的问题)
ElasticSearch的诞生
Shay Banon是ElasticSearch的创始人,他曾说过:“搜索是每一个软件都必须拥有的功能”
2004年Shay Banon基于Lucene开发了Compass(ES的前身)
2010年Shay Banon重写了Compass,取名ElasticSearch:
- 支持分布式,可水平扩展
- 降低全文检索的学习难度(即提供了Rest API风格的接口),它也可以被任何编程语言调用
ElasticSearch的分布式架构
从这张图我们可以看出来:我们可以很方便的在自己的PC上安装ES环境,但数据变大的时候我们可以迅速扩展到数百个节点。
简单归纳:
- 集群规模可以从单个节点扩展至数百个节点
- 高可用 & 水平扩展:从服务和数据两个维度
- 支持不同的节点类型:支持Hot & Warm架构
支持多种方式集成接入
- 多种编程语言的类库(https://www.elastic.co/guide/en/elasticsearch/client/index.html)
Java / .NET / Python / Ruby / PHP / Groovy /Perl - RESTful API v.s Transport API: 9200 v.s 9300端口(建议使用RESTful API)
- 最新版支持JDBC & ODBC接入方式
ElasticSearch提供的主要功能
- 海量数据的分布式存储及集群管理能力:服务于数据的高可用,水平扩展
- 近实时搜索,性能卓越:结构化 / 全文 / 地理位置 / 自动完成
- 海量数据的近实时分析: 指聚合功能
结合一个真实事例看下其使用的场景:
这是一个个人比较喜欢的一个酒店订阅的平台,使用ES可以实现酒店的搜索,通过聚合(左侧)可以根据价格区间可以高效的筛选满足要求的结果列表。
Elastic的版本升级及重要版本的新特性
- 0.4:2010年2月第一次发布
- 1.0:2014年1月
- 2.0:2015年10月
- 5.0:2016年10月
- 6.0:2017年10月
- 7.0:2019年4月
新特性5.X
- Lucene 6.x(表示此时以来的Lucene版本)性能升级,默认打分机制从TF-IDF(计算分词相似的一个算法)改为BM 25
- 支持Ingest节点/Painiess Scripting / Completion suggested支持 / 原生的Java REST客户端
- Type标记成deprecated(过时,以前我们在创建索引的时候是需要创建一个Type标记的,现在可以不创建它),支持了keyword类型
- 性能优化:
(1)内部引擎移除了避免同一文档并发更新的竞争锁,带来15% - 20%的性能提升
(2)支持分片上聚合的缓存
(3)新增了Prefile API
新特性6.X
- Lucene 7.x
- 新功能
(1)跨级群复制(CCR)
(2)索引声明周期管理
(3)SQL的支持 - 更友好的升级及数据迁移
(1)在主要版本之间的迁移更为简化,体检升级
(2)全新的基于操作的数据复制框架,可加快恢复数据、 - 性能优化
(1)有效存储稀疏字段的新方法,降低了存储成本
(2)在索引时进行排序,可加快排序的查询性能
新特性 7.X
- Lucene 8.0
- 重大改进 - 正式废除单个索引下多Type的支持
- 7.1开始,Security功能免费使用
- ECK - Elasticsearch Operator on Kubernetes
- 新功能
(1)New Cluster coordination
(2)Feature-Complete High Level REST Client
(3)Script Score Query、 - 性能优化
(1)默认的Permary Shard数从5改为1,避免Over Sharding
(2)性能优化,更快的Top K
总结
ES是一个开源的搜素和分析引擎,有很好的的性能,天生支持水平个扩展;另外ES接口也支持多种客户端接入语言;有非常好的社区的支撑;目前以前有超过3.5亿次的下载量,原因是ES背后有一个很强的公司支撑。
欢迎关注更多个人博客:RelaxHeart网 - Tec博客