TGViewer
1.C. Enterprise 1.C. Enterprise @ship1centerprise · 1.06K subscribers
Post #86 1.33K
Дневник капитана, красивая дата 05*05=25
➖Кислотные транзакции➖

Захотелось рассказать про темы, которые обычно не часто обсуждаются в среде 1Сников: транзакции, блокировки и связанные темы. В первом посте расскажу о самих транзакциях.

Думаю, что такое транзакция знает большинство. Ну, напомню кратко на всякий. Это такие операции с базой данных (в первую очередь), которые выполняются либо все, либо ни одной (при какой-либо проблеме, ошибке). Отдельно часть операций из транзакции выполнять не допустимо.

Еще в 1970-х годах был выдвинут набор требований к транзакциям, который называется ACID 🧪:
Atomicity - атомарность
Consistency - согласованность
Isolation - изоляция
Durability – устойчивость
Разберем каждую букву подробнее.

⚛️ Атомарность
Этот принцип как раз говорит о том, что транзакция неделимая, она может быть зафиксирована либо вся, либо ни одна ее часть. В общем-то, тривиальное требование для транзакции, верно? Да, в обычном случае так оно и есть. Интересней становится, когда у вас сложная система, состоящая из разрозненных узлов. Потом разберем в отдельном посте, как это решается в микросервисной архитектуре, и что можно сделать в 1С.

🤝 Согласованность
Транзакция должна приводить систему из одного консистентного состояние в другое. Это могут быть такие более низкоуровневые требования, как уникальность ключей, отсутствие битых ссылок и т.д. А могут быть и требования, наложенные бизнес-логикой: если деньги с одного счета ушли, то на другой пришли; на складе не может быть отрицательное количество товара и подобное.

Если за первый набор требований отвечает сама СУБД, то о вторых нужно озаботиться разработчикам. Это решается проверками, которые происходят перед или во время транзакции записи данных. Однако интересная ситуация может произойти, когда между проверкой и выполнением операции влезет другой процесс и нарушит логику. Это дело для блокировок, о которых расскажу в другом посте.

🔒 Изоляция
Транзакции должны быть изолированы друг от друга, никак одна начавшаяся или совершенная транзакция не должна "заафектить" открытую другую. Это требование оказалось слишком жестким, поэтому чистая изоляция сейчас почти не используется. Была выделены разные уровни изолированности транзакций, которые в разной степени смягчают это требование. И это тема для отдельного поста.

💪 Устойчивость
Это значит то, что если транзакция завершена, то разные внешние и низкоуровненые факторы не должны удалить изменения, сделанные ею. Т.е. если транзакцию зафиксировали, а через секунду свет вырубили, то после включения ничего не должно потеряться. Здесь можно выдохнуть, нас, как разработчиков логики, это не касается. Это уже все должно работать на уровне СУБД и железок. Но бэкапы все равно делать надо!

Если совсем кратко, то на этом все, дальше я уже напишу отдельные посты по упомянутым темам.
  • 👍 12
  • 🔥 7
  • 🤝 2
More from @ship1centerprise
  1. May 13, 2025Дневник капитана, дата '20250513' 🔷 Изолента для транзакций 🔷 Перейдем букве 🔤 нашего A…
  2. May 6, 2025Дневник капитана, дата 06.05.2025 🪓Сага о распределенных транзакциях🪓 В прошлом посте я…
  3. Jul 28, 2023​​Дневник капитана, дата ‘2023-07-28’. Мой корабль улетел в совсем удаленные части Вселенн…
  4. Dec 21, 2022Всем привет! Уже завтра, 22 декабря встречаемся онлайн: INFOSTART AWARDS 2022 и новогодняя…
  5. Jun 24, 2022Вот так вот уходишь из 1С, а там такое: https://infostart.ru/job/vacancy/1676535/ Update:…
  6. Jun 22, 2022Дневник помощника капитана, желтая Дата(2022, 6, 22). Слышали о таком инструменте на основ…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →