点击上方蓝色“胖滚猪学编程”,选择“设为星标”

跟着胖滚猪学编程!好玩!有趣!

这是胖滚猪ES系列博文第三篇,大白话ElasticSearch入门概念。

阅读本文之前,建议先阅读【漫画】ES必知必会的倒排索引和分词。你需要清楚搜索的基本思想,毕竟ES最初的定位就是搜索。

虽然概念会比较枯燥,你也必须好好给我看完!理解了这些看似简单概念,你才能在后续解决一系列复杂的问题。我尽量用大白话说的让你好接受点!

先看个思维导图,东西不多不多,10分钟搞定它!

ES和Kibana的安装

入门的最好方式就是先安装好然后运行几个demo。因此你必须先安装好再说后事!你需要安装ES以及Kibana,ES学习离不开Kibana,真的超好用~

安装真的非常简单啊,所以自己琢磨吧!就简单说两句:(下载好安装包、简单配置yml文件、然后bin目录运行即可。注意可以使用Kibana将Demo数据导入到ES中,方便我们学习)。

分布式系统必备的能力

学习新知识、一定要触类旁通、举一反三,总结知识的通性,否则你就是只会一个人战斗的傻瓜。

因此说ES架构之前,先聊聊分布式系统的可用性与扩展性,这并非ES所特有,而是所有分布式大数据组件都具备的基本能力。

  • HBase和Spark都有master和slave节点、用于构建HA(High Available)高可用架构,啥意思?万一一台机器被你女朋友砸了,另一个节点马上可以接着上!

  • 诸如HDFS这种文件存储系统、文件是分块存储的,为啥要分块?你想想一台机器能存储几百个T的数据吗?不行吧?分开来存储到100台机器就行了呀!块有对应的副本,数据丢了也没关系!

  • Kafka中的Topic会分成N个partition,partition具有伸缩性、负载均衡、高吞吐量等优势,而Partition也有副本机制,也是为了可用性考虑,丢失了无所畏惧!

在扩展性方面就不必多说了,分布式系统生来就是为了扩展的,不够用了吗?增加节点就是了!

由此我们不难得出,ES作为一个分布式搜索分析引擎,也必须具备这两个基本能力

  • 高可用:包括服务可用性,即允许有节点停止服务。以及数据可用性,即部分节点丢失,不会丢失数据。

  • 可扩展性:存储的水平扩容,请求量提升/数据的不断增长(将数据分布到所用节点上)

体现在ES上,用一句话简单总结就是:ES集群可以有很多节点,ES中的数据(文档)可以分成多个分片,而每个分片也有对应的副本

Cluster集群

Elasticsearch 集群由一个或多个节点组成,可通过其集群名称进行标识。通常这个 Cluster 的名字是在 Elasticsearch 里的配置文件中设置的(config/elasticsearch.yml)cluster.name: my-cluster

集群就像下面这个布局,用大白话说就是:一朵云(集群)中有很多盒子(节点)

关于集群、你主要应该关注集群的一个健康信息:curl -s -u 'user:pwd' http://ip:port/_cluster/health? pretty (关于restapi的使用后续会详细介绍)

集群信息

  • 集群的状态(status):red红表示集群不可用,有故障。yellow黄表示集群不可靠但可用,一般单节点时就是此状态。green正常状态,表示集群一切正常。

  • 节点数(node.total):节点数,这里是7,表示该集群有7个节点。

  • 数据节点数(node.data):节点有多种类型,这指存储数据的节点。

  • 分片数(shards):索引内部的数据分布地存储于多个节点

Node节点

一个集群由一个或多个 node 组成。就是你刚刚看到的图片中那些盒子。根据node的作用,可以分为如下的几种:

  • master-eligible:可以作为主 node。一旦成为主 node,它可以管理整个 cluster 的设置及变化:创建,更新,删除索引;添加或删除节点等等

  • data:数据节点。顾名思义是用来存储数据的。在实际的使用中,我们可以把请求发送给 data 节点,而不能发送给 master 节点。

  • ingest:数据接入(比如 pipepline)

  • machine learning:机器学习相关

另外,所有节点都是隐式的协调节点。Coordinating node。它接受外部的请求,并转发到相应的节点来处理。如果你不配置任何,那么它就是一个Coordinating Only node。

那么我们怎么决定节点是什么角色呢?一般来说,一个 node 可以具有上面的一种或几种功能,我们可以在命令行或者 Elasticsearch 的配置文件 elasticsearch.yml 来定义:

Index索引

索引是包含一堆有相似结构的文档数据。举个例子:商品索引、用户索引这是两个完全不同的东西,所以建议弄两个index。

ES早期版本是有type的概念的,可以把index粗糙理解成mysql的库的概念,type是表的概念。但是新版本已经没有type的概念了。

Documen文档

Elasticsearch 是面向文档的,这意味着您索引或搜索的最小数据单元是文档。

文档可以理解为关系型数据库的一行记录。

文档通常是数据的 JSON 表示形式。

我们还是直接看一下真实文档长啥样,你就懂了:

ES文档相比传统RDBMS最大的特性就是结构非常灵活,比如mysql中表结构都是创建的时候固定了的,你要新增一个字段,需要提交一个ddl。并且所有行的数据结构都是要一致的。但是ES中同一个索引,不同的文档可以不一样的结构。

Mapping映射

Mapping映射是定义文档及其包含的字段如何存储和索引的过程。可以类比mysql中的表结构(create table xxxxx)。例如,使用映射来定义:

  • 哪些字符串字段应该被视为全文字段。

  • 哪些字段包含数字、日期或地理位置。

  • 日期值的格式。

还是直接看看ES映射长啥样吧:

比如以birthday字段为例,它的类型为date,date的格式是yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis

再看看mobile和name,keywordtext会比较陌生吧,其实就是string类型,不过它们有区别、也涉及到ES中的分词。

索引有个厉害的地方,可以动态映射,也就是说你自己不需要定义,直接put几条数据进去,它自动给你匹配了类型。当然我们建议还是静态映射好,根据业务类型来定义字段类型,生产中几乎没人会用动态映射。

每个索引都有一个映射类型,它决定了文档的索引方式。什么叫做文档的索引方式??我们知道ES可用于搜索,但mapping有个参数叫做enable,如果你设置为false那么代表仅存储,不会被用于搜索和聚合分析。我们在【漫画】ES必知必会的倒排索引和分词一文中还说过倒排索引的概念,但mapping有个参数叫做index,代表是否需要构建倒排索引。同样是string类型,却要区分keywordtextkeyword代表是精确匹配,不会被分词。。。等等。。

你可能听不懂上面那段话,但是没关系,也不需要现在懂,你只需要记住mapping作用很大,决定文档的索引方式就好了!

Shard分片

ES有两种分片:Primary Shard以及Replica Shard。

先用大白话说:

分片(Shard)就是:一块超级大的拼图(索引),是由有好多好多小片组成的。

副本分片(Replica Shard)就是:这块拼图你买了两套,丢了一套,还有一套,还能继续拼。

ES的分片(shard)机制可将一个索引内部的数据分布地存储于多个节点,它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能,这每一个物理的Lucene索引称为一个分片(shard)。说白了,就是拼图要分割成好多小块存储。

这样的好处是啥呢?拼图有好多小块,我们可以让好多人帮我们一起拼,你拼左上角的,我拼右下角的,减轻一个人的压力,加快拼图速度。同理,ES把一个大的索引拆分成多个,分布到不同的节点上,也可以降低单服务器的压力,构成分布式搜索,提高整体检索的效率。

需要注意的是:Primary Shard的数量只能在索引创建前指定,并且索引创建后不能更改。分片数的最优值与硬件参数和数据量大小有关,一定要合理设置分片数。

副本是一个分片的精确复制,每个分片可以有零个或多个副本。

副本又有啥作用呢?在ES中,副本的作用有两个,一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

容错性很好理解,所以我们聊聊效率问题。更多的副本可以提高查询效率(当结合更多的硬件),是因为在ES中,查询请求可以被某个主分片或某个副本分片处理,因为可以在所有副本上并行执行搜索——因此扩展了搜索量/吞吐量。。有些框架的副本机制是不能够提高读写速率的,比如Kafka,因为在Kafka中追随者副本是不对外提供服务的。

注意:副本分片与主分片存储在集群中不同的节点。副本的大小可以通过:number_of_replicas动态修改。

最后我们还是用RestApi来查看一下某个索引的分片情况,如下图可知,索引appl_info有10个分片,每个分片有一个副本分片。

curl -s -u ' liuyanling:123456' http://ip:port/appl_info/_settings?pretty

题外话

索引、文档、分片的概念我相信你已经可以理解了,不过设计方面,没有那么简单。在美团写给工程师的十条精进原则中强调了“设计优先”。无数事实证明,忽略了前期设计,后面会追悔莫及。比如创建索引的时候就应该考虑一些问题:

  • 数据量达到TB级甚至PB级别的大索引应该如何设计?

  • 分片数和副本数大小如何设计才能提升 ES 集群的性能?

  • Mapping应该该如何设计才能保证检索的高效?

当然这些不是初学者该考虑的问题!后续文章再详细分析吧~

总结

最后来一张总体概览吧,我把你需要掌握的概念都用思维导图画出来了(关注[胖滚猪学编程]公众号,回复"ES",获取ES全系列高清思维导图):

END

点击查看往期内容回顾

【漫画】ES原理 必知必会的倒排索引和分词

七个生产案例告诉你BATJ为何选择ElasticSearch

【死磕kafka】入门必知必会的术语概念

原创声明:本文为【胖滚猪学编程】原创博文,转载请注明出处。

点个“在看”表示朕

已阅

本人只是ES开发小学生,如果有任何不对的地方,请各位大学生一定要指正我,留言写起来!

写留言

大白话ElasticSearch入门概念,看不懂找我!相关推荐

  1. 全文搜索引擎 Elasticsearch 入门概念

    基本概念 Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例. 单个 Elastic 实例称为一个节点(nod ...

  2. deno如何连接mysql_Deno入门教程 (看不懂打死我)

    为什么选择Deno 对我来说以下两点很吸引我 默认支持ts.tsx 默认安全,对权限的把控 文档传送门: 安装 Shell (Mac, Linux): curl -fsSL https://deno. ...

  3. sqlserver存储过程入门?看不懂打死我

    sqlserver存储过程入门 1.工具 2.基础知识 游标 DECLARE 赋值 set 赋值 into if else 代替 REPLACE CASE WHEN CONCAT 函数 字符串连接 B ...

  4. 【网页前端设计Front end】CSS入门(看不懂你来打我)

    文章目录 **css的基本语法和使用方法** **css的层次及其作用优先级** **css常用属性** **css布局** css的基本语法和使用方法 /*选择符组*/ /*类选择符*/ /*id选 ...

  5. 谷歌大脑科学家亲解 LSTM:一个关于“遗忘”与“记忆”的故事 本文作者:奕欣 2017-01-14 09:46 导语:AI科技评论保证这是相对通俗易懂的一篇入门介绍了,看不懂的话欢迎关注「AI 科技

    谷歌大脑科学家亲解 LSTM:一个关于"遗忘"与"记忆"的故事 本文作者:奕欣 2017-01-14 09:46 导语:AI科技评论保证这是相对通俗易懂的一篇入 ...

  6. 决策树 随机森林 xgboost_从决策树到随机森林理论篇从人话到鬼话:看不懂来找我麻烦...

    从决策树产生的一些列的问题,过度到随机森林: 全文大概要阅读10分钟: 随机森林算法范畴 监督学习分类算法,基模型是由决策树组成 决策树 决策树模型与学习 特征选择 决策树生成 决策树剪枝 CART算 ...

  7. Elasticsearch 入门(1):基本概念,安装教程,索引的创建,查询,删除,主键查询,修改,添加,聚合查询,条件查询

    Elasticsearch 入门 基本概念 The Elastic Stack, 包括 Elasticsearch.Kibana.Beats 和 Logstash(也称为 ELK Stack).能够安 ...

  8. 动态规划入门到熟悉,看不懂来打我啊

    动态规划入门到熟悉,看不懂来打我啊 兔子hebtu666 本文链接:https://blog.csdn.net/hebtu666/article/details/100585136 2.1斐波那契系列 ...

  9. Elasticsearch 入门 核心概念 数据结构 分词器 javaAPI

    ElasticSearch 1-今日内容 2-初识ElasticSearch 2.1-基于数据库查询的问题 2.2-倒排索引 2.2.1 评分TF/IDF/BM25计算 2.3-ES存储和查询的原理 ...

最新文章

  1. EggNOG功能注释数据库在线和本地使用
  2. R语言随机森林模型:计算随机森林模型的特征重要度(feature importance)并可视化特征重要度、使用少数重要特征拟合随机森林模型(比较所有特征模型和重要特征模型在测试集上的表现差异)
  3. boost Release 1.47.0
  4. SAP EWM - 物料主数据 - EWM系统存储视图属性
  5. Dumpzilla工具第615行bug的解决办法
  6. SAP EWM Table Overview [转]
  7. python k线合成_手把手教你写一个Python版的K线合成函数
  8. Github入门详情教程
  9. python二进制整数的定义_TensorFlow定义操作整数的二进制表示
  10. Core Animation 文档翻译 (第二篇)—核心动画基础要素
  11. Python安装第三方库临时使用国内源
  12. Python--day47--mysql索引类型介绍
  13. snipaste安装和使用_snipaste替代品 amp; linux截图解决方案-截图、贴图工具Flameshot...
  14. python后台——asyncio,多进程+asyncio
  15. 提升工作效率的优秀工具收藏
  16. 数据结构与算法 php pdf,数据结构与算法之美(完结)云盘分享_IT教程网
  17. Excel 2010 VBA 入门 121 ActiveX控件
  18. Excel教程:从头认识Excel数据透视表【网盘分享108集教程】
  19. window出现msvcp100.dll缺失问题
  20. Kotlin基础2(持续更新)

热门文章

  1. 怎么将多个CSV文件合并成一个CSV文件
  2. 中国移动校园网宽带连接方法——朝晖转屏峰
  3. 凶手(算法 假设法)
  4. 基于webrtc浏览器截图
  5. Python数据分析练习01—二手车折旧/价格分析
  6. javascript不依赖库开发windows应用程序
  7. 几大主流浏览器性能比较
  8. 笔记本电脑找不到计算机配置,为什么我的笔记本电脑找不到特定的wifi?
  9. 解决cs321n 的 python教程中 name 'imread' ‘imsave’ 'imresize' is not defined 的问题
  10. 三星a5000 android,三星a5000