Elasticsearch基础概念

目录

基础概念

1.近实时(Near Realtime,NRT)

2.集群(Cluster)

3.结点(Node)

4.索引(Index)

5.类型(Type,6.0.0中被废弃)

6.文档(Document)

7.片(Shards)与备份(replicas)

翻译源:Elasticsearch 6.4文档


 

 

基础概念

最开始就理解Elasticsearch的核心概念有助于简化学习过程。

 

1.近实时(Near Realtime,NRT)

Elasticsearch是一个近实时搜索平台。

这意味着从搜索一个文档到找到此文档的过程中只存在微小的延迟(通常为1秒)。

2.集群(Cluster)

集群是包含一个或以上结点(服务器)的集合,这些服务器共同持有所有的数据,并且提供跨所有结点的联合索引与搜索能力。

集群由一个特定名称来标识,此名称默认情况下为"elasticsearch"。

此名称极其重要,因为一个结点只能为一个集群的一部分,节点在建立时通过集群的名称加入结点。

确保不会在不同的环境下复用相同的集群名称,否则可能会令结点加入错误的集群。

例如,可以令logging-dev,loggingstage,logging-prod分别用于开发、加载与产品集群。

注意,只有一个节点的集群是合法有效的并且非常好。此外,可以拥有多个独立集群,每个集群拥有自己特定的名称。

3.结点(Node)

一个结点是集群中的单个服务器,此服务器用来存储数据,参与集群的索引与搜索能力。

类似于集群,一个结点通过一个名称来识别,此名称默认为此结点在启动时赋予的随机UUID。

如果不想要默认的结点名称,也可以为结点定义名称。

节点名称在管理方面非常重要,用于确认网络中的哪些服务器对应Elasticsearch集群中的结点。

一个结点可以通过集群的名称被配置加入某个特定的集群。

默认情况下,每一个启动的结点都会加入名为elasticsearch的集群。这意味着,如果在网络中启动了大量的结点(假设这些结点可以互相发现彼此),它们会自动形成并加入一个名为elasticsearch的集群。

在一个集群中,可以将任意数量的结点放入。此外,如果没有其他Elasticsearch结点运行在当前网络上,开启一个单独的结点,在默认情况下将会形成一个名为elasticsearch的单节点集群。

4.索引(Index)

索引是具有相似特征的文档的集合。

例如,可以拥有一个存储顾客数据的索引,一个用于存储产品目录的索引,以及一个用于存储订单数据的索引。

索引通过其名称(必须为小写)来识别,当针对索引中的文档执行索引、搜索、更新与删除操作时,索引名称用于引用索引。

单个集群中,可以定义任意数量的索引。

5.类型(Type,6.0.0中被废弃)

类型是索引的逻辑分类/划分,可以将不同类型的文档存储在相同的索引中。eg,一个类型用于用户,其他类型用于博客文章。

现在已经不再可能在一个索引中创建多个类型,类型的概念将会在稍后的版本中被移除。

6.文档(Document)

文档是可以被编入索引的基本信息单位。

例如,可以为一个单独的顾客提供一个文档,为单个产品提供一个文档,为单个订单提供一个文档。

文档使用JSON表达。

在一个索引或类型中,可以存储任意数量的文档。

虽然,一个文档物理上存放于一个索引,但一个文档实际上必须被编入文档中的一个类型。

7.片(Shards)与备份(replicas)

一个索引可以存储超过单个节点硬件限制的数据量。

类如,拥有十亿文档占据1TB硬件资源的索引可能无法装入单个结点或由一个单独结点响应搜索服务请求过于缓慢。

为了解决这一问题,Elasticsearch提供了将索引切分为多个小块(称为片)的能力。

当创建一个索引时,可以简单定义期望切分的片的数量。

每一个片自身就是一个功能完全且独立的可以放入集群中任意结点的"索引"。

分片的重要性源于两个主要原因:

  • 它提供了横向切分内容容量的功能
  • 它提供了分布式并行化跨切片(切片可以放在多个结点)的操作,因此提升了性能

节点如何分布与如何聚合文档回复搜索请求的机制完全由Elasticsearch管理,此过程对于用户透明。

在网络环境与云环境这种随时都可能产生错误的状态下,强烈建议使用容错机制以防结点或切片出于一些原因掉线或消失。

为了这个目的,Elasticsearch允许将索引的切片复制为一个或多个副本切片。

备份的重要性主要源于两个主要原因:

  • 它提供了高可用性以防某一个结点或切片挂掉,出于此原因,副本切片不会与原切片分配至相同结点下
  • 它允许扩展搜索容量与吞吐量,因为搜索可以在所有的副本上并行执行

简单来说,每一个索引都可以划分为多个切片。一个索引也可以被备份零次或多次。

一旦完成备份,每一个索引将会拥有主切片与备份切片。

当索引被创建时,可以定义每个索引的切片数量与备份数量。

当切片被创建之后,还可以随时动态改变切片备份数量。

通过_shrink与_split APIs改变已经存在的索引的切片数量,但是,预先设置最优的切片数量并不是一件简单的任务。

默认情况下,Elasticsearch中的每一个索引被分配5个主切片,1次备份。

这意味着,集群中最少需要两个节点,索引将会拥有5个主切片以及5个备份切片(即一份完整备份)合计每一个索引有10个切片。

每一个Elasticsearch切片是一个Lucene索引。

单个Lucene索引中可存放的文档具有最大值。自LUCENE-5843,这个限制为Integer.MAX-VALUE-128。

可以通过_cat/shards API监视切片大小。


翻译源:Elasticsearch 6.4文档

猜你喜欢

转载自blog.csdn.net/qq_32165041/article/details/82980699