我有一个解决办法,感觉不是太好。
每个线程都查询出10条status为0的记录,
遍历每一条,select * from task where id=xxx for update
如果查询出来status是0,则update为1,返回。请问还有没有比较好的办法。

解决方案 »

  1.   


    第一步和第二步为什么不直接并成一步呢,直接一次加update查询10条,然后将这10条更新成1不就可以了。
    这个方法完全是可以的,而且也没有什么不好,也很简单。是通过数据库的事务来控制的。
    还有一种方法,用一台专用服务器来进行任务的分发,其他服务器进行任务的执行。
      

  2.   

    你的意思是,要让每个服务器都去获取没有被执行过的<或者是说最近没有被执行过的>任务。
    我在想可不可以用一个队列,将所有未执行的任务都放到队列里面,然后每个服务器的每个线程都从队列里面去拿任务,也就是出队列。如果有新的状态为0的任务出现,则入队列。
    本人实力不够,暂时只想到了这个拙劣的想法。
      

  3.   


    第一步和第二步为什么不直接并成一步呢,直接一次加update查询10条,然后将这10条更新成1不就可以了。
    这个方法完全是可以的,而且也没有什么不好,也很简单。是通过数据库的事务来控制的。
    还有一种方法,用一台专用服务器来进行任务的分发,其他服务器进行任务的执行。增加记录锁的时候,最好是用主键,不然容易锁表。
    弄专门服务器来分发有点麻烦,我需要一个简单的办法。