es 中常见概念以及分片的详解
一.基本概念
1.elasticsearch集群:elasticsearch集群是由一个或者多个节点组成的集合。每一个集群都有一个唯一的名称。默认是elasticsearch,我们可以自己设置的cluster_name的值,cluster_name的值非常重要,一个节点就是通过集群的名称加入集群的。然后,每一个节点都有自己的名称。节点是可以存储数据,参与集群索引数据,以及搜索数据的独立服务。
2.索引:是含有相同属性的文档集合,相当于数据库。索引在elasticsearch中是通过一个名称来识别的,必须是英文字母小写的,且不含中划线的,我们通过这个索引来对文档进行增删查改的操作。
3.类型:索引可以定义一个或者多个类型,文档必须属于一个类型,相当于数据表。
4.关系:索引、类型、文档之间的关系,索引相当于数据库里面的database即数据库,类型相当于数据库里面的table即数据表,文档相当于数据库SQL里面的一行记录。
5.分片:每个索引都有多个分片,每个分片是一个Lucene索引。
6.副本(备份):每一个分片的备份。
注意:elasticsearch在创建索引的时候,默认创建5个分片,一份副本,这个数据可以进行修改。分片的数量只能在创建索引的时候进行指定,不能在后期进行修改,备份可以进行动态修改的。
二.分片
1.集群有节点组成,节点有分片、副本组成,一个索引分为多个分片,一个分片有索引,类型组成,类型有文档组成。这是他们之间的关系。
2.分片:每一个分片就是一个完整的索引。分片里面包含索引,type。
因为 ES 是个分布式的搜索引擎, 所以索引通常都会分解成不同部分, 而这些分布在不同节点的数据就是分片. ES自动管理和组织分片, 并在必要的时候对分片数据进行再平衡分配, 所以用户基本上不用担心分片的处理细节。
3.副本:ES 默认为一个索引创建 5 个主分片, 并分别为其创建一个副本分片. 也就是说每个索引都由 5 个主分片成本, 而每个主分片都相应的有一个 copy。对于分布式搜索引擎来说, 分片及副本的分配将是高可用及快速搜索响应的设计核心.主分片与副本都能处理查询请求,它们的唯一区别在于只有主分片才能处理索引请求.副本对搜索性能非常重要,同时用户也可在任何时候添加或删除副本。额外的副本能给带来更大的容量, 更高的呑吐能力及更强的故障恢复能力。
如下图:有集群两个节点,并使用了默认的分片配置. ES自动把这5个主分片分配到2个节点上, 而它们分别对应的副本则在完全不同的节点上。其中 node1 有某个索引的分片1、2、3和副本分片4、5,node2 有该索引的分片4、5和副本分片1、2、3。
三.分片的注意事项
1.避免使用非常大的分片,因为这会对群集从故障中恢复的能力产生负面影响。 对分片的大小没有固定的限制,但是通常情况下很多场景限制在 50GB 的分片大小以内。
2.当在ElasticSearch集群中配置好你的索引后, 你要明白在集群运行中你无法调整分片设置. 既便以后你发现需要调整分片数量, 你也只能新建创建并对数据进行重新索引(reindex)(虽然reindex会比较耗时, 但至少能保证你不会停机).
3.如果担心数据的快速增长, 建议根据这条限制: ElasticSearch推荐的最大JVM堆空间 是 30~32G, 所以把分片最大容量限制为 30GB, 然后再对分片数量做合理估算。例如, 如果的数据能达到 200GB, 则最多分配7到8个分片。
4.当数据量可以合理预测并且变化缓慢时,具有固定时间间隔的基于时间的索引很有效。在分片分配上并没有绝对的答案。
相关文章
- 新概念 Lesson 8 Your passports, please. 复数 + s + es
- es实战-深入内存以及熔断
- ES问题解决:Elasticsearch health check failed
- elasticsearch-head连接不上es
- 《OpenGL ES 3.x游戏开发(上卷)》一1.2 搭建Android开发环境
- 《OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例》——6.5节光照的每顶点计算与每片元计算
- 《OpenGL ES应用开发实践指南:Android卷》—— 1.4 创建Renderer类
- 【OpenGL ES】第一个案例
- javascript模块那些事儿:commonJS和ES module
- ES 常用聚合函数
- ES 基于查询结果的聚合