批处理|学习笔记

简介: 快速学习批处理

开发者学堂课程【JDBC数据库开发入门:批处理】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/29

批处理


内容简介

一、批处理的概念

二、批处理的运行

 

一、批处理的概念

批处理的概念就是一批一批的处理,原先处理数据库是一条一条的处理,发送一条语句过去,服务器执行一条。发一条执行一条对网络的传输来说过于频繁,往返的次数过多会影响效率,所以这时考虑到批处理,也就是客户端能不能一批一批的把sq语句运送到服务器,然后服务器一批一批的执行,所谓批可以理解成集合。

批处理有两种形式,一种是用Statement来完成,另一种是用PreparedStatement来完成,第一种不再介绍。现在主要介绍第二种PreparedStatement。

 

二、批处理的运行

如何做到一批一批的往外传送呢?

1.新创建一个Demo5。

首先介绍批处理。psrmt对象内部有集合,有集合可以理解为有批。

(1)用循环疯狂向pstmt中添加sql参数,它自己有模板,使用一组参数与模板没罚可以匹配出一条sql语句。

(2)调用它的执行批方法,完成向数据库发送!

2.实验

现在至少需要两个方法给我们提供,也就是说pstmt需要提供两个方法

(1) 添加参数到批中,

(2)执行批!复制三条代码:

Connection con=JdbcUtils.getConnection();

String sql="select from tab_bin";

PreparedStatement pstmt=con.prepareStatement(sql);

更改模板,用以下的表做实验:

image.png

清除数据 delete from t_stu ,接下来插入"INSERT INTO t_stu VALUES(?,?,?,?)"

3.疯狂的添加参数

设置参数for(int i=0;i<10000;i++),一万行记录需要往数据库里插。

第一个参数:pstmt.setInt(1,i+1);第一个是int类型

第二个参数:pstmt.setString(2,“stu_”+i);这就是stu0,stu1……

第三个参数:年龄,pstmt.setInt(3,i);第一个人0岁,最后一个人9999岁。

第四个参数:性别,pstmt.setString (4,i&2==0?“男”:“女”);

这些参数给完了思考一个问题:

现在是执行还是怎样?循环回来是否要把参数覆盖掉?

要记住:不要把参数扔了,循环回来还是一个参数,又重复了,所以有一个非常重要的代码:pstmt.addBatch();添加批,这一组参数就保存到集合中了。

然后循环回来又设置一组参数,又添加进去了,到现在为止循环完还未执行,所以最后的代码就是:pstmt. execteBatch(); 执行批

代码写完了,一共用了两个方法,一个是添加批,一个是执行批。

执行批更加耽误时间。添加批是发送。添加批内部有集合,执行批则是把集合一起发送。添加批相当于装车,而执行批相当于发车。

这时,需要记录时间:long start=System.currentTimeMillis();

long end=System.currentTimeMillis();

最后输出System.out.println(end-start);代码写完了。

如图:

image.png

4.测试

测试一下:select count(*) FROM t_stu;耐心等待,可以比较出来批处理到底快不快。这时的批处理较慢,是因为MySQL默认批处理是封闭的,打开它需要一个参数rewriteBatchedStatements=true把参数配到url处加一问号打开 然后保存,等这一遍执行完了,再来执行第二遍。一个是使用批处理的效果,一个不使用批处理的效果。当前数据库不支持批处理,只有把参数加上才能比较出来批处理到底快不快。

image.png

注意:Mysql不支持批处理是因为缺少变量,参数rewriteBatchedStatements=true一定要加在url后面,前面一定要加问号。Mysql是支持批处理的,代码一定要有变量。

一万条大概执行六分钟。算一下时间,用了412764毫秒,除以1000,得到秒,除以60,得到6.8794分钟。

输入代码:System.out.println(end-start)// 412764,6.8794分钟。

由于前面重复组建了,所以执行之前先清除数据库,输入:DELETE FROM t_stu,使一万行消失,得到0行。右键执行,得到520毫秒。一秒钟都用不上。以上是二者的区别,再次删掉执行,301毫秒。

这就是批处理的作用。

相关文章
|
关系型数据库 MySQL 数据库
什么是数据库触发器?
【8月更文挑战第3天】
1724 10
什么是数据库触发器?
|
9月前
|
消息中间件
消息的重复消费问题如何解决
在使用RabbitMQ进行消息收发的时候, 如果发送失败或者消费失败会自动进行重试, 那么就有可能会导致消息的重复消费 , 具体的解决方案其实非常简单, 为每条消息设置一个唯一的标识id , 将已经消费的消息记录保存起来 , 后期再进行消费的时候判断是否已经消费过即可 , 如果已经消费过则不消费 , 如果没有消费过则正常消费
|
Python
Polars实践(3):阿里天池——淘宝用户购物行为分析
Polars实践(3):阿里天池——淘宝用户购物行为分析
241 0
|
网络协议 安全 Linux
在Linux中,如何查看开放的端口?
在Linux中,如何查看开放的端口?
|
API
明晚直播:钉钉宜搭连接器接入高德API实战演示
《你好!低代码》第二十期明天(10月19日)晚上7点准时直播。本期将带来钉钉宜搭连接器实战演示,记得准时收看哦~
1039 0
明晚直播:钉钉宜搭连接器接入高德API实战演示
|
人工智能 自然语言处理 云计算
WORDVICE AI你不能错过的科研辅助神器
WORDVICE AI你不能错过的科研辅助神器
807 0
|
SQL 关系型数据库 MySQL
你竟然还不知道SQL性能分析?(你想象不到的详细)
你竟然还不知道SQL性能分析?(你想象不到的详细)
|
存储 弹性计算 缓存
基于LLM+Tair构建具备私域知识的专属Chatbot
ChatGPT因为之前的一个故障,使我们得以一窥内部架构,其使用了Redis作为ChatGPT的Cache系统。Tair是企业版的内存数据库系统,兼容Redis生态,并且也提供了向量检索的能力,是阿里云上Redis的平替。本服务基于开源的langchain-ChatGLM实现,借助Tair的高性能内存引擎和向量索引能力,实现了“企业私域数据”的理解问答,以帮助企业快速构建专属Chatbot服务;并实现了对用户长Session聊天历史记录缓存,以摆脱LLM的Token数限制。模型ChatGLM-6B是由清华大学团队开发的是一个开源的、支持中英双语的对话语言模型,请自觉遵守用户协议、法律法规等。
1951 2
|
消息中间件 Dubbo Java
深度剖析线上应用节点流量隔离技术
深度剖析线上应用节点流量隔离技术
8827 0
|
移动开发 小程序 安全
DingTalk「开发者说」钉钉酷应用&斗栱云:赋能产品创新,加速企业数字化
酷应用概念问世后,斗拱云如获至宝。工程行业的数据大多来自于一线人员,用户平时既要在现场进行管理,又要在沟通中确认各种事项,还要登录不同的软件,录入数据。而酷应用的理念很好地解决了协同和数据的打通问题,工作沟通和业务数据实现一体化,不再分离,让系统真正实现数字化。
2577 0
DingTalk「开发者说」钉钉酷应用&斗栱云:赋能产品创新,加速企业数字化