基本概念

有观点认为从一开始就了解Elasticsearch的一些核心的概念将极大地有助于学习该技术的速度和效率。

近乎实时(NRT)

Elasticsearch是一个近乎实时的搜索平台。意思就是说,从你的索引文件到变成可搜索的内容有轻微的延时(通常为一秒)。

集群

集群是一个或多个节点(服务器)一起容纳你的整个数据,并提供在所有节点联合索引和搜索功能的集合。整个集群有一个唯一的名称,默认情况下为“elasticsearch”标识。这个名字很重要,因为一个节点能不能成为集群的一部分主要是看他的名字是否和集群一致。

请确保您不要重复使用相同的群集名称在不同的环境下,不然,你可能在加入集群节点的时候加入了错误的集群。例如,你可以使用logging-dev, logging-stage 和 logging-prod这类名字分别表示开发环境、预生产环境和生产环境。

注意,即使集群只有单个节点,它也是有效的完整的,并且运行的很好。此外,你也可以为多个集群中互相独立的集群配置其独有的名称。

节点

节点是群集存储数据的一部分,并参与集群中的索引和搜索功能。像集群一样,单个节点在启动后被默认随机赋予一个像漫威人物一样独特的名字作为标识。如果你不希望使用默认节点名称的话也可以自定义。这个名字对于识别和管理Elasticsearch集群网络中哪台服务器对应哪个节点是很重要的。

节点可以通过配置集群名称加入到特定的群集中。默认情况下,每个节点都设置了加入集群名为elasticsearch,这意味着如果你启动多个节点并且假设在网络上他们能够互相发现对方,他们都将自动组成和加入一个名字为elasticsearch的集群。

在一个集群中,你想设置多少个节点就可以设置多少个节点。此外,如果没有其他Elasticsearch节点当前在网络上运行的话,启动单个节点将会默认组成名字为elasticsearch的单节点集群。

索引

索引是具有相似特征的文档集合。例如,您可以为客户数据对应一个索引,订单数据对应一个索引,还有一个索引对应产品目录。索引是一个名称标识(必须是全部小写),这个标识被用来执行索引,搜索,更新和删除操作时索引对应的文件。

在一个集群中,你可以根据需要定义很多索引。

类型

在一个索引中,你可以定义一个或多个类型。一个类型就是一个逻辑类或分区,它的含义完全取决于你。通常情况下,一个类型限定为一组有共同的字段的文档。例如,假设你运行一个博客平台,您的所有数据存储在一个单一的索引中。在这个索引中,可以定义用户数据为一个类型,博客数据为一个类型,再有一种类型为征求意见。

文档

文档是可以被索引的基本信息单元。例如,你可以有一个文档事存储库一个客户的,再有一个文档存储单个商品,还有一个文档来存储单个订单。该文档用JSON(JavaScript对象符号)格式来表述,JSON是一种无处不在的互联网数据交换格式。

在索引或类型中,您可以根据实际需要存储的很多的文件。注意,虽然一个文件物理上属于一个索引,但实际上是必须被索引或被分配给索引内的类型的。

分片和副本

索引可以存储大量的数据,可以超过单个节点的硬件限制。例如,单个索引就数亿级且的占用的磁盘空间1TB的文件可能不适合存储在单个节点磁盘上,或者从单个节点上请求搜索会变得很慢。

为了解决这个问题,Elasticsearch提供将索引细分为多个部分的能力,我们称之为碎片。当您创建一个索引,你可以简单地定义要碎片的数量。每个碎片本身就是一个全功能的,独立的“索引”,可以在集群中的任何节点上托管。

有两个主要的原因使得分片很重要:

  • 它可以让你水平分割或扩展内容的大小
  • 它可以让你跨碎片操作分发和放置(可能在多个节点),从而提高性能和吞吐量

关于碎片是如何分布以及它的文件是如何完整的聚合回搜索请求的是由Elasticsearch来管理的,对于用户来说,这完全是透明的。

在网络/云环境,随时可能会发生故障,强烈建议您有一套在分片和节点故障时的转移机制的,这是非常有用的。为此,Elasticsearch允许你为你索引的分片设置一个或多个副本分片,或者简称副本。

有两个主要的原因使得复制很重要:

  • 它提供了一个碎片/节点在故障情况下的高可用性。由于这个原因,请不要把副本分片和原始分片或者称之为主分片的东西放在一个节点下,切记。
  • 它可以让你扩展搜索量/吞吐量,因为搜索可以在所有副本上并行执行。

总之,每一个索引可被分成多个碎片。索引也可以复制零(意味着没有副本)或多次。复制后,每个索引都会有原始碎片(从被复制的原始碎片)和副本碎片(原始碎片的副本)。碎片和副本的数目可以在创建索引的时间来自定义。创建索引后,您可以动态地随时更改副本的数量,但事实上,你不能改变碎片的数量。

默认情况下,Elasticsearch每个索引分配5个原始碎片和1个副本,这意味着,如果你的集群至少有两个节点,你的索引将有5个原始碎片和另外5个副本碎片(1个完整副本),每个索引总共有10个碎片。

  • 注意
  • 每个Elasticsearch碎片都是一个Lucene索引。单个Lucene索引文档的数量是有最大限制的。LUCENE-5843,该限制是2147483519(= Integer.MAX_VALUE的- 128)的文件。您可以使用cat/shards api监视碎片大小。

用这样的方式,让我们带着乐趣正式开始下一部分吧...

results matching ""

    No results matching ""