gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

java向mysql數據庫批量插入大量數據

java向mysql數據庫批量插入大量數據

首先看下我們的目標:向mysql數據庫中批量插入10000條數據

操作環境:Mysql和Java代碼都運行在我本地Windows電腦(i7處理器,4核,16G運行內存,64位操作系統

1、JPA單線程執行

代碼省略,大概需要39S左右

java向mysql數據庫批量插入大量數據

2、JPA多線程執行

java向mysql數據庫批量插入大量數據

大概需要37S左右,并沒有想象中的快很多

(免費學習視頻分享:java視頻教程)

原因: 多線程只是大大提高了程序處理數據的時間,并不會提高插入數據庫的時間,相反在我這邊JPA的框架下,多線程也就意味著多連接,反而更加消耗數據庫性能

package com.example.demo.controller;  import com.example.demo.entity.Student; import com.example.demo.service.StudentServiceInterface; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;  import javax.xml.bind.ValidationException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;  @RestController @RequestMapping("/student") public class StudentController {      @Autowired     private StudentServiceInterface studentServiceInterface;      // 來使主線程等待線程池中的線程執行完畢     private CountDownLatch threadsSignal;      // 每個線程處理的數據量     private static final int count = 1000;     // 我的電腦為4核 線程池大小設置為2N+1     private static ExecutorService execPool = Executors.newFixedThreadPool(9);          /**      * 多線程保存      *      * @return      * @throws ValidationException      */     @GetMapping()     public String saveStudentEnableThread() throws ValidationException {         Long begin = new Date().getTime();         // 需要插入數據庫的數據         List<Student> list = new ArrayList<>();         for (int i = 0; i < 10000; i++) {             Student student = new Student();             student.setName("張三");             student.setAge(10);             list.add(student);         }         try {             if (list.size() <= count) {                 threadsSignal = new CountDownLatch(1);                 execPool.submit(new InsertDate(list));             } else {                 List<List<Student>> lists = dealData(list, count);                 threadsSignal = new CountDownLatch(lists.size());                 for (List<Student> students : lists) {                     execPool.submit(new InsertDate(students));                 }             }             threadsSignal.await();         } catch (Exception e) {             System.out.println(e.toString() + " 錯誤所在行數:" + e.getStackTrace()[0].getLineNumber());         }         // 結束時間         Long end = new Date().getTime();         return "10000條數據插入花費時間 : " + (end - begin) / 1000 + " s";     }      /**      * 數據組裝      * 把每個線程要處理的數據 再組成一個List      * 我這邊就是把10000條數據 組成 10個1000條的集合      *      * @param target 數據源      * @param size   每個線程處理的數量      * @return      */     public static List<List<Student>> dealData(List<Student> target, int size) {         List<List<Student>> threadList = new ArrayList<List<Student>>();         // 獲取被拆分的數組個數         int arrSize = target.size() % size == 0 ? target.size() / size : target.size() / size + 1;         for (int i = 0; i < arrSize; i++) {             List<Student> students = new ArrayList<Student>();             //把指定索引數據放入到list中             for (int j = i * size; j <= size * (i + 1) - 1; j++) {                 if (j <= target.size() - 1) {                     students.add(target.get(j));                 }             }             threadList.add(students);         }         return threadList;     }      /**      * 內部類,開啟線程批量保存數據      */     class InsertDate extends Thread {         List<Student> list = new ArrayList<Student>();         public InsertDate(List<Student> students) {             list = students;         }         public void run() {             try {                 // 與數據庫交互                 studentServiceInterface.save(list);                 threadsSignal.countDown();             } catch (ValidationException e) {                 e.printStackTrace();             }         }     } }

3、傳統JDBC插入

java向mysql數據庫批量插入大量數據

大概需要8S左右,相較于前兩種方式已經快很多了,代碼如下:

package com.example.demo.controller;  import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;  import javax.xml.bind.ValidationException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.util.Date;  @RestController @RequestMapping("/student1") public class StudentController1 {      @GetMapping()     public String saveStudentEnableThread() throws ValidationException {         // 開始時間         Long begin = new Date().getTime();         Connection connection = null;         try {             connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db01?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true", "admin", "123456");//獲取連接             if (connection != null) {                 System.out.println("獲取連接成功");             } else {                 System.out.println("獲取連接失敗");             }             //這里必須設置為false,我們手動批量提交             connection.setAutoCommit(false);             //這里需要注意,SQL語句的格式必須是預處理的這種,就是values(?,?,...,?),否則批處理不起作用             PreparedStatement statement = connection.prepareStatement("insert into student(id,`name`,age) values(?,?,?)");             // 塞數據             for (int i = 0; i < 10000; i++) {                 statement.setInt(1, i+1);                 statement.setString(2, "張三");                 statement.setInt(3, 10);                 //將要執行的SQL語句先添加進去,不執行                 statement.addBatch();             }             // 提交要執行的批處理,防止 JDBC 執行事務處理             statement.executeBatch();             connection.commit();             // 關閉相關連接             statement.close();             connection.close();         } catch (Exception e) {             e.printStackTrace();         }         // 結束時間         Long end = new Date().getTime();         // 耗時         System.out.println("10000條數據插入花費時間 : " + (end - begin) / 1000 + " s");         return "10000條數據插入花費時間 : " + (end - begin) / 1000 + " s";     }  }

4、最后檢查一下數據是否成功存庫,一共30000條,沒有丟數據

java向mysql數據庫批量插入大量數據

完成!

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
亚洲美免无码中文字幕在线| 麻豆tv在线播放| 日韩av福利在线观看| 一级全黄肉体裸体全过程| 国产又粗又爽又黄的视频| 蜜臀av.com| 免费av手机在线观看| 国产91对白刺激露脸在线观看| 日韩有码免费视频| 亚洲一级片av| 日韩中字在线观看| www.涩涩涩| 欧美一级中文字幕| 久久精品免费一区二区| 50路60路老熟妇啪啪| 中文 日韩 欧美| 老太脱裤让老头玩ⅹxxxx| 亚洲福利精品视频| 欧美黄色免费网址| 午夜免费一区二区| 麻豆视频传媒入口| 欧美日韩第二页| 免费在线观看污污视频| 六月丁香激情网| 欧美国产日韩另类 | 成人毛片100部免费看| 91精品91久久久中77777老牛| 国产又黄又猛又粗| 国产乱淫av片杨贵妃| 9l视频白拍9色9l视频| 18禁裸男晨勃露j毛免费观看| 9久久婷婷国产综合精品性色| 中文字幕精品在线播放| 北条麻妃在线一区| 麻豆一区二区三区在线观看| 黄色高清无遮挡| 成人一级生活片| 91日韩视频在线观看| 黄色国产一级视频| 色姑娘综合天天| 污网站免费在线| 777av视频| 五月天在线免费视频| 最近中文字幕一区二区| 热99这里只有精品| 国产一级片91| 国产在线视频三区| 日韩av片网站| 日本少妇高潮喷水视频| 日韩精品一区二区三区电影| 日本黄大片一区二区三区| www黄色av| 国精产品一区一区三区视频| 影音先锋男人的网站| 成人av毛片在线观看| 国产九九在线视频| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 日本一二三四区视频| 日本在线一二三区| 超碰在线公开97| 91热这里只有精品| 欧美精品第三页| 免费av网址在线| 无码人妻丰满熟妇区96| 欧美日韩不卡在线视频| 久久国产精品免费观看| 国产精品h视频| 精品国产无码在线| 国产对白在线播放| 激情在线观看视频| 色偷偷中文字幕| 日本xxx免费| 国产精品va在线观看无码| 日韩最新中文字幕| 国产在线无码精品| 9色porny| 2022亚洲天堂| xxxx一级片| 杨幂毛片午夜性生毛片 | 免费观看黄色的网站| 伊人五月天婷婷| 亚洲自拍偷拍一区二区三区| 韩国黄色一级大片| 极品粉嫩国产18尤物| 国产中文字幕免费观看| 男人的天堂日韩| 亚洲小视频网站| 热久久最新网址| 男人日女人逼逼| 91看片在线免费观看| 欧美与动交zoz0z| 欧美大片在线播放| 日日噜噜夜夜狠狠| 91免费视频黄| 北条麻妃在线视频观看| 免费黄色一级网站| 91精品国产三级| 老太脱裤让老头玩ⅹxxxx| 国产a视频免费观看| 亚洲精品20p| 国产一级不卡视频| 91成人在线观看喷潮教学| 日本大片免费看| 日本va中文字幕| 中文字幕国内自拍| 免费久久久久久| 青青草国产精品视频| 超碰在线免费观看97| 岳毛多又紧做起爽| 一道本在线免费视频| 在线一区二区不卡| 日本中文字幕在线视频观看| 妞干网在线播放| 182午夜在线观看| japanese在线视频| 每日在线更新av| 天堂av在线网站| 经典三级在线视频| 免费拍拍拍网站| 国产精品视频黄色| 免费久久久久久| 国产乱子伦农村叉叉叉| 三级av免费观看| 中文字幕第一页在线视频| aa在线观看视频| 亚洲第一天堂久久| av在线播放亚洲| 91 视频免费观看| 日本免费成人网| 久久久福利影院| 国产原创popny丨九色| 制服丝袜中文字幕第一页 | 蜜臀视频一区二区三区| 青青青在线观看视频| 久久精品免费网站| 免费看欧美黑人毛片| 91福利免费观看| 欧美黄网站在线观看| 欧美中文字幕在线观看视频| 日韩精品一区二区三区不卡 | 69久久久久久| 男人天堂手机在线视频| 亚洲高清免费在线观看| 国产精品999视频| 激情文学亚洲色图| 十八禁视频网站在线观看| 青娱乐国产精品视频| jizz欧美性11| 欧美精品第三页| 青草青青在线视频| 香蕉视频在线网址| 男女视频在线看| 亚洲不卡视频在线| 亚洲熟女乱色一区二区三区| 红桃一区二区三区| 做a视频在线观看| 欧洲熟妇精品视频| 欧美三级一级片| 国产精品自拍合集| 久久人人爽人人片| 免费网站在线观看黄| 宅男噜噜噜66国产免费观看| 北条麻妃av高潮尖叫在线观看| 阿v天堂2018| 美女av免费观看| 永久免费网站视频在线观看| 日韩精品视频一二三| 黄色片久久久久| 性欧美videossex精品| av五月天在线| 无需播放器的av| 91看片在线免费观看| 国产美女三级视频| 超碰在线公开97| 亚州精品一二三区| 一本色道久久亚洲综合精品蜜桃| 妞干网在线免费视频| www.av中文字幕| 手机在线看福利| 免费看涩涩视频| 欧洲美女亚洲激情| 一级黄色高清视频| 国产高清免费在线| 国产 国语对白 露脸| www亚洲国产| 污污污污污污www网站免费| 天天做天天躁天天躁| 色综合五月婷婷| 欧美深夜福利视频| 黄色免费观看视频网站| 欧在线一二三四区| 狠狠躁狠狠躁视频专区| 91免费国产精品| 男人揉女人奶房视频60分| 超碰网在线观看| 亚洲第一区第二区第三区| www.黄色网址.com| 久久久久久香蕉| 在线免费黄色小视频| 日韩小视频网站|