From 28f7220c30748be65a7d22524f6b925054bb54bc 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: Fri, 17 Jul 2026 18:59:39 +0000 Subject: [PATCH] Update README.md --- README.md | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index c461286..96eb9ee 100644 --- a/README.md +++ b/README.md @@ -731,8 +731,20 @@ futriix:~> db.startSession() ## Транзакции -В субд **futriix** для обеспечения надёжности (durability) и быстрого восстановления бд из резевной копии, реализована полноценная поддержка WAL (Write-Ahead Logging). Журнал WAL по умолчанию хранится в файле **futriix.wal**, находящимся в каталоге **futriix**, а также поддержка ACID-транзакций с MVCC (Multi-Version Concurrency Control). -Доступны команды startSession(), startTransaction(), commitTransaction(), abortTransaction() с восстановлением после сбоев через журнал предзаписи. +Алиса + +В СУБД **futriix** для обеспечения надёжности (durability) и быстрого восстановления БД из резервной копии реализована полноценная поддержка WAL (Write-Ahead Logging). Журнал WAL по умолчанию хранится в файле futriix.wal, находящемся в каталоге futriix. + +СУБД поддерживает ACID‑транзакции с MVCC (Multi‑Version Concurrency Control) — для локальной атомарности и изоляции на уровне отдельных узлов кластера. Для распределённых операций используется паттерн SAGA с оркестратором: глобальная согласованность достигается через последовательность компенсируемых локальных транзакций, управляемых централизованным оркестратором, который отслеживает состояние шагов, инициирует компенсацию при сбоях и гарантирует завершение сценария в согласованном состоянии. + +Парадигма eventual consistency обеспечивает согласованность данных в распределённой среде: изменения распространяются асинхронно между узлами, а финальное согласованное состояние достигается со временем с учётом гарантий доставки событий и правил разрешения конфликтов. Такой подход позволяет сохранить высокую доступность и производительность даже при временных сетевых сбоях. + +Доступны команды, с восстановлением после сбоев через журнал предзаписи: + + * `startSession()`- Начать сессию (устойчивый контекст взаимодействия клиента с СУБД, в рамках которого поддерживается состояние) в субд в рамках которой будет открыта транзакция + * `startTransaction()`- Начать транзакцию + * `commitTransaction()`- Сделать коммит транзакцию + * `abortTransaction()` - Прервать транзакцию > [!IMPORTANT] > **Матрица гарантий согласованности**
@@ -787,11 +799,11 @@ futriix:~> db.startSession() > [!TIP] > **Кроме того существуют так называемые **Периодические снимки состояния** журнала предзаписи, которые выполняют следующие функции:** > 1. Фиксируют состояние всех активных транзакций на момент создания -> 2. Создаются автоматически каждые 5 минут (300 секунд) -> 3. Именуются по маске: futriis.wal.checkpoint.{timestamp} +> 2. Создаются автоматически каждые **5 минут (300 секунд)** +> 3. Именуются по маске: `futriis.wal.checkpoint.{timestamp}` > 4. Хранят сжатое состояние: последний LSN + активные транзакции > 5. Автоматически очищаются: остаётся только 5 последних чекпоинтов -> 6. Расположение: /futriix/wal.checkpoint.wal (несколько файлов файл) +> 6. Расположение: `/futriix/wal.checkpoint.wal` (несколько файлов файл) > **Подводя итог, хочется отметить следующее: журнал предзаписи транзакций и периодические снимки состояния работают следующим образом:** > 1. Штатная работа: WAL пишет каждую транзакцию > 2. Периодически: создаётся checkpoint (снимок активных транзакций)