亏了80万跑路了,求安慰 |
今天遇到一个问题,从数据库(oracle)查询出大量数据(百万行,上百列),并将该数据进行处理(特定格式)写入到文件。发现内存溢出。靠单纯的jdbc 好像根本处理不了这么多数据(好像还会超时,jdbc好像在处理结果集默认是60秒)。求助社区大牛有没有什么解决方案?小弟在此先谢谢了。
有想过用线程池(但是最后数据写入的文件是同一个文件如果用多线程是不是汇出问题。)
小弟我还是菜鸟 说得不对的请多包涵
关系型数据库的数据处理用sql都能搞定啊,为什么要读出来处理。
内存溢出的话可以改容器(tomcat?)的最大内存参数和jdbc的最大连接时间。
也可以处理完数据后,用python或者shell批处理写回去。
办法总是有的嘛。。
@lou_Mr 可以不要一次读全部数据到内存,可以分批读取。另外,也可以导出为 cvs 或者其他格式,当做文件来处理,会快一些,推荐用 shell 或者 python,当然 Java 来处理也行的。
@tracymcladdy 导出个文件,为毛要用上 tomcat 了。。。
@ZhuLiangliang 他用的jdbc多半是跑在容器里哇
@tracymcladdy 妥妥的不一定,jdbc 和容器没啥关系吧
@tracymcladdy 你把设备所有的内存分配过去也不够
@ZhuLiangliang 当然jvm上就能跑,不过你让楼主说话,多半肯定是用ide编译跑在容器上
@topology 我服务器都是64g起的。。算算可以打开多大的文件
@ZhuLiangliang 想过用分批读取 用rownum 就可以实现 但是还有一些业务上的特定需求
例如: 字段type 为1的写入文件时 要进行求和处理 用分批实现的话 业务上好像有瓶颈
不知道还有没有其它思路
@tracymcladdy 用不用容器都可以 用完全的jdbc 也是可以的 另外 您说的 jdbc 跑在容器里 是个啥意思?
用的是完全的jdbc
@tracymcladdy 我做的数据量每天是T级别的
过早客微信公众号:guozaoke • 过早客新浪微博:@过早客 • 广告投放合作微信:fullygroup50 鄂ICP备2021016276号-2 • 鄂公网安备42018502001446号