【发布时间】:2014-04-18 08:42:02
【问题描述】:
我有几台服务器。每个服务器都有一个机器人程序。机器人都连接到同一个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 行,将预定义的值添加到 列bot在所有 500 行上 => 仅在行上工作WHERE bot = 'pre-defined value'
这可行,但仍可能存在一些冲突。除此之外,我的机器人需要处理 CSV 文件,因此它们实际上不能在数据库上运行。
我关心的是可扩展性。我希望能够根据需要添加任意数量的服务器,并让它们都能很好地相互配合。
建议?
我正在阅读有关 mysql lock() 函数的信息,但由于我的机器人获取帐户(.csv 文件)的方式,我认为它在这种情况下不会起作用。
【问题讨论】:
-
对机器人使用模数来确定要抓取的行:row_id % bot_id。虽然您不是对机器人范围进行硬编码,但您是在对机器人数量进行硬编码。您还可以更新交易中的批次,一次只有一个人可以获得“下一个 1000”。
-
所以它会像我上面所说的第二个选项?
-
从索引的角度来看不是很好,但我在想这样的事情(如果你有 10 个机器人): SELECT * from passwordTable where alreadyProcessed = 0 and id % 10 = 0
标签: mysql database automation