使用MySQL MyISAM在服务器之间分配负载

时间:2014-05-16 19:08:48

标签: mysql myisam

我有一些需要处理的数据,并希望在服务器之间分配工作量。

我有:

  1. 选择操作的操作队列表。

  2. 用户表。

  3. 将用户连接到队列的用户排队。

  4. 记录给定用户的操作完成时间。

  5. 现在我有一个服务,它运行一个查询来获取排队的数据,并为每个数据打开一个线程。

    一旦一个人结束,下一个人进入后,该线程就会一次通过用户10,依此类推,直到完成为止。

    我想在游戏中添加另一台服务器,这将占用一些负载,所以一切都完成得更快,因为现在它需要半天而且太多了。

    如何让两台服务器协同工作而不存在重复风险?

    到目前为止,我想到了以下内容:

    1. 将服务修改为锁定以进行读取,选择所需的用户数(之后为10)。

    2. 插入日志,以便其他人无法选择这些用户。

    3. 解锁并让线程处理数据并在完成后更新日志。

    4. 这会有用吗?

      还有另一种更好的做法吗?

1 个答案:

答案 0 :(得分:0)

多个会话可以保留特定表格的READ锁定,因此在这种情况下无法帮助您。

在两台服务器中,检查工作时。使用WRITE锁定相应的表格,如下所示:

LOCK TABLE queue_table WRITE

使用LOCK TABLES ...锁定多个表格。始终确保以相同的顺序锁定表格。

只要两个服务器在开始抓取工作之前都这样做,它就会序列化操作。当一个服务器具有锁定时,另一个服务器将等待。

然后,做任何你需要做的事情来将队列标记为正在处理,以便其他服务器不会抓取它们,然后释放锁。

使用MyISAM,它不像InnoDB的选项那样精细或可扩展。