ElasticScarch的学习总结
ElasticScarch简介:
从字义上理解就是弹性搜索的意思,其实他就是一个搜索引擎,基于Lucene开发的分布式搜索引擎,和基于RESTful Web接口,搜索接近实时、快速、稳定。目前这款搜索引擎非常的健壮和流行。本文章总结的都是一些学习过的知识。另外有操作的文档,建议最好是先自己动手搭建好之后再看本文章。(每个人学习的方式都不一样,个人不太喜欢太理论的东西,我喜欢先动手操作一遍再理论 这样的学习方式对我来说比较高效率。)
特点介绍:
- 分布式: 任何的单点出现故障,都不会影响集群的整体运作。
- 支持RESTful接口:对外提供RESTful接口服务,降低服务的局限性、可跨平台。
- 实时索引: 实时索引其实是近实时,它最快的速度可以到达写入数据后1秒后立马可见。
ElasticScarch名词的解释:
每门技术都有自己的专业名词,下面总结一下该技术的名词解释,在用ElasticScarch的过程中可能会经常听到一些专业名词,下面为大家解释并且理解这些词汇的概念。
名词解释:
- Cluster(集群): ElasticScarch是一个分布式的搜索引擎,它由多台机器的Node(节点)组成在一起,每台机器都有ClusterName,当他们发现自己的ClusterName相同时,就会组织成一个Cluster(集群),他们会共同分享数据、又具有负载均衡的特性。
- Node(节点):相当于一个单节点的ElasticScarch,单机的一个服务,在Cluster(集群) 中的其中一台主机。
- Shards(分片):一个Index(索引)是由N个、多个Shards(分片)组成的,把Index(索引)的数据都分在不同的分片上,再把分片放在不同的物理机器上。由多台机器承载这些大量的数据。
- Replicas(副本):他会从Shards(分片)中复制多份的分片,当装有Shards(分片)的机器宕机后,会自动成为主分片,一个安全的备份。
索引名词解释:
- Index(索引): 一个Index(索引)有一个分片的概念,一个Index(索引)包含了N个分片,因为ElasticScarch是基于Lucene封的,一个分片又可以理解成是一个Lucene的索引。(先把它理解成一个大的关系型数据库)
- Type(类型):在一个Index(索引)中你可以有一种或者多种数据类型。(理解成在一个关系型数据库中有一张或者多张表)
- Document(文档):一个文档是一个可被Index(索引)的基础信息单元。(理解成数据库表里面的一条数据)
- Field(列):Field(列)是ElasticScarch中最小的单位(一条数据某一列、一个字段)
ElasticScarch的架构体系:
ElasticScarch的架构图:
我们从最底层往上讲
Gateway层:
最底这一层最主要是是做数据持久化的,其实就是数据层,可以看到可以支持各种的存储系统,本地的存储系统、HadoopHDFS等等各种各样的数据存储系统,用于存元数据。
Lucene层
ElasticScarch的底层就是对Lucene的一个封装,它由始至终都要用到Lucene,ElasticScarch在Lucene的基础之上做了一个分布式的框架,把多个Lucene的索引给管理起来,最后做一个非常大规模的搜索引擎。
倒数第三层 index、search、mapping:
- index模块: 怎么创建某个索引,数据如何创建,如何存储 都由它来管理。
- search模块: 数据的查询由它来完成。
- mapping模块: 相单于如何创建一个表的结构、怎么创建这个mapping都由它管理
- River模块: 这个模块现在没有了,我记得是数据同步还是什么鬼(反正不重要)
倒数第四层 Discovery、Scripting、3rdPlugins:
- Discovery模块: 服务发现模块、当有节点要加入进来需要通过此模块,主要处理节点与节点之间的问题,目前实现有两种方式,分别是ZEN、EC2,用的最多的是ZEN。
- Scripting模块: 脚本模块、可以自己写一段脚本代码 来进行元数据的二次处理 返回给前台页面。(性能低最好别用)
- 3rdPlugins:第三方插件,ElasticScarch支持很多的第三方插件。
Transport层:
Transport层主要用于数据的传输、想访问ElasticScarch,第一步就是要和它进行连接,那么连接的步骤和数据的传输,就在这层。一般我们都用http进行交互。
Memcached层:这个架构图是比较早期的,现在没有这一层了。以前这层好像是做缓存的(反正不重要)。
RESTful 层:这一层就很简单了,就不说了。