我有一个查询,它从表中查找总和和计数,我需要在另一个表中更新这些详细信息。如果我在没有任何条件限制一次提取的行数的情况下使用查询,则它会失败(超时),因此我计划一次获取10000条记录并将其插入数据库。现在我对此有一些困惑。
如果我使用数据库事务并包含从获取数据到db中插入/更新数据的所有操作,那么这是一个好主意吗?我想知道这是否会锁定我正在获取的表,直到事务完成。如果是这样,我不能使用它,因为有其他API查询实时处理这些数据。
此操作的更好方法是通过循环?我的意思是在DB中获取1000条记录并更新1000条记录,或者我需要在Redis文件存储之间再使用一层,这将存储整个数据,并且将立即执行更新操作。
我在应用程序级别的操作流程如下:
while ($i <= $maxCounr) {
$limit = 1000;
$results = fetchResults($i, $limit);
$formattedResilts = formatResults($results);
updateRecords($formattedResults);
$i = $i + 1000;
}
做这样的事情有什么缺点吗?我注意到的一件事是它需要多次命中数据库。如果我要处理100000个条目,则需要命中数据库100000/1000 = 100
次。有没有其他方法可以做到这一点?我在一个每天运行的后台工作者中使用它。