elaticsearch 基本概念
Posted henry-hacker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elaticsearch 基本概念相关的知识,希望对你有一定的参考价值。
前言
es从某种层面来说,其实也就是一种存储数据媒介,而我们想要学习它。我们就应该首先清楚其保存数据的格式。然而,我却没有自信觉得自己一定会对这些概念的理解足够深入,因此,只能翻一下es官网上的一篇文章了。下面,翻译正式开始!、
基本概念
这里有一些概念是Elaticsearch的核心概念,从一开始就理解这些概念将会大大的有助于缓解学习过程。
近实时(NRT)
Elaticsearch是一个近乎实时的搜索平台。这意味着从你索引文档到可搜索的时间有一点点的延迟。(通常是一秒钟)
集群
集群指的是一个或者多个节点(服务器)的集合,这些节点会一起保存数据,并且会在所有的节点上提供联合索引和搜索的功能。一个集群通常会被一个名字所标示,当然,它的默认值是‘Elaticsearch’。这个名字是十分重要的,因为如果一个节点想要加入这个集群那么必须依靠这个名字来加入。
值得说明的是,确保不要在不同的环境中使用相同的集群名称。否则你的节点可能会加入错误的集群。例如你可以使用logging-dev、logging-stage和logging-production来给不同的环境的集群命名。
请注意,拥有一个节点的集群是有效和完美的。此外,你还可以拥有多个独立的集群,但是每个集群都必须有自己的独立的集群名称。
节点
节点指的是一个集群中的单个机器,它存储数据、并且参与集群的索引和搜索功能,实际上就像一个集群。一个节点也是被一个名字所标示,其默认的名称是在节点启动时候的分配给他的唯一标示符(UUID)。你可以任意定义你的节点名称。如果你带着管理的目的的话,那么这些名字无疑是很重要的。当您希望确定网络中的那些服务器对应于Elaticsearch集群中的那些节点得时候。
一个节点可以通过一个集群名加入某一个集群。默认情况下,每一个节点都会加入名为elasticseaarch的集群中。这意味着在你的网络环境中当你启动了一些节点,在这里我们假设他们可以互相发现对方,他们将会全部自动的加入和形成一个名为elaticsearch的集群。
在一个集群中,你可以拥有您想要的任意多的节点。此外如果当前没有任何的节点在你的网络环境中运行,此时启动的单个节点将会形成名为elaticsearch的新的单节点集群。
索引
索引指的是一系列文档的集合,这些文档有着共同的特性和特征。举例来说:你可以拥有客户数据的索引,产品目录的索引以及订单数据的索引。索引由名称,当然在命名时候必须全部为小写字母,该名称的作用是可以针对其中存在的文档执行索引,搜索更新和删除操作时候也可以借用名称引用索引。
在单个集群中,你可以根据需要定义任意多的索引。
类型
在索引中,你可以定义一种或者多种类型。类型的你的索引的逻辑类别/分区,当然,其中的含义取决于你自己。一般而言,一种类型定义是为了给一个拥有共同的元素的集合。例如,假设你运行一个博客的平台,并且将所有的数据保存在单个的索引中,在此索引中你可以定义用户数据的类型、博客数据的类型以及注释数据的类型。
文档
文档可以被索引的基本单元。例如,你可以拥有一个针对单个消费者的文档,另一个用于单个订单信息的文档。该文档以JSON(javascript Object Notation)表示,JOSN是一种无处不在的互联网数据的交换格式。
在一个索引/类型中,你可以存储任意多的文档。需要注意的是尽管文档在物理上是属于索引的,但是他会被分配给特定的索引类型。
分片&副本
一个索引中可能存放非常多的数据,这些数据甚至有可能超越一个单节点机器的资源限制。例如一个索引中如果有十亿个文档的话将会占用多达1Tb的空间,而这些是无法从单个节点提供搜索请求的,因为这将十分缓慢。
想要解决这个问题,elaticsearch提供了可以将你的索引分片的能力,这些分片成为切片。每当你创建一个索引的时候,你可以十分轻松的制定这个索引的分片个数。每个分片就是一个功能完整且独立的索引,当然,他们可以分布在集群的任意一个节点上。
分片十分重要,主要原因有两个:
1 它允许你水平的分割你的内容卷
2 它允许你在分片(可能在多个节点上)分布和并行的操作,从而提高整个集群的性能和吞吐量。
搜素请求分发的机制以及文档最终如何汇总到搜索请求完全由elaticsearch来进行管理,这对于你来说是透明的。
在可能发生故障的网络/云环境中,尤其是故障随时可能发生,我们强烈的建议采用故障转移机制,防止分片或者节点脱机或者消失。为此,elaticsearch允许您将索引的分片的一个甚至多个复制到所谓的复制分片上去,这也别我们成为副本。
副本十分重要,主要原因有两个:
1 当主分片出现故障的时候,副本即可提供高可用的特性。因此,需要注意的是,复制分片分配的节点绝不会同原始的分片在同一个数据节点上。
2 它同样可以提升扩展搜索量/吞吐量,因为可以对所有的副本执行并行的搜索请求。
总而言之,每个索引可以分为多个数据分片。索引的复制分片也可以被设置为0,当然,这意味着没有数据分片。一旦复制,每个索引都将具有原始的数据分片以及副本。你可以在创建索引的时候指定副本的数量。
当你创建索引后,你可随时修改副本数,但是分片数已经固定,无法修改。
默认情况下,Elasticsearch中的每个索引都分配了5个主分片和1个副本,这意味着如果您的集群中至少有两个节点,则索引将具有5个主分片,另外5个复本分片(1个完整副本)。一共是10个数据分片。
NOTE
每一个搜索的数据分片都是一个Lucene索引,在一个Lucene索引所能拥有的最大文档数量为Integer.MAX_VALUE-128。当然,你可以采用_cat/shards api监视数据分片。
原文链接:Base Concepts
总结
此篇翻译已经将elaticsearch的基本概念,集群、节点、索引、类型、文档以及数据分片讲的十分清楚,当然,阿福水平有限,还望海涵,若有错误,欢迎斧正!
以上是关于elaticsearch 基本概念的主要内容,如果未能解决你的问题,请参考以下文章