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来监视分片大小。

了解了基础概念之后,让我们开始接触有趣的部分吧…

时间: 2024-10-23 02:36:55

Elasticserach学习笔记-01基础概念的相关文章

OpenFlow Switch学习笔记(一)——基础概念

OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open Flow Protocol等.下文主要是基于个人理解整理的一些学习笔记,理解不到位的地方还请大家多多指教. 一.基础概念图: 首先我们先看下Open Flow Switch的整体结构,以便有一个初步的感性认识,如下图所示: 从上面架构图中,我们可以看到Open Flow Switch主要是由以下几个部

汇编学习笔记01(基础知识)

自己在学习C语言的时候, 有的时候碰到自己理解不了的技术点的话, 就无从下手了, 但是这些技术点如果用汇编来理解的话, 可能非常好理解, 也更容易让大家理解, 所以感觉汇编是很强大的, 对我们学习一些其它的高级语言也很有用, 所以希望自己可以对伟大的汇编语言有一定的了解和认知, 对计算机的思维方式也有更进一步的认识, 对自己的编码习惯有一个好的影响或者改变, 同时对自己的能力有些提高吧. 1. 我们首先要知道什么是机器语言? 也就是机器指令的集合, 机器指令也就是一台机器可以正确执行的命令. 机

servlet学习笔记01基本概念

1.什么是servlet?答:servlet是一个按照Servlet规范编写的java程序,基于http协议,在服务器端运行(如:tomcat),要编写一个servlet,需要实现javax.servlet.Servlet接口,jsp是servlet的扩展,jsp第一次运行时,需要先被翻译成JAVA代码,再编译.class文件,其中的JAVA代码就是servlet.2.servlet作用答:用于处理客户端的请求3.servlet生命周期答:servlet的生命周期是由servlet的容器来控制的

01-Python学习笔记-基础语法

Python标识符 -d           在解析时显示调试信息 -O           生成优化代码 ( .pyo 文件 ) -S           启动时不引入查找Python路径的位置 -v            输出Python版本号 -X           从 1.6版本之后基于内建的异常(仅仅用于字符串)已过时. -c cmd     执行 Python 脚本,并将运行结果作为 cmd 字符串. file           在给定的python文件执行python脚本. P

【opengl 学习笔记01】HelloWorld示例

<<OpenGL Programming Guide>>这本书是看了忘,忘了又看,赶脚还是把笔记做一做心里比较踏实,哈哈. 我的主题是,好记性不如烂笔头. ================================================================ 1. 下载glut库 glut库地址为:www.opengl.org/resources/libraries/glut/glutdlls37beta.zip glut全称为:OpenGL Utilit

大话设计模式学习笔记——面向对象基础

前言 好记性不如烂"笔头"系列--大话设计模式学习笔记 目录 面向对象基础 面向对象基础 什么是类与实例 一切事物皆为对象,即所有的东西老师对象,对象就是可以看到.感觉到.听到.触摸到.尝到.或闻到的东西.准确地说,对象是一个自包含的实体,用一组可识别的特性和行为来标识.面向对象编程,英文叫 Object-Oriented Programming,其实就是针对对象来进行编程的意思.类就是具有相同属性和功能的对象的抽象集合.实例就是一个真实的对象.比如我们属于'人'类,而个人就是'人'类

Java快速教程--vamei 学习笔记(基础篇)

链接:http://www.cnblogs.com/vamei/archive/2013/03/31/2991531.html java快速教程第1课 从HelloWorld到面向对象 学习网址:http://www.cnblogs.com/vamei/archive/2013/03/14/2958654.html java快速教程第2课 方法与数据成员 学习网址:http://www.cnblogs.com/vamei/archive/2013/03/25/2964430.html java快

C++ GUI Qt4学习笔记01

C++ GUI Qt4学习笔记01 qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概念:一个是“信号和槽”,另一个是“布局”. 窗口部件(widget)是用户界面的一个可视化元素,相当于windows系统中的“控件”和“容器”.任意窗口部件都可以用作窗口. 1.1Hello Qt 正确安装Qt4开发环境,创建工程目录hello,源代码文件名为hello.cpp,进入hello目录 (1

cocos2dx游戏开发学习笔记1-基本概念

这里主要讲构建整个游戏需要的基本元素,很大部分都摘自cocos2dx官网. 1.Director 导演 导演,顾名思义,就是对整个游戏进行整体控制的. "Director"是一个共享的(单元素集)对象,负责不同场景之间的控制.导演知道当前哪个场景处于活动状态,允许你改变场景,或替换当前的场景,或推出一个新场景.当你往场景堆中推出一个新场景时,"Director"会暂停当前场景,但会记住这个场景.之后场景堆中最顶层的场景跳离时,该场景又会继续活跃.此外"Di