在Elasticsearch中,我们会接触到一个概念叫做分片,那么分片是什么呢?我们可以理解成doris中的桶。先来看看elasticsearch的分片是什么样。
如上图,我们每一个索引都有分片,比如users索引有一个分片,我们也可以设置成5个分片或者10个分片。具体的数量由我们控制即可。每一个分片可以理解成是一块单独的存储,属于这个分片规则的数据会存储到这个分片里面。所以就像上面说的,可以理解成doris里面的桶。下面再用数据来解释下,假设我们现在有一张costs表,数据如下。
如果我们把costs的表放到Elasticsearch中的话,如果我们只创建1个分片,那么这8条数据就会存储到这一个分片里面,如果我们创建的是4个分片,那么
cost_id为1和5的将会被放入第一个分片 cost_id为2和6的将会被放入第二个分片 cost_id为3和7的将会被放入第三个分片 cost_id为4和8的将会被放入第四个分片
所以我们直接可以单纯的理解成每一个分片都是存储某个索引的一部分数据即可。
在elastcsearch中,分片我们有分为主分片和副分片,副分片的数据和主分片的数据一模一样,主要是为了在查询的时候,可以承担一部分查询能力,以便提高查询效率。同时主分片如果出现问题,副分片会主动被提升为主分片,这样也保证了数据的高可用。
如上图的test_patrol_point_geo的索引里面就可以看出来有主分片,是在node-1服务器上,副分片是失效的状态,因为目前只有1个节点。在Elasticsearch中,同一个索引的某一个主分片和副分片一定不会存在于同一个服务器实例上,他一定会分布到不同的服务器实例上。
还有一点这个副分片其实就是我们经常听说的副本数,这块在后面的实践中可以看出来。
在数据写入到elasticsearch中的时候,主分片和副分片数据同步的流程如下:
最后总结下:
1、Elasticsearch的分片分为主分片和副分片两部分。
2、Elasticsearch的主分片在整个集群中只会存在一份,当主分片挂掉后,副分片经过选举会被提升为主分片
3、Elasticsearch中的副分片可以有N个,这个N由用户自行设置。
4、Elasticsearch中的副分片的作用主要是承担查询的能力及保证数据的高可用性。
5、Elasticsearch中分片数量一旦创建将不可被修改,如果由于业务场景的需要,有对分片数量进行修改的话,需要重建索引,对新的索引进行分片的配置,再重新导入所有的数据。所以建议在创建索引的时候就考虑好需要多少分片数
6、Elasticsearch中每一个分片的数据存储建议在20G到50G之间,超过50G的话,建议考虑重建索引,重新规划分片数量。
7、Elasticsearch中的副本分片可以在系统运行的时候进行添加或者移除,主分片不允许这么操作。
还没有评论,来说两句吧...