java 从数据库中读取大数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 从数据库中读取大数据相关的知识,希望对你有一定的参考价值。
java 从数据库中读取大数据,数据行数有上百万行,一次导出的时候就有20几M,当多次单击查询并导出是,服务器就死了(tomcat 7 已经修改了内存为1000M)。
这样每次去读取上百万条数据,不崩掉才怪,我的想法是,你分批去查,然后分批导出,
类似于分页,每1000 或者更多为一批
按批次去执行,然后做一个进度条,按有多少批次为进度数进行导出
这样应该会好很多
还可以做个缓存机制,按批次进行存储,下次拿数据就直接从缓存中获取 参考技术A 要调整-XX:maxPermSize的大小,单纯调整JVM大小不行的 参考技术B 如楼上所说,最基本的是要做分页查询。
2.如果采用缓存机制,要看你对数据的要求是怎样的?如果你要求realtime data,那么缓存机制就要有很大限制,否则不能达到realtime的查询作用。
但有时候也会碰到需要一次性查询所有数据的情况,那么
3.除了加大web server本身的内存大小,亦可以采用集群的方式降低通用户的同时操作带来的压力。
4.采用读写分离,将数据分离开。 参考技术C 我很赞同xuyuxuan789456的回答,数据批次导出确实是很好的解决方案。
java怎么实现每天定时读取文件,然后在写到数据库中呢
求大神支招啊 最好有代码啊
不是java定时读取,而是系统调度比如你写了一个java程序,这个程序是读取文件,写到数据库中。那么这个程序怎么才能定时启动。是操作系统调度的问题了。不是java的问题。所以要用操作系统的调度。
如果在win服务器下,可以下一个cmd文件。文件中调用java程序,然后将cmd设置成每天几点执行
如果是linxu或者unix下,则使用crontab调度。
当然,如果你非要用java程序来调度。那么这个程序肯定要常驻内存,并且进行睡眠。这种方式没有意义。 参考技术A 你可以用java自带的定时器Timer,调用timer中的schedule方法可以定时调用继承TimerTask类的线程,然后把你要执行的操作,读取任务,然后写到数据库放到TimerTask类的子类中。也可以用quatz来实现。追问
每天读取文件我实现了,写到数据库中不知道在run()方法怎么写
追答写到数据库中,就是插入操作啊,你把插入数据库的操作代码,独立出来,在run方法中,定时调用,应该就可以了
参考技术B 每天定时读取文件这件事我觉得要用系统的计划任务来做,linux下就是cron。写到数据库中倒是可以用java做,但是你读取的是什么数据,要写到什么数据库中等等都是要考虑的问题啊。问题明确了才能有具体的解决办法。追问文件是数据库每天生成的文件,写到oracle中去
追答数据库备份文件?
参考技术C quartz这个就行了追问我不会用Spring的这个啊
追答学习啊,稍微看一下就好了啊,这个不是很难的
以上是关于java 从数据库中读取大数据的主要内容,如果未能解决你的问题,请参考以下文章