欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis-plus 處理大數(shù)據(jù)插入太慢的解決

 更新時間:2020年12月17日 16:04:36   作者:那些年我們還沒禿  
這篇文章主要介紹了mybatis-plus 處理大數(shù)據(jù)插入太慢的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

大批量數(shù)據(jù)插入方法是Mybatis的foreach拼接SQL

我發(fā)現(xiàn)不管改成Mybatis Batch提交或者原生JDBC Batch的方法都不起作用,實際上在插入的時候仍然是一條條記錄的插,速度遠不如原來Mybatis的foreach拼接SQL的方法。

// 第一步判斷更新或添加
 String[] splitUserId = userGroup.getUserId().split(",");
 String[] spiltUserName = userGroup.getUserName().split(",");
 if (StringUtils.isBlank(userGroup.getId())) {
 userGroup.setNum(spiltUserName.length);
 userGroupMapper.insert(userGroup);
 } else {
 userGroup.setNum(spiltUserName.length);
 userGroupMapper.updateById(userGroup);
 }
 /* 第二部刪除中間表信息,字段冗余 */

 Map<String, Object> columnMap = new HashMap<String, Object>();
 columnMap.put("USER_GROUP_ID", userGroup.getId());
 groupUsersService.removeByMap(columnMap);

 /* 第三步,批量保存中間表 */

 if (splitUserId.length != 0) {
 List<GroupUsers> groupUsersList = Lists.newArrayList();
 for (int i = 0; i < splitUserId.length; i++) {
  GroupUsers gu = new GroupUsers();
  gu.setUserId(splitUserId[i]);
  gu.setUserName(spiltUserName[i]);
  gu.setUserGroupId(userGroup.getId());
  groupUsersList.add(gu);
 }
 groupUsersService.saveBatch(groupUsersList);
 }

  • 就是這樣的一種情景也很符合大部分的開發(fā)場景,可就是1000條數(shù)據(jù)的情況下用了8秒 ,這可能與計算機的性能有很大的關(guān)系,但就是如此也不至于用八秒鐘,那么用戶體驗會很慘的。
  • JDBC連接URL字符串中需要新增一個參數(shù):rewriteBatchedStatements=true url: jdbc:mysql://192.168.1.143:3306/rt_xxxxxx_test?useUnicode=true&characterEncoding=utf-8&rewriteBatchedStatements=true
  • MySQL的JDBC連接的url中要加rewriteBatchedStatements參數(shù),并保證5.1.13以上版本的驅(qū)動,才能實現(xiàn)高性能的批量插入。
  • MySQL JDBC驅(qū)動在默認情況下會無視executeBatch()語句,把我們期望批量執(zhí)行的一組sql語句拆散,一條一條地發(fā)給MySQL數(shù)據(jù)庫,批量插入實際上是單條插入,直接造成較低的性能。
  • 只有把rewriteBatchedStatements參數(shù)置為true, 驅(qū)動才會幫你批量執(zhí)行SQL
  • 另外這個選項對INSERT/UPDATE/DELETE都有效

其他原因:

問題

最近項目用的mybatis-plus做的映射,有個批處理文件內(nèi)容的需求,在使用mybatis-plus的批處理方法saveBatch時發(fā)現(xiàn)速度特別慢,測試從1000到10000到80000條基本上是線性增加,80000條時差不多要90秒。

排查

在這里插入圖片描述

經(jīng)debug排查sql語句是批量執(zhí)行,所以應(yīng)該不是框架本身的問題,由于用的是公司的手腳架,在mysql連接配置中發(fā)現(xiàn)了問題

在這里插入圖片描述

這里少配置了一個參數(shù)rewriteBatchedStatements=true

結(jié)果

修改前24w數(shù)據(jù)大概在254709 ms
修改后24w數(shù)據(jù)大概在42506 ms
單次批量插入10000條大概在1700ms

到此這篇關(guān)于mybatis-plus 處理大數(shù)據(jù)量太慢的解決的文章就介紹到這了,更多相關(guān)mybatis-plus 處理大數(shù)據(jù)太慢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論