IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 批处理应用 -> 正文阅读

[大数据]批处理应用

基本介绍

  1. 当需要成批插入或者更新记录时。可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率。

  2. JDBC的批量处理语句包括下面方法:

    addBatch():添加需要批量处理的SQL语句或参数

    executeBatch():执行批量处理语句;

    clearBatch():清空批处理包的语句

    因为批量处理的数据量比较大,如果执行的SQL语句特别大,我们需要一批一批执行,清空了一批,再执行一批。

  3. JDBC连接MySQL时,如果要使用批处理功能,请再url中加参数?rewriteBatchedStatements=true

  4. 批处理往往和PreparedStatement一起搭配使用,可以既减少编译次数,又减少运行次数,效率大大提高。

比如说到现在有3条SQL语句,传统的方式是先发第一条语句给mysql执行,然后第二条,再第三条。

还有一种方式是把这3条语句放在一个集合中,一起发送给mysql,而且在发送之前对sql语句进行处理,很显然,把三条语句发送给mysql执行,效率会高。
举个很简单的例子:校车接送2个孩子,一种方式是接一个孩子到学校然后再饭回去接第二个孩子,另一种方式是2个孩子同时接送到学校。

?

应用实例

向admin2表中添加5000条数据,看看使用批处理耗时多久。 ?

先创建表

create table admin2(
	id int primary key auto_increment,
	username varchar(32) not null,
	password varchar(32) not null
);

select * from admin2;
-- 查询admin2表的引擎
show create table admin2;

传统方法添加5000条数据。

//传统方法,添加5000条数据
   @Test
   public void noBatch() throws SQLException {
	  Connection connection = JDBCUtils.getConnection();
	  String sql = "insert into admin2 values(null,?,?)";
	  PreparedStatement preparedStatement = connection.prepareStatement(sql);
	  System.out.println("开始执行");
	  long start = System.currentTimeMillis();  //开始时间
	  for (int i = 0; i < 5000; i++) {
		 preparedStatement.setString(1,"jack"+i);
		 preparedStatement.setString(2,"666"+i);
		 preparedStatement.executeUpdate();
	  }
	  long end =System.currentTimeMillis();
	  System.out.println("传统方式耗时="+(end-start));
	  JDBCUtils.close(null,preparedStatement,connection);
   }

?耗时6524,添加完数据 ?


使用批量方式添加数据。

//使用批量方式添加数据
   @Test
   public void batch() throws SQLException {
	  Connection connection = JDBCUtils.getConnection();
	  String sql = "insert into admin2 values(null,?,?)";
	  PreparedStatement preparedStatement = connection.prepareStatement(sql);
	  System.out.println("开始执行");
	  long start = System.currentTimeMillis();  //开始时间
	  for (int i = 0; i < 5000; i++) {
		 preparedStatement.setString(1,"jack"+i);
		 preparedStatement.setString(2,"666"+i);
		 //将sql语句加入到批处理包中
		 preparedStatement.addBatch();
		 //当有1000条记录时再批量执行
		 if ((i+1)%1000==0){ //满1000条
		    preparedStatement.executeBatch();
		    //清空一把
			preparedStatement.clearBatch();
		 }
	  }
	  long end =System.currentTimeMillis();
	  System.out.println("批量方式耗时="+(end-start));
	  JDBCUtils.close(null,preparedStatement,connection);
   }

?这快了很多倍,连1秒都不到。 ?

?

?

?

?

?

?

?

?

?

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:56:33  更:2022-07-20 18:58:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 1:53:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码