Ответ
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).
Видео-ответы
▶
SENIOR Java Собеседование | Backend-Mock интервью
▶
PHP Senior: Онлайн-собеседование
▶
Собеседование на мидл Python: что спрашивают и как отвечать
▶
Ex-Oracle проводит собеседование на Java разработчика по базам данных
▶
Собеседование Laravel PHP backend разработчика middle-senior. Тренировка к собеседованию
▶
Собеседование в МТС: Middle Java разработчик не справился!
▶
Тестовое интервью в МТС на Middle Java
▶
Тестовое интервью в Oracle на middle Java
▶
Открытое интервью на Middle Go разработчика
▶
Тестовое собеседование на позицию Go-разработчика / Ingternet
▶
Открытое собеседование на Golang разработчика
▶
Тестовое собеседование C# | .NET Middle Mock interview
▶
Собеседование middle backend php
▶
Открытое собеседование на Go-разработчика | Анонс менторской программы
▶
Тестовое собеседование Java разработчика #6 - Вадим Пилипченко
▶
Техническое собеседование Java Developer | Топ вопросы Java | Подготовка к интервью
▶
MOCK-СОБЕСЕДОВАНИЕ EX-TINKOFF | BACKEND собеседование, знания Python, задачи на код
▶
Собеседование Laravel PHP backend разработчика junior. Тренировка к собеседованию
▶
Открытое интервью на Go-разработчика
▶
Junior Python-инженер | Собеседование
▶
Техническое интервью Java Trainee - Павел Павлюкович
▶
Проверяем знания перед реальными собеседованиями | Техническое собеседование Java Kotlin | Jetbulb
▶
Открытое интервью на Go разработчика | Эйч Навыки
▶
Собеседование Java Junior Middle | Между джуном и мидлом | Jetbulb
▶
Собеседование Java | Backend mock interview
▶
У 11-ти классника уже 3 года опыта и собственная CRM на FastAPI?? / Техсобес Junior Python Developer
▶
Senior в 14 лет?! Это вообще законно? / Думали будет джун... / Техсобес Senior Python Developer