本文介绍阿里云Elasticsearch服务使用过程中遇到的常用名词的基本概念和简要描述。
集群(cluster)
一个Elasticsearch集群由一个或多个Elasticsearch节点组成,所有节点共同存储数据。每个集群都应有一个唯一的集群名(ClusterName),同一环境内如果存在同名集群,可能会出现不可知异常。
节点(node)
- 数据节点:存储索引数据的节点,主要对文档进行增删改查、聚合等操作。
- 专有主节点:对集群进行操作,例如创建或删除索引,跟踪哪些节点是集群的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康非常重要,默认情况下集群中的任一节点都可能被选为主节点。
- 协调节点:分担数据节点的CPU开销,从而提高处理性能和服务稳定性。
索引(index)
一个索引是一个拥有一些相似特征的文档的集合,相当于关系型数据库中的一个数据库。例如,您可以拥有一个客户数据的索引,一个商品目录的索引,以及一个订单数据的索引。一个索引通常使用一个名称(所有字母必须小写)来标识,当针对这个索引的文档执行索引、搜索、更新和删除操作的时候,这个名称被用来指向索引。
类型(type)
一个类型通常是一个索引的一个逻辑分类或分区,允许在一个索引下存储不同类型的文档,相当于关系型数据库中的一张表,例如用户类型、博客类型等。由于6.x以后的Elasticsearch版本已经不支持在一个索引下创建多个类型,因此类型概念在后续版本中不再被提及。Elasticsearch 5.x允许在一个索引下存储不同类型的文档,Elasticsearch 6.x在一个索引下只允许一个类型,Elasticsearch 7.x索引类型命名只允许_doc,详情请参见Elasticsearch官方文档。
文档(document)
一个文档是可以被索引的基本信息单元,相当于关系型数据库中的一行数据。例如,您可以为一个客户创建一个文档,或者为一个商品创建一个文档。文档可以用JSON格式来表示。在一个索引中,您可以存储任意多的文档,且文档必须被索引。
字段(field)
field是组成文档的最小单位,相当于关系型数据库中的一列数据。
映射(mapping)
mapping用来定义一个文档以及其所包含的字段如何被存储和索引,相当于关系型数据库中的Schema,例如在mapping中定义字段的名称和类型,以及所使用的分词器。
Elasticsearch | 关系型数据库 |
索引(index) | 数据库(Database) |
文档类型(type) | 表(Table) |
文档(document) | 一行数据(Row) |
字段(field) | 一列数据(Column) |
映射(mapping) | 数据库的组织和结构(Schema) |
分片(shards)和副本(replicas)
shards代表索引分片,Elasticsearch可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。主分片的数量只能在索引创建时指定,并且索引创建后不能更改。
replicas是索引的备份,Elasticsearch可以设置多个副本。写操作会先在主分片上完成,然后分发到副本分片上。因为索引的主分片和副本分片都可以对外提供查询服务,所以副本能够提升系统的高可用性和搜索时的并发性能。但如果副本太多,也会增加写操作时数据同步的负担。
分片类型 | 支持处理的请求 | 数量是否可修改 | 其他说明 |
主分片 | 支持处理查询和索引请求。 | 在创建索引时设定,设定后不可更改,详细信息请参见步骤三:创建索引。 | 索引内任意一个文档都存储在一个主分片中,所以主分片的数量决定着索引能够保存的最大数据量。 重要 主分片不是越多越好,因为主分片越多,Elasticsearch性能开销也会越大。 |
副本分片 | 支持处理查询请求,不支持处理索引请求。 | 可在任何时候添加或删除副本分片,详细信息请参见索引模板。 | 副本分片对搜索性能非常重要,主要体现在以下两个方面:
|
gateway
gateway代表Elasticsearch索引快照的存储方式,Elasticsearch默认优先将索引存放到内存中,当内存满时再将这些索引持久化存储至本地硬盘。gateway对索引快照进行存储,当这个Elasticsearch集群关闭再重新启动时就会从gateway中读取索引备份数据。Elasticsearch支持多种类型的gateway,有本地文件系统(默认)、分布式文件系统、Hadoop的HDFS和阿里云的OSS云存储服务。
discovery.zen
discovery.zen代表Elasticsearch的自动发现节点机制,Elasticsearch是一个基于P2P的系统,它先通过广播寻找存在的节点,再通过多播协议进行节点之间的通信,同时也支持点对点的交互。
Transport
Transport代表Elasticsearch内部节点或集群与客户端的交互方式,默认使用TCP协议进行交互。同时支持通过插件的方式集成,因此也可以使用HTTP协议(JSON格式)、thrift、memcached、zeroMQ等传输协议进行交互。