Что такое Транзакция

Ответ

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

В веб-разработке транзакции часто встречаются при работе с базами данных (например, IndexedDB) или API.

Пример с IndexedDB:

const transaction = db.transaction(['users'], 'readwrite');
const store = transaction.objectStore('users');

store.add({ id: 1, name: 'Alex' });
store.add({ id: 2, name: 'Max' });

transaction.oncomplete = () => console.log('Транзакция завершена');
transaction.onerror = () => console.log('Ошибка, откат изменений');

Ключевые свойства транзакций:

  • Атомарность — все или ничего.
  • Согласованность — данные остаются валидными.
  • Изолированность — параллельные транзакции не влияют друг на друга.
  • Долговечность — после успешного выполнения изменения сохраняются.

Ответ 18+ 🔞

Давай я тебе на пальцах объясню, что за зверь такой — транзакция. Представь, что ты в баре заказываешь: "Мне пиво, чипсы и вот эту симпатичную оливку". Официант кивает, несёт. Но если оливка сдохла и её нет — тебе приносят нихуя. Ни пива, ни чипсов. Всё отменяется. Вот это и есть атомарность, ёпта: либо всё, либо нихуя.

В коде это выглядит примерно так же, особенно когда ты лезешь в какую-нибудь клиентскую базу данных, типа IndexedDB. Смотри, как это бывает:

const transaction = db.transaction(['users'], 'readwrite');
const store = transaction.objectStore('users');

store.add({ id: 1, name: 'Alex' });
store.add({ id: 2, name: 'Max' });

transaction.oncomplete = () => console.log('Транзакция завершена');
transaction.onerror = () => console.log('Ошибка, откат изменений');

Видишь? Мы открываем транзакцию на запись в хранилище 'users' и начинаем пихать туда данные. Если на любом этапе — хоть на втором add, хоть где — случится пиздец (например, запись с таким id уже есть), то сработает onerror, и вся эта куча действий откатится, как будто ничего и не было. Чистота, блядь.

А теперь, чтобы ты совсем проникся, запомни четыре кита, на которых эта хуйня держится:

  • Атомарность — уже объяснил. Всё или нихуя. Как в жизни: либо ты герой, либо говно, полупидор.
  • Согласованность — система после транзакции не превратится в ебучую окрошку. Данные будут в валидном состоянии. Не получится так, что у пользователя есть заказ, а самого пользователя в базе — хуй.
  • Изолированность — представь, что с твоей карточки одновременно списывают деньги ты и твоя баба. Транзакции не должны наебать друг друга и списать сумму два раза. Они работают так, будто других операций и нет.
  • Долговечность — ну это просто, блядь. Раз уж операция прошла и тебе сказали "всё чики-пуки", то эти данные теперь высечены в камне. Они переживут перезагрузку, отключение света и даже твоё похмелье. Пока ты диск не отформатируешь, конечно.

Вот и вся магия. Не такая уж и сложная хуйня, если разобраться, правда? Главное — понять принцип: либо делаешь всё до конца правильно, либо не делаешь вообще, чтобы потом не было мучительно больно, как тому Герасиму с его Муму.