ElasticSearch快速入门

一.前言

  上周公司在做一个模块功能的时候 因为最后的结果数据量远远超过了预想的数据量  最后不得不把mysql换成Elastic Search,以前在学校的时候也没有1接触到这些东西 刚好这段时间处于项目空档期 所以刚好趁机学习一下

二.介绍

  ElasticSearch是一个分布式的RESTful风格的搜索和数据分析殷勤

  RESTful(一组架构约束条件和原则)

  特点:1.每一个URL代表一种资源;

     2.客户端使用GET,POST,PUT,DELETE4个操作方式的动词对服务端资源进行操作;GET用来获取资源;POST用来新建资源(也可以用来更新资源);PUT用来更新资源,DELETE用来删除资源;

     3.通过操作资源的表现形式来操作资源

     4.资源的表现形式是XML或者HTML

     5.客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必须的信息。

  言归正传,下面说一下ElaticSearch的特点

  查询:ElasticSearch允许执行和合并多种类型的搜索 结构化 非结构化 地理位置 度量指标 搜索方式随心而变

  分析:找到与查询最匹配的十个文档是一回事 并且聚合可以让你从大处着眼,探索数据的趋势和模式

  速度:很快 自己意会

  可扩展性:可以在笔记本电脑上运行 也可以在承载了PB级(1PB等于1024TB)数据的很多台服务器上运行;

  弹性:ElasticSearch运行在一个分布式环境中

  灵活性:具备多个案例场景 数字 文本 地理位置 结构化 非结构化 

三 说在前面

  ElasticSearch是一个高度可伸缩的开源全文搜索和分析引擎 ,允许您快速的接近实时的存储,搜索和分析大量数据 它是一个近乎实时的搜索平台 这意味着从索引文档到可以搜索的时间只有轻微的延迟(通常只有1s)

  Cluster:

  集群是一个或多个节点(服务器)的集合,他们共同保存你的整个数据,并提供跨所有节点的联合索引和搜索功能。一个集群由一个唯一的名称标识,默认这个唯一标识的名称是‘elasticsearch’。这个名称比较重要 因为如果节点被设置为按其名称加入集群,那么节点只能是集群的一部分。

  确保不要在不同的环境中用相同的集群名称。否则可能导致节点加入到错误的集群中。可以使用不同的关键字来分别用于开发,测试,和正式集群的名字

  Node:

  节点是一个单独的服务器,她是集群的一部分,存储数据,并参与集群的搜索和索引功能,节点也是由名称标识的 在默认的情况下 该名称是在 启动时分配给节点的随机通用唯一标识符(UUID) 但如果不想使用默认的节点名 可以定义到任何想要的节点名 但是这个名称一定是要具备足够的辨识度 便于你识别 网络中的哪些服务器对应于你ElasticSearch的集群中的哪些节点

  一个节点可以通过 配置集群名称 来加入到一个特定的集群中 默认情况下 每个节点都被设置加入到一个名字叫'elastic search'的集群中 这就意味着如果你启动了很多个节点 并且假设他们彼此可以互相发现 那么他们将自动形成 并加入一个名为 elasticsearch 的集群中

  一个集群中可以有任意数量的节点 当当前网络没有运行任意一个节点的时候 此时启动一个节点将默认形成一个单节点的名字叫做‘elasticsearch的集群

  Index:

  索引是具有某种相似特征的文档的集合 例如 你可以有一个顾客数据索引 产品目录索引和订单数据索引 索引有一个名称 (必须是小写)标识 ,该名称用于 在对其其中的文档 执行索引 搜索 更新 和删除操作 时引用索引

  Document:

  文档是可以被索引的基本信息单元 文档用JSON表示

  Shards & Replicas

  一个索引可能存储大量数据 这些数据可以超过 单个节点的硬件限制 例如 一个包含10亿条文档占用1TB磁盘空间的索引可能不适合在单个节点上 或者可能太慢而不能单独处理 来自单个节点的搜索请求

  为了解决这个问题 ElasticSearch 提供了 将你的索引细分为多个碎片(或者叫分片)的能力 在创建索引时 可以简单的定义所需要的分片数量 每个分片本身就是一个功能完全独立的索引 可以驻留在集群的任何节点上

  分片为什么重要?

  1.他允许你水平的分割/拓展内容卷

  2.他允许你跨分片(可能在多个节点上)分布和并行操作 从而提高性能和吞吐量

  在一个网络/云环境中随时都有可能出现故障 推荐有一个融灾机制 Es允许你将 一个或多个索引 复制到其他地方 这被称之为副本 

  复制之所以重要 有两个原因

  1.他提供了 放在一个shade/node失败时的高可用性,出于这个原因,很重要的一个点是 一个副本从来不会分配到与他复制的原始分片相同节点中 也就是说 副本是放在另外的节点上的

  2.他允许拓展搜索量/吞吐量,因为搜索可以在所有的副本上并行执行

  总而言之 每个索引都可以被分割成很多分片 索引也可以被复制零(意味着没有副本)或更多次,一旦被复制 每个索引都将具有主分片(被复制的原始分片)和副本分片(主分区的副本),在创建索引时 可以给每个索引 定义分片 和 副本的数量 。创建索引时 你可以动态 地更改副本的数量 但不能更改事后分片的数量

  在默认情况下 ElasticSearch中的每个索引 都分配了5个主分片 和 1个副本 这意味着如果集群中至少有两个节点 那么索引将有5个主分片和另外5个副本分片(这5个人副本分片组成1个完整副本)每个索引总共有10个分片

  

posted @ 2019-10-11 17:28  橘柑之味  阅读(331)  评论(0编辑  收藏  举报