ES的学习资料,一个官方给的 reference最新版
2是官方的Elasticsearch: The Definitive Guide [2.x] ,但这个只有2.X版本的,其中Getting Started将分档的刷入过程,原理都讲的很详细
1.ES的基本概念
-
1.索引
与Lunece相比,es的索引可能由一个或多个Lucene索引构成,具体细节由es的 分片,复制机制决定。每一个索引都有一个UUID相对应,查看ES目录的data文件夹,你会发现,ES其实存储的是UUID,所以当你一个单机带着旧数据加入集群时,容易发生bug,如index has already exists -
2.文档
一个文档就是一个Json对象,最后存储都会存储为Lucene文档 - 映射
文档写入索引前要进过分析阶段,用户设置参数,决定是否要分析, 采用什么分析策略,有自动映射,但有时候也有手动配置需求
- 映射
-
4.类型,type(未来会被移除)
这个之前一直搞混了,type是针对文档来说的,es为了一个索引能存储多种 文档,并为每个文档提供不同的映射
这个着重强调一下,毒瘤,之前总搞混
Type 已经打算在6.0移除了,所以在设计 elasticsearch 的数据结构的时候,要注意到后面版本的变化。
之前在很多的文章和 PPT 都有介绍Elasticsearch 的几个核心概念,Index 对应 DB,Type 对应表,Document 对应记录,然后就真的按数据库的路子用,一个 index 里面 n 个 type 的情况大有存在,但是在 Lucene 里面其实有很多问题,所以现在es移除也是考虑了很久的。
Type 移除大概分为两个阶段:
第一步,不支持新的索引创建多个 type,一个索引只有一个 type,名称也是固定的,不能修改(6.X已经做到)
第二步,移除
所以以后就一个index对应一个mapping,不在需要type这种蠢的概念了 -
5 节点
单个ES服务实例称为节点,节点由名称标识,启动时会生成通用唯一标识符 UUID -
6.集群
对应节点的概念,多个节点何在一起协同处理就是集群 cluster
集群状态,red,yellow,green。
yellow时:所有数据均可用,但有一些副本尚未分配,即还不是处于高可用的状态
red时:某些数据不可用,注意此时仍然有部分功能是可用的 -
7 分片
因为要解决超过单机限制,采用了集群方案,分片的概念就顺理成章了,ES将数据散布到多个物理Lucene索引上,这些Lucene就称为shard分片,这个过程就是分片处理 sharding。
每个分片其实都是一个Lucene索引,由于lucene自身的限制,最大包含文档为 Integer..MAX_VALUE-128,2,147,483,519 -
8 副本
这个是为了解决高可用的方案,以防止数据丢失,为每个分片创建冗余,它允许你扩展吞吐量,因为在副本上也可以执行搜索 -
tip:副本和分片是可以进行动态修改的,可以使用_shrink和_split API,但最好还是预先计划正确的数量,默认为5个分片和1个副本。
网友评论