前言
When we learn a new technology,we need to know what it is,why we learn it and how to use it best
1. ES概述
- 是一个搜索引擎应用
- ES = 搜索引擎 + NoSQL数据库
- 基于Java和Lucene构建,可以用于全文搜索,结构化搜索以及近实时分析,并且提供一个分布式多用户能力的全文搜索引擎
- 支持RestFulweb风格的url访问
- 开源
2. ES基本概念
-
与传统的数据库管理系统比较

-
ES基本概念介绍
-
NRT(Near Realtime,近实时)
从写入数据到数据可以被搜索到有一个小延迟(大概1秒左右);基于es执行搜索和分析可以达到妙计 -
集群(Cluster)
包含多个节点,每一个节点属于哪个集群是通过一个配置(集群名称,默认为elasticsearch)来决定的 -
节点(Node)
节点也有一个名称(默认是随机分配的),节点的名称是十分重要的(在执行运维管理操作的时候),默认节点会去加入到一个名称为“elasticsearch”的集群。如果直接启动一堆节点,那么他们会自动组成一个elasticsearch集群. Of course,一个节点也可以组成一个elasticsearch集群。 -
索引(Index,可以与关系型数据库里的数据库概念对应)
索引是有几分相似属性的一系列文档的集合。 例如nginx日志索引,系统日志索引等 索引是由名字表示的,名字必须全部小写,我们可以通过这个名字来进行索引,搜索,更新和删除文档的操作 -
类型(type,可以与关系型数据库里表的概念对应,未来有可能会去除)
每一个索引可以由多个类型,类型是对索引的一个逻辑数据分类(根据数据结构的不同来将进行分类,相关的数据结构属于同一个类型) 比如博客系统,有一个索引,可以定义用户数据type,博客数据type,评论数据type -
文档(document,可以与关系型数据里列的概念相对应)
文档是es存储的最小数据单元,在Es中文档是以JSON格式存储的。 一个document可以是一条客户数据,一条商品分类数据,一条订单数据 -
映射(mapping,可以与关系型数据里约束的概念相对应)
-
-
ES其他概念介绍
-
分片(shard)和 副本(replica)
在实际过程中,索引存储的数据可以超过单个节点的硬件限制。 如10亿文档需要1TB空间,这样就不适合存储在单个节点的磁盘上。 因此为了解决这个问题,分片这个概念就出现了。 分片其实就是将索引进行分片(就是将一个数据规模极大的索引拆分成几个数据规模较小的索引,然后分别存储到不同节点上) 我们在创建索引的时候,可以定义想要分片的数量。 分片的两个重要原因: 1. 水平分割扩展,增大存储量 2. 分布式并行跨分片操作,提高性能和吞吐量 我们不需要考虑分片后如何进行跨分片操作,这些es会帮我们去处理 但是,为了应付那些无法预料的意外情况如网络问题等,强烈建议必须要有一个故障切换机制,来防止分片或者节点不可用 于是,副本就产生了 副本就是在我们对索引进行分片时,它会将分片之后的索引分片进行一份或者多份复制,这些复制分片就被称之为副本 副本使用的原因 1. 高可用性,索引分片要在不同节点上要进行副本的存储,以防止节点或者分片故障 2. 提高性能,增大吞吐量,搜索可以并行在所有副本上执行 总而言之,一个索引可以通过分片操作被分片成多个不同的索引分片,并且每一个索引分片可以有0个或者多个副本 分片和副本数量可以在每一个索引被创建时指定 索引创建后可以动态的修改副本的数量,但是不能修改分片的数量 默认情况下,elasticsearch为每一个索引分片5个主分片和1个副本,这就意味着至少集群只要需要2个节点。索引将会有5个主分片和5个副本,每一个索引总有10个分片 每个elasticsearch分片是一个Lucene索引。一个单个Lucene索引有最大的文档数LUCENE-5843, 文档数限制为2147483519(MAX_VALUE – 128)。 可通过_cat/shards来监控分片大小。 -
数据恢复(recovery)
又可以叫做数据重新分布,es在有节点加入或者退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据的恢复 GET /_cat/healt?v 可以看到集群的状态 -
数据源(river)
代表es的一个数据源,也是其他存储方式(如:数据库)同步到es的一个方法。它是以插件方式存在的一个Es服务,通过读取river中的数据并把它索引到es中 官方的river有couchDB,RabbitMQ,Twitter,Wikipedia等 -
网关(gateway)
代表es索引的持久化存储方式,es默认是先把索引存放到内存中,当内存满了时再将数据持久化到硬盘,当这个Es集群关闭再重新启动时就会从gateway中读取索引数据 es支持的gateway类型有 1. 本地文件系统(默认) 2. 分布式文件系统 3. Hadoop的HDFS 4. amazon的s3云存储服务 -
自动发现(discovery.zen)
代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互 -
通信(transport)
代表es内部节点或集群与客户端的交互方式,默认是使用tcp协议进行交互,它同时支持http协议(json格式),thrift,servlet,memcacehd,zeroMQ等传输协议(通过插件方式集成)
-
-
ES的特性
- 分布式:横向扩展非常灵活
- 全文检索:基于lucene的强大的全文检索能力
- 近实时搜索和分析:数据进入ES,可达到近实时搜索,还可进行聚合分析
- 高可用:容错机制,自动发现新的或失败的阶段,重组和重新平衡数据
- 模式自由:ES的动态mapping机制可以自动检测数据的结构和类型,创建索引并使数据可搜索
- RESTful API:JSON + HTTP
3. 集群运行状况
集群的运行状态一般有以下三种
- Green 一切正常
- Yellow 所有数据都是可以使用的,但是有些副本还没有进行分配
- Red 有些数据不可用
4. ES 和 Lucene
- Lucene只是一个框架,要充分利用他的功能,需要使用Java,并且在程序中集成Lucene,学习成本高,Lucene确实非常复杂
- ES是面向文档型数据库,这意味着它存储的是整个对象或者文档,它不但会存储文档数据,还会为他们建立索引,这样就可以搜索他们
5. ES vs Solr
-
solr的简单介绍
1. solr是Apache Lucene项目的开源企业搜索平台。主要功能包括:全文检索,命中标示,分娩搜索,动态聚类,数据库集成,以及富文本(如Word,PDF)的处理 2. solr是高度可扩展的,并提供了分布式搜索和搜索复制。Solr是最流行的企业级搜索引擎,Solr4 还增加了NoSQL支持。 3. Solr是用Java编写、运行在Servlet容器(如 Apache Tomcat 或Jetty)的一个独立的全文搜索服务器。 Solr采用了 Lucene Java 搜索库为核心的全文索引和搜索,并具有类似REST的HTTP/XML和JSON的API。 4. Solr强大的外部配置功能使得无需进行Java编码,便可对 其进行调整以适应多种类型的应用程序。Solr有一个插件架构,以支持更多的高级定制 -
ES vs Solr
- 二者安装都很简单
- Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能
- Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式
- Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供
- Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch
- Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用
6. Elasticsearch生态
- Kibana:ES的数据查询、分析和监控的可视化平台。ES6.3以后,Kibana开源免费
- Logstash:开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的 “存储库” 中
- Security:ES的权限管理工具。从 6.8 和 7.1 版本开始,核心安全功能(例如 TLS、文件和原生 Realm 身份验证,以及基于角色的访问控制)免费提供
- Curator:ES的索引和快照管理工具
- ELK:日志收集和分析开源方案
本文介绍了ElasticSearch(ES)的基本概念,包括其作为搜索引擎和NoSQL数据库的角色,基于Java和Lucene的构建,以及分布式、近实时分析等特性。ES的关键概念如集群、节点、索引、分片等被详细阐述,同时对比了ES与Lucene、Solr的区别,并提及Elasticsearch生态中的Kibana、Logstash等工具。
1984

被折叠的 条评论
为什么被折叠?



