Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > Пакетная обработка данных |
Автор: EasyTask 18.12.2012, 03:14 |
Добрый день! Интересно поискать способ решения для следующей проблемы: У нас имеются некие данные, которые получаются построчно (mysql_fetch или построчное чтение из файла, важное условие - изначально мы не знаем количество полученных строк). Нам необходимо формировать из этих данных определенный стек и выполнять некое действие, когда в стеке накопится достаточное количество данных. Например: Построчное чтения из файла 1.txt строками в котором являются идентификаторы -- 1 Итерация мы сохраняем идентификатор из 1 строки -- 2 Итерация мы сохраняем идентификатор из 2 строки -- 3 Итерация мы сохраняем идентификатор из 3 строки -- В стеке накопилось три сообщения - выполняем некое действие Сейчас, в общем виде, у меня получилось такое решение для этой задачи: У меня существует определенный класс, который добавляет данные в стек и по накоплению заданного количества записей в стеке выполняет некое действие, проблема в том, что делать когда размер пакета не кратен количеству исходных данных. Например мы решили формировать пакеты из 3 сообщений стека, а в исходных данных у нас 11 строк. Последние 2 строки выпадут и не будут обработаны, т.к не будет добавлено третьего сообщения, обеспечивающего окончательное формирование пакета и выполнение обработки. Сейчас проблема решена таким образом, что после цикла получения данных, выполняется еще одна проверка, не осталось ли сообщений в стеке, и если они там есть - еще раз выполнить процесс обработки. Но мне не очень нравится этот подход, поэтому мне интересно послушать ваши решения - существует ли какой то способ, прямо внутри цикла определить что это последние получаемые данные и последний пакет нужно обрабатывать не полным? |
Автор: EasyTask 18.12.2012, 09:22 |
этот вариант ничем не лучше представленного мной варианта ![]() |
Автор: skyboy 18.12.2012, 09:42 | ||||
алгоритмически это не решается, так как
вызывать за пределом цикла обработку вполне допустимо. единственный совет — вынести код обработки в отдельную функцию, чтоб это не был суровый копипаст на 20+ строк. |
Автор: Aliance 18.12.2012, 10:38 |
Кстати, недавно прочитал о SplStack, может будет полезно: http://habrahabr.ru/post/161987/ |