00:00
通过final查询,就是在咱们普通的一个搜狗里面,我加上final这个关键字。那么会触发它的一些特殊操作,比如说聚虫啊,聚合等等,也就是说以前要等到分片合并的时候才执行的动作,现在就可以执行。而且。而且。它不会影响咱们的click house服务。它其实并不是真正的执行分片合并了,而是本次查询我单独给你做了一个系统。是这样子。但是大家注意,以前的版本没人用啊,以前版本不要用final,为什么?一个原因,单线程,你的查询会变成单线程。你想想单线程。是不是效率很慢呢?但是在新一点的版本应该是在20.5吧,我记得是点五啊,这里有写。
01:02
20.5它呃进行了更新,Final查询也支持多线程的,所以如果你是20.5之后的版本,你说我们用final进行一个驱虫可以没毛病啊,因为支持多线程。来,我们来试一下就行了呗,嗯。老版本我就不去玩了啊,老版本因为你。看不出啥啊,看也行,老版本看不出啥新版本啊,行,我给你们跑一下吧,但是。只能看不了执行计划啊哈,一是20.4啊20.4,那我我直接考过来吧,嗯,还是跑吧。纠结体啊,你看20.4啊,我现在执行一个查询。
02:01
诶,没考过来。回车。Data v2这里还没有对吧,我来个V1呗。好吧。呀,怎么会没有呢?呃,时间不对。0317吧,我记得数据的时间段是这个。好,你看有了吧,好了,他慢慢考吧,又又要又要那个了,来,我们截个图。接下来我再加一个final啊,Final家在哪呢?在这张表后面加一个final。
03:00
他报什么错,不支持final,不支持,但是只有什么支持final,呃,一个是re replaing,一个还有一个coal,什么什么monrate,还有一个什么sum monrate。就有四到五个支持final啊,这张表还不行,那老版本我就先不去玩了,你可以像咱们之前一样,建一个什么hit VR嘛,插几条数据进去,然后改一下它的引擎就OK了。改一下引擎就OK了,我现在就先不玩它了啊。喂。我们来看一下新版本啊,新版本新版本首先来一个普通的语句啊,这样。我我不跑啊。我要explain PI,这个可以看现成情况,这个可以看现成情况来。
04:09
这个应该很明显了吧,同学们。这是啥?两个线程吧。啊,就是这个我是没有加final的,并且后面加了一个setting,那有的同学说你加了setting当然是二了,那我不加呀,你看是不是二啊,因为它默认就是支持多线程的,还记得咱们前面有个CPU配置吗?对吧,什么默认是16,默认16还记得吧?那我为什么是二啊,我的虚拟机是不是只有两个线程啊,对吧,它就用了呗,好,那接下来我们试试加一个final啊final,那我在flow表明后面加一个final,要注意家的位置啊,好回车。有吗?这个是他的表引擎叫什么什么玩意儿,然后墨翠这里能看到吗?
05:02
是不是两个现场,你不信的话我这样。白,哎,那个setting停了呢,好。我加一个final,我身体你也写上啊,我把它设成多少啊一。是没了那个乘二了啊,这个就很明显的吧,所以知道那个乘二是线程数对不对啊,那final现在支持多线程了,那老版本我估我换张表来查,我也用这个语句来查呗。哦,我老老版本我没改啊,这个表明没给他改掉,用它的话我们试一下。他看不了执行计划呀。新版本我们都看到了,那老版本来试一下,不试出来还不行。老版本我已经放了官方数据集啊,看一下这个啊,应该。
06:04
零秒,嗯,时间也得换一下start。我把它换一下啊,替换一下,这里忘改了。好了,再跑一遍。没加户名,哎呀,这个好烦呐。应该刷不了多久了。我limit了,做了limit好。接下来老版本里面我们加上一个final。大家觉得速度是变快变慢。对,因为原来是不是可以用两线程啊,加了final老版本只能单线程,讲道理,速度应该。变慢了,哎呀,又没加过敏,哎呀好烦对赛头。好,已经过了四秒了。其实。
07:03
嗯,瞬间就打满了。那我想想啊,那如果我不过滤呢,我不加里呢,因为才100条嘛。我数据量大一点,但这样可能我就卡死了。那我们重新结呗。因为新版本看执行计划,很明显我都不用跑。嗯,老版本烦。我不知道他要刷多久。同学们。好,等他刷吧,那我们继续聊啊,继续聊。Final。我们新版的执行计划在不在,我们再瞅一眼吧,还有一个事要给大家讲啊,还有一个事,这个是表引擎做的操作,对不对,这个是新版本加的翻,同学们新版本加的翻,好接下来你看。
08:13
啊是这是一的二。好。这里还能看到是两线程,但是后面有吗。后面有吗?这没有了,它其实是什么?这里只有一个分区。因为我过滤了嘛,我物业条件是不是过滤分区了呀,哎,我我我我也可以这样,为了考卡那个,再说我这个。动不了了。我不指定分区了。呀,还不行。卡了。
09:05
呃,我这个,呃,如果你用那个一行的表,它是很明显的,它这里是什么呢?就是expression,然后有一个这个,然后再缩进又是一组,然后再来又一组,又来又一组又一组,然后呢,这个里面都没有乘以线程数。为什么呢?那这个缩进是不是代表先后执行呢?那这个时候是为什么它虽然是多线程执行,但是它读取部分的时候,分区的时候它是串行。它是串行的。就是一个一个来。一个一个来,那其实我们现在这个数据也看不出差距,但是综合来讲,它是不是跟老版本做了一个改善呢。我看一下还没刷完对吧,你看这个。太慢了。
10:04
那我们总结一下。总结下来,数据一致性。什么意思?他们用类似的的时候不能直线。什么?不能保证查询时没重复。为什么?因为它是只能保证最终一致性。首先这句话你要记住。这句话你要记住。另外,怎么解决。第一种手动执行,但是生产环境不推荐第二种。什么通过搜索实现去种,比如说派对吧,如果再高级一点的用法可以什么加标记字段,加标记字段来实现啊。
11:12
好,第三种。新版本啊,或者说使用final。关键字,那这个呢,我们注意,如果是20.5之前的版本,Final是单线程,那如果是20.5之后的版本,Final可以是多线程,但是读取的时候是串行的。就是说效率有提升,但是呢。还有一点点不完美的地方,那综合来看,如果是你生产环境,你用哪一个?都要懂是吧。
12:00
嗯,不一定二三都行,新版本的话,如果你说的版本是这之前肯定第二个,第二个,那如果是新版本,那你两个都可以选,因为第二个一定最好吗。是不是牺牲了什么效率?那第final的缺点新版本是什么?你是不是效率比普通查询稍微慢那么一丢丢啊,两者是不是都牺牲效率,你这两者不同的数据量,不同的查询逻辑,可能结果是不一样的,也就是说你应该怎么样,两种都试一下。完了之后,哪个在你的集群环境里面效率高一点,你就用哪个方案。能理解吧,当然你这个final是不是得去调这个线程数啊。前面CPU配置那里是已经调好了,对吧。好吧,这个记一下啊,这也是一个高频的点啊,大家都很关注点,其实还有一种同学们,还有一种是什么呢?我重复一点无所谓。
13:11
是不是就像我其实我之前讲,你说100万的日活,我经过重复统计出来1001000,你觉得有必要吗?而且目前确实有公司这么做的,我效率一点都不想牺牲,我也不想再去设计了,太麻烦了,那我就怎么样,那你就从他一定吗。但是像click卡号重复发生在什么时候,是不是插入失败重试啊,还有可能你本身插入的数据就重复的对吧?但如果你数据处理的好,插入的数据重复本来就没有了呗。对吧,那如果是同事是不是数据量很少。对不对,好。
14:03
这个就是有的公司会选择的一个方案,大家注意这些公司可能还是一些知名的啊,知名的就大,当然呃,可能大家都耳熟能详的一些啊,你日常会用的一些工具的公司都会也有这么用的。OK吗?四点啊,四点。
我来说两句