大家好,欢迎来到IT知识分享网。
欢迎关注专栏:Java架构技术进阶。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。
最近在给公司其他部门的同事输出关于 ElasticSearch (下面都简称ES) 的培训,内容从入门到(精通/放弃),反响还不错,有望在年底再冲一波绩效,哈哈。所以,独乐乐不如众乐乐,我整理了下大纲,脱敏了一些内容,发出来给大家一起学习一下,先从最基础的开始,后面会一步步深入,欢迎持续关注。
言归正传,要说ES那不得不先提一下 Apache Lucene,Lucene 是当下最先进、高性能、全功能的搜索引擎库。而ES是用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。
- 一个分布式的实时文档存储,每个字段 可以被索引与搜索
- 一个分布式实时分析搜索引擎
- 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
发展历程先来看看官网提到的一个有意思的小故事
后来 Shay 获得了一份工作,主要是高性能,分布式环境下的内存数据网格。这个对于高性能,实时,分布式搜索引擎的需求尤为突出, 他决定重写 Compass,把它变为一个独立的服务并取名 Elasticsearch。 第一个公开版本在2010年2月发布,从此以后,Elasticsearch 已经成为了 Github 上最活跃的项目之一,他拥有超过300名 contributors。 一家公司已经开始围绕 Elasticsearch 提供商业服务,并开发新的特性,但是,Elasticsearch 将永远开源并对所有人可用。 据说,Shay 的妻子还在等着她的食谱搜索引擎…
Elasticsearch 后来作为一家公司(Elastic公司)进行运作,定位为数据搜索和分析平台。在2014年6月获得7000万美元融资,累积融资过亿美元。ES现在可以与Java、Ruby、Python、PHP、Perl、.NET等多种客户端集成。也可与Hadoop、Spark等大数据分析平台进行集成,功能十分强大。基于Elasticsearch衍生出了一系列开源软件,统称为 Elatic Stack。包括了大家熟悉的ELK(ElasticSearch/Logstash/Kibana)等。
ES的特性和场景1. 特性分布式:横向扩展非常灵活全文检索:基于lucene的强大的全文检索能力;近实时搜索和分析:数据进入ES,可达到近实时搜索,还可进行聚合分析高可用:容错机制,自动发现新的或失败的节点,重组和重新平衡数据模式自由:ES的动态mapping机制可以自动检测数据的结构和类型,创建索引并使数据可搜索。RESTful API:JSON + HTTP2. 场景
- 站内搜索
- NoSQL数据库
- 日志分析
- 数据分析
相关概念对比 RDBMS
ES的核心概念
1. 节点(Node)一个运行中的 Elasticsearch 实例称为一个节点,而集群是由一个或者多个拥有相同cluster.name配置的节点组成, 它们共同承担数据和负载的压力。ES集群中的节点有三种不同的类型,一个节点可以充当一个或多个角色,默认三个角色都有:
- 主节点:负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。主节点并不需要涉及到文档级别的变更和搜索等操作。node.master: true
- 数据节点:存储数据和其对应的倒排索引。默认每一个节点都是数据节点(包括主节点),可以通过 node.data属性进行设置。node.data: true
- 协调节点:协调节点,只作为接收请求、转发请求到其他节点、汇总各个节点返回数据等功能的节点,均衡每个节点的负载。node.master: false; node.data: false
2. 分片(Shard)一个索引中的数据保存在多个分片中,相当于水平分表。一个分片便是一个Lucene 的实例,它本身就是一个完整的搜索引擎。我们的文档被存储和索引到分片内,但是应用程序是直接与索引而不是与分片进行交互。
ES实际上就是利用分片来实现分布式。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。当你的集群规模扩大或者缩小时, ES会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。
一个分片可以是主分片或者副本分片。索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。一个副本分片只是一个主分片的拷贝。 副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。
在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改。默认情况下,一个索引会有5个主分片,而其副本可以有任意数量。
主分片和副本分片的状态决定了集群的健康状态。每一个节点上都只会保存主分片或者其对应的一个副本分片,相同的副本分片不会存在于同一个节点中。如果集群中只有一个节点,则副本分片将不会被分配,此时集群健康状态为yellow,存在丢失数据的风险。
3. 索引(Index)Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。
所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。
4. 文档(Document)Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。
Document 使用 JSON 格式表示,下面是一个例子。
{ “user”: “张三”, “title”: “工程师”, “desc”: “数据库管理” }
同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/146722.html