1,是对同一个表操作.
2,是的.不停的读出符合条件的数据,收到成功返回代码后更新该记录的相关字段;
3,否.我读数据库的时候,数据库在不停的插入记录.DADABASE:Sybase. set rowcount 100;取前100条记录.每一条记录的操作都是一个线程.
是因为线程数太多了麽?thank you!

解决方案 »

  1.   

    to: lixiang823517(泥浆) 
        连接不能关.关了连接的话,下一个记录还得再创建连接.
      

  2.   

    这个问题,可能跟数据库的关系比较大。。
    你这么大数据量,而且速度要求高的系统。
    不知道你更新数据库使用的时候batch,或者preparedStatement。。从程序方面来说,这个可能有关系。不过可能数据库是瓶进的可能性更大
      

  3.   

    4、我对DADABASE:Sybase. set rowcount 100;不熟悉。但我想:这能保证是取到最新100个数据?而且每次是取下100条嘛?能保证准确处理过每一条数据嘛?况且你还再不停地插入数据?
    5、“本地数据库中一次性取出N条数据”是做删除操作,还是只是选出来?
    6、答案:(假设能正确处理第4点)
       (1)、数据量的不断增加和数据库的行操作都会影响效率。
       (2)、可能还涉及了数据库的锁操作:一边在更新,一边在查询,况且你可能还在做删除,都涉及了数据库的锁。数据库的访问本身就是耗费时间的。
        (3)、每个记录一个线程?那如果1000条就有1000个?即使你100条,也会有100个啊!线程的调度一向是很花费cpu和资源的。
      

  4.   

    同意lixiang823517(泥浆),一个线程完成后要及时释放数据库连接
      

  5.   

    to : qqbz(qqbz) ( ) 
     4,  set rowcount 100就是取出select出来的前100条呀.如果数据库中的记录只有98条的话,那 么  就取98.
         该条记录有个flag字段.处理过后就改变该flag的值.查询也是根据flag.
    5,一次性取出100条记录.不作删除.
    6.(1),我现在还没有做本地数据库的一边插入一边查询呢.现在还只做的查询.
      
      (3),每隔N毫秒(假如上一个100条记录处理完了的话),产生一个线程类,一个线程类100个线程.(只有在上一个线程类将100条记录都处理完了后才会去 new下一个线程类)
    to  lixiang823517(泥浆) :
       是的.数据库一直开着.我认为该如此.
      

  6.   

    to  qqbz(qqbz)    数据库没有索引.
      

  7.   

    不太理解你的速度问题
    第一次8000ms
    第二次9000ms
    第三次10000ms
    第四次11000ms
    你测试过了多少次,每次都增加么?更新操作也用多线程,不科学,100多个线程阿?而且到了数据库因为你是更新一个表,一样的要排队,数据库在更新一个表的时候将会锁定这个表直到更新完毕,然后下一个更新才能上
    更新的操作完全可以单线程做,批量提交sql.让数据库自己处理另外,你可以让你的更新表的线程打印每个线程更新表所费的时间,你计算看看,增加的部分是不是浪费在这里了