00:00
来,我们首先呢,我们来学习一个批量处理JDBC语句,提高处理速度,什么意思呢?我想批量向数据库里边插入N多条记录。如果插入2万条,3万条,那这个时候我们如何提高插入的速度?就是说我想一下子呀,向数据库发送多条搜狗语句,那这个时候。我们如何提高色后语句的执行,执行速度跟执行效率,因为我们毕竟不是直接操作这个数据表,而是通过GDBC远程的方式去发送数据库,什么叫远程啊,我们现在的话呢,我这个数据库服务器跟我这个嗯,应用程序是不是在一台主机上啊,那实际上这个数据库服务器它完全可以在一台自己的主机上,然后你通过网络的方式远程访问。
01:01
就是这样,哎,我想远程访问数据库,向数据库批量的去发送N条色后语句,那这个时候我如何来提高执行效率呢?这就是我们今天要讲的第一个问题,叫批量处理GDPT,就是以提高处理速度,我们选用的是Oracle,因为买circle处理批量的性能相差不是那么大,我们看不出那么大的差距来,所以说这个的话呢,我们来用Oracle,首先呢,我来建一张充气表。ID number。Primary key。30。对。行写完DS,哎,比方说那我现在啊,插入10万条记录,我们来看一看我插入的速度是什么样的,首先呢,来新建。
02:16
一个正工程K21。新建一个包看一下。BC好了啊,我们需要用到前面写的一些BC,我直接复制过来了啊,首先这个先复制过来。Copy。放到这儿。这个不用就要加来。
03:00
销售。就是买circle的是吧,凹口对。这张口这太差了,怎么这个加到class下。然后呢,我们还会有一个GDP的properties考不来。打开。连的是二口。我们这边已经讲过了啊,我们不再像以前那么重复的讲一遍了,然我们还有一个叫BC。好转过来。好,打开我们看一下这个工具类哈,Ctrl o,第一个是获取链接的,然后是释放资源的,那实际上我们写到今天这个程度的话呢,我们还可以再写一个处理数据库事务的。
04:10
下两个方法处理数据库事务,那一稿public committee。提交事务。If不等于好,可以调用connection啊,提交事物是革命的方法,好异常感感知,我就先再开始这块,把这个异常的话呢打出来。啊,是一个,还有一个回滚事物的public that都一个进去。
05:09
If。不等于来调的方法。再开始,好,再有一个。这样一个就是开始事物的。Transaction。Connection不等于now,我就点怎么开始啊,再吧,False。
06:01
暂暂时的话呢,异常暂时不处理,我们直接抓住打一个异常信息,通过这样的方式啊,这个信息我们也能够看到,但是不能这样写啊。这样写不行,这样写的话怎么了?出问题你是不都看不着啊,所以说要这样写到后边我们会讲如何来处理这个异常,展迟的话呢,先拆开,OK,这就是我们讲的这个gd BT tools里边新加了三个方法,跟事物相关的方法,这个应该叫提交事物。这该叫回滚手,应该叫啊开始手行啊说这几个方法,然后的话呢,这是这个接近b proper,通过这样的方式呢,我可以去访问数据库,呃,环境呢也建好了。下面我们就来看哎,批量处理的问题,写一个unit单元测试类JDB。
07:12
看着啊。A。第一个批量嘛,我先使用statement。首先使用statement,我来完成这个计量操作,Ctrl o,我们的想法呢,是这样的项。凹口的。Customer数据表中。插入比方说10万条。记住,然后我们的目标是看看怎么插入这个用时最短,然后测试如何插入。同时这个。
08:10
用时这个,哎,这是我们要干的事,那我的第一个版本是使用使用。Statement啊,怎么样?然后前面我们讲过prepare statement比statement用时更短,我们可以测试一下怎么样,先用这个吧。插入connection等于。等于now old再开道。一点。
09:04
然后呢,Connection等于ABC.connection先打一下啊,看这connection能不能连得上。然后再写。我的呐,abt.release。Nowment connection,好吧,那我这个时候的话呢,我就来打一下,这个有点类似于单元测试,就我们开发的时候啊,我们可能会怎么样,我们可能会写很多功能,我们我们希望大家写完了一小个单元之后的话呢,你就测试一下,你就写完了100个功能之后一起测试,你发现出了101个错误,那个时候很麻烦,我写一个测一个,写一个测一个,这个时候的话呢,我们信心不至于受到很大的打击,而且排课的话呢,也更容易。
10:00
看出问题了吧,这个控制异常。再跑一遍。确实是有一个异常是吧,啥异常啊,Class for name有一个异常那个方法吧。Class name driver class password叫JBC跟driver class,那我这个呢,我是从好少开始复制的啊,我们看一下。Driver这里边叫什么呀?就是driver class啊,写的不对吗?好好。啊,这回对了,好了,回来好了,这个搞定之后的话呢,我们来进行批量操作,说10万条。
11:00
你搞个STEM有了啊,等于应该真R它好了10万条或循环in I等于零,I小于个十百减Y10YI加加。然后进行一个入的等于in s into customer value啊,我这个时候的话,我是不得拼串啊。就是有拼串吗?先写上。后边是个什么呀,后边应该是一个date,你那个时很麻烦,就什么麻烦你这个date呀,你这个date我们得就是拼起来的话,你是不是得写那个写一个格式是吧,嗯,很不爽,那啥格式来from到。
12:25
这样的一个格式,这C我们这电梯就写死得了啊,来一个一个来吧,这个的话我们可以写为二加一吧。这个我可以写为比方说叫name下划线加A,后面这个的话呢,我就复制了。就这么写好,这是一个circle,然后呢,Statement点执行的时候加上circle。
13:07
这这就可以了呀,我为了看到这个效率的话呢,大家注意我这块是个什么呀,我这是一个呃批量操作,我们通常进行批量的时候应该是呃,要么这批量都成功,要么就都别成功,你否则那你批量到哪啊,所以说的话呢,我们还需要把这个放在一个阶DBC事务里面,G bc to.begin来再成。啊,没问题的话,ABC boss点。什么意思,出异常的话。BC过点o by写完好了,那这个时间的话呢,从开始插入这一刻开始顺起,Begin等于current ten minutes看完之后long and等于something.current好看看啊,Time加。
14:16
End减去。好,看结果。你跑一下啊。得等一会儿10万条,我们看这么做插入的效率怎么样,然后的话呢,我们前面讲过什么呀,讲过一个叫pre statement,说prepare statement比例速度要快。当然,为什么来着。预编译的,因为你这个特点是什么呀,我这个特点是我是不是每一次我都得用一个新的circleq传进去啊,而那个就是一个色口,然后只不过去制不同的变量罢了,那个比这个速度要更快一点,等一会吧。
15:05
好了,时间OK,我们看一下这个ID from没问题,10万条,我们具体具体不用一个一个看啊,就是这个时间。啊,这个呢,我们用的是statement,我们看批量的时候的话呢,我再来用一下statement,看看效率是不是提高一些,看这效率是不是会更加的提高一些,复制过来。Ctrl ctrl c ctrl a,我们看啊,这块需要改为2C等于那当然。
16:14
改,然后呢。有一个色口,所以说这个色口需要拿到前面来。好,这个这个简单了啊,往这看。都这么写。然后写完这个还一样,不过这个负值的话呢,这里边负那怎么写啊,说点S第一个应该是的型一,我写成I加B。
17:03
第二个statement形写个二。下划线加I好吧,最后一个写个三,这个date的话呢,我开始的时候给它写好date等于6DATE,这是不是1CIRCLE date呀,这个circle date里边需要一个参数,这个参数是一个浪型的,它表示70年70年零点到现在的毫秒数,我们可以从YouTube date里边来获取get看,写完把这个放放在这。Take。可以是吧,就是好了,好之后的话呢,我们来点执行update行了。
18:15
其他都没变,也是10万条,那首先的话呢,必须要清空一下穿。没了哈,好看,用statement这个速度是不是会提高一些,别的名片用跑一下。这个特点是呢,我开始的时候把这个色已经给我们编好了,所以说他只需要上数据库发送一条字数就可以,所以说速度怎么样会更加的快一些。
19:04
这是这是几位数啊,是五位数啊,这不四位数啊,啊,应该说会提高了将近四倍吧,OK,这个速度快一些好了,那这个速度还能不能更快呢?还能,这个速度还能够更快,我们始终是追求的什么呀,更快,更高更强的确是能够做到啊,你就像以前的这个CPU,当时买的是这个奔三奔四的时候,觉得已经很快了,当时我们去配一个这个台式机是吧,说内存是256兆的,很牛,现在的话呢,内存动不动就是八个G的,当时这个计算机拆有的时候是吧,人们说哎,内存是这个一兆的足够了,因为那时候就用DOS嘛,你现在的话一兆什么也干不了,现在买一个手机,觉得内存一个G都减小,内存标配都是两个G。
20:03
所以大家去买手机是吧,内存内存这个内存是叫运行内存,而不是什么呀。而不是存储内存,昨天去看手机说买一个这个数码宽带的,然后说这个手机配置特别高,跟我说是吧,怎么怎么好。然后我说这个不行。还看见,不过还是看见,看见很多人是吧,他们不是特别懂,然后就听见那些那个嗯,售货员讲,然后他们就啊这个好,这个好实际上就是讲的都是一些最基本的位置,来我们这个,我们正八经来用一个奔驰。那这个奔驰的话呢,跟先前比效率还要更高一些,这个奔驰就是我们所谓的这个什么叫啊批量处理,接近BC的口语句。好了,我们看我们如何能把这个速度变得更快一些呢?我们有这样的一个办法,大家想哈,大家想我现在这个执行方式是不是一条一条直行啊,啊就好像你比方说我们有北京往上海去运烤鸭。
21:18
这种方式就是呃,做好一只烤鸭拿火车运一下,做好一只烤鸭拿火车运一下,很明显这个效率太低,效率高的情况应该是怎么运呢?做好了这个一车皮是吧?啊运一下做好运这个皮运一下,这个时候这个效率高的多,哎我们也想这样,那怎么样呢?我们开始的时候的话呢,我们先展着是吧,先展到一定程度了,我再统一的发送一下,跟这个总的来看。大体结构差不多。后来不过有一些。肯定还是有些区别的是吧,你看就做好了,这个也做了,但这块的话呢,我并不马上执行,而是我们说一展。
22:05
哎,你展示这个色会语句啊,一展。既circle口click of s.at bench,我展着,注意哈,我这个展的话到什么程度啊,我这爱的奔驰而没有口,好了,我展到什么程度呢?我说呀,一当啊,我没展到200条300条的时候吧,我每展到300条的时候。所以300等于零啊,当我没感到一定量的时候,我就发送一次当。积攒到一定程度就统一的。
23:02
执行一次,并且清空天天。一站的资格。啊,那我每300条的话呢,我之前看statement点。认一下,同时呢,我需要把我刚才积攒的给它清掉利啊,我下面有一个问题是吧,我这个是不是刚好是。没刚好啊,他是不是300的整数啊,那怎么办?我最后我是不是还得再清一下呀,怎么清,我不是这个整数,应该这么轻,有有有可能也是这个整数吧,有可能也是吧,应该是一个十百千万是吧。
24:12
复制一下啊,如果这个值可以,我这个300不等于零的话,要不等于零的话,什么呢?我是不是还得再执行一次啊,等于零我是不是就不用执行了,那意思吧,说若若这个呃,总条数。不是批量数值的整数配。则还需要在额外。这是意思好了啊,我们做剂量就是这样的三个步骤,第一个呢,在负循环里边展色口,第二个我们在负循环里边看展到一定程度了啊,统一执行一次,同一同时清空以前展的色口,然后在外边我们需要判断一下这个整条数,如果不是批量值整数倍的话,那就需要额外再执行一次,这个速度真的会提高很多吗?就是9819好了,窗。
25:25
十刚还记着了啊,这看。说不定这个什么呀,会含笑间强虏灰飞烟灭,看见了吧?六九跟我这个9819是不是将近提高了十倍啊,那跟我这个提高了将近30。三四十倍吧,是吧,30多倍,那你这个效率那简直是太高了,这就是我们批量的好处,就是说有的时候的话,它是这样的是吧,我们学一个新技术啊,感觉上我们是费力了是吧,但是一旦要是学到以后的话,它会大大的提高效率,这就是学习的意义。
26:20
学习的时候很痛苦,但学会了一旦要是受益的话,会很痛快,这个时候你看到比方说没有这个学批量的人是吧,他还在这样写,然后冷不丁这样写一下,觉得很牛,看我提高了这么多倍,但是我刚学完批量之后,你发现你这个简直是什么呀,简直是小case是吧,这个才有速度好看一下。赔偿处理里边包含两个方法,一个是at的奔NCH,一个是奔NCH,那这个at奔NCH我要是这样写的话呢,这个方法应该是在那个statement里边,就statement里边我可以批量的来加,但是我要用prepare statement的话,这个写法我就是这样写,因为我这个S预先编译好了,我用这样的方式来加,然后使用这样的方式来执行,使用它来清空,最终是这样的一个结果。
27:18
春三,这我们也看到了哈。好,后边的话呢,就是讲这个数据库连接值了,呃,我们到这块的话呢,关于这个批量呢,就说完了,大家像我这样来试一下。也往奥龙数据库里边插入10万条记录,看一看这个速度提升是不是真的很爽,OK,写一下吧。
我来说两句