第一章-准备工作

关注公众号:CoderBuff,回复“es”获取《ElasticSearch6.x实战教程》完整版PDF。

工欲善其事必先利其器

ElasticSearch安装

ElasticSearch6.3.2下载地址(Linux、mac OS、Windows通用,下载zip包即可):https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-3-2。ES历史版本下载页面:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

在正式安装前,你需要确保你的系统已配置JDK8环境。

mac OS

在上述下载地址下载完elasticsearch-6.3.2.tar.gz后,首先在当前登录用户的home下创建一个Settings目录,通过tar -zxvf elasticsearch-6.3.2.tar.gz解压到当前目录。

进入elasticsearch-6.3.2.tar.gz目录,执行./bin/elasticsearch命令,等待一小段时间,通过浏览器访问http://localhost:9200/?pretty出现以下响应:

{
"name": "x4x7wWJ",
"cluster_name": "elasticsearch",
"cluster_uuid": "sJ6LTYJ1TDmtR1kzl0M2Ig",
"version": {
"number": "6.3.2",
"build_hash": "8bbedf5",
"build_date": "2017-10-31T18:55:38.105Z",
"build_snapshot": false,
"lucene_version": "6.6.1"
},
"tagline": "You Know, for Search"
}

Linux

Linux的安装过程和Linux相同。

ES需要使用普通用户安装、启动,如果你是root用户,需要先创建一个用户,用普通用户而不是root用户启动ES。

第二章-基本术语

白马非马

ES是一个搜索引擎,同时它也是一个分布式文档存储数据库(当然是非关系型的)。为了保证后续的实战教程顺利进行,这里通过对比传统的关系型数据库MySQL介绍在ES中的一些术语。

在MySQL中共有数据库(Database)、表(Table)、记录(Row)、列(Column)的概念,同样在ES中也有类似的概念,索引(Index),类型(Type),文档(Document),字段(Field)。

可以这么理解:

数据库 记录
MySQL DB Table Row Column
ES Index Document Document Field

索引Index

ES中的索引概念可不是关系型数据库中的“索引”,ES中的索引指的是存储数据的地方,类似关系型数据库中的数据库概念。

类型Type

有的文章指出ES中的类型Type对应的就是关系型数据库中的表,在使用ES中我们会遇到另外一个概念映射(Mapping),也有不少的文章指出Mapping对应的就是关系型数据库中的表。关系型数据库中表与表是物理独立的,即使在两个表中存在相同名称不同类型的列,这在我们的关系型数据库也是极为合理的,但这在ES中就不合理,ES中即使是在同一个索引Index下,如果字段Field存在于不同的类型Type中,即使他们代表不同的含义,但是只要它们的名称相同也必须要求类型相同,在ES中类型Type对应于关系型数据库中表的概念已经名存实亡。实际上在ES中Type作为表的概念在后期版本中越来越被弱化,在未被ES正式移除前,ES后期版本已经不允许一个索引Index创建多个Type,相信在后面的版本会彻底移除类型Type。

(注:ES6已经不允许一个Index创建多个Type,https://github.com/elastic/elasticsearch/pull/24317

如果在现阶段一定要理解ES中的Type,那么一定要和Mapping结合起来。可以理解为类型Type就是定义一个表,仅仅是定义而已,而映射Mapping定义了表结构(有哪些列,列的类型是什么)。

文档Document

在非关系型数据库中,有部分被称之为“文档数据库”,对应于关系型数据库中的一行记录。

字段Field

对应关系型数据库中的列。

节点

一个ES实例称之为一个节点,单机部署的ES有且只有一个节点,集群部署的ES有多个节点且有一个主节点。

分片

ES可作为分布式集群部署,同样也可以作为单机单节点部署。ES中的数据被分散存储在分片中,ES屏蔽了底层的分片实现,我们直接与索引交互而不与分片交互。分片数量的多少与是否是集群部署和单机部署无关,即使是单机部署在创建索引时仍然也可以指定划分多个分片(默认5个主分片1份备份(包含5个备分片))。分片有主分片和备分片之分,顾名思义,备分片是主分片的备份,当主分片出现故障时,备份片充当主分片。

对于单机部署

单机部署的ES,即表示ES有且只有一个节点,在创建索引时,如果不指定主分片与备分片的数量,默认创建5个主分片和1份备份(5个备分片),实际上对于单机部署的ES服务来讲,多个主分片并没有意义,多个分片存在的意义本身就是将数据分散存储到多个ES节点中进行同时查询,此时只有一个节点多个分片也没有意义。备分片在单机部署中同样也没有意义,备份存在的意义本身就是当主分片故障时,仍然能对外提供服务,此时主备都在一个节点上,如果主分片故障,备分片也同样会导致故障。

对于集群部署

对于集群部署的ES来讲,此时存在多个节点,主分片的分配与备分片机制就显得尤为重要(这涉及查询性能以及服务高可用),例如现在有3个节点,此时如果在创建索引时只分配1个主分片就显得有点浪费(注:主分片一旦在创建索引时确定便不能修改)。主分片的划分并没有一定放之四海而皆准的规则,更多的是取决于用户的数据量以及ES节点数量等。通常所理解的是,分片数量越多越好,因为这能将数据分散到不同分片,以便以后在扩容新增节点时,ES能将自动将分片重新进行均匀分布。但这条理论也不绝对,如果你的节点只有3个,设置了100个分片,每个节点就有33个节点,当搜索请求调度到同一节点的不同分片时,此时会引发硬件资源(CPU)的抢夺,造成性能问题。反过来,如果3个节点只分配了3个分片,随着业务的发展,数据量越来越大,单个分片已不能承受它最大的数据量,此时就算新增节点,但是分片数量只有3个,分片的数量在创建索引时便确定且不可修改,此时只能通过重新创建索引。

既要对合理的数据增长有一个判断(规划较大的分片),又要对期望有一个度的把握(合理的分片数量)。官方给出了一点建议,每个分片的数据量最好是在20G40G左右,这就意味着如果你有4个节点,数据量预估在200G左右甚至更大,此时分片数量设置为510个比较合适,7、8个差不多,每个节点有2个分片。(官方博客的建议,https://www.elastic.co/cn/blog/how-many-shards-should-i-have-in-my-elasticsearch-cluster

上面谈到的是主分片,副分片的划分也同等重要。如果不对分片备份,主分片故障则导致数据丢失,部分数据不可查询。副本分片设置过多造成额外的存储空间,默认情况下,创建索引时会创建一个分片副本(一个分片副本不代表一个备分片,如果有5个主分片,那么分片副本就有5个备分片,同理如果指定创建两个分片副本,此时一共就有10个备分片。)需要注意的是备分片是可以修改的,所以备分片可以直接采用默认一个分片副本。

关注公众号:CoderBuff,回复“es”获取《ElasticSearch6.x实战教程》完整版PDF。

这是一个能给程序员加buff的公众号 (CoderBuff)

《ElasticSearch6.x实战教程》之准备工作、基本术语的更多相关文章

  1. 《ElasticSearch6.x实战教程》正式推出(附图书抽奖)

    经过接近1个月的时间,ElasticSearch6.x实战教程终于成册.这本实战教程小册有很多不足(甚至可能有错误),也是第一次完整推出一个系列的教程. 1年前,我开始真正接触ES,在此之前仅停留在知 ...

  2. 《ElasticSearch6.x实战教程》之简单的API

    第三章-简单的API 万丈高楼平地起 ES提供了多种操作数据的方式,其中较为常见的方式就是RESTful风格的API. 简单的体验 利用Postman发起HTTP请求(当然也可以在命令行中使用curl ...

  3. 《ElasticSearch6.x实战教程》之实战ELK日志分析系统、多数据源同步

    第十章-实战:ELK日志分析系统 ElasticSearch.Logstash.Kibana简称ELK系统,主要用于日志的收集与分析. 一个完整的大型分布式系统,会有很多与业务不相关的系统,其中日志系 ...

  4. 《ElasticSearch6.x实战教程》之分词

    第四章-分词 下雨天留客天留我不留 本打算先介绍"简单搜索",对ES的搜索有一个直观的感受.但在写的过程中发现分词无论如何都绕不过去.term查询,match查询都与分词息息相关, ...

  5. 《ElasticSearch6.x实战教程》之简单搜索、Java客户端(上)

    第五章-简单搜索 众里寻他千百度 搜索是ES的核心,本节讲解一些基本的简单的搜索. 掌握ES搜索查询的RESTful的API犹如掌握关系型数据库的SQL语句,尽管Java客户端API为我们不需要我们去 ...

  6. 《ElasticSearch6.x实战教程》之父-子关系文档

    第七章-父-子关系文档 打虎亲兄弟,上阵父子兵. 本章作为复杂搜索的铺垫,介绍父子文档是为了更好的介绍复杂场景下的ES操作. 在非关系型数据库数据库中,我们常常会有表与表的关联查询.例如学生表和成绩表 ...

  7. 《ElasticSearch6.x实战教程》之复杂搜索、Java客户端(下)

    第八章-复杂搜索 黑夜给了我黑色的眼睛,我却用它寻找光明. 经过了解简单的API和简单搜索,已经基本上能应付大部分的使用场景.可是非关系型数据库数据的文档数据往往又多又杂,各种各样冗余的字段,组成了一 ...

  8. 【转】mybatis实战教程(mybatis in action),mybatis入门到精通

    MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis ...

  9. mybatis实战教程(mybatis in action),mybatis入门到精通

    转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过hibernate了那这个就非常的简单) (再加 ...

随机推荐

  1. Kali Linux安装TL-WN821N USB无线网卡驱动(make失败)

    主要有下面几个步骤: 1.刚插上网卡,network-manager识别出来了网卡,也能搜索到WiFi,但就是连接不上.查看/var/log/syslog日志或者使用nmcli m查看网络信息,显示认 ...

  2. 微信小程序把玩(三十五)Video API

    原文:微信小程序把玩(三十五)Video API 电脑端不能测试拍摄功能只能测试选择视频功能,好像只支持mp4格式,值得注意的是成功之后返回的临时文件路径是个列表tempFilePaths而不是tem ...

  3. Quartz Cron 生成工具

    /** * 每周期 */ function everyTime(dom) { var item = $("input[name=v_" + dom.name + "]&q ...

  4. Tensorflow中循环神经网络及其Wrappers

    tf.nn.rnn_cell.LSTMCell 又名:tf.nn.rnn_cell.BasicLSTMCell.tf.contrib.rnn.LSTMCell 参见: tf.nn.rnn_cell.L ...

  5. Tensorflow数据读取机制

    展示如何将数据输入到计算图中 Dataset可以看作是相同类型"元素"的有序列表,在实际使用时,单个元素可以是向量.字符串.图片甚至是tuple或dict. 数据集对象实例化: d ...

  6. Qt中由表中单元格的QModelIndex获取Global Pos的正确方法

    一直在尝试从单元格的行列索引(QModelIndex)获取其单元格的全局坐标(Global Pos)的方法,以期待在指定单元格附近弹出帮助信息.由View中的columnViewportPositio ...

  7. LFS Linux From Scratch 笔记2(经验非教程)BLFS

    LFS 完了. 其实还没完,还要装一些其他的组件,系统才算是对人类有用的系统. 正好这里有个BLFS Beyound Linux From Scratch 的教程. 其实,按照现有的可运行的LFS系统 ...

  8. php生成html静态文件

    现在的动态网站存在很多性能上的弊端,seo优化会存在一定的瓶颈,现在将动态的网站代码转换为html静态文件,是浏览器通过html间接的读取动态网站源文件,这对其网站加载速度还是seo优化有着举足轻重的 ...

  9. 妹子问我maven是啥?从相亲说起。。

    自从上一篇原创文章: 第一次教妹子安装IDEA 在<java技术之家>公号发表之后,大家的好评如潮,这给了我继续写下去的信心.感谢你们的支持,我会继续努力的. 自从漂亮妹妹加入我们研发团队 ...

  10. 用arduino制作具有无限数据传输功能的气象站

    本项目是用arduino开源硬件,来快速制作具有无限数据传输功能的气象站,我之前做过一个带数据记录功能的气象站项目,这次算是升级和改进的版本. 第1步:构想 首先,需要增加从气象站到室内接收器的无线数 ...