JAVA处理千万级数据(单线程)

记录使用JAVA程序处理千万级的数据表

要求:原表有4000w+数据,需要对其中message字段进行数据处理,并将处理的结果写入result字段中

优化:分表,sql的优化

过程:

最开始是啥都不懂,打算一次性将4000w条数据获取出来
select * from d1 limit 0,40000000;

但结果,java程序在获取500w不到的数据程序就报错提出内存泄漏,而且到数据越到后面越慢,更不要说一次性获取4000w条数据了

所以我去网上搜索如何处理千万级的数据,其中提到了进行分页
select * from d1 limit 0,10000;

一次读取1W条数据,循环个4000次不就可以了,好像IDE也没有提示内存泄漏的异常。

以为这样能解决问题,那么就太天真了。且不说内存会不会泄漏的问题,光这运行的速度就可以让你绝望了。前1000W的数据光读取大概1个多小时了(还没处理数据呢),4000W数据不是简单乘以4就可以了,mysql中的limit 分页方法有一个问题就是它处理数据量大,到后面查询的效率就会越低。

limit的工作原理是遍历到你的标记点,取后面1W数据,前面遍历的数据就抛弃了,那你想想假如这标记点在1000W,相当于花了遍历了1001W数据的时间,取出了这最后1W条数据。

我后来又将分页的sql进行优化,提高了查询的速度

select * from d1 where id>=(
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值