Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 预防“两个”的最佳方法;机器人”;从处理同一数据库行开始?_Mysql_Database_Automation - Fatal编程技术网

Mysql 预防“两个”的最佳方法;机器人”;从处理同一数据库行开始?

Mysql 预防“两个”的最佳方法;机器人”;从处理同一数据库行开始?,mysql,database,automation,Mysql,Database,Automation,我有几个服务器。每个服务器都有一个bot程序。机器人程序都连接到同一个mysql数据库。他们所做的是,连接到数据库,查询数据库并获取一个包含用户名的.csv文件;密码行,登录特定网站上的帐户,执行一些自动操作,在数据库中将完成的帐户设置为Done 我很难决定最好的方法来确保所有机器人都能够从同一个DB轮询中提取数据,而不会产生冲突,也不会留下任何帐户 我的想法是: 预先定义每个机器人将工作的行范围 例如: Bot1 = row 0 to row 999 Bot2 = row 1000 to

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

我很难决定最好的方法来确保所有机器人都能够从同一个DB轮询中提取数据,而不会产生冲突,也不会留下任何帐户

我的想法是:

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

Bot1 = row 0 to row 999
Bot2 = row 1000 to row 1999
Bot3 = row 2000 to row 2999 ...
这可能是一个问题,因为如果我需要扩展,我将不得不预先定义每个机器人

  • 创建一个名为
    bot
    =>的列,让每个bot选择500行,向 列
    bot
    对所有500行=>仅对行
    起作用,其中bot='预定义值'
这将起作用,但可能仍存在一些冲突。除此之外,我的机器人需要处理CSV文件,所以它们不能在数据库上实时工作

我关心的是可伸缩性。我希望能够添加尽可能多的服务器,并让它们彼此友好地工作

建议


我读过关于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