我们的生产环境中有一个每日运行的autosys作业。它调用一个shell脚本,该脚本又调用一个Java Servlet。这个Servlet读取这些文件并将数据插入到两个不同的表中,然后进行一些处理。Java版本是1.6,应用服务器是WAS7,数据库是oracel-11g。
我们遇到了许多问题,比如需要时间,会出现内存溢出等等。以下是我们编码此过程的方式的细节。请告诉我是否可以改进。
当我们使用BufferedReader读取文件时,readLine()方法返回的确实会在内存中创建大量字符串吗?这些文件包含4-5万行。所有记录都由换行符分隔。在Java中读取文件以实现效率是否有更好的方法?考虑到文件中的所有记录行长度都不相同,我找不到更好的方法。
当我们插入数据时,我们使用statement/prepared statement进行批处理。我们将所有文件记录放入一个批处理中。把批处理大小拆成若干个块是否真的对性能有所影响呢?
如果表没有定义索引或其他约束条件,并且所有列都是VARCHAR类型,则哪种操作速度更快:基于某些匹配条件插入新行还是更新现有行?