Mysql 预防“两个”的最佳方法;机器人”;从处理同一数据库行开始?
我有几个服务器。每个服务器都有一个bot程序。机器人程序都连接到同一个mysql数据库。他们所做的是,连接到数据库,查询数据库并获取一个包含Mysql 预防“两个”的最佳方法;机器人”;从处理同一数据库行开始?,mysql,database,automation,Mysql,Database,Automation,我有几个服务器。每个服务器都有一个bot程序。机器人程序都连接到同一个mysql数据库。他们所做的是,连接到数据库,查询数据库并获取一个包含用户名的.csv文件;密码行,登录特定网站上的帐户,执行一些自动操作,在数据库中将完成的帐户设置为Done 我很难决定最好的方法来确保所有机器人都能够从同一个DB轮询中提取数据,而不会产生冲突,也不会留下任何帐户 我的想法是: 预先定义每个机器人将工作的行范围 例如: Bot1 = row 0 to row 999 Bot2 = row 1000 to
用户名的.csv文件;密码
行,登录特定网站上的帐户,执行一些自动操作,在数据库中将完成的帐户设置为Done
我很难决定最好的方法来确保所有机器人都能够从同一个DB轮询中提取数据,而不会产生冲突,也不会留下任何帐户
我的想法是:
- 预先定义每个机器人将工作的行范围
Bot1 = row 0 to row 999
Bot2 = row 1000 to row 1999
Bot3 = row 2000 to row 2999 ...
这可能是一个问题,因为如果我需要扩展,我将不得不预先定义每个机器人
- 创建一个名为
=>的列,让每个bot选择500行,向 列bot
对所有500行=>仅对行bot
起作用,其中bot='预定义值'
我读过关于mysql lock()函数的文章,但我认为它在这种情况下不起作用,因为我的机器人程序获取帐户(.csv文件)的方式 谢谢你的回答 我所做的是:
我制作了一个PHP API,它获取一个状态为0的随机行,并以XML格式打印其信息。然后,我在bot中使用GET请求,使用这个PHP脚本获取一个随机行,并将其放在一个变量上。稍后,我使用正则表达式从前面的变量中刮取每一列,并将它们放在各自的变量中。当我的机器人在该帐户上完成运行后,它会使用我的PHP API在刚抓取的行上设置status=1,这样其他机器人就不会再接触这一行了。通过这种方式,我可以让多台服务器在运行时没有冲突问题,.CSVs没有问题,唯一的问题是,现在我的mysql服务器上有了更多负载,但这并不难解决。使用机器人的模来确定要抓取哪些行:row_id%bot_id。虽然您没有硬编码机器人范围,您正在硬编码机器人的数量。您还可以更新事务内部的批处理,一次只有一个可以获得“下一个1000”。因此,这就像我上面提到的第二个选项?从索引的角度来看,这不是很好,但我的想法是这样的(如果您有10个机器人):从passwordTable中选择*,其中alreadyProcessed=0,id%10=0