程序简写为
while()
{
A:计算;
B:向数据库插入数据(PS.一般累加到1W条数据库的时候一起插入)
}
总共记录有700W+,耗时10个小时,如果去掉B,只进行计算,大概需要2分多钟;
之所以用数据库是因为这些结果数据需要被查询,但是瓶颈显然是在数据库插入操作,10个小时还是太慢了。
如果我想改进,有没有什么办法呢??
如果我将计算的数据写在文件里,同时开启100个线程进行写文件操作,是不是能快点呢?但是如果写在文件里面的话查询就费事了,可以用Lucene做查询吧?
——————————————————————————————————————————————————————————————————————————————
听下面几位讨论过后,感觉改进的地方在数据库优化这一块,700W+条数据大概也就3G吧,普通的复制操作的话几分钟就好了,但是insert into 插入操作怎么优化呢。。sqlserver2008数据库
答案:
我是这样理解你的问题:
1. 为什么要写入数据库,因为计算结果需要给人查询,所以不能放在文件里
2. 慢在哪里,计算只要2分钟,慢在数据库写入上
3. 计算只要2分钟,说明你的计算,不依赖上一步计算并写入数据库的数据。也就是说你的计算程序不需要查询你刚刚写入的数据
【写入文件】、【使用lucene专门做查询】的解决方案都太重量级了,700万也不是太大的数据,我上面的两条措施只是运维层面的改动,不需要修改你的程序,就可以把时间缩短到0.5-2小时。还有,才2分钟的计算量,也不用考虑分布式和并行计算。