在MySQL中以块的形式插入/更新数据

时间:2016-06-14 06:57:33

标签: php mysql database transactions

我有一个查询,它从表中查找总和和计数,我需要在另一个表中更新这些详细信息。如果我在没有任何条件限制一次提取的行数的情况下使用查询,则它会失败(超时),因此我计划一次获取10000条记录并将其插入数据库。现在我对此有一些困惑。

  1. 如果我使用数据库事务并包含从获取数据到db中插入/更新数据的所有操作,那么这是一个好主意吗?我想知道这是否会锁定我正在获取的表,直到事务完成。如果是这样,我不能使用它,因为有其他API查询实时处理这些数据。

  2. 此操作的更好方法是通过循环?我的意思是在DB中获取1000条记录并更新1000条记录,或者我需要在Redis文件存储之间再使用一层,这将存储整个数据,并且将立即执行更新操作。

  3. 我在应用程序级别的操作流程如下:

    while ($i <= $maxCounr) {
        $limit          = 1000;
        $results            = fetchResults($i, $limit);
        $formattedResilts   = formatResults($results);
    
        updateRecords($formattedResults);
    
        $i = $i + 1000;
    }
    

    做这样的事情有什么缺点吗?我注意到的一件事是它需要多次命中数据库。如果我要处理100000个条目,则需要命中数据库100000/1000 = 100次。有没有其他方法可以做到这一点?我在一个每天运行的后台工作者中使用它。

0 个答案:

没有答案