现在要处理一个大概1000w条的表项,处理思路:
1.从表中以固定记录条数(如1000)读取数据作为一个处理单位,然后对这个单位进行处理。
2.java多线程。每个线程处理一个单位,并将该单位处理结果写入数据库。写入数据量大概为该处理单位数据量的10倍。
3.整个处理完后会产生1亿条数据出现的问题:运行过程中,内存使用量不断的上升,当处理的总数据量达到20000条的时候,总会出现内存溢出。自己的分析:线程运行完毕后,是不是该线程从mysql中读取的数据所占空间没有随着线程的结束而释放,从而使得主程序所占内存量不断的上升以至溢出。或者是其它的什么原因?请问大家这个问题可以怎么解决呀,求解决思路
1.从表中以固定记录条数(如1000)读取数据作为一个处理单位,然后对这个单位进行处理。
2.java多线程。每个线程处理一个单位,并将该单位处理结果写入数据库。写入数据量大概为该处理单位数据量的10倍。
3.整个处理完后会产生1亿条数据出现的问题:运行过程中,内存使用量不断的上升,当处理的总数据量达到20000条的时候,总会出现内存溢出。自己的分析:线程运行完毕后,是不是该线程从mysql中读取的数据所占空间没有随着线程的结束而释放,从而使得主程序所占内存量不断的上升以至溢出。或者是其它的什么原因?请问大家这个问题可以怎么解决呀,求解决思路
最好可配置,一般线程数不超过10个为佳;
现在的CPU是大部分是单核,多线程确实能提高并发,但提高性能不高;问题可能出现在:
线程读取数据和写入数据库的连接存在等待,越来越多的等待造成数据没有释放;