У нас в системе тоже был подобный опыт, когда клиенту требовались большие отчеты со сложно-форматированной шапкой и разметкой. Мы тоже вынесли это в фоновые задачи, которые обрабатывались не php, а nodejs-скриптом с библиотекой exceljs.
Но это померкло в сравнении с задачей от другого клиента, которому потребовались фото-отчеты оформленные в формате PowerPoint'a. Вот тут пришлось подумать, но в итоге сделали по томуже принципу: nodejs с библиотекой officegen успешно смог осилить формирование pptx-файлов на 2-5 Gb.
Что все так удивились, что много похожих и одинаковых решений? Правилами конкурса было обозначено, что можно отправлять столько решений сколько людей. Было сразу понятно, что будут и полные копии и несколько модификаций одного решения. Не вижу в этом проблемы, пока все решения играют честно.
И как сразу все говорили, будет решать рандом, если даже одинаковые/похожие решения раскидало на 10-30 позиций.
Решение есть. Идем, гасим свет и считаем вагоны. Если дошли до вагона с выключенным светом — включаем в нем свет и идем назад на то количество вагонов, которое насчитали (т.е. в тот вагон с которого начали). Если в нем свет горит, значит это в нем мы его включили и решение найдено, если нет, то снова идем в перед до того вагона в котором включили свет продолжаем от него.
Именно из-за такого, при разработке системы где будет много загружаемых файлов, теперь всегда начинаю с продумывания организации бэкапа для этих файлов. Что бы хотя бы ежесуточный дамп диска был у хостера.
Если автокоммит отключен, то рабочая сессия постоянно находится в транзацкии. Можно сделать несколько апдейтов/делитов/инсертов, но эти изменения «применяться» только после коммита, после чего начнется новая транзакция.
По сути, когда ВКЛЮЧЕН автокоммит, то каждый запрос выполняется в отдельной транзакции, которая коммитися сразу после выполнения запроса.
а потом остановить его — то все изменения откатятся, не будет такого что часть записей которые «успели» — будут обновлены, а часть — нет?
Даже без явно заданной транзакции большой апдейт можно остановить и все изменения, которые успели сделаться, будут отменены.
Ваш тест производительности опровергает ваши же утверждения о медлительности DOM и SimpleXML по сравнению с XMLReader. И еще бы не плохо показать объем используемой памяти.
Но это померкло в сравнении с задачей от другого клиента, которому потребовались фото-отчеты оформленные в формате PowerPoint'a. Вот тут пришлось подумать, но в итоге сделали по томуже принципу: nodejs с библиотекой officegen успешно смог осилить формирование pptx-файлов на 2-5 Gb.
И как сразу все говорили, будет решать рандом, если даже одинаковые/похожие решения раскидало на 10-30 позиций.
Хм, а я ни какого письма не получил, хотя решение отправлял. Что делать?
Странно. Мне кажется, что регался одним из первых и такого пункта в анкете не видел.
По сути, когда ВКЛЮЧЕН автокоммит, то каждый запрос выполняется в отдельной транзакции, которая коммитися сразу после выполнения запроса.
Даже без явно заданной транзакции большой апдейт можно остановить и все изменения, которые успели сделаться, будут отменены.