Детективная история про исчезающие оценки и транзакции
Одна из самых бесячих особенностей нынешнего электронного журнала — это исчезающие оценки. Ставишь оценки за карусель или практикум «в столбик», штук семь поставил, вдруг бац — три первые пропали. Начинаешь ставить медленно и осмысленно: воткнул → 20 секунд → исчезло. Воткнул → 15 секунд → опять пропало. Тык-тык-тык штук 10 в быстром темпе → через полминуты половины из них нет.
🤪 Полный отвал башки — это когда часа через два некоторые из них возвращаются. Иногда в двойном количестве.
Бывает, при этом выскакивает замысловатое сообщение об ошибке — вроде того, что на скриншоте, хотя и не конкретно оно. Но чаще оценки исчезают молча.
Что за чертовщина? Мне кажется, я знаю.
Чтобы разобраться в проблеме, надо понять, как работают транзакции.
🎯 Транзакция — это цельный набор операций работы с данными.
Транзакция либо обязана выполниться целиком и успешно (при этом целостность данных не нарушается, и наша транзакция не зависит от других), либо не выполниться вообще — и данные никак не изменятся.
Транзакции возникают, например, при совместной работе над документами. Если два пользователя по сети пытаются сохранить изменения одной и той же фразы, транзакция либо совместит эти изменения, либо откатит изменения с обеих сторон, либо примет более ранние или более поздние изменения. Что именно произойдёт и как — зависит от реализации программы.
Ещё чаще понятие транзакции возникает в финансовой области.
НАПРИМЕР,
Вася перечисляет Пете 100 р. с карты на карту. Возможно, это осуществляется такой последовательностью операций:
- баланс Васи уменьшается на 100 р.
- баланс Васи сохраняется
- баланс Пети увеличивается на 100 р.
- баланс Пети сохраняется
Если между пунктами 2 и 3 произойдёт сбой, может оказаться, что Вася 100 р. потерял, а Петя не получил. Чтобы этого не произошло, вся последовательность операций представляет собой транзакцию, и если что-то пошло не так, откатывается целиком.
Как мы переносим файл из одной папки в другую? Точно так же: сначала файл копируется по новому адресу и только потом стирается на старом. Если скопироваться он не смог или мы прервали операцию — файл остаётся по старому адресу.
Получается, это тоже транзакция.
Что же происходит с оценками в электронном журнале?
У меня, ясное дело, нет доступа к начинке журнала, но, судя по симптомам, проблема в том, что транзакции не работают.
Порядок операций:
- Я ставлю оценку и сохраняю её на своём рабочем компьютере (на стороне «клиента»).
- Оценка отправляется на сервер — у нас же централизованная система, все данные всех журналов хранятся в базе на сервере.
- При отправке моя оценка стирается: примерно как если бы перенос файла происходил наоборот: сначала удалили на старом месте, потом записали на новое.
- На сервере оценка почему-то «не приживается». Например, слишком много одновременных запросов. Все хотят ставить оценки в учебное время, странно, правда? Особенно если учесть, что строго запрещено опаздывать с выставлением 😉
- Сервер действует по принципу: я не принял, ну и ладно. Это не мои проблемы.
В результате наши 100 рублей, верней, наша пятёрка и в локальном журнале исчезла, и до базы данных на сервере не добралась.
Что с этим делать бедному преподу?
В очередной раз писать в техподдержку и через две недели получать очередную отписку, увы. И снова мучительно «протыкивать» колонку оценок, внимательно следя, все ли они «укоренились».
А вы — не будьте такими разрабами, как разрабы электронного журнала. Используйте транзакции и не теряйте данные! 🤝
0 комментариев