MySQL, разделить SELECT на лимиты

234
23 марта 2017, 19:49

Задача: Eсть родительский процесс который ставит задачи, то есть говорит что нужно обработать 1000 и оправляет это дочернему процессу который уже занимается обработкой, одновременно может работать до 10 дочерних процессов, после отработки дочерний процесс умирает и за место него появляется новый, длится до тех пор пока все записи не будут обработаны.

Есть необходимость обойти асинхронно 200 тысяч записей и после обработки 1 записи изменить ключ что запись уже была обработана.

На данный момент все записи обрабатываются кусками по 2000 записей.

Использую в примере псевдо язык программирования что-бы не грузить лишним кодом, но на бою использую php, но также задача есть и для Python

То есть получаеться такой код:

count = "SELECT COUNT(*) as count FROM purchas WHERE status = 0;"
step = 2000
max = step
for (min = 1; min < count; min+=step) {
    // Дальше идет асинхронный код
    while(row = "SELECT * FROM purchas WHERE status = 0 LIMIT $min, $max;"){
        "UPDATE purchas SET status = 1 WHERE id = $row['id'];"
    }
} 

Но логично обход буден не последовательный из-за того что вы меняет status и вопрос как можно это реализовать методами SQL?

Возможно я не корректно задал вопрос.

READ ALSO
Как правильно сформировать запрос к mysql?

Как правильно сформировать запрос к mysql?

Есть mysql таблица id | username | number | created_at 1 | valera | 50 | 2017-03-19

205
Почему выбирает только первую строку из результата

Почему выбирает только первую строку из результата

Выбирает из базы только первую строкуЧто может быть не так?

255
SQLite - Конвертирование из String в Sql.Date

SQLite - Конвертирование из String в Sql.Date

Необходимо сконвертировать переменную типа String, в переменную типа SqlDate

238
Какой смысле использовать Observable?

Какой смысле использовать Observable?

Какой смысле использовать Observable и Observer Если есть AsyncTaskТам тоже есть конечный метод, промежуточный и метод перед запуском класса

224