1,是对同一个表操作.
2,是的.不停的读出符合条件的数据,收到成功返回代码后更新该记录的相关字段;
3,否.我读数据库的时候,数据库在不停的插入记录.DADABASE:Sybase. set rowcount 100;取前100条记录.每一条记录的操作都是一个线程.
是因为线程数太多了麽?thank you!
2,是的.不停的读出符合条件的数据,收到成功返回代码后更新该记录的相关字段;
3,否.我读数据库的时候,数据库在不停的插入记录.DADABASE:Sybase. set rowcount 100;取前100条记录.每一条记录的操作都是一个线程.
是因为线程数太多了麽?thank you!
连接不能关.关了连接的话,下一个记录还得再创建连接.
你这么大数据量,而且速度要求高的系统。
不知道你更新数据库使用的时候batch,或者preparedStatement。。从程序方面来说,这个可能有关系。不过可能数据库是瓶进的可能性更大
5、“本地数据库中一次性取出N条数据”是做删除操作,还是只是选出来?
6、答案:(假设能正确处理第4点)
(1)、数据量的不断增加和数据库的行操作都会影响效率。
(2)、可能还涉及了数据库的锁操作:一边在更新,一边在查询,况且你可能还在做删除,都涉及了数据库的锁。数据库的访问本身就是耗费时间的。
(3)、每个记录一个线程?那如果1000条就有1000个?即使你100条,也会有100个啊!线程的调度一向是很花费cpu和资源的。
4, set rowcount 100就是取出select出来的前100条呀.如果数据库中的记录只有98条的话,那 么 就取98.
该条记录有个flag字段.处理过后就改变该flag的值.查询也是根据flag.
5,一次性取出100条记录.不作删除.
6.(1),我现在还没有做本地数据库的一边插入一边查询呢.现在还只做的查询.
(3),每隔N毫秒(假如上一个100条记录处理完了的话),产生一个线程类,一个线程类100个线程.(只有在上一个线程类将100条记录都处理完了后才会去 new下一个线程类)
to lixiang823517(泥浆) :
是的.数据库一直开着.我认为该如此.
第一次8000ms
第二次9000ms
第三次10000ms
第四次11000ms
你测试过了多少次,每次都增加么?更新操作也用多线程,不科学,100多个线程阿?而且到了数据库因为你是更新一个表,一样的要排队,数据库在更新一个表的时候将会锁定这个表直到更新完毕,然后下一个更新才能上
更新的操作完全可以单线程做,批量提交sql.让数据库自己处理另外,你可以让你的更新表的线程打印每个线程更新表所费的时间,你计算看看,增加的部分是不是浪费在这里了