我有一个解决办法,感觉不是太好。
每个线程都查询出10条status为0的记录,
遍历每一条,select * from task where id=xxx for update
如果查询出来status是0,则update为1,返回。请问还有没有比较好的办法。
每个线程都查询出10条status为0的记录,
遍历每一条,select * from task where id=xxx for update
如果查询出来status是0,则update为1,返回。请问还有没有比较好的办法。
第一步和第二步为什么不直接并成一步呢,直接一次加update查询10条,然后将这10条更新成1不就可以了。
这个方法完全是可以的,而且也没有什么不好,也很简单。是通过数据库的事务来控制的。
还有一种方法,用一台专用服务器来进行任务的分发,其他服务器进行任务的执行。
我在想可不可以用一个队列,将所有未执行的任务都放到队列里面,然后每个服务器的每个线程都从队列里面去拿任务,也就是出队列。如果有新的状态为0的任务出现,则入队列。
本人实力不够,暂时只想到了这个拙劣的想法。
第一步和第二步为什么不直接并成一步呢,直接一次加update查询10条,然后将这10条更新成1不就可以了。
这个方法完全是可以的,而且也没有什么不好,也很简单。是通过数据库的事务来控制的。
还有一种方法,用一台专用服务器来进行任务的分发,其他服务器进行任务的执行。增加记录锁的时候,最好是用主键,不然容易锁表。
弄专门服务器来分发有点麻烦,我需要一个简单的办法。