26 дек 2024
3 минуты

Детективная история про исчезающие оценки и транзакции

Одна из самых бесячих особенностей нынешнего электронного журнала — это исчезающие оценки. Ставишь оценки за карусель или практикум «в столбик», штук семь поставил, вдруг бац — три первые пропали. Начинаешь ставить медленно и осмысленно: воткнул → 20 секунд → исчезло. Воткнул → 15 секунд → опять пропало. Тык-тык-тык штук 10 в быстром темпе → через полминуты половины из них нет.

🤪 Полный отвал башки — это когда часа через два некоторые из них возвращаются. Иногда в двойном количестве.

Вот такая дребедень каждый день
Вот такая дребедень каждый день

Бывает, при этом выскакивает замысловатое сообщение об ошибке — вроде того, что на скриншоте, хотя и не конкретно оно. Но чаще оценки исчезают молча.

Что за чертовщина? Мне кажется, я знаю.

Чтобы разобраться в проблеме, надо понять, как работают транзакции.

🎯 Транзакция — это цельный набор операций работы с данными.

Транзакция либо обязана выполниться целиком и успешно (при этом целостность данных не нарушается, и наша транзакция не зависит от других), либо не выполниться вообще — и данные никак не изменятся.

Транзакции возникают, например, при совместной работе над документами. Если два пользователя по сети пытаются сохранить изменения одной и той же фразы, транзакция либо совместит эти изменения, либо откатит изменения с обеих сторон, либо примет более ранние или более поздние изменения. Что именно произойдёт и как — зависит от реализации программы.

Ещё чаще понятие транзакции возникает в финансовой области.

НАПРИМЕР,

Вася перечисляет Пете 100 р. с карты на карту. Возможно, это осуществляется такой последовательностью операций:

  1. баланс Васи уменьшается на 100 р.
  2. баланс Васи сохраняется
  3. баланс Пети увеличивается на 100 р.
  4. баланс Пети сохраняется

Если между пунктами 2 и 3 произойдёт сбой, может оказаться, что Вася 100 р. потерял, а Петя не получил. Чтобы этого не произошло, вся последовательность операций представляет собой транзакцию, и если что-то пошло не так, откатывается целиком.

Как мы переносим файл из одной папки в другую? Точно так же: сначала файл копируется по новому адресу и только потом стирается на старом. Если скопироваться он не смог или мы прервали операцию — файл остаётся по старому адресу.

Получается, это тоже транзакция.

Что же происходит с оценками в электронном журнале?

У меня, ясное дело, нет доступа к начинке журнала, но, судя по симптомам, проблема в том, что транзакции не работают.

Порядок операций:

  1. Я ставлю оценку и сохраняю её на своём рабочем компьютере (на стороне «клиента»).
  2. Оценка отправляется на сервер — у нас же централизованная система, все данные всех журналов хранятся в базе на сервере.
  3. При отправке моя оценка стирается: примерно как если бы перенос файла происходил наоборот: сначала удалили на старом месте, потом записали на новое.
  4. На сервере оценка почему-то «не приживается». Например, слишком много одновременных запросов. Все хотят ставить оценки в учебное время, странно, правда? Особенно если учесть, что строго запрещено опаздывать с выставлением 😉
  5. Сервер действует по принципу: я не принял, ну и ладно. Это не мои проблемы.

В результате наши 100 рублей, верней, наша пятёрка и в локальном журнале исчезла, и до базы данных на сервере не добралась.

Что с этим делать бедному преподу?

В очередной раз писать в техподдержку и через две недели получать очередную отписку, увы. И снова мучительно «протыкивать» колонку оценок, внимательно следя, все ли они «укоренились».

А вы — не будьте такими разрабами, как разрабы электронного журнала. Используйте транзакции и не теряйте данные! 🤝


Бесплатный
Комментарии
Здесь будут комментарии к публикации