关于javadbf的大数据量下的问题

1,最近做个分发的项目,由于数据量千万级优化了好久。性能还是不能让人满意。无论是sql上还是java代码上都进行了很大的修改,连实现策略都改了好几版,但是。。。

最后各个地方都通过最原始的打时间戳看哪一部分最耗时,最后终于确定了最耗时的地方,把数据写入DBF文件中是最耗时的,后来用反编译工具打开了javadbf源码,查看了javadbf中的addRecord()方法,终于发现了问题。激动万分。

原来javadbf源码中addRecord()中写文件用的DataOutputStream,读到每一行的每一列都把该列写入文件,假如一个表中字段有100个字段,那么也就意味着一条数据要和磁盘交互100次。。。后来给改成了ByteArrayOutputStream,先把列写入缓冲数组中,最后一行一行写入文件。

改完后,重新编译,以前分发一个大单位一个半小时,现在用十分钟。。。

后来进一步修改javadbf源码,在里面使用多线程,创建阻塞队列,将addRecord()后的数据都写入队列中,然后开启一条线程去队列中取数据,写入DBF文件。

改完后,再次重新编译,这次只用了大概六分钟。。。

还有一点就是如果数据量非常大,适当的把ResultSet的fetchSize设置大点(默认是10),提高性能也非常明显。

你可能感兴趣的:(javadbf大数据出现的问题)