From da945c91d8ff18d74dc79e7682631f5496239cce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D1=80=D0=B8=D0=B3=D0=BE=D1=80=D0=B8=D0=B9=20=D0=A1?= =?UTF-8?q?=D0=B0=D1=84=D1=80=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Wed, 20 May 2026 21:13:57 +0000 Subject: [PATCH] Update README.md --- README.md | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dd550fc..874c1af 100644 --- a/README.md +++ b/README.md @@ -402,7 +402,32 @@ futriix:~> drop index employees dept_age_idx ## Транзакции -В субд реализована полноценная поддержка ACID-транзакций с MVCC (Multi-Version Concurrency Control) и WAL (Write-Ahead Logging). Доступны команды startSession(), startTransaction(), commitTransaction(), abortTransaction() с восстановлением после сбоев через журнал предзаписи. +В субд реализована полноценная поддержка ACID-транзакций с MVCC (Multi-Version Concurrency Control) и WAL (Write-Ahead Logging). Журнал WAL по умолчанию хранится в файле `futriix.wal`, находящимся в каталоге `futriix`. Доступны команды startSession(), startTransaction(), commitTransaction(), abortTransaction() с восстановлением после сбоев через журнал предзаписи. + +WAL- это журнал предзаписи транзакций, который в субд `futriix` выполняет следующие действия: + + * Хранит все операции транзакций до их фиксации (INSERT, UPDATE, DELETE) + * Записывает каждое изменение последовательно с LSN (Log Sequence Number) + * Используется для восстановления после сбоя через recoverFromWAL() + * Формат: бинарный с CRC-контролем, размером записи и типом (Transaction/Checkpoint) + * Расположение: futriis.wal (один файл) + + Кроме того существуют так называемые **Периодические снимки состояния** журнала предзаписи, которые выполняют следующие функции: + + * Фиксируют состояние всех активных транзакций на момент создания + * Создаются автоматически каждые 5 минут (300 секунд) + * Именуются по маске: futriis.wal.checkpoint.{timestamp} + * Хранят сжатое состояние: последний LSN + активные транзакции + * Автоматически очищаются: остаётся только 5 последних чекпоинтов + + Подводя итог, хочется отметить следующее: журнал предзаписи транзакций и периодические снимки состояния работают следующим образом: + + * Штатная работа: WAL пишет каждую транзакцию + * Периодически: создаётся checkpoint (снимок активных транзакций) + * При сбое: восстанавливаемся с последнего checkpoint + доигрываем операции из WAL + + Это стандартный подход для обеспечения durability и fast recovery в системах с WAL. + ```sh # Начало сессии