《ElasticSearch6.x实战教程》之准备工作、基本术语
第一章-准备工作
关注公众号: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。

《ElasticSearch6.x实战教程》之准备工作、基本术语的更多相关文章
- 《ElasticSearch6.x实战教程》正式推出(附图书抽奖)
经过接近1个月的时间,ElasticSearch6.x实战教程终于成册.这本实战教程小册有很多不足(甚至可能有错误),也是第一次完整推出一个系列的教程. 1年前,我开始真正接触ES,在此之前仅停留在知 ...
- 《ElasticSearch6.x实战教程》之简单的API
第三章-简单的API 万丈高楼平地起 ES提供了多种操作数据的方式,其中较为常见的方式就是RESTful风格的API. 简单的体验 利用Postman发起HTTP请求(当然也可以在命令行中使用curl ...
- 《ElasticSearch6.x实战教程》之实战ELK日志分析系统、多数据源同步
第十章-实战:ELK日志分析系统 ElasticSearch.Logstash.Kibana简称ELK系统,主要用于日志的收集与分析. 一个完整的大型分布式系统,会有很多与业务不相关的系统,其中日志系 ...
- 《ElasticSearch6.x实战教程》之分词
第四章-分词 下雨天留客天留我不留 本打算先介绍"简单搜索",对ES的搜索有一个直观的感受.但在写的过程中发现分词无论如何都绕不过去.term查询,match查询都与分词息息相关, ...
- 《ElasticSearch6.x实战教程》之简单搜索、Java客户端(上)
第五章-简单搜索 众里寻他千百度 搜索是ES的核心,本节讲解一些基本的简单的搜索. 掌握ES搜索查询的RESTful的API犹如掌握关系型数据库的SQL语句,尽管Java客户端API为我们不需要我们去 ...
- 《ElasticSearch6.x实战教程》之父-子关系文档
第七章-父-子关系文档 打虎亲兄弟,上阵父子兵. 本章作为复杂搜索的铺垫,介绍父子文档是为了更好的介绍复杂场景下的ES操作. 在非关系型数据库数据库中,我们常常会有表与表的关联查询.例如学生表和成绩表 ...
- 《ElasticSearch6.x实战教程》之复杂搜索、Java客户端(下)
第八章-复杂搜索 黑夜给了我黑色的眼睛,我却用它寻找光明. 经过了解简单的API和简单搜索,已经基本上能应付大部分的使用场景.可是非关系型数据库数据的文档数据往往又多又杂,各种各样冗余的字段,组成了一 ...
- 【转】mybatis实战教程(mybatis in action),mybatis入门到精通
MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis ...
- mybatis实战教程(mybatis in action),mybatis入门到精通
转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过hibernate了那这个就非常的简单) (再加 ...
随机推荐
- 使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置
原文:使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置 摘要 讲解在IntelliJ IDEA中,如何进行Mysql数据库的配置 目录[-] 文章已针对IDEA 15做了一定的 ...
- SQL Server 中心订阅模型(多发布单订阅)
原文:SQL Server 中心订阅模型(多发布单订阅) 大多数SQL Server 复制拓扑都是基于中心发布模型,它是由一个发布复制到一个或者多个订阅.另一个复制模型是中心订阅模型,它使用事务复制由 ...
- DELPHI编写服务程序总结(在系统服务和桌面程序之间共享内存,在服务中使用COM组件)
DELPHI编写服务程序总结 一.服务程序和桌面程序的区别 Windows 2000/XP/2003等支持一种叫做“系统服务程序”的进程,系统服务和桌面程序的区别是:系统服务不用登陆系统即可运行:系统 ...
- error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“类型说明符”
解决办法: 打开项目工程----> 属性 ---> c/c++ --> 语音 --> 符合模式 修改成否即可
- 基于VUE实现的新闻后台管理系统-一
基于VUE实现的新闻后台管理系统 前段时间拿到一个关于新闻后台的API,测试数据库使用SQLite,Restful服务是用Go写的,只要运行特定环境下的脚本(run.*)就会启动一个服务,依次后台为接 ...
- 安装使用Cloudera Impala
安装与使用Cloudera Impala Cloudera Impala提供快速的.交互式的SQL查询方式,直接基于Apache Hadoop存储在HDFS或HBase中的数据进行查询.除了使用与Ap ...
- 上手更快的网络文件系统 —— oxfs
什么时候需要网络文件系统? 做嵌入式的同学经常会使用 NFS 讲 host 上的某个目录挂载到开发板上,方便 host 上编译构建后能直接在板子上运行,减少手工拷贝操作. 网站开发时,在 host 上 ...
- idea初见问题整理_错误: -source 1.5 中不支持 diamond 运算符
最近在移动工程到idea下,顺便改目录结构,遇到的问题不一定全部记录,有些答案摘抄自别人博客,已注明来源,由于不是摘抄自同一作者,且有自己的一些内容,所以标注为原创. 1.(错误: -source 1 ...
- mysql产生死锁
select * from information_schema.innodb_trx; kill 对应线程ID show PROCESSLIST;
- mysql-8.0-winx64安装以及修改密码
一.下载安装包(https://dev.mysql.com/downloads/mysql/) 二.添加my.ini配置文件 打开刚刚解压的文件夹 C:\mysql-8.0.16-winx64,在该文 ...