00:00
说一说这个分片策略,分片的概念呢,我们之前给大家讲过一个索引呢,它其中的数据过多以后,会导致它的查询性能降低,所以我们会把一个索引的数据呢,分成一个部分,一个部分的,每一个部分呢,它可以用于独立的查询,我们把它称之为叫分片,但是呢,你的一个分片呢,会导致什么呢?数据不安全,所以我们还会有副本的概念,那么这个副本呢,可以进行我们数据的备份,那么相对来说我们数据会安全一些,对吧?这个咱们都讲过了,而这个分片和副本的设计呢,是为了ES提供了支持分布式和故障转移的特性,但是你要记住了,我们这个分片和副本不是无限的。你不能一上来把这个分片设计的很大,是不合理的,为什么?因为我们这个分片一旦设计完成之后,它是不能重新修改的,你说我的副本啊,我可以动态修改,但是你的分几片是不能改的,为什么?因为我们会有一个路由计算的规则,你的数据往哪放,这是我们能算出来的,一旦你的这个分片你动态发生变化了,那么你想查这个数据可能就查不到了。所以我们的分片它一定是在我们创建索引时就已经确定好的,要千万注意了。
01:10
那么可能有人会说了,就说我们这个索引到底要有多大,以后的数据能有多少,我不确定,那我能不能一上来把这个分片数弄得很多呢?其实也不行,为什么?因为我们的分片其实是有代价的,大家可以看到一个分片的底层就是一个luion的索引,它会消耗一定的文件、句柄、内存以及CPU的运转,你可以把一个我们的分片就当成一个独立的搜索引擎,那么这样的话它会占用一个独立的空间,那么就意味着当你的分片越多,你的资源会被消耗的更多,对吗?那么每一个搜索请求都需要命中索引的每一个分片,那么每一个分片都处于不同的节点还好,但如果多个分片在同一个节点上,就意味着他们要竞争相同的资源了。因为你分片过多,在你的节点数太少,那么就导致一个节点上会有大量的分片,对不对,那么我们的资源是有限的呀,那所以性能就会降低了啊,还有呢,就是我们计算相关度的词项统计呢,是基于分片的,如果有许多分片的话,那么每一个都只有很少的数据,会导致很低的相关度,就意味着我们的数据啊被平均分到太多的分片当中,它的匹配度就会非常的差,懂我的意思吗?同学们,诶,所以啊,我们的一个业务索引具体需要分配多少个分片,是需要我们的技术人员去进行分析的,看看我们业务的增长是什么样子的,我们要有一个预判,预判之后呢,再判断我们的数据容量,再做一些操作,这样的话,对于我们的集群,对于我们的节点,对于我们的索引都做一个评估就会好很多。好吧,同学们,嗯,当你判断好之后,我们就可以进行分片了。但是我们还需要遵循一些原,大家可以看到控制每个分片占用的硬盘容量不超过ES。
02:55
最大的加入虚拟机的堆空间设置,一般设置不超过32G,那这句话是什么意思呢?首先其实我们后面也会讲,我们的这个内存呢,其实主要是用来存储一些我们的数据操作,可是你要记住啊,我们把内存中的数据操作完成以后,建立索引呢,建立我们的段文件呀,其实是不行的,为什么这个时候用户是查不到的,你只有把我们内存当中的内容给他暂存到我们的系统缓存当中,他才能够什么去查询。
03:26
所以在这种情况下,你的内存设计的很大,那么你的操作系统的可用缓存就会变少,那这样的话你的数据就会频繁的落盘,那你想想吧,同学们就会有问题,所以呢,我们希望的是一般不要超过32G啊,有个大概的标准对吧?还有一个就是我们考虑一下node的数量,节点的数量,一般一个节点有时候就是一台物理机,如果分片数过多,大大超过了节点数,就会导致一个节点上会有多个分片,一旦当前的节点出现故障,那么保持了一个以上的副本,就同样有可能会导致数据丢失,所以啊,它有一个标准,就是一般设置分片数量不超过节点数的三倍,比方说我现在有三个节点,那其实我们写九个分片是不是就可以了,大家还记得吗?我们之前好像就是这么配置的呀啊。
04:17
还有一个他说了主分片副本和节点最大数之间的数量,我们可以参考以下关系,节点数小于等于主分片数乘以副本数加一啊,把这个稍微记一下就可以了啊,推词分片分配其实指的是集群当中啊,如果某个节点突然当掉了,那么这个时候呢,我们原则上来讲应该把我们的分片呢重新分配,分配到别的节点上面去。可是在你重新分配的过程当中,这个时候那个节点又恢复了怎么办?其实你想想啊,那个节点恢复的话,是不是保留的旧的数据,那这个时候如果你可以推迟这个重新分片的这个过程的话,你旧的数据不就回来了吗?那这样的话性能上不就得到提高了嘛,对不对,你就不用再重新打乱整个数据重新分配了,那不挺好的吗?但是呢,我们需要考虑一个事情,就是说这个时间啊,怎么去调整,我们可以通过修改参数呢,来延长这个什么推迟分片分配的时间,也可以全局设置在索引上面也是可以的,大家看到在这边就有设置,我们这就不给大家演示了啊。
我来说两句