「Elasticsearch」- 索引

  CREATED BY JENKINSBOT

索引,是具有某些类似特征的文档集合。 例如,可以拥有客户数据索引、产品目录索引、订单数据索引。 索引由名称进行标识(必须全部小写),此名称用于引用索引,以在对其中的文档执行索引、搜索、更新、删除操作。

在单个群集中,可以根据需要定义任意数量的索引。

默认情况下,在Elasticsearch中的每一个索引都分配了5个索引分片和1个索引副本,这意味着:如果群集中至少有两个节点,则一个索引将包含5个主索引分片和另外5个副本分片(一个完整的索引副本),总计为每个索引有10个索引分片。

「分片」与「副本」

关于分片(Shard)

一个索引可以存储很多的数据,但是过多的数据会超过硬件的限制。比如,对于有1TB数据的索引,如果存储在单个节点的硬盘上,可能会空间不足,或者搜索速度很慢。

为了解决这个问题,ES提供了将一个索引分割成多个“片”的能力,这个“片”被称为「分片」。当定义「索引」时,你可以指定「分片」的数量。每个「分片」本身都是一个功能完整且独立的「索引」,它拥有「整个索引」的一部分数据,可以托管在集群中的任何节点上。

从另一个角度看,「索引」是一个逻辑上的概念,实际在存储时被分成多个「分片」。

对索引分片有两个重要的原因:

	* 更方便的水平扩容
	* 可以夸分片进行并行/分布操作,因此增加性能/吞吐

「分片」的分布和搜索结果的聚合完全由ES管理,对用户来说是透明的。

关于副本(Replica)

在网路环境中,随时都可能发生故障。强烈建议有一个故障迁移机制,在「分片」或「节点」离线/消失时发挥作用。

在ES中,允许你创建“索引的分片”的“复制”,这些“复制”称为「副本」。

副本的存在有两个重要的原因:

	* 在分片/节点失败时,提供高可用性。鉴于此,”副本分片“绝对不会和”它所拷贝的主分片“在同一个节点上
	* 扩展搜索量/吞吐量,因为可以在所有「副本」上并行地执行搜索

总而言之,每个「索引」可以拆分为多个「分片」。 「索引」也可以被复制零次或更多次。复制后,每个「索引」都将具有「主分片」(从中复制的原始分片)和「副本分片」(主分片的副本)。

在索引创建是,可以基于索引定义「分片」和「副本」数。创建后,可以随意修改「副本」数量。可以使用「_shrink」和「_split」接口更改现有「索引」的「分片」数量,但这不是一个简单的任务,最好是能够预先计划正确数量的「分片」数量。

默认情况下,会为每个「索引」分配5个「主分片」和1个「副本」,如果你有两个节点,那你的「索引」将会有五个「主分片」,五个「副本分片」(一个完整的副本),也就是说每个「索引」有十个分片。

参考文献

Elasticsearch Reference [6.6] » Getting Started » Basic Concepts