Transaction processing

Transaction

Transaction

  • Transaction (рус. транзакция, от лат. transactio — соглашение, договор)

  • Минимальная логически осмысленная операция

  • Имеющая смысл

  • Может быть совершена только полностью или не совершена вовсе

Transaction

workflow

Transaction processing

  • Transaction processing - процесс обработки транзакций

  • Transaction processing занимаются online transaction processing (OLTP, транзакционные системы)

  • Чаще всего термины Transaction и Transaction processing относительно database

  • Стоит помнить что термины Transaction и Transaction processing НЕ ТОЛЬКО о database

Types of Transactions

  • Transactions (последовательные транзакции (или обычные))

    • Обычно одна целостная система, расположенная на одном host (компьютере)

  • Distributed transactions (параллельные и распределенные транзакции)

    • Обычно распределенная система, расположенная на нескольких hosts (компьютерах)

ACID

ACID

  • ACID описывает требования к транзакционной системе

  • ACID обеспечивает наиболее надёжную и предсказуемую работу транзакционной системе

  • Требования ACID были в основном сформулированы в конце 70-х годов Джимом Греем.

ACID

  • A - Atomicity (Атомарность)

  • C - Consistency (Согласованность)

  • I - Isolation (Изолированность)

  • D - Durability (Прочность)

Atomicity

  • Никакая транзакция не будет зафиксирована в системе частично

  • т.е. выполняется все или ничего

Consistency

  • Каждая успешная транзакция по определению фиксирует только допустимые результаты

  • т.е. транзакция обеспечивает перевод БД из одного зафиксированного состояния в другое

Isolation

  • Во время выполнения транзакции параллельные транзакции не должны оказывать влияния на её результат

  • т.е. транзакции отделены одна от другой и "не видят" результата выполнения друг друга до полного завершения

Durability

  • Если пользователь получил подтверждение от системы, что транзакция выполнена, он может быть уверен, что сделанные им изменения не будут отменены из-за какого-либо сбоя.

  • т.е. результаты успешного выполнения транзакции должны сохраняться, даже если в следующий момент в системе происходят какие-либо сбои

Database Transactions

Isolation

Read phenomena

Read phenomena

  • Dirty reads («Грязное» чтение)

  • Non-repeatable reads (Неповторяющееся чтение)

  • Phantom reads (Чтение «фантомов»)

Dirty reads

dirty read

Dirty reads

/* Query 1 */
SELECT age FROM users WHERE id = 1;
/* will read 20 */
/* Query 2 */
UPDATE users SET age = 21 WHERE id = 1;
/* No commit here */
/* Query 1 */
SELECT age FROM users WHERE id = 1;
/* will read 21 */
ROLLBACK; /* lock-based DIRTY READ */

Non-repeatable reads

non repeatable read

Non-repeatable reads

/* Query 1 */
SELECT * FROM users WHERE id = 1;
/* Query 2 */
UPDATE users SET age = 21 WHERE id = 1;
COMMIT; /* in multiversion concurrency
   control, or lock-based READ COMMITTED */
/* Query 1 */
SELECT * FROM users WHERE id = 1;
COMMIT; /* lock-based REPEATABLE READ */
ROLLBACK; /* lock-based DIRTY READ */

Phantom reads

phantom read

Phantom reads

/* Query 1 */
SELECT * FROM users
WHERE age BETWEEN 10 AND 30;
/* Query 2 */
INSERT INTO users(id, name, age) VALUES (3, 'Bob', 27);
COMMIT;
/* Query 1 */
SELECT * FROM users
WHERE age BETWEEN 10 AND 30;
COMMIT;

Isolation levels

Isolation levels

  • Read Uncommitted (чтение незафиксированных данных)

  • Read Committed (чтение фиксированных данных)

  • Repeatable Read (повторяющееся чтение)

  • Serializable (упорядочиваемость)

Isolation levels

Table 1. Isolation levels
Dirty readsLost updates[inconsistent]Non-repeatable readsPhantoms

Read Uncommitted

+

+

+

+

Read Committed

-

+

+

+

Repeatable Read

-

-

-

+

Serializable

-

-

-

-