怎么在MySql中插入千万级大数据
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,今天就跟大家聊聊有关怎么在MySql中插入千万级大数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。第一步,读取文件,开始插入多线程在这里,达
千家信息网最后更新 2025年01月31日怎么在MySql中插入千万级大数据
今天就跟大家聊聊有关怎么在MySql中插入千万级大数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
第一步,读取文件,开始插入多线程
在这里,达到一定量的量是个需要斟酌的问题,在我的实验中,开始使用100w作为这个量,但是出现了新的问题,Java 堆内存溢出,最终采用了10W作为量的标准。
当然,可以有其他的量,看大家自己喜欢那个了。
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 ArrayListlist; 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 (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 (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(); } }
第二步,使用多线程,批量插入数据
class MultiThread implements Runnable { private ArrayListlist; public MultiThread(ArrayList 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 list) { // for (String str : list) { // System.out.println(str); // } System.out.print(Thread.currentThread().getName() + " :"); System.out.println(list.size()); } }
批量操作中,使用mysql的prepareStatement类,当然也使用了statement类的批量操作,性能比不上前者。前者可以达到1w+每秒的插入速度,后者只有2000+;
public int insertUserBehaviour(ArrayListsqls) 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; }
看完上述内容,你们对怎么在MySql中插入千万级大数据有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
数据
内容
线程
文件
问题
一定量
内存
只有
性能
更多
标准
比不上
知识
篇文章
行业
资讯
资讯频道
速度
频道
进一
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
美国黑客数据库
学习网络安全与隐私保护
access 多数据库
2021年编程软件开发行业分析
工程软件开发哪家好
北京邮电大学网络安全文化节
数据库任务总结
专业放心的服务器主动管理
数据库设计工具哪些好用
石家庄亚瑟软件开发
互联网科技产品介绍
数据库emp表怎么恢复
战地5哪个服务器好玩
搭载鲲鹏芯片服务器品牌
n720 打印服务器
从事软件开发的人的占比
华为服务器的配置工具
企业管理器连接服务器
信息网络安全检查台账
黄浦区制造软件开发解决方案
银行要软件开发吗
计算机网络安全与维护合同
软件开发测试性格改变
软件开发 助理 岗位职责
网络安全股票有哪些龙头股
易祥软件开发
魔盒插件软件开发
山东物美网络技术有限公司
网上购物系统的设计与实现数据库
数据库原理与技术表程序题