mysql - 防止两个 "bots"在同一数据库行上工作的最佳方法?

标签 mysql database automation

我有几台服务器。每个服务器都有一个机器人程序。机器人都连接到同一个 mysql 数据库。他们所做的是,连接到数据库,查询数据库并获取一个包含 username;password 行的 .csv 文件,在特定网站上登录帐户,做一些自动化的事情,设置完成的帐户作为数据库上的 Done

我很难决定最好的方法来确保所有机器人都能够从同一个数据库投票中提取数据,而不会发生冲突并且不会留下任何帐户。

我的想法是:

  • 预先定义每个机器人将工作的行范围。

例如:

Bot1 = row 0 to row 999
Bot2 = row 1000 to row 1999
Bot3 = row 2000 to row 2999 ...

这可能是个问题,因为如果我需要扩展,我将不得不预先定义每个机器人。

  • 创建一个名为 bot 的列 => 让每个机器人选择 500 行,将预定义的值添加到 所有 500 行上的 bot 列 => 仅对 WHERE bot = 'pre-defined value'
  • 行起作用

这可行,但仍可能会发生一些碰撞。除此之外,我的机器人需要处理 CSV 文件,因此它们实际上无法在数据库上即时工作。

我关心的是可扩展性。我希望能够根据需要添加任意数量的服务器,并让它们能够很好地相互协作。

建议?

我正在阅读有关 mysql lock() 函数的信息,但由于我的机器人获取帐户(.csv 文件)的方式,我认为它在这种情况下不起作用。

最佳答案

感谢您的回答。

我所做的是:

我制作了一个 PHP API,它获取状态 = 0 的随机行并以 XML 格式打印其信息。然后,我在我的机器人中使用 GET 请求,使用此 PHP 脚本获取随机行并将其放在一个变量上。后来,我使用正则表达式从前面的变量中抓取每一列并将它们放在各自的变量上。在我的机器人在该帐户上完成运行后,它使用我的 PHP API 在刚刚抓取的行上设置状态 = 1,因此其他机器人不会再次触及该行。通过这种方式,我可以让多台服务器同时运行而不会出现冲突问题,.CSV 也不会出现问题,唯一的问题是现在我的 mysql 服务器上的负载增加了,但这并不难解决。

关于mysql - 防止两个 "bots"在同一数据库行上工作的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22381591/

相关文章:

delphi - 带模板的Word 201 0 auto 化

kubernetes - 如何使用 K8S node_problem_detector?

mysql - 如何使用mysql获取group by中的第一个,最大,最小,最后一条记录

mysql - 找出两个用户之间的连接,排除一个用户不存在的列

php - 准备语句失败但没有返回错误

mysql - 并行上传数据到mysql数据库

database - Laravel 更新方法未按预期工作

csv - JMeter |如何在通过 CSV 数据集配置进行参数化时引入双引号

java - 无法将 mysql 驱动程序与 Wildfly 9.0.2 一起使用,但它似乎已正确加载

mysql - Rails - Controller 中连接表的语句 IF