00:00
OK啊,我们接着往后聊啊,呃,然后下面我们有一个这个删除了,这个这个这个话题啊呃,这个删除很简单啊,给大家去一句话啊,就是我们在这个做数据删除的时候呢,它不会直接做物理删除,而是通过给文档打删除标记,先进行一个逻辑的删除。直到等到什么呀。该索引触发这个段合并的时候才会做物理删除,释放你的存储空间。好,那么这里面。有这么几个点,首先第一个它的删除。他不会立马做物理删除,而是先做一个逻辑删除,这个删除机制。跟什么呀,跟你的h base特别的像,能听懂,跟你的h base特别像,H base也是一样的,就是他删除的时候呢,也是什么先打标记,打一个什么叫什么delete的标记,对不对啊,什么delete啊,或者什么delete column啊,或者什么delete family啊啊,这我估计你们应该都有印象哈,先打标记,先打标记啊,就他不会立马从磁盘中把数据删掉,那ES也是啊,他不会立马删掉。
01:04
而且先打一个标记,告诉你这个数据已经被删掉了,被删掉以后呢,将来我们在网上查的时候呢,这个数据就不会被查出来,对吧,但你这个数据你不能只做逻辑删除啊,你这个。反正我都告诉你数据已经被删掉了,你说你还在我磁盘里面存着,那你不浪费吗?所以说它会什么,在合适的时候什么时候呢,就是触发这个合并的时候,做这个物理删除,那对应到这个h base的时候,就什么做那个做什么呀,做那个叫呃叫什么叫region compion对不对。就那个FA啊,FA comp就是断他他叫什么,他叫这个小合并啊,或者什么大合并。是吧,HP等到什么,等到这个合并的时候做什么,做这个数据的一个删除,那我的ES是什么,等到什么,等到段合并的时候做这个物理的删除。说他们的机制是很像很像的啊,但是呢,呃,这个地方我们叫做断啊,那我们就先要知道一下什么玩意叫做断。对吧,所以这个删除方式啊,你就先知道一下就是什么呀,先做逻辑删除,再做物理删除,什么时候做物理删除呢?段合并的时候。
02:08
啊,当然这个段我们还不知道,你还不知道断,那你就不知道什么叫段合并啊,因此我们现在讲后面的东西,讲完以后你就知道啥叫段合并。好吧,说这就一句话啊,你先把它记住就完事了啊。接下来我们要去讲这个段,你要讲段,你就不得不先说一下这个煞的。明白吧,因为段是在Sha的里面出现的,那我们要怎么先去说这个啊,这个Sha是个啥玩意呢?这个很简单了呗。对吧,这不就是我们的分片吗?是不是啊,这是我们的分票啊,OK。行,那我们就来说一下吧,这个煞的已断啊,首先我们先说这个煞的。上来就是我的分片,就是你的一个索引中啊,你将来要什么分成这个多少个片啊,一个索引中你的数据你要什么存成多少个片。对吧,这个应该很简单的啊,好你看啊,他说这个所以呢,一般是以天为单位进行建立的啊,那如果说你这个业务线很多,每个索引呢,又不注意去控制这个分片,那你这个日积月累下来一个集群达到什么几万,甚至于什么几十万个分片都是。
03:11
不难见到的。这个大家说什么呀,就说啊,你这个Sha的呢,将来在这个整个鸡群中呢,可能会存在很多很多很多。啊。那为什么这么说呢?就是想告诉你啥的呀。太多可能会带来一些危害。杀的太少呢,也不太好。是吧,啊来,那我们先把这个给大家去做一个简单计算啊,你说我一个集群达到这个几万,甚至于这个几十万这个。他做出什么不难见到,那就说明说明这种情况是很容易出现的。对吧,啊,大家可能觉得啊,几十万个这个东西那么容易就出现了吗?我跟你讲这个几十万个很容易就出现了。这个很多事儿啊,任何事都经不起琢磨啊,你琢磨一下你就知道了啊,你比如说。假如说啊,我们。
04:01
呃。就一个索引吧,来我们说一下就一个索引啊,就一个index,你说我们给几个杀的呀。给几个啥的呀,比如说我们给上五个啥的。可以吧,就我的一个收银给上五个啥的。你先别管这个多与少啊,假如说我暂时的规划就是五个啥的,一个索引五个啥的。好吧,行,那你不能光有一个主煞的吧,你不得有这个副本吗?假如说几个副本呀,比如说这个不用多啊,三个副本。啊,两个吧,好算一点啊,两个副本。可以吧,两个副本。那行吧,两个副本啊,就说白了啊,我的一个索引,其实将来就会有什么呀,就会有这个十个煞的,因为你的副本也算一个杀的呀。对吧,好,那你说你整个这个集群,你就只有一个索引吗?你就只有一个业务线吗?不可能吧。假如说我们业务线很多啊,呃,也不用多吧,我们总共有总共有30个,总共有30个索引,这个不多吧。那行吧,同学们总共30个,这个不多啊,好,那你再来想啊。
05:04
呃,这就多少了呀,这就二五一十,这就300个了哈。对不对,这就300个了,然后呢,你一天建立一个索引,那我一年是365。对吧,那你乘一下吧,300再乘以什么365,这就多少了呀,同学们。啊。这就三三得救。这就差不多10万了吧。对吧,这就差不多10万了啊,10万多了吧,应该也10万。对吧。这就已经10万了啊,那你说我这才一年的呀,你说我这个ES我用了几年啊。是不是我ES用几年,比如用个这个N年,那就算呗。对吧,说这个任何事都经不起琢磨啊,你放到我们,放到我们这个学习的环境中,你怎么想都想不出来它会有这么多,但是你放到这个生长环境中,你稍微一算就算出来这个东西还是很多的。
06:00
说这个几万个到什么,到几十万个,这个一点都不难啊。随随便便就达到了。对吧?啊,所以这个事儿你要先知道一下啊,行,关键问题是你达到多少个这个事儿啊,我们倒不做这个纠结,我们纠结的事你多了以后会不会有影响,或者说你少了以后会不会有影响,这才是我们要去纠结的事儿。对吧,来接下来说一下啊,这个Sha的呢,它太多呢不好,太少了,其实也不好,那我们先说一下这个太多呢,它会带来什么危害啊。因为我们的每个分票啊,每个分票它都是要什么单独去做索引的,做什么做这个什么所谓的什么倒牌索引啊,这索引那索引,对吧,这些都是什么lon去做的啊,所以我们叫这个叫这个lon索引啊,那我告诉你这些索引呢,都会什么呀,消耗CPU和内存。你能明白吧,因为你的索引呢,是需要什么构建到你的内存中的,而且呢,你的索引在什么呀。计算索引啊,你比如说你插入数据啊,那我什么去计算你的索引什么的,那我都要什么经过什么计算的操作来去去做,那就说白了,你的索引呢,都会怎么去消耗我的CPU和这个内存。
07:06
啊,那么同样的数据,你的分票越多,那你额外消耗的CPU和内存就会越多。这啥意思啊,同学们啊,给大家去说一下。比如说我同样的一份数据啊,假如说我的这个数据呢,我就存一个啥的,那我存一个啥的话呢,那我只需要什么对他呢,去建立什么,建立这个一份索引。对吧,就完事了。好不好,那这一份索引的话呢,我就要什么去消耗,你比如说你的CPU啊,固定的CPU,比如说多少个,然后呢,呃,这个内存啊消耗多少对吧,这你都可以算出来,好,那有时想着说,那我如果说把它分成了两个沙的了,那我分成两个沙的以后呢,那我是不是就可以诶给大家建两份索引,那你说我这两份索引跟你原来的一份索引的这个大小一样吗?我所消耗的这个什么CPU和内存一样吗?我跟你讲啊,你的数据虽然说分成两份了,对吧,加起来还是跟原来的一份是一样的。但是呢,对于索引来讲,那可不是说什么二这个一加一等于二的事情了啊,不是的。
08:06
他一定会比你的一份索引要占用更多的资源。明白吧,因为你的每一份数据,我都会有什么对应的这个什么原数据信息,对吧,就比如索引信息,我要什么单独去做维护的。所以说呢,它就会什么出现所谓的什么一加一大于二的情况,你可千万不要认为说那你的数据分成两份了,那我对应的这个东西占用的也不就什么。两份不就完事了吗?不是的,他有可能是加起来要比什么,要比你这个一份啊,占用了什么更多更多啊,要比你这个正常两份占用的更多更多。对吧,就会出现什么一加一大于二的情况啊,这个你要知道一下就行了啊,就反正就是索引越多对吧,你的分片越多。那你额外消耗的东西呢,也就会越多。这是一定的。啊,这是一定的啊,那这种情况下,有的同学说,那我就让他少一点呗,对吧,我去规划一下,我让我这个煞的少一点,比如说我的每个索引我就一个的。
09:01
这样不就好了吗?那你说这个少了好不好呢?我跟你讲少了也不好,因为我们的Sha的目的是什么,目的是为了能够做负载均衡,让我的每个节点呢,去充分的去发挥什么,它的一些什么这个这个资源特性,对吧,比如说诶我把这个数据呢,分到你的什么不同的这个节点里面,那你将来呢,你这个请求呢,可以什么打到我的不同的节点中,对吧,我们做负载均衡啊。毕竟我们是一个肌群呢。对吧,所以你少了还不行。你你太多了也不好。明白吧?你少了。呃,注意啊,如果说我们这个分辨比较多,那我在这个单个节点的多个上的同时这个接受请求,那么对本节点的资源呢,也会造成一个竞竞争。对吧,实际上这个反而是什么造成了一些什么内耗。那你少了也不行。对吧,少了以后其实也是一个道理啊,这个分片啊呃。啊,这个这个其实表达的一个意思啊。
10:01
你看啊,如果说我的这个。上的时候少。那你少的话呢,你比如说我有这个三个节点啊,比如说这个这是我NOTE1啊,这是NOTE2,这是NOTE3。对吧,那你这个煞的是少,比如说我就只有一个一个一个煞的,那你的一个煞的肯定什么在你的一个节点上面。对吧,那么将来我所有对你这个索引的一个操作都会什么达到这个节点,那我其他都是闲着的。对吧,其他都是闲着的,这肯定不行。对吧,那你多了呢,也不行,多了就是比如说啊,我分了什么N多个啥的,那你的N多个啥的,大概率情况下分到了什么,每个节点中,这里面有很多,这里面有很多,这里面有很多。对吧,那我将来的请求呢,也会什么达到什么不同的这个节点中,那如果说诶我的一部分的请求呢,都是在请求你的一个范围的数据,那么都在什么你的同一个这个上中,或者什么在N多个Sha中,但是呢,正好都在你的同一个节点中。对吧,这种情况下,你看它也是一样的,就是他们之间也是在做一个竞争的操作。是吧,反正就是总归啊,这个事儿呢,就跟你们之前聊的那个。
11:03
啥玩意儿,就是那个学那个什么MR的时候吧,好吧,你们聊的那个什么map个数是吧,还有什么什么reduce个数对吧,当时你没有研究过啊,说这个东西多了好还是少了好。请你发现,多了也不好,少了也不好。这个地方就得什么折中对吧,去找一个什么平衡点。啊,找一个平衡点,那我们这个煞呢,也是一个道理啊,太多呢也不好,太少呢其实也不好,那我们也要去找一个什么平衡点,就是你到底多少就可以了。对吧,多少就可以了啊,那这个时候我们就得知道如何去规划你这个下的数量。我怎么去计算我要有多少个沙的?好吧,那这个计算的话呢,我们会有两个方面啊呃,一个是你这个就是按照你的每日的数据量来去规划这个的数量,再一个是按照你这个堆内存来去规划这个S的数量。好来,我们把这个说完啊,说完以后我们再休息啊,首先。我们按照每日的数据量去规划下的数量啊,这个还是比较好算的,还是比较好算的,我们去评估一下你这个每天的数据量就可以了。
12:07
明白吧,如果说你的每天的数据量是低于这个十个G的情况下,那你只需要有一个分片就可以了。啊,只要有一个分别就可以了啊,那如果说你高于这个十个G的情况下。单一的一个分片最好也不要超过这个30个G就说白了啊,你的数据量是在这个。呃,就是零到这个什么30个G吧,对吧?啊,零到这个30个G之内的情况下,嗯,大概都是一个分辨就差不多了。啊,最好是控制在这个十个G左右啊,十个G左右,明白了吧,十个G左右。能听懂我的意思吧,但是呢,比十个G多一点,比如说这个呃,两到三倍啊,我也是能够接受的,我的一个S呢,也是可以怎么去维护这么多数据的啊,这也是没啥太大的问题的。啊,但是呢,你不要超过30啊,超过30以后的话,这个事儿就不太好了。OK吧,所以说你就看一下,如果说我一个200个G的什么单日索引,比如说我的一个索引啊,我一天会有200个G数据进来,200个G的数据进来。
13:07
那这种情况下你就算呗,我的一个S的,我最多的维护30个G的数据,那你200个G的数据。你就出一下呗。对吧,一除差不多什么差不多什么七七个左右对吧,哎,七到十个吧,啊就看你这个每一个下的你要分多少。对吧,这个是通过什么,通过这个数据段来去规划,就是你先明白一下我的每一个下的,我在这个生产环境中啊,我这个维护多少数据比较合适啊,就是这个零到这个30个G吧,差不多。对吧,啊,差不多一般都是什么,十个G到30个G啊,你太少了这个那肯定就是一个了,就想都不要想。对吧,这是按照什么,按照你的这个就是。叫这个数据量的大小去规划。啊,那你知道了每一个能够维护多少个数据,你再知道一下你每日有多少数据,那你一除就能够除出来,我需要有多少个这个啥的,对吧,多少个分片。好吧,这是什么,通过这个数据链来去规划啊,然后再一个是通过你的对内存去去做这个规划的对内存啊,呃,我们这个ES啊,大家注意它这个官方服务器的话,推荐你的最大内存呢,是32个G。
14:15
啥意思呢,就是你的一个ES节点啊。ES节点,你的最大最大内存不要超过这个32个G。这是官方去推荐的。啊,那为什么这么推荐呢?啊,它上面有这么一个描述啊,他说。呃,性价比最高的时候就是不要超过这个32个G,为什么呢?因为我们的JVM呢,在这个32个G以下的时候,它会使用一种这个压缩的技术。这种压缩技术呢,对于内存的性价比是最高的。如果说你超了这个32个G了,那么你可能大概需要到达50个G,甚至于什么60个G,就四五十个G吧。需要到达这么大的时候,它的压缩比,你的性价比才能够达到32个G的时候的那个性价比。
15:02
就说白了,你多用了十到20个GG的内存了,你还不如我32个G的这个性价比高。明白我的意思吧。所以说啊,官方是推荐说你不要去超过这个32个G,你就什么这最多你就给32个G就完事了,但其实一般情况下我们都不会给到32,我们给的是31。啊,一般我们给的都是31个G。明白吧,说这个之前应该大家看到过一句话,就是那个什么,呃,在这个地方啊,我给你找找啊,我们在安装的时候,给它分配内存的时候啊。分配内存的时候有一句话啊,就是生产环境一般,这个31个G是标配对吧,现在你就应该理解为什么是31了,就官方推荐不要超过32,那我也不会说刚刚好给个32对吧,我们就给个31。理解了吧,好,行,那么如果说。哎,如果说哎,我们明白了我的每一个ES节点。
16:01
对吧,我给你多少个G的内存。啊,给你多少个G的内存。那我们再明白一下,我们的每个分片,它大概占用多少兆的内存,这个时候我就能够算出来。我的节点能够维护多少个Sha?对吧,你比如说啊,我们的一些这个实际情况告诉我们啊,我们的一个差不多十个G的这个分票,它大约会占用30~80兆的这个内存。就说白了,我有一个分片,这个分片假如说维护这个十个G左右的这个数据。好,那么它大概会占用这个30~80兆的内存,那为什么是30~80,你这个跨度还是比较大的,对不对,跨度还是比较大的,OK,这个跨度大的原因。就跟我们刚刚所聊到的一个段有关系了啊,这个我们要稍后再来去说啊,就先明白了,它有一个什么30~80到这个事情,好那你算一下吧,你32个G的这个内存,每一个呢,维护每一个这个Sha的大概占用是30~80兆的这个内存,那你除差不多是。
17:06
不要超过1000呗。对吧,差不多是你的每个节点不要超过什么1000个这个分片。会除罚这个32个G嘛,你就什么大概除32个G,你就是按照整数算对吧,按照整数算,然后再除以什么,除以这个30。是不是差不多是1000个。啊,如果说我再大一点的话,那什么,那就没有1000个了,对吧,说你不要超过1000个,那就说白了啊,我的每一个这个节点,我不要超过1000个啥的。能听懂啊,不要超过1000个傻子啊,你就这么去算,就按照你的内存去算啊,那么如果说你这个能够得到结果以后呢,其实我们也就能够计算出来你的ES的集群规模。对吧,你按照我们一开始去算的,就是你将来会有多少个煞的,这个你是可以估算出来的,比如说我们每一个索引的话,我给五个煞的。
18:00
对吧,五给五个啥的,然后呢,给两个副本。是吧,然后总共有什么,总共有多少个索引,比如说有30个索引,那我将来计划用几年,就比如说用一年是365,对不对,就我按照天去分个索引嘛,那比如计划用几年,比如说我用两年,这个算出来多少个呀,同学们。啊,用一年吧,就用一年好吧,这个算算多少,差不多10万,是不是,是不是差不多10万啊,那你看吧,你的。你的什么呀,你的每个节点呢,不超过1000个分片,那就算呗,你10万个除以1000个呗,对吧,除以1000除呗,除出来多少个节点啊,除出来那个结果就是你这个ES的一个什么节点数。就你这个集群的规模。理解吧,啊,就这么去算就可以了,好吧,就是我们大概可以怎么规划出来你这个节节点的一个什么规模数啊行,所以这就是我们去规划这个S的数量啊,从你的数据量大小去规划,然后呢,从你的这个内存大小呢去做这个规划。OK吧啊,这个大家要知道一下的啊,那么至于为什么我们的每一个厦的。啊,它为什么占用30~80兆这个内存,这个跨度还是比较大,这个事我们稍后再来去聊啊,这个会涉及到你这个Sha的里面的一些东西。
19:09
好吧,会试到沙子里面的东西啊,OK,行,呃,那我们就先聊这么多啊。
我来说两句