00:00
来复制一下在这批图你啊。015。呃,这边的这个路径呢,我拿一拿来把它复制一下,然后把它关掉,这个咱们退出退出好,我打开这个啊,退出退出这都不用了啊,来这边呢,我打开它来这子复制一下,然后呢点OK,然后我把这个15版本部署一下来添加走这边的啊给它贴过来好删除finish OK,行了,其他的全给它关了啊。这个第15版本呢,我们使用下批处理来提高成绩的执行效率,大家看一看这边的,来我们把这个打开给大家讲一讲,这个delete啊,还是这个delete,这个delete这样的执行效率太低,第42行执行效率太低。看一看为什么执行效率低?因为每当程序执行到42行,你看负循环,每循环一次,它就和二和数据库交互一次,大家看一看啊,进程A和进程B之间通信是很耗资源的,这个大家知道吧。
01:11
进程之间通信,一个是1521,一个是多少啊八零嘛,一个是Java虚拟机,另外一个是什么二瑞和数据库,这里这是两个不同的进程,资源根本就不共享,他俩呢之间通信是很耗资源的。你的负循环,每循环一次,加法程序执行一次,可数据库交互一次,执行一次,交互一次,循环一次,交互一次,循环一次,交互一次,那你想一想,这个东西是不是就相当于。我们公司有5000人是吧?啊5000人然后呢。得吃饭吧,是吧,中午吃饭,中午吃饭,老板管饭呗,是吧,那老板我们这个公司呢,和另外一家餐饮公司合作了。啊,说中午呢,我们这个饭呢,你们管了啊,到时候你们把这个饭送过来就行了。你这个时候怎么送呢?有两种方式,第一种方式是做好一份送一份。
02:00
做好一份送一份。做好一份送一份,明白吧,啊,这种效率比较低啊。明白吧,没人这么干。吃完天都黑了。是吧,怎么做呀,EEE做好N多份,打好包,一一下发过来了。是这意思吧,那这就不用在路上耗费这么长时间了,你想一想,你现在这个循环,你循环一次执行一次,循环一次执行,你循环一次执行一次,这不跟那个送饭那个是一个道理吗?是吧,你做好一份送一份嘛。你想这个数据库是在上海啊。怎么数据库在上海呢?他太在哪呢?在北京呢,中电网线连发吧,嗯。你插入10万条记录,你试一试是吧,你这样用批处理和不用批处理,它就插出来了。所以我们得提高效率,线程A和进,诶线程之间通信不耗什么资源吧,为什么呀,线程资源共享什么共享啊,对内存和方法去内存共享对吧?所以这样的话,线程之间呢,交互呢,它其实效率是比较高的啊,进程之间交互效率是比较低的,所以这个事呢,你也知道啊行吧,嗯,其实我的我的理念啊,或者是我的我的这个想法是什么想法呢?我就是希望啊把这个在这个Java虚拟机里边啊打包,它不是三删除三条记录吗?我不要了,发三次,我不是和交和数据库交互三次,我在我这个Java虚拟机里边,我给他打个包,这个包里边有几条数据啊,三条,然后呢,把这三条一并发过去,我在路上跑一次。
03:34
明白我意思吧,进程之间交互只交互一次,不要那么交互频繁啊,所以这就叫批处理吧,我们来试试这样吧,我举个例子啊,我先讲批处理。然后呢,再在15个版本里边用一下。来第15版本来version啊啊,这边我写上去,嗯,使用批处理操作啊,提高删除效率。
04:07
啊。行了,这边呢,我举个例子,点右件啊,我新建加个项目叫盖,那么这边我说一下啊,我模拟一个上数据库里边插入10万条记录行吧,然后呢,一个用批注,一个不用处理,批处理,咱们看一下它时间差了什么地方,行吧,来给用件,咱们新建个文件啊叫da.circle这边呢,我就drop啊tableable叫t yo啊c tableable叫t yo这张表,然后这张表里边呢,我还是给一些信息啊,User name,然后我的user边呃,ID吧啊给上ID和name吧,ID的话我就给上句这个number,给上十个长度吧啊然后呢,这个就是主键吧,Primary key行吧,这边name能把差two啊给上去30号强度吧,好,这就这么着吧,啊,这张表能见出来吧,那见见见识这张表啊,来选中它执行有有了。
05:06
这个表没有啊,删掉了来执行。我没有删咱们那个啊,咱们这个IP100这个你要注意啊,他这是死高,他不是E级V,别担心啊,这张表干掉了是吧?嗯,不是啊,这张表他没没有,这是原先的啊行了就就知道就行了啊,咱们这张表来看一看,行了,这边我就写个程序啊来背音part呢点GDBC.bach吧,GDBC点啊好我就写两个例子啊,一个叫T01,然后呢,我写上去问方法,然后再写个派减二,然后呢,我再选上去问方法,然后这边呢,这个一呀,我看看啊,这个呢就是不用啊,就是不用带啊插入10万条记录啊10万条。记录不少了吧,啊,记录耗时吧,啊记录耗时行了,那么这边呢,我就用一下Bach吧,行吧,这边我就用一下BA,我就用一下这个BA,插入10万条啊,我们看看效率区别,那么这边呢,不用先插入啊,怎么做呢?来写了啊来connection吧,Connection再写啊来prepared,什么statement是吧,好,再来,没有结果集对不对,嗯,直接就来了啊这边呢,写上什么,写上这个叫什么connection,什么DB,什么点get是吧,DBDB没有是吧?没有的话咱们从这复制啊,不是这个啊,不是这个错了啊这个吧。
06:40
从这复制吧,啊来打开打开从这复制一下,放到这个位置上,点动这个啊给它改一改叫BA g dcch行吧。行,这边的话咱们就还是给它关了啊,哎,这个行吗?这个工具链里边连的是谁呀。
07:00
还是是吧,先这么着了啊,来E就点get什么connect么,加上一个TRY是吧,好了,这边加一个find呗,好嘞,这边啊,咱们加上去一个大括号DB.get。Close是吧,关闭把这个写成none吧,行了,这边咱们写一个词根语句啊,这个词根语句怎么写啊,记吧啊ID吧,ID和什么name吧,Value是不是加问号逗号问号呗,编译啊来咱们看点prepare编译,然后编译之后呢,就开始循环了啊侧数循环,负数循环,I等于一,I小于等于10万吧,A加加啊。那这个时候你就赋值吧,Set in给第一个参数赋什么值,I值给第二个参数负什么值,附个name吧,啊,Name加I行了,我随便写个吧,啊name加I这下能看懂吗?那就执行一次吧,点excuse什么啊啊执行一次,这样的话是不是就可以保证10万条记录了?
08:07
你现在有一个语句吗?这不是负二循环吗?I等于I小于10万嘛,I加加吗?是不是给它附上值啊,这个该给它附上值吧,啊执行吧,循环循环10万的,接下来我开始计小时啊来怎么计时啊?呃,Begin等于system.content minutes就这个吧,毫秒啊来end等于什么system.content行吧,接下来输出给呃输出这个耗费时间是多少毫秒啊,多少秒吧多少秒电的减去begin除以1000。行吧,这不毫秒吗?拿就行了,点右键执行。错了是吧,报错了好说啊,点右键啊,我再来把这边呢,咱们建一个什么呀,文件夹立吧,然后呢,我还是把这呢打开,打开之后呢,我把这个Li下面的把它就复制一下行吧,放到这吧,啊然后呢,我在这点右键啊,这边呢咱们有一个这个build pass吧。
09:13
来,我们加上去吧,加上去啊,这大班呢,加加谁呢?加这个BA啊leave吧,来看啊,打开OK就行了啊,想怎么着吧,这个关了啊。关了之后呢,有。行啊,这边呢,我再执行一下执行。嗯,看一看哪的问题,其实是values啊,这写错了。运行好。行了吧,这就开始了啊,我看看circle plus tIgEr进去之后呢,LA come清from吧。一万一千一万三一万四一万五一行了执行吧,啊这还得一会儿呢,咱们先执行这个啊,先看这个。
10:04
呃,咱们这个焖方法,咱们从这复制一下啊,这个行吧,复制之后呢,我就直接放过来了啊放到这没错吧,嗯,复制粘贴嘛,是吧,在这个位置我们用一下批处理,也就是你看复一次值,一次值就跟数据库交互一次吧,这多少。这不好啊。应该打包吧。打包啊打包,比如500个执行一次。看一看啊,这多少哟,还得一会儿呢是吧。行,不等他了啊。咱们看这边儿,嗯。嗯,不要马上和数据库干什么交互,先干什么打包,比如说每什么呢,每500个啊,每500个发送一次给什么数据库吧,啊注意啊,每500个发送一次给数据库,为什么。
11:05
这个包不能打的太大。明白吧,包如果打打的太大的话,这个可能也不太好。是你这小车是吧,这么点小车,那饭盒都放进去放不下呀,你非得放这么多往前推了去倒了不行啊,这个是有。有时间出来了是吧,放在这多少啊,85秒啊,时间很长,行吧,我就来这边这边看一看它是多少条,10万吧,这个这个还是不查了啊max。叫什么来着,ID是吧。行了,数据够了啊,肯定是有的,那么咱们这边打包,打包之后呢,每500条发送一次给数据库,这个怎么做呢?这个得查帮助文档,因为这个帮助文档看过吧。
12:00
不是有一个Java吗。是吧,这个,然后Java思库下边不是有一个那个。找谁也行啊,找一个prepare STEM也可以,找这个叫呃,STEM也行,看这个吧,这里边有一个a batch吧,嗯,打包啊打包来,咱们打包表ABA,这样的话你附上值我就打包了,打包了明白吗?比如说如果现在这个I值对500求余数啊,等于等于零,我就发一次怎么发?你看嘛,这里边不是有方法吗,叫XQ的什么。来看一下负负接口啊,负接口statement里边有个方法啊,叫excuse什么。嗯,盖是吧,所以这个时候呢,我就用一下啊,这呢是点XQ的什么盖是吧?啊这样执行完之后,要不要清空包啊清空包啊清空包咱们清空点颗粒match。
13:00
每500条啊,发送一次给数据库,所以现在呢,原先的程序啊,实际上是每赋一次值就执行一次,但是现在呢,我我我我现在不执行了,我打包,打完包之后每500条执行一次,每500条执行一次吧,最后清空,呃,不是最后清空啊,执行500个清空一次,再打包,继续循环,再打包,打包够500个我再执行,执行完之后再清空,再清空之后再重新加了。能理解什么意思吧,啊,就是这样啊,负循环好了,大家看一看,这个数呢,正好是500的倍数,如果这个数要不是500的倍数。是不是有问题啊,所以最后负循环结束之后,最好干什么再执行一次啊,为了保证所有数据插入啊,所以这里再执行一次啊,能理解吧,好,那我就先把这个删一下啊。这个吧,啊table啊叫记什么,看一下这个表被阶段啊,这种方式更好一些,这个delete的效率是不是比较低,删10万条你得删一会呢,明白我意思吧,Delete最好不要用啊,但是呢,大家也不能轻易用这个是什么语句。
14:17
是不是DDL啊,这个不可恢复啊。这个删完就删了,永远不可恢复了,但是这个删完之后呢,还能恢复呢,明白吧,所以哪个效率高,这个效率高为什么?因为它呢,会彻底把它空间全部删除,而这个比delete的句是不是把这个数据抹掉了,那个数据所占的物理物理地址是不是还在啊,是不是物理内存还在啊,物理地址还在啊,所以这个效率要低一些啊,上面的效率高一些,所以我现在表截断之后,你看一下这个表里面记录有多少个呀,是不是零啊,没了啊,连S兰星不让PU在这张表里边没数据了。没了啊,变成零了是吧,行了,我执行这个啊,这个批处理,看看它执行多少钱P处理呢,循环10万次,点右键直接运行。
15:02
完了啊。嗯。10万条金龙进去了啊。这就是效率嘛,所以说呢,我说一下啊,这个批处理呢,如果你是大数据量的话,肯定能体会出来,数据量小的话无所谓了,我说一下咱们这个项目主要是为了讲这个知识点,你就说你觉得这个有必要用P题吗?这一共三条批注,批注理啥是吧,就是为了讲这个知识点,所以就是为了讲这个知识点啊,所以大家给他拿过来了,这个等于500,这个不一定啊,这个是经过测试的,你将来呢,这个是经过测试的,你填个500你试试,再填个600试试是吧,你再填个400试试,你看哪个高行吧,这块呢,不一定啊,嗯,知道就行了,这是关于批处理的,咱们这个用嘛,我就不用了啊。我看看用用进去还是不用啊。这个。这个版本是第15个使用批的,使使用一下吧,啊来用一下这个,其他的话咱们就给它先关了啊好了,这边呢,咱们看一下这个批处理应该怎么做呀。
16:10
不这么写了吧,怎么写啊,点at by是吧,加完之后呢,最后点什么BY是吧?行就这样横还用清空吗?不用不用了啊,一共三个,加完之后咱们就循环结束了吧,结束之后咱们是不是就直接执行了。就不在这儿每一次交互了啊,就打包,打包之后再执行啊,就是这样。行了,这个结果的话还是一样,但是呢。诶。Count。原先看的这是负值的是吧,现在没有值了啊,没有值怎么办?也也也也简单啊,不用看了。啊,不用看了,来删掉来这边呢,我删了它,我在这加一个过练习行吧,叫delete success行吧,False处吧行吧处啊呃,如果出现异常,我能给它赋个值吗。
17:06
出现异常,我是不是可以给它附一个bos,是不是删除失败啊,删除失败啊,如果删除成功是不是重新下现在看懂吗?这样也行啊。打包批量执行啊,出现异常数for,默认值是什么数,出现异常数for,那接下来呢,如果成功了咱们重新下,失败呢,我就没有处理啊,这个else呢,我没有处理行吧,这是还是这个删除。嗯,来没什么东西啊,没改什么,就今天下午主要讲两个知识点啊,一个知识点是事物啊,还有知识点就是批处理,简单说一下删除用户信息啊,修改。算是今天一共几个版本啊,六个是吧,十十一十二十三十四十五。六个。
18:00
行了,下一周好好做一下啊,咱们这边呢,再来测一下吧,这个来给它部署一下,然后把服务器启一下,启了之后咱们这个先关了吧,啊这个也关了,这个表删了吧,啊太大,删掉删表更快啊来咱们打开它。这边呢,我们点登录啊,来这个功能是不是完成差不多了。这个用户信息只有一个是吧,新增来再来一个李四李四。行保存。然后再来一个啊,比如说王五王五。来保存,咱们这边呢,比如说这边再新增一个啊。行吧,这个修改是没问题的啊。来行了吧,啊,删除也是没问题啊,删除OK,确定啊就删完了。
19:06
增生改查什么改什么都有行吧,就这样啊,咱们这个就算做到这行了,咱们今天就不在网上讲了啊,还是这样,大家把代码下载一下,然后呢,有什么不不会的问一问吧,啊来把这个起一下啊行了。可以下课休息啊。
我来说两句