你在这里

基于Drush的批处理的延伸思考

0
Vote up!

批处理有很多种实施方案,到了Drupal,借助Drush,我们就有了更DrupalWay的方法,本文探讨的是如何让批处理的效率大幅提升。

本文是在本站之前两篇文章基础上的续篇,背景知识请移步:

如果能一个Drush命令处理多个ID,批处理效率将成倍增加
SQL:
-- 这时,首先要让Drush命令支持逗号分隔的多个ID
-- 同时,取ID的SQL语句要改动一下
-- 这里只是以users表取uid来举例,实际SQL将更复杂
-- 这里的意思是让Drush命令一次处理10个ID,可以根据实际情况调整

SELECT GROUP_CONCAT(uid) FROM (SELECT uid, FLOOR((@ROW_NUMBER := @ROW_NUMBER+1) / 10) AS id
FROM users u, (SELECT @ROW_NUMBER:=0) AS t
LIMIT 100) AS split
GROUP BY id
如果能并行执行,效率还可以继续成倍增加
SQL:
-- 通过求余可以将取出的ID进一步分成多个组,需要多少个并行任务,就对几求余

SELECT GROUP_CONCAT(uid) FROM (SELECT uid, FLOOR((@ROW_NUMBER := @ROW_NUMBER+1) / 10) AS id
FROM users u, (SELECT @ROW_NUMBER:=0) AS t
LIMIT 100) AS split WHERE id % 3 = 1
GROUP BY id
可以看到,在本文的两种方案的作用下,批处理的效率可以提升几十倍上百倍。