久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么在MySql中插入千萬級(jí)大數(shù)據(jù)

共計(jì) 2995 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。

自動(dòng)寫代碼機(jī)器人,免費(fèi)開通

今天就跟大家聊聊有關(guān)怎么在 MySql 中插入千萬級(jí)大數(shù)據(jù),可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

第一步,讀取文件,開始插入多線程

在這里,達(dá)到一定量的量是個(gè)需要斟酌的問題,在我的實(shí)驗(yàn)中,開始使用 100w 作為這個(gè)量,但是出現(xiàn)了新的問題,Java 堆內(nèi)存溢出,最終采用了 10W 作為量的標(biāo)準(zhǔn)。

當(dāng)然,可以有其他的量,看大家自己喜歡那個(gè)了。

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
import preprocess.ImportDataBase;
 
public class MuiltThreadImportDB {
 
 /**
 * Java 多線程讀大文件并入庫
 * 
 * @param args
 */
 private static int m_record = 99999;
 private static BufferedReader br = null;
 private ArrayList String  list;
 private static int m_thread = 0;
 static {
 try {
 br = new BufferedReader(
 new FileReader(  E:/tianci/IJCAI15 Data/data_format1/user_log_format1.csv),8192);
 
 } catch (FileNotFoundException e) { e.printStackTrace();
 }
 try { br.readLine(); //  去掉 CSV Header
 } catch (IOException e) { e.printStackTrace();
 }
 }
 
 public void start() {
 String line;
 int count = 0;
 list = new ArrayList String (m_record + 1);
 synchronized (br) {
 try { while ((line = br.readLine()) != null) { if (count   m_record) { list.add(line);
 count++;
 } else { list.add(line);
 count = 0;
 Thread t1 = new Thread(new MultiThread(list),Integer.toString(m_thread++));
 t1.start();
 list = new ArrayList String (m_record + 1);
 }
 }
 
 if (list != null) { Thread t1 = new Thread(new MultiThread(list),Integer.toString(m_thread++));
 t1.start();
 }
 } catch (IOException e) { e.printStackTrace();
 }
 }
 }
 
 public static void main(String[] args) { new MuiltThreadImportDB().start();
 } 
}

第二步,使用多線程,批量插入數(shù)據(jù)

class MultiThread implements Runnable {
 private ArrayList String  list;
 
 public MultiThread(ArrayList String  list) {
 this.list = list;
 }
 
 public void run() {
 try { ImportDataBase insert = new ImportDataBase(list);
 insert.start();
 } catch (FileNotFoundException e) { e.printStackTrace();
 }
 display(this.list);
 }
 
 public void display(List String  list) { // for (String str : list) { // System.out.println(str);
 // }
 System.out.print(Thread.currentThread().getName() +   : 
 System.out.println(list.size());
 }
 
}

批量操作中,使用 mysql 的 prepareStatement 類,當(dāng)然也使用了 statement 類的批量操作,性能比不上前者。前者可以達(dá)到 1w+ 每秒的插入速度,后者只有 2000+;

public int insertUserBehaviour(ArrayList String  sqls) throws SQLException {
 
 String sql =  insert into user_behaviour_log (user_id,item_id,cat_id,merchant_id,brand_id,time_stamp,action_type) 
 +   values(?,?,?,?,?,?,?) 
 preStmt = conn.prepareStatement(sql);
 for (int i = 0; i   sqls.size(); i++) { UserLog log =new UserLog(sqls.get(i));
 preStmt.setString(1, log.getUser_id());
 preStmt.setString(2, log.getItem_id());
 preStmt.setString(3, log.getCat_id());
 preStmt.setString(4, log.getMerchant_id());
 preStmt.setString(5, log.getBrand_id());
 preStmt.setString(6, log.getTimeStamp());
 preStmt.setString(7, log.getActionType());
 preStmt.addBatch();
 if ((i + 1) % 10000 == 0) { preStmt.executeBatch();
 conn.commit();
 preStmt.clearBatch();
 }
 }
 preStmt.executeBatch();
 conn.commit();
 return 1;
 }

看完上述內(nèi)容,你們對怎么在 MySql 中插入千萬級(jí)大數(shù)據(jù)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。

向 AI 問一下細(xì)節(jié)

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-04發(fā)表,共計(jì)2995字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 蓬溪县| 敦化市| 开远市| 易门县| 北辰区| 界首市| 茶陵县| 怀安县| 襄垣县| 饶平县| 盱眙县| 临夏市| 宾阳县| 合川市| 波密县| 江北区| 昌图县| 信阳市| 浪卡子县| 绥滨县| 江门市| 安岳县| 永济市| 普陀区| 百色市| 阿坝县| 北碚区| 玉林市| 三原县| 巴青县| 湟源县| 区。| 遵化市| 巴彦县| 锡林浩特市| 黑山县| 云南省| 博罗县| 永吉县| 林口县| 屏山县|