java 怎么把5万条数据分批插入数据到mysql,之前插1,2万没事, 多了就内存溢出
希望能有详细点的方案,扩大内存,之前用过了,所以从10000变成20000,我用的是springmvc和mybatis我把30000w数据放到一个数组pws[]了,想如果...
希望能有详细点的方案,扩大 内存,之前用过了,所以从10000变成20000,我用的是spring mvc和mybatis
我把30000w数据放到一个数组pws[]了,想如果分批,难道要在把这数组拆开成多个数组,这样在插入么,想让指正思路,看看这个分成几批的次数,和剩下数据什么的怎么处理 展开
我把30000w数据放到一个数组pws[]了,想如果分批,难道要在把这数组拆开成多个数组,这样在插入么,想让指正思路,看看这个分成几批的次数,和剩下数据什么的怎么处理 展开
5个回答
展开全部
你的事务控制问题。
大量数据插入的时候,可以将数据量分批,每次事务提交一批。
例如:
con.setAutoCommit(false);// 更改JDBC事务的默认提交方式
Statement stmt = conn.createStatement();
// 第一批 省略n条
stmt.addBatch("insert into dept values (52,'a','aa')");
stmt.addBatch("insert into dept values (53,'b','bb')");
stmt.addBatch("insert into dept values (54,'c','cc')");
stmt.executeBatch();
con.commit();//提交JDBC事务
stmt.close();
// 第二批 省略n条
stmt = conn.createStatement();
stmt.addBatch("insert into dept values (52,'a','aa')");
stmt.addBatch("insert into dept values (53,'b','bb')");
stmt.addBatch("insert into dept values (54,'c','cc')");
stmt.executeBatch();
con.commit();//提交JDBC事务
stmt.close();
// 第n批
。。。。。。
con.setAutoCommit(true);// 恢复JDBC事务的默认提交方式
conn.close();
大量数据插入的时候,可以将数据量分批,每次事务提交一批。
例如:
con.setAutoCommit(false);// 更改JDBC事务的默认提交方式
Statement stmt = conn.createStatement();
// 第一批 省略n条
stmt.addBatch("insert into dept values (52,'a','aa')");
stmt.addBatch("insert into dept values (53,'b','bb')");
stmt.addBatch("insert into dept values (54,'c','cc')");
stmt.executeBatch();
con.commit();//提交JDBC事务
stmt.close();
// 第二批 省略n条
stmt = conn.createStatement();
stmt.addBatch("insert into dept values (52,'a','aa')");
stmt.addBatch("insert into dept values (53,'b','bb')");
stmt.addBatch("insert into dept values (54,'c','cc')");
stmt.executeBatch();
con.commit();//提交JDBC事务
stmt.close();
// 第n批
。。。。。。
con.setAutoCommit(true);// 恢复JDBC事务的默认提交方式
conn.close();
追问
我用的是spring mvc+mybatis
追答
一样的道理嘛,事务控制好了就行了,我只是举个例子,这个思路是对的。
展开全部
如此之多的数据可能会引起内存的溢出,即使你加大内存也是治标不治本的方法,我建议你使用java的缓存机制逐步的存取数据,你可以将数据先存放在缓存中,然后逐量插入数据库中,缓存可以使用Memcache
追问
这个缓存在程序中哪里设置调用啊,还是说的是tomcat里的缓存啊
追答
程序里面调用的,就像使用map是一样的效果,存放的时候是存放的键值对,类似于新开辟了一个磁盘空间出来用的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不管是map,还是Memcache都会消耗内存
如果机器内存很大,你可以给虚拟机分配足够大的内存
如果你机器内存不大,就需要分批将数据读入到程序里,不要一次把3W的数据都读入到程序中
可以读1W插1W
如果机器内存很大,你可以给虚拟机分配足够大的内存
如果你机器内存不大,就需要分批将数据读入到程序里,不要一次把3W的数据都读入到程序中
可以读1W插1W
追问
我也想读1w插入1w,但是这个3w是变量,他可能偶尔一次就生成5000,我是拿大数据测试时发现的问题,这个分批有具体点的方法么...
追答
数据如果是访问外部接口拿到的
开放的接口取数据一般是会有分页条件的。
如果是访问其他数据源拿到的
也可以利用分页条件。
如果是读文件拿到的
文件的话可以用BufferedReader来分批读取。
如果是别人推给你的
找推给你的人,不要一次性推给你过多的数据。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
关注ing...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询