了解 Elasticsearch 的核心概念对掌握其使用和优化非常重要。以下是对 Elasticsearch 中索引、类型、文档、节点、集群、分片和副本的详细解释。
索引(Index)
- 定义: 索引是 Elasticsearch 中存储、管理和查询文档的地方。可以把索引看作是一个数据库中的表。
- 结构: 每个索引包含多个类型(在 Elasticsearch 6.x 及以前版本)和文档。
- 创建: 索引在创建时定义映射(Mapping)和设置(Settings)。映射定义了字段类型和字段属性,而设置包括分片和副本的数量等配置。
- 命名: 索引名称必须是小写,不能包含空格和一些特殊字符。
类型(Type)
- 定义: 类型是 Elasticsearch 6.x 及以前版本中的概念,用于将索引内的文档分类。类型相当于数据库表中的列族。
- 结构: 每个类型包含多个文档。不同类型可以有不同的字段。
- 废弃: 从 Elasticsearch 7.x 开始,类型概念被废弃,一个索引中只能包含一个类型,以简化数据模型和避免冲突。
文档(Document)
- 定义: 文档是 Elasticsearch 中存储的数据单元,相当于数据库表中的一行。每个文档是一个 JSON 对象。
- 结构: 文档包含多个字段,每个字段都有数据类型,如字符串、数字、日期等。
- 唯一标识: 每个文档有一个唯一的
_id字段,作为其唯一标识符。
节点(Node)
- 定义: 节点是运行 Elasticsearch 实例的基本单元。每个节点是集群的一部分。
- 类型: 节点可以有多种角色,如主节点(Master Node)、数据节点(Data Node)、协调节点(Coordinator Node)等。
- 配置: 节点的角色和配置通过
elasticsearch.yml文件进行设置。
集群(Cluster)
- 定义: 集群是由多个节点组成的集合,协同工作来存储数据和处理搜索请求。
- 名称: 集群有一个唯一的名称,用于标识该集群,默认名称为 “elasticsearch”。
- 管理: 集群通过选举一个主节点来管理集群状态和任务分配。主节点负责创建和删除索引,跟踪集群范围内的节点信息等。
分片(Shard)
- 定义: 分片是 Elasticsearch 中索引的基本存储单元,一个索引可以被拆分成多个分片。
- 类型: 分片有两种类型:主分片(Primary Shard)和副本分片(Replica Shard)。
- 配置: 分片数量在索引创建时指定,主分片数量创建后不可更改。
- 分配: Elasticsearch 会自动将分片分配到集群中的不同节点上,以均衡负载和提高可用性。
副本(Replica)
- 定义: 副本是主分片的复制,用于提高数据的可用性和容错能力。
- 数量: 每个主分片可以有多个副本分片,副本数量可以在索引创建后动态调整。
- 角色: 副本不仅在主分片失效时接管工作,还可以分担查询负载,提升查询性能。
关系和架构图
graph LR
subgraph Elasticsearch_Cluster
A[Node 1]
B[Node 2]
C[Node 3]
end
subgraph Index
D[Primary Shard 1]
E[Primary Shard 2]
F[Replica Shard 1]
G[Replica Shard 2]
end
D --> A
E --> B
F --> C
G --> A
总结
- 索引(Index): 存储、管理和查询文档的地方,相当于数据库中的表。
- 类型(Type): Elasticsearch 6.x 及以前版本中的分类概念,从 7.x 开始废弃。
- 文档(Document): 存储的数据单元,是一个 JSON 对象,相当于数据库表中的一行。
- 节点(Node): 运行 Elasticsearch 实例的基本单元,可以有多种角色。
- 集群(Cluster): 由多个节点组成的集合,协同工作来存储数据和处理请求。
- 分片(Shard): 索引的基本存储单元,分为主分片和副本分片。
- 副本(Replica): 主分片的复制,用于提高数据的可用性和查询性能。
No comments yet.