翻译自https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html,方便回看。
基础概念
1. Near Realtime 接近实时
从对文档创建进行索引开始到该文档可搜索,大概有1秒的轻微延时。
2. Cluster 集群
集群是一个或多个节点(服务器)的集合,承载着所有节点上的数据,对数据进行联合索引和搜索。每个集群拥着唯一的id,默认为elasticsearch。一个节点只能加入一个集群,由该集群的唯一id来标识。
在不同的环境中,不要使用相同的集群id,以免节点加错集群。
一个集群只有一个节点是完全可行的。另外,你可以使用多个独立的拥有不同id的集群。
3. Node 节点
一个节点是一台用来存储数据,并且参与到索引和搜索功能的服务器,属于集群的一部分。类似集群,一个节点也是通过id来进行识别,默认情况下,这个id是一个随机的uuid,在节点启动时进行分配。如果不想使用随机uuid,可以根据需求自行定义节点id。对于管理节点而言,这个id很重要,它可以用来定位,工作网络中的哪台服务器对应elasticsearch集群中的哪个节点。
一个节点可以通过集群id,配置加入到该集群中。默认情况下,每一个节点都会加入一个叫做elasticsearch的集群。这意味着,如果在网络中启动很多节点,并且他们都能相互发现,他们会自动组成一个叫做elasticsearch的集群。
单个集群可以拥有任意多个节点。另外,如果当前网络中没有工作的节点,启动一个单独节点将会默认创建一个叫做elasticsearch的单节点集群。
4. Index 索引
索引是一组具有一定相似度文档的集合。例如,你可以为客户数据创建索引,为产品类型创建索引,为订单数据创建索引。索引由名称(必须为小写)唯一标识,用来对文档进行索引、搜索、更新和删除操作。
在单一集群中,可以定义任意多的索引。
5. Type 类型
一个索引中,可以定义一个或者多个类型。一个类型是索引的逻辑分类/分区,它的语义完全由用户决定。总的来说,我们为拥有一组共同字段的文档定义一个类型。例如,一个运行的博客平台,把所有数据都存储在一个索引中。在这儿索引中,可以为用户数据定义一个类型,博客数据定义一个类型,评论数据定义另一个类型。
6. Document 文档
文档是能被索引的基本信息单元。例如,一个客户一个文档,一个产品一个文档,一个订单一个文档。文档的格式为json。
在索引/类型中,可以存储任意多的文档。虽然一个文档物理上存在于索引中,实际上一个文档可以被索引/分配到一个索引中的类型上。
7. Shards & Replicas 分片 & 副本
一个索引潜在存储数据的数量,远远超出单一节点的物理容量。例如,一个占用1TB磁盘拥有10亿文档的单一索引,不大可能在在单一节点的磁盘用使用,或因为太慢而无法在单一节点上提供搜索查询。
为解决这个问题,Elasticsearch提供了将索引细分为分片的功能。在创建索引时,可以指定需要分片的数量。每一个分片具有索引的所有功能,并且可以分布在集群中的任意节点上。
分片很重要,因为
1. 允许垂直分裂/减少内容的量
2. 允许在跨分片分布和并行操作(多个节点),以提供性能,增加并发。
分片分布和搜索请求时的文档聚合机制完全由Elasticsearch来管理,并且对用户透明。
在网络/云环境中,失败是随机可能发生的,因此能够防止分片/节点由于意外宕机的灾备策略是相当有用且强烈推荐的。总的来说,Elasticsearch可以创建一个或多个索引分片的拷贝到副本分片中,简称为副本。
副本很重要,因为
1. 副本提供高可用性,以防分片/节点宕机。因之,要注意一个副本分片不能和它的原副本位于相同的节点上
2. 副本可以降低搜索量/吞吐量,因为搜索可以在所有副本上并行执行。
总而言之,每一个索引可以划分为多个分片。索引可以被复制为零(无副本)至多份。索引一旦被复制,它将会拥有主分片(被复制的原始分片)和从分片(主分片的拷贝)。分片和副本的数量可在索引被创建时逐一配置。当索引创建后,副本的数量可以动态调整,但分片的数量则不能改动。
默认的,Elasticsearch会为每个索引分配5个主分片和1个副本。这意味着,当前集群中至少要有2个节点,其中每个索引会有5个主分片和5个副本分片(即一个完整副本),共10个分片/索引。