Elasticserach学习笔记-01基础概念
本文系本人根据官方文档的翻译,能力有限、水平一般,如果对想学习Elasticsearch的朋友有帮助,将是本人的莫大荣幸。
原文出处:https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html
ElasticSearch有几个核心概念,了解它们将有助于我们的整个学习过程。
近乎实时(NRT)
Elasticsearch是一个近乎实时的搜索平台。这意味着从你为一个文档建立索引到该文档可被检索只有很小的时间差(通常是1秒)。
集群(Cluster)
群集是一个或多个节点(服务器)的集合,它们一起保存整个数据,并在所有节点上提供联合索引和搜索功能。一个集群由唯一的名称加以识别,默认为“elasticsearch”。此名称非常重要,因为一个节点(服务器)只能按(集群)的唯一名称加入集群。
请确保不要在不同的环境中使用相同的集群名称,否则节点可能会加入错误的集群。举例来讲,你可以使用 logging-dev, logging-stage, 以及logging-prod 分别作为开发,测试和生产环境的集群名称。
一个集群可以仅包含一个节点。而且你也可以设置多个不同的集群,每个集群都有自己唯一的名称。
节点(Node)
节点是作为集群的一台服务器,存储数据并参与集群的索引和搜索功能。和集群相似,节点是由名称标识的,在节点启动时被默认分配为随机的UUID(Universally Unique Identifier)。如果不想要默认名称,你可以给任意节点定义名称。该名称在管理你网络中的服务器对应哪个节点时起到很重要的作用。
一个节点可以被配置为加入带有特定名称的集群。默认情况下,每个节点都会加入名为elasticsearch的集群。也就是说,如果你启动了多个节点,并且假设它们之间是网络连通的,那么它们将自动组一个名为elasticsearch的集群。
在单一集群中,你可以拥有任意数量的节点。而且,如果当前没有其他ElasticSearch节点运行与你的网络,启动一个新节点将组建一个新的名为elasticsearch的单节点集群。
索引(Index)
索引是具有相似特性的文档集合。例如,可以为客户数据建立一个索引,产品目录用另一个索引,以及订单数据再建立一个索引。索引由名称(必须全部为小写)标识,该名称用于在对其中的文档执行索引、搜索、更新和删除操作时引用索引。
在一个集群中,你可以定义任意数量的索引。
类型(Type)
在索引中,你可以定义一或者多个类型。类型是索引的逻辑类别/分区,其语义完全取决于你。一般来说,类型定义为具有公共字段集的文档。例如,假设你运营一个博客平台,并将所有数据存储在一个索引中。在这个索引中,您可以定义用户数据的类型,博客数据的类型,以及注释数据的类型。
文档(Document)
文档是可被索引的最小单元。举例,你可以为一个客户创建一个文档,为一个产品创建另一个文档,为一个订单再创建一个文档。这个文档用JSON(JavaScript对象标记语言)表示,它是一种无处不在的Internet数据交换格式。
在一个索引或者类型中,你可以存储任意数量的文档。注意,一个文档物理上长存于索引中,而事实上也同时必须被指定一个索引中的类型。
碎片和复制品(Shards & Replicas)
索引可以存储大量的数据,这些数据可能超过单个节点的硬件限制。例如,占用磁盘空间1TB的含有十亿个文件的单个索引,可能不适合放单个节点的磁盘上。因为那将拖慢服务本身以至于无法响应外部的搜索请求。
为了解决这一问题,Elasticsearch提供了将索引分成多个块(称之为碎片)的能力。创建索引时,可以简单地定义你所需的碎片数。每个碎片本身是一个全功能的、独立的“索引”,可以被托管在集群中的任意节点。
分片之所以重要是因为两大原因:
1. 它允许你水平拆分/缩放内容卷
2. 它允许你跨分片地并行操作(可能在多个节点上)从而提高性能/吞吐量
分片的分布机制、以及分片上文档聚合后返回给检索请求完全由Elasticsearch管理,对于作为用户的你来说是完全透明的。
在网络/云计算环境中失败时有发生,分片/节点意外导致不可用时,拥有故障转移机制是非常有帮助且被告诉推崇的。为此,Elasticsearch可以将一或者多个所以的分片拷贝转化为副本分片,简称副本(replicas)。
副本的重要性主要有两大原因:
1. 它提高了分片/节点故障时的可用性。需要注意的是,副本分片永远不会和那个被它复制的原始/主分片分配在同一个节点上。(译者注:如果和主分片在同一个节点,当该节点故障副本节点也将不可用,便失去了副本的意义)
2. 它增大了搜索量/吞吐量,因为搜索可以在所有副本上并行执行。
总结:每个索引可以被拆分为多个分片。一个索引可以被复制0次(不复制)或者多次。一旦被复制,每个索引将会拥有主分片(原始的被复制的分片)和副本分片(从主分片复制而来的分片)。主分片及副本分片的数量可以在创建索引的时候指定。索引被创建后,你可以动态改变副本分片的数量,但是主分片的数量则不允许修改。
每个Elasticsearch中的每个索引被默认分配了5个主分片和一个副本(节点),也就是说如果在你的集群中有两个节点,那么你的索引将会有5个主分片和5个副本分片(一个完整副本)共计10个分片。
每个Elasticsearch分片是一个Lucene索引。 每个Lucene索引有个允许的包含的文档数量上限。截止
LUCENE-5843, 上限为 2,147,483,519 (= Integer.MAX_VALUE - 128) 。你可以使用_cat/shards
api来监视分片大小。
了解了基础概念之后,让我们开始接触有趣的部分吧…
Elasticserach学习笔记-01基础概念的更多相关文章
- Docker:学习笔记(1)——基础概念
Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...
- OpenFlow Switch学习笔记(一)——基础概念
OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...
- 【miscellaneous】 GStreamer应用开发手册学习笔记之基础概念介绍
第3章. 基础概念介绍 本章将介绍GStreamer的基本概念. 理解这些概念对于你后续的学习非常重要,因为后续深入的讲解我们都假定你已经完全理解了这些概念. 3.1. 元件(Elements) 元件 ...
- PHP学习笔记01——基础语法
<!DOCTYPE html> <html> <?php // 1.使用$加变量名来表示变量,php是弱类型语言,不要求在使用变量前声明,第一次赋值时变量才被创建 $a ...
- JAVA学习笔记之基础概念(一)
一.Java 简介: Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称. 由 James Gosling和同 ...
- Centos7安装gitlab11 学习笔记之基础概念、部署安装、权限管理、issue管理
一.基础介绍 1.简介 一个基于GIT的源码托管解决方案 基于rubyonrails开发 集成了nginx postgreSQL redis sidekiq等组件 2.安装要求 2g内存以上,有点占内 ...
- C#学习笔记(基础知识回顾)之值类型和引用类型
一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...
- Quartz学习笔记:基础知识
Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...
- C++ GUI Qt4学习笔记01
C++ GUI Qt4学习笔记01 qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...
随机推荐
- 1787: [Ahoi2008]Meet 紧急集合
1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1482 Solved: 652[Submit][ ...
- 模态Model视图Push下一个视图(混合跳转)
来自: http://www.cnblogs.com/dingding3w/p/6222626.html 如果没有UINavigationController导航栏页面之间切换是不能实现Push操作的 ...
- TextView加边框,自定义,上下左右四条线 颜色,想用哪个用哪个
1.这是一个自定义的TextView ,看吧,底下就是代码,应该都可以看懂,这里就不多说了 package com.example.admin.myutilsborder;import android ...
- Hadoop单机和伪分布式安装
本教程为单机版+伪分布式的Hadoop,安装过程写的有些简单,只作为笔记方便自己研究Hadoop用. 环境 操作系统 Centos 6.5_64bit 本机名称 hadoop001 本机IP ...
- Docker 使用指南 (四)—— 数据卷的使用
一.数据卷的使用 有时候需要使用数据库,但是又希望它的数据能保存在本地,Docker中提供了数据卷可以供你方便的操作数据.数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用 ...
- unity3d屏蔽Windows10输入法
在win10上,如果安装了某些输入法(比如QQ输入法),会造成unity的键盘事件被输入法捕获而不能触发的情况.只有将输入法切换到英文状态下才能响应键盘事件. 解决办法有, 1:用户主动切换输入法,甚 ...
- MongoDB基础教程系列--第一篇 进入MongoDB世界
1.什么是MongoDB MongoDB是跨平台的.一个基于分布式文件存储的数据库.由C++语言编写.用它创建的数据库具备性能高.可用性强.易于扩展等特点.MongoDB将数据存储为一个文档,数据结构 ...
- Struts2的类型转换(下)
Struts2提供的类型转换: Struts2提供的是一个名叫StrutsTypeConverter的抽象类,这个类实际上是DefaultTypeConverter的子类.当我们继承自该抽象类 时,要 ...
- 浓缩的才是精华:浅析GIF格式图片的存储和压缩
成文迪, 在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦. GIF格式的历史 GIF(Graphics Interchange Format)原义是"图像互换 ...
- 老李推荐: 第3章2节《MonkeyRunner源码剖析》脚本编写示例: MonkeyDevice API使用示例 4
第七步:保存新增加日记 代码3-2-7 增加日记-保存日记 #Step7: Save the note by touch on the "save" menu entry by c ...