第一章-准备工作

关注公众号: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. Gralde 网络代理

    Gralde 网络代理 Gradle在编译项目的时候,需要下载一些依赖.墙外的网络就需要设置代理了. 设置的方法,见文档: Accessing the web through a HTTP proxy ...

  2. scp 专题

    Tips:阿里云中需要使用内网ip,否则会一直阻塞Linux scp命令用于Linux之间复制文件和目录,具体如何使用这里好好介绍一下,从本地复制到远程.从远程复制到本地是两种使用方式.这里有具体举例 ...

  3. Android零基础入门第63节:过时但仍值得学习的选项卡TabHost

    原文:Android零基础入门第63节:过时但仍值得学习的选项卡TabHost 由于前几天参加一个学习培训活动,几乎每天都要从早晨7点到晚上一两点,没有什么时间来分享,实在抱歉中间断更了几天.从今天开 ...

  4. 简析TCP的三次握手与四次分手(TCP协议头部的格式,数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端)good

    2014-10-30 分类:理论基础 / 网络开发 阅读(4127) 评论(29)  TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更 ...

  5. Qt常见皮肤qss代码(有Metro的风格)

    ##QTabWidget 淡蓝色效果TabWidget(属性值lightblue) QTabWidget[lightblue = "true"] QTabBar::tab{ bor ...

  6. Qt之界面数据存储与获取(userData)

    http://blog.csdn.net/u011012932/article/details/52413012#comments

  7. QT 文件拖放事件dropEvent和dragEnterEvent

    重载以下两个函数,可以实现将文本文件拖放进文本编辑器 void MainWindow::dragEnterEvent(QDragEnterEvent *event)//拖进事件 { if(event- ...

  8. Linux使用daemontools

    功能: 在使用memcached时候,怕因为一些不可预知的因素导致memcached进程死掉,而又不能及时的发现重启,可以通过daemontools来管理memcached的启动,当memcached ...

  9. HTML连载12-体验CSS

    一.通过标签来修改标签有哪些缺点: (1)需要记忆那些标签有哪些属性 (2)若该标签没有这个属性,则修改失败 (3)需求变更,需要修改大量的代码 (4)HTML标签及用于添加语义,与我们的定义不相符 ...

  10. 3011C语言_基础知识

    第一章  基础知识 1.1  基本框架 //任何一个c语言程序都必须包括以下格式: int main(int argc, char *argv[] ) { : } //这是c语言的基本结构,任何一个程 ...