00:00
好,同学们,这一节呢,给大家讲一下flux查询的优化啊,主要呢是有五个要点,也就这五个啊,我们现在从这个前往后讲。首先呢,就是使用位次下推的查询,那么什么是位次下推呢?呃,我这里呢给了一个例子啊,可以看到呢,呃,我这里呢,有一个最简单的SQL查询语句,就是select的星from a,然后A呢,就是我们的表明where n大于十是我们的一个过滤条件啊,那么如果呢,我们要让计算机呢去执行这条SQL语句,其实呢,有两种思路。一种呢,就是将磁盘中的数据全部读到内存里面来,然后呢,在我们内存里面对这个数据呢,进行一个过滤啊,找到我们满足条件满足N大于十的数据,然后将这个结果呢返回给我们的用户啊,另外一种呢,就是如果我在读取磁盘的时候呢,我就能够知道啊,我要读取条件是什么样的数据,那么我在这个读取数据的时候呢,就只需要读取我需要的部分。诶可以看到我们从这个磁盘里面呢,直接读取这三条黄线黄色的数据,然后呢,就直接返回给我们的用户,这样可以看到呢,诶首先这样会节省磁盘和内存之间的IO,呃,加快我们这个查询的执行速度,另外呢,可以看到就是有这个位置下推呢,我们使用的内存呢,就会更少啊,比我们的没有位置下推的情况呢,要要使用更少的内存。
01:23
啊,那么什么是位词啊,位词呢,其实就是指我们的这个过滤条件啊,位词下推呢,就是让这个过滤条件的筛选这个步骤呢,更靠近我们的数据源的存储的地网,呃,那么可以看到呢,我们左边这个没有位置下推呢,这个筛选的过程呢,就是在内存中进行的,呃,那么我们这边有未下去的情况呢,就是这个筛选的过程是在磁盘的数据进入内存的这个过程中来进行的,所以说呢,右边这种情况过滤条件的过滤的这个操作,它更靠近数据源,呃,所以我们称这种情况呢是有位置下推。
02:00
呃,那么你想使用位置下推呢?必须写出这个符合flux要求的脚本啊,你不能随便写,不是说随便写呢,你都可以实现这个位置下推。啊,那么flux呢,呃,有一层叫做优化器,说白了就是我写的这个脚本呢。啊,要先经过一个一个软件,它呢,对你的这个脚本,诶把它翻译一遍,翻译成具体的执行过,呃,执行步骤,然后来交给我们的计算机呢来执行。啊,可以看到呢,就是你这个Fla脚本呢,写成什么样才会有with下推呢,才能触发这个位置下推呢?啊这里面我这个官方文档呢,啊,我们的官方文档它给了一个参考,好那么这里呢,我们去官方文档看一下。好,那么这里呢,可以看到啊,就是说他这里呢,就给你讲了什么样的条,什么样的查询呢,它才可以触发为此下推啊,等到后面的实例的时候呢,我们会给大家这个演示一遍。啊,可以看到window之后去count,或者window之后去first last这些操作呢,都可以进行V下推。
03:03
啊,包括底下这个官方呢,也给了你详细的事例啊,后面呢,我们会带着大家呢,一步步的去看他的这个执行计划。另外呢,还有一些其他的优化手段,比如说呢,避免将窗口宽度呢设的过小啊,同样的一个查询时间。你窗口设的越小呢,你的这个窗口数就越多啊,像我这个窗口要设大一些是吧,那么可能这一个啊,同样一个时间范围,我只用三个窗口就可以啊,只有三个窗口啊,那么如果你窗户设的过小呢,那么就可能导致一堆窗口。啊,所以说呢,将这个窗口宽度呢,设大一些,可以提高我们的查询性能。另外呢,就是避免使用沉重的一些功能啊,Flux里面沉重的一些操作啊,这里面呢,官方给你列出来了,一共是五个较为沉重的操作啊,那么前两个呢,它涉及到对每一行数据呢进行便利,然后面三个呢,其实涉及到调整这个一发DB的啊,我们查询的结果的一个数据结构。
04:01
啊照NY unit呢,这个两个就不讲了,这个普通的SQL里面呢,也有这个操作,另外呢,就是pit这个呢,是一个透视图的功能啊,这个呢也会修改我们啊当前查询数据的一个结构,呃,不过官方又说呢,In Fla呢,它DB它一直在优化这个flux的性能,所以说呢,这个这五个操作呢,在当前的版本可能是纯重的,那么在将来呢,可能会得到优化。另外就是尽可能使用set函数,而不是ma函数。呃,Set函数和map函数呢,这个后面我们也会给大家讲啊,在示例里面会给大家操作,呃,说这一句话呢,其实有个前提条件,就是呢,你要给我们查询的结果呢,加上一个静态的常量,也就是说我们要加一列,然后这里这一列里面呢,只有一个恒定的值,那么这个时候呢,尽可能使用set,而不是只用map啊,但有些功能呢,必须使用map呢才能完成,那么这个时候呢,就跟set没什么关系啊,最后呢,就是我们要平衡好数据的时间范围和时间精度啊,当我们查询过去三天的数据的时候呢,你一定要想好,我当前这个需求,真的要查询过去三天的数据吗?啊,是不是可以查询过去一天的数据,或者说半天的数据就够用了呢?啊,那么你一定要根据自己的需求呢,来查询尽可能少的数据,另外一个呢,就是呃,考虑精度的话呢,我们可以去做一个降采样,比如说啊,我这个那么多数据呢,我每30秒呢,啊,我只取每30秒第一条,那么每30秒里面的后面这一条呢,我就直接舍弃,通过这种方式呢,也可以去提升我们的这个flag。
05:30
查询的一个性能,在之前做这个定时任务的时候呢,时候呢,也给大家说过这个啊,降采样的问题。好,那么这就是我们呃,Flux优化的一个思路,呃,下一节开始呢,我们会讲一个实操性的示例,到时候呢,带大家一步步的去优化我们的flax,查询好本节的内容呢,就到此结束。
我来说两句