java 怎么把5万条数据分批插入数据到mysql,之前插1,2万没事, 多了就内存溢出

希望能有详细点的方案,扩大内存,之前用过了,所以从10000变成20000,我用的是springmvc和mybatis我把30000w数据放到一个数组pws[]了,想如果... 希望能有详细点的方案,扩大 内存,之前用过了,所以从10000变成20000,我用的是spring mvc和mybatis

我把30000w数据放到一个数组pws[]了,想如果分批,难道要在把这数组拆开成多个数组,这样在插入么,想让指正思路,看看这个分成几批的次数,和剩下数据什么的怎么处理
展开
 我来答
lufei_200x
推荐于2017-09-03 · TA获得超过2733个赞
知道小有建树答主
回答量:280
采纳率:0%
帮助的人:307万
展开全部
你的事务控制问题。
大量数据插入的时候,可以将数据量分批,每次事务提交一批。
例如:
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
追答
一样的道理嘛,事务控制好了就行了,我只是举个例子,这个思路是对的。
erliang20088
推荐于2017-09-21 · TA获得超过2496个赞
知道小有建树答主
回答量:926
采纳率:100%
帮助的人:948万
展开全部
1、加大Java可使的内存量、单次提交的条数再扩大些、扩大java连接数据库最大连接数都可以从量上来解决这个问题,但是想质的解决这样做是不好的。
2、用存储过程,来解决大量数据的CRUD是最明智的选择。写个存储过程,把数据一千条或几条的传给存储过程,由存储过程去解析,然后CRUD就能从本质上解决这个问题了。
这也是为何电信运营商的数据库应中,都是大量的存储过程即pl/sql的原因了。
再思考下吧。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
0613032107
2013-07-16 · TA获得超过347个赞
知道小有建树答主
回答量:216
采纳率:0%
帮助的人:208万
展开全部
如此之多的数据可能会引起内存的溢出,即使你加大内存也是治标不治本的方法,我建议你使用java的缓存机制逐步的存取数据,你可以将数据先存放在缓存中,然后逐量插入数据库中,缓存可以使用Memcache
追问
这个缓存在程序中哪里设置调用啊,还是说的是tomcat里的缓存啊
追答
程序里面调用的,就像使用map是一样的效果,存放的时候是存放的键值对,类似于新开辟了一个磁盘空间出来用的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
莫多言白
2013-07-16
知道答主
回答量:1
采纳率:0%
帮助的人:1468
展开全部
不管是map,还是Memcache都会消耗内存
如果机器内存很大,你可以给虚拟机分配足够大的内存
如果你机器内存不大,就需要分批将数据读入到程序里,不要一次把3W的数据都读入到程序中
可以读1W插1W
追问
我也想读1w插入1w,但是这个3w是变量,他可能偶尔一次就生成5000,我是拿大数据测试时发现的问题,这个分批有具体点的方法么...
追答
数据如果是访问外部接口拿到的
开放的接口取数据一般是会有分页条件的。
如果是访问其他数据源拿到的
也可以利用分页条件。
如果是读文件拿到的
文件的话可以用BufferedReader来分批读取。
如果是别人推给你的
找推给你的人,不要一次性推给你过多的数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kimirse1234
2013-07-16 · 超过26用户采纳过TA的回答
知道答主
回答量:128
采纳率:0%
帮助的人:66.5万
展开全部
关注ing...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式