防止在MySQL中选择同一行

柯蒂斯

我被赋予创建完全依赖于数据库内部代理的“ Mass Crawler”的任务。这是我要实现的目标的简单概述:

  • 1 x CronJob引导文件-该文件将50个并行curl请求发送各个搜寻文件
  • 1 x个单独的Crawler文件-应该从数据库中获取未选择其他进程UNIQUE行(代理)。

我已经研究过TRANSACTIONSmySQL,但是我仍然相信这样做无济于事,因为查询将在每个爬网程序的确切相同时间执行。

我对单个搜寻器文件的想法是这样的:

$db = new MysqliDb("localhost", "username", "password", "database");

$db->connect();
$db->startTransaction();
$db->where("last_used", array("<" => "DATE_SUB(NOW(),INTERVAL 30 SECOND)"));
$proxies = $db->get("proxies", 1);
if(count($proxies) == 1) {

    //complete any scraping that needs to be done

    //update the database to say the proxy has just been used
    $db->where("id", $accounts[0]['id']);
    $db->update("proxies", array("last_used", date("Y-m-d H:i:s")));

    //commit the complete transaction
    $db->commit();
}
$db->disconnect();

上面的示例是否是使用mySQLTRANSACTION功能并确保所有并行查询选择不同行的正确方法

巴尔玛

您需要在表中的一列指示该搜寻器进程之一正在使用该行。您的第一个SELECT应该寻找WHERE in_use = 0; 但是,它需要使用FOR UPDATE子句来锁定处理的行。

SELECT *
FROM proxies
WHERE in_use = 0
LIMIT 1
FOR UPDATE;

我不知道如何使用您正在使用的数据库API编写该查询;您可能需要使用其功能来执行原始查询。

然后将该行更新为SET in_use = 1通过在事务中执行两项操作,可以确保没有其他进程将获得该行。

处理完行后,就可以了SET in_use = 0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL在同一行中选择数据

来自分类Dev

MySQL 在同一行中选择不同的值

来自分类Dev

在两个datagridviews中选择同一行

来自分类Dev

从相似行MYSQL中选择一行

来自分类Dev

MySQL:在每个聚合组中选择最后一行

来自分类Dev

MySQL从一行中选择数据

来自分类Dev

MySQL:在一行中选择多个记录

来自分类Dev

MySQL在一行中选择多个ID值

来自分类Dev

MySQL:在每个聚合组中选择最后一行

来自分类Dev

在同一行中选中选择框时如何自动在复选框中选择

来自分类Dev

在一行SQL中选择行对

来自分类Dev

[SQL]从一行中选择同一日期

来自分类Dev

如何防止在JavaFX中的TableView中选择另一行

来自分类Dev

如何防止在JavaFX中的TableView中选择另一行

来自分类Dev

对齐输入并在同一行中选择(Bootstrap Mobile)

来自分类Dev

如何从jQuery的同一行中选择不同的单元格?

来自分类Dev

在表oracle上使用case从同一行中选择值

来自分类Dev

在bootstrap3的同一行中选择表格及其标签

来自分类Dev

对齐标签并在sweetalert 2的同一行中选择下拉菜单

来自分类Dev

当多个用户在Gridview中选择同一行时,出现Java脚本弹出框

来自分类Dev

SQL 查询从键表中选择多个条目到同一行的不同列中

来自分类Dev

在html表格中选择一行

来自分类Dev

在UIPickerView中选择一行-Swift

来自分类Dev

在listView中选择一行

来自分类Dev

在 dgv 中选择一行

来自分类Dev

MySQL在同一表中选择

来自分类Dev

Mysql Query从相同的值中选择一行(仅选择重复项)

来自分类Dev

在同一行标记并选择

来自分类Dev

根据同一行中的另一个值从行中选择某个值