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

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

java向mysql數(shù)據(jù)庫(kù)批量插入大量數(shù)據(jù)

java向mysql數(shù)據(jù)庫(kù)批量插入大量數(shù)據(jù)

首先看下我們的目標(biāo):向mysql數(shù)據(jù)庫(kù)中批量插入10000條數(shù)據(jù)

操作環(huán)境:Mysql和Java代碼都運(yùn)行在我本地Windows電腦(i7處理器,4核,16G運(yùn)行內(nèi)存,64位操作系統(tǒng)

1、JPA單線程執(zhí)行

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

java向mysql數(shù)據(jù)庫(kù)批量插入大量數(shù)據(jù)

2、JPA多線程執(zhí)行

java向mysql數(shù)據(jù)庫(kù)批量插入大量數(shù)據(jù)

大概需要37S左右,并沒(méi)有想象中的快很多

(免費(fèi)學(xué)習(xí)視頻分享:java視頻教程)

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

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;      // 來(lái)使主線程等待線程池中的線程執(zhí)行完畢     private CountDownLatch threadsSignal;      // 每個(gè)線程處理的數(shù)據(jù)量     private static final int count = 1000;     // 我的電腦為4核 線程池大小設(shè)置為2N+1     private static ExecutorService execPool = Executors.newFixedThreadPool(9);          /**      * 多線程保存      *      * @return      * @throws ValidationException      */     @GetMapping()     public String saveStudentEnableThread() throws ValidationException {         Long begin = new Date().getTime();         // 需要插入數(shù)據(jù)庫(kù)的數(shù)據(jù)         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() + " 錯(cuò)誤所在行數(shù):" + e.getStackTrace()[0].getLineNumber());         }         // 結(jié)束時(shí)間         Long end = new Date().getTime();         return "10000條數(shù)據(jù)插入花費(fèi)時(shí)間 : " + (end - begin) / 1000 + " s";     }      /**      * 數(shù)據(jù)組裝      * 把每個(gè)線程要處理的數(shù)據(jù) 再組成一個(gè)List      * 我這邊就是把10000條數(shù)據(jù) 組成 10個(gè)1000條的集合      *      * @param target 數(shù)據(jù)源      * @param size   每個(gè)線程處理的數(shù)量      * @return      */     public static List<List<Student>> dealData(List<Student> target, int size) {         List<List<Student>> threadList = new ArrayList<List<Student>>();         // 獲取被拆分的數(shù)組個(gè)數(shù)         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>();             //把指定索引數(shù)據(jù)放入到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;     }      /**      * 內(nèi)部類,開(kāi)啟線程批量保存數(shù)據(jù)      */     class InsertDate extends Thread {         List<Student> list = new ArrayList<Student>();         public InsertDate(List<Student> students) {             list = students;         }         public void run() {             try {                 // 與數(shù)據(jù)庫(kù)交互                 studentServiceInterface.save(list);                 threadsSignal.countDown();             } catch (ValidationException e) {                 e.printStackTrace();             }         }     } }

3、傳統(tǒng)JDBC插入

java向mysql數(shù)據(jù)庫(kù)批量插入大量數(shù)據(jù)

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

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 {         // 開(kāi)始時(shí)間         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("獲取連接失敗");             }             //這里必須設(shè)置為false,我們手動(dòng)批量提交             connection.setAutoCommit(false);             //這里需要注意,SQL語(yǔ)句的格式必須是預(yù)處理的這種,就是values(?,?,...,?),否則批處理不起作用             PreparedStatement statement = connection.prepareStatement("insert into student(id,`name`,age) values(?,?,?)");             // 塞數(shù)據(jù)             for (int i = 0; i < 10000; i++) {                 statement.setInt(1, i+1);                 statement.setString(2, "張三");                 statement.setInt(3, 10);                 //將要執(zhí)行的SQL語(yǔ)句先添加進(jìn)去,不執(zhí)行                 statement.addBatch();             }             // 提交要執(zhí)行的批處理,防止 JDBC 執(zhí)行事務(wù)處理             statement.executeBatch();             connection.commit();             // 關(guān)閉相關(guān)連接             statement.close();             connection.close();         } catch (Exception e) {             e.printStackTrace();         }         // 結(jié)束時(shí)間         Long end = new Date().getTime();         // 耗時(shí)         System.out.println("10000條數(shù)據(jù)插入花費(fèi)時(shí)間 : " + (end - begin) / 1000 + " s");         return "10000條數(shù)據(jù)插入花費(fèi)時(shí)間 : " + (end - begin) / 1000 + " s";     }  }

4、最后檢查一下數(shù)據(jù)是否成功存庫(kù),一共30000條,沒(méi)有丟數(shù)據(jù)

java向mysql數(shù)據(jù)庫(kù)批量插入大量數(shù)據(jù)

完成!

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
国产97色在线 | 日韩| 性生活免费在线观看| 亚洲怡红院在线| aaa毛片在线观看| 欧美国产综合在线| 大桥未久一区二区| 天堂av.com| 国产无遮挡猛进猛出免费软件| 免费国产成人av| 99爱视频在线| www一区二区www免费| 成人免费在线网| 久久艹国产精品| 狠狠干视频网站| 69精品丰满人妻无码视频a片 | 91在线视频观看免费| 欧美精品99久久| 大陆极品少妇内射aaaaa| 国产v片免费观看| 国产一区二区网| 妺妺窝人体色www在线小说| 国产中文字幕二区| 99久久久无码国产精品6| 免费在线观看亚洲视频| 777久久久精品一区二区三区| 免费在线观看视频a| 国产深夜男女无套内射| 免费在线激情视频| 男女视频一区二区三区| 中文字幕在线观看第三页| www.超碰com| www.日本一区| 在线视频一二三区| 国产欧美日韩小视频| 欧美日韩一道本| 亚洲福利精品视频| 中文字幕第一页亚洲| www成人免费| 5月婷婷6月丁香| 精品久久久99| 黄色一级片在线看| 国产精品入口免费软件| 国产5g成人5g天天爽| www.-级毛片线天内射视视| 国产曰肥老太婆无遮挡| 成人在线免费观看av| 国内自拍视频网| 欧美 亚洲 视频| 美女福利视频在线| 91社在线播放| 欧美v在线观看| 日韩欧美中文在线视频| 天堂…中文在线最新版在线| 亚洲男人天堂色| 在线观看17c| 男女曰b免费视频| 女女百合国产免费网站| 中文字幕乱码人妻综合二区三区| 国产又黄又猛的视频| 日韩xxxx视频| 黄色三级视频在线播放| 国产黄页在线观看| 免费观看黄色的网站| 久久久免费视频网站| 一级全黄肉体裸体全过程| 俄罗斯av网站| 日本精品福利视频| 亚洲免费999| 91成人在线观看喷潮教学| 亚洲天堂av一区二区三区| 国产aaa一级片| 黄色免费高清视频| 制服丝袜中文字幕第一页| 日韩在线视频在线观看| 成年人三级视频| 久久国产精品国产精品| 噜噜噜久久亚洲精品国产品麻豆| 五月天综合婷婷| 国产乱码一区二区三区四区| 麻豆av免费在线| 国产av人人夜夜澡人人爽麻豆| 午夜av中文字幕| 色戒在线免费观看| 国产一级不卡毛片| 人妻有码中文字幕| 国精产品一区一区三区视频| 无颜之月在线看| 国产又粗又大又爽的视频| 国产成年人视频网站| 亚洲色图久久久| 亚洲一区二区蜜桃| 亚洲精品一二三四五区| 国产偷人视频免费| 欧美三级午夜理伦三级| 爱福利视频一区二区| 欧美一区二区三区爽大粗免费| 阿v天堂2018| 日本福利视频一区| 亚洲熟妇无码一区二区三区导航| 黄网站色视频免费观看| www.99riav| a级黄色小视频| 免费看黄在线看| 激情综合在线观看| 虎白女粉嫩尤物福利视频| 那种视频在线观看| 免费看污黄网站| www.com黄色片| 99精品视频免费版的特色功能| 91社在线播放| 妞干网视频在线观看| 成人免费毛片在线观看| av免费观看大全| 日av中文字幕| 天堂中文av在线| 亚洲一区 在线播放| 日韩av中文字幕第一页| 情侣黄网站免费看| 中文字幕22页| h无码动漫在线观看| 亚洲熟妇国产熟妇肥婆| 精品少妇无遮挡毛片| av噜噜在线观看| 欧美午夜性视频| 国产xxxxx视频| 97人人模人人爽人人澡| 国产美女主播在线| 国产视频一区二区视频| 亚洲女人在线观看| 日韩中字在线观看| 最新天堂在线视频| 亚洲 欧美 综合 另类 中字| 一本大道熟女人妻中文字幕在线| 污版视频在线观看| 又大又硬又爽免费视频| 北条麻妃av高潮尖叫在线观看| 永久免费黄色片| 久草热视频在线观看| 欧美一级xxxx| 黄色免费观看视频网站| 91精产国品一二三产区别沈先生| 18黄暴禁片在线观看| 欧美性猛交xxx乱久交| 日韩精品免费一区| 亚洲色图久久久| 97超碰在线人人| 免费涩涩18网站入口| 青青草精品视频在线| 爽爽爽在线观看| 色综合天天色综合| 免费欧美一级视频| 亚洲国产一二三精品无码 | 亚洲激情在线看| 久久精品国产精品亚洲色婷婷| 天天综合五月天| 日本超碰在线观看| 日韩欧美在线免费观看视频| 国产自产在线视频| 欧洲精品视频在线| www.成人黄色| 日韩av在线中文| av免费在线播放网站| 国产一区二区三区乱码| 激情文学亚洲色图| 中日韩av在线播放| 亚洲欧美久久久久| chinese少妇国语对白| 国产97在线 | 亚洲| 激情五月五月婷婷| 欧美日韩一区二区三区69堂| 每日在线观看av| 草草视频在线免费观看| 欧美日韩dvd| 伊人国产精品视频| 欧美精品成人网| 宅男噜噜噜66国产免费观看| 国产 欧美 日韩 一区| 91 视频免费观看| 天天综合天天添夜夜添狠狠添| aaa毛片在线观看| www国产无套内射com| 男人天堂新网址| 精产国品一二三区| 波多野结衣xxxx| 天天色天天干天天色| 成人性生交免费看| 高清一区二区视频| 一起操在线视频| 污视频免费在线观看网站| 欧美三级午夜理伦三级| 一区二区三区国产免费| 热久久精品国产| 国产一区二区三区精彩视频| 国产精品亚洲a| 亚洲成熟丰满熟妇高潮xxxxx| 国产原创中文在线观看| av无码精品一区二区三区| 国产成人无码av在线播放dvd| 91视频最新入口| 成人在线免费播放视频|