00:00
呃,那我们想未来呢,咱们所用到的这个工具类,作为我们这个地方要做这个维表查询,对吧?那既然做维表查询呢,好像咱们的查询语句好像都是这样,怎么样呢?就select新from这张表,然后呢,呃,Will。Ad等于A。什么12345,但是这个数字可能会变对吧,那能变的就是谁呀,就一个呢,是表明一个呢,是这个主见在变,其他的是不是都不变嘛。是不是对吧,所以基于这种情况呢,咱们。再对它进行一个封装,为了方便后续使用,OK吧,啊,这边呢,我们来一个DMU。就查询为表的啊,我再进行一个封装啊呃,这里面呢。Public。Static返回值呢,直接接object,我也不要什么具体的什么类型了,对吧,这个呢,我们叫get dim for。
01:05
获取表信息里边两个参数,呃,三个连接得传进来对吧,Connection啊连接。然后接下来呢,是这个。String。Table。Name啊,接下来还有一个。逐渐就是这个K对吧,好,那这个东西呢,没有了,有了之后呢,我们在这儿拼接。烧烤语句。好,拼接三个语句啊,那spring。Query。Circle。啊,然后呢,这边先写select新from。寂末点对吧,好拼接点。拼接table name。啊,这是查询这个表对吧,再拼接空格will。
02:05
ID。等于。啊。这有个单引号啊,再拼接这个K啊。再拼接最后的这个单引号对吧,我把这个搜狗语句啊拼接一下,当然你要不放心可以打印一下这个快搜啊,可以打印一下查询语句对吧。对吧,快circle把它打印一下,接下来呢就去查询呗,查询用的是JDBC。对吧,点。嗯。诶。
03:00
我们是不是导错依赖了?我就说看着怎么我们就写了一个方法,然后呢,那么多对吧,用。咱们自己的这个啊点对吧,呃,Query搜,然后这个地方呢,写Jason object.class。最后一个给就行了,对吧,康加V得到一个。List一个集合,但实际上我们知道这边呢,我的ID等于一个什么值了,而且这个ID是主键,那么其实这个集合里边只有一条数据,对吧,我们呢,把这个数据做一个返回啊。返回结果,那就query list。嗯,直接这样啊,不看。Query is.get0对吧,因为我们已经限定了ID等于什么了,对吧?好这边呢,呃,还属于这个工具类啊,所以呢,我们这个异常还是继续可以往外去。抛一下啊,可以往外去抛一下啊好,那这个呢就完成了啊,就完成了对吧,那我们前面还有一个事情呢,要去做一下。
04:05
呃,那这里边呢,我问大家这个连接啊,包括这个地方的连接,我们要不要关。最后呢,我们再说一下这个资源的问题,对吧,大家觉得这个连接要不要关呢。不用对吧,好,那这个肯定不能关,因为是从外面传进来的。啊,你要关,你也在外面关,你不能在里边去关,对吧?呃,但是这里面呢,除了这个之外,还涉及到有prepare statement。啊,哪里哪里创建哪里关啊,不是哪里用哪里关,哪里用哪里关,你不在这关了吗?对吧,应该叫哪创建哪关对吧?好但是呢,你虽然这个连接不用关,但是还有两个东西对吧。
05:08
Close,诶这个呢,就不用了啊,它是赋值的有啊好,那还有一个这个除了这个prepare statement,还有一个result set,诶这个东西呢。要去关的对吧,它俩呢要正常的去关啊,对吧,这两个属于资源,那连接不关,那同理这边呢就没有了,只有这个连接了,是资源对吧?我们把它封装了一下,因为这样的话,未来我们调用的时候会更方便一点,对吧?只要给个连接表明加主件就好了,其他就不用给了,对吧?当然呢,我们也可以把这个东西呢做一个测试,对吧?接下来呢,把这个东西呢也做一个测试PM。对吧,还是一样的,用那个德鲁伊去获取一个。连接。
06:02
然后呢,还是抛一个到,因为这里边等会还有一条对吧,嗯,那就get game for connection,嗯,然后呢,表明对吧,表明那我给被trademark这张表。好主见的话,那没办法了,我我呢这个地方注意啊,那应该说你在这里面挑一个呗,不行啊,你别在这挑,你要挑谁啊,你要挑的是它只能写13啊,因为只有这一条数据,你其他都返回,那那就没必要了,对吧?啊,你只能写这个。13啊,用这个13好吧,呃,那么接下来呢。碳单位得到一个数据啊叫d for,对吧,最后呢,我们可以把这个d for呢做一个打印。好。连接呢,给它关掉对吧?呃,为什么说只能写13呢?因为我们这个地方呢,搜索语句这儿啊,这个东西已经写的是咱们的库了,对吧?啊之前呢,我们自己给的库啊,随便对吧,现在已经给的是自己的库,所以呢,你就写个13,你要不写13,其他都浪值嘛,没必要对吧,你就直接看这个13就好了。
07:09
看能不能查啊。哎,没有问题是这个上海这个数据对吧,凭接着搜狗语句呢,写到新from啊完全没有问题对吧,接下来是13上海,是不是13上海没问题吧,这个吧。这个13上海对吧,也是可以的,好,那接下来呢,我们继续做一个事情来。这个关于连接的获取呢,我就不考虑进去了,我在这干什么呢,System点。Ten minutes。Stop。叫and啊,不光打印这个数据,我们再打印一个来and减。
08:01
大家看一下啊,注意啊,我把连接的获取都放在外面了,那也就是说这个减出来的时间是不是有实打实查Phoenix的时间啊,对吧,来运行。好数据查到了,然后呢,159对吧,159来往这一放啊。多走几次。一次呢,并不能说明效果对吧。哎,这次好像快1.127是吧,但是呢,好像差不多啊,再走我们搞个三次吧,三次四次都行啊。120。感觉差不多了,应该是幺二几左右对吧,我们再看一下能不能更低一点啊,如果能更低我们就再继续走,哎,127。好,那大概呢,我认为在125,或者说就取最小的120可以吧。
09:06
啊,120这个速度大家觉得怎么样?你觉得这个效率怎么样?查询120毫秒。你觉得怎么样?你觉得快还是慢?没概念。一般般啊,那我们想啊,就当前这个需求呢。我们现在啊是差一个为表,那除了这个之外,咱们未来呢,这边啊,写完之后,这还有什么123CATORY呢。又。两张对吧,他呢,总共有五张表,也就是说呢,我们一条数据未来你先不考虑聚合的问题啊,先不考虑聚合的问题,那么一条数据呢,我们就。
10:01
说他要关联六张为表。一条数据呢,要关联六张为表,那你一张为表呢,一百二对吧,六张为表720,我就算你500,你你后面还有聚合嘛,你数据量会变少对吧,我就算你500,总共呢500,那也就是说你一秒钟呢能处理两条数据。对吧,那你关联维表花了500毫秒,是不是说你一秒钟只能处理两条数据对不对。是不是你一秒钟只能处理两条数据啊啊,当然有同学说了,你后续这个东西呢,你要开窗去聚合对吧,然后呢,关联诶,你把这个开窗时间算上十秒好像也还好。对吧,那我就算只有这一个维度,只有这一个维度呢,你120秒啊,120毫秒,那我打你呢,一秒钟处理八条数据吧,你一百二嘛,你八九条数据,那也太低了吧,就算你只有一个为表需要关联,你也不到十条数据啊,因为你100才十条,你一百二你只能处理八九条数据,对吧,太慢了。
11:15
太慢了。对吧,就感觉120毫秒好像很快,对吧,那毫秒级别的都很快了,但是你要知道你生产环境当中那个数据量得多大呀。对吧,而且啊,当然这个我告诉你,他不是这个。它并不是菲尼克斯的真正速度啊,有没有同学呢,跟我简单聊一下。Base读取数据这个东西。啊I它读取数据的流程啊,估计你们也都忘完了啊,所以呢,我还是不问了啊,他读取数据是这样子的。首先呢,这边有客户端。对吧,然后呢,这边有ZK,然后这边是我们的集群reading so rs1RS2rS3,比如说随便取的啊呃,那么。
12:06
我要读数据,它是什么流程啊,它首先呢,比如说我要读这个base。Trademark这张表啊,Trademark这张表好,那么他呢,先在本地的缓存当中找一找,有没有这个原数据,看一下这个被trademark表到底在哪儿,对吧?但是我这个客户端呢,这个连接刚创建新的没有,没有的话怎么办,我去找。ZK。啊,我就找ZKZK呢,就告诉我了这个什么呢?哎,Me塔表所在位置。注意它返回的是Meta表所在位置啊。他不是把Meta表内容给我们的,它是把Meta表的位置给我们的,比如说。在RS1对吧,好,接下来呢,找R1 R1呢是Meta表的位置对吧?这里边呢有Meta表,好它返回什么呢?Ta表的数据,哎,这个才是我们真正的原数据对吧?此时呢,它会把原数据缓存下来。
13:06
好,它会把原数据缓存下来,好,接下来呃,麦代表告诉你被mark在RS2第三步去RS2找真正的数据,对吧?好,那为什么刚才我提到的这个东西呢?它不等于是这个Phoenix真正的速度啊,为什么呢?很简单,因为如果我第二次查询这张表的这个数据呢?这个不用走了,这个不用走了,因为我本地缓存当中已经有原数据了。对吧,我直接找到这个去读数据对吧,所以呢,真正的速度我们得取第二条。IN2,这个呢叫AND2对吧,好,那么接下来呢,我们也可以打印一下这个。啊,我都反映一下对吧,这边呢,我在so打印一下AND2。
14:00
减N。对吧,我用N2减N,诶这是第二次查询吧,这个间隔是不是第二次查询,我还是查这一道数据对吧?给大家看一下菲ix,当你这个连接如果呢长期在运行过程当中,那么它将会是什么速度来运行啊。就是那我第一次读的时候,我已经缓存了原数据对吧,第二次查你看这个还是121对吧,还是121,然后这个呢把。啊,上面几乎不变吧,第一次还是一百二左右对吧?啊,那因为你跑多了,你越跑的越多,它越接近一个平均值对吧。128。再来一次啊,我们跑三次好吧。119。八。
15:00
哎,那这边呢,下面几乎就不变了,对吧,就是八毫秒,那这个你看啊,本来100多,现在呢18对吧,我就接近于十嘛,接近于十也差了一个数量集呢。对吧,也差了一个数量级呢,那如果说你之前这是100,你只能处理十条数据,我这个时候呢,我能处理100条数据了。对吧,我一秒钟能处理100条数据了。是不是这个就好很多了吧,但是一秒钟处理100条数据,这个够不够呢?其实还是不够的啊,因为生长环境当中咱们的速度啊,呃,高峰期你得考虑高峰期啊,你不能考虑这个低谷对吧,你不能考虑低谷,你得考想着高峰期,高峰期呢,数据量肯定不止说这个什么。100条数据每秒啊,要比这个一般的公司来说都比这个要高。对吧,特别to c的啊,To B的呢,可能会小一些,而to c的。
16:02
数据量就很大,你这个还是不够对吧,所以呢,这个测试给我们下午要讲的什么东西呢,优化。啊,那针对于这个问题呢,查询尾表这个操作我们要做优化,埋下了伏笔,这个优化是一定要做的。对吧,除非你真的公司当中数据量特别特别小,诶小到什么呢?高峰期每秒钟呢,诶只有这个100多条,对吧,因为我这单必行度可以处理100条,那我假如500条,我搞五个并行度是不是也能够处理的过来呀。能理解吗?这假如说你公司当中数据量呢是2000。那你搞20个冰度,好像你就不太合适了。对吧,这有点高啊,搞二个滨度好像有点高,对于我们中小型公司嘛,那大厂的话,他假如说你说阿里的双11。那就不用聊了啊,人家呢,能到这个40亿每秒对吧,人家每秒呢七个T,嗯,这个我们就不考虑了,因为你光从软件去解决这个问题解决不了。
17:06
懂吧,如果你每秒钟达到几十亿。你光从代码层面,你能解决这个问题吗?说你代码写的非常优秀,能处理这个不可能。一定有一个条件叫加机器。能明白吧。对吧,你你这个数据量大到一定程度,你从软件。搞不了啊懂吧,搞不了OK吧,好这块呢,但是呢,我们还希望这个东西呢,能提的更高一点,所以呢,下午我们要去讲这个优化啊,要去讲这个优化啊。
我来说两句