Ответ
ACID — это набор критически важных свойств, гарантирующих надежность и предсказуемость транзакций в базе данных, особенно в реляционных СУБД, таких как PostgreSQL или MySQL, которые часто используются с Node.js.
- A (Atomicity) — Атомарность. Транзакция выполняется как единое целое. Либо выполняются все её операции, либо ни одна. Невозможно частичное выполнение. В Node.js с
node-postgresэто достигается черезBEGIN,COMMITиROLLBACK. - C (Consistency) — Согласованность. Каждая успешная транзакция переводит базу данных из одного валидного состояния в другое. Это означает соблюдение всех правил целостности: типов данных, внешних ключей, уникальности и т.д.
- I (Isolation) — Изолированность. Параллельно выполняющиеся транзакции не должны влиять друг на друга. Уровни изоляции (Read Uncommitted, Read Committed, Repeatable Read, Serializable) определяют степень этой изоляции и баланс между целостностью и производительностью.
- D (Durability) — Долговечность. После успешного завершения транзакции (
COMMIT) внесенные изменения сохраняются на диске и не могут быть потеряны даже из-за сбоя системы.
Практический пример на Node.js с PostgreSQL:
import { Client } from 'pg';
const client = new Client();
await client.connect();
try {
// Начало транзакции
await client.query('BEGIN');
// Две связанные операции перевода денег
await client.query(
'UPDATE accounts SET balance = balance - $1 WHERE id = $2',
[100, 1]
);
await client.query(
'UPDATE accounts SET balance = balance + $1 WHERE id = $2',
[100, 2]
);
// Фиксация изменений (Atomicity и Durability)
await client.query('COMMIT');
console.log('Транзакция успешно завершена');
} catch (err) {
// При любой ошибке — откат (Atomicity)
await client.query('ROLLBACK');
console.error('Транзакция откачена:', err);
} finally {
await client.end();
}
В этом примере ACID гарантирует, что деньги не "потеряются" при сбое между двумя UPDATE, и что баланс не уйдет в минус (благодаря constraints — Consistency).
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶