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

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

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

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

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

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

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

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

转载于:https://my.oschina.net/lvzjane/blog/185735

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值