Тут возникла задача ребилдить посты форума в количестве нескольких хреналионов. Причем для максимальной скорости надо ребилдить равномерными блоками.
А равномерные блоки получить не просто. Skip/limit на таких количествах откровенно лажают. Бить по датам - в начале и в конце плотность разная. Добавить к посту рандом и побить на диапазоны - можно, но будет рандомная чтение с диска, грустно.
Теоретически можно конечно в один проход сделать сразу все чанки и заправить в очередь. Но это овер дофига метаданных разом. Плюс мапер будет долго работать - неудобно.
Я вот что подумал - а почему в очередях нет такий фичи, как «map on demand»? То есть очередь время от времени дергает мапер, он смотрит количество ожидающих чанков и если остается мало, то докидывает еще. То есть в каждый конкретный момент мы не гоняем дикие объемы данных и мапер не тупит. Хитрость в том, что мапер должен запоминать последние границы, чтобы вместо skip / limit использовать gt XXX / limit.
Перед тем как лисапедить, облазил всякие celery и ничего подобного не нашел. Даже странно. Может плохо искал?