diff --git a/README.md b/README.md
index b0f2490..015794c 100644
--- a/README.md
+++ b/README.md
@@ -733,8 +733,8 @@ futriix:~> db.startSession()
| **Репликация (Raft)** | **Linearizable** (для записей) / **Read Committed** (для чтений) | • Записи проходят через Raft-журнал
• Линейная консистентность для записей
• Чтения могут быть из реплик (Read Committed)
• Автоматическое переизбрание лидера | • При сбое лидера - автоматический выбор нового (Raft)
• Запросы перенаправляются к новому лидеру
• Данные согласованы через журнал Raft
• Read-запросы могут обслуживаться репликами | • Raft журнал восстанавливается из WAL
• Новый лидер применяет все закоммиченные записи
• Реплики синхронизируются с лидером
• Автоматическое восстановление кластера |
| **Шардирование (Range Shards)** | **Read Committed** | • Диапазонные шарды с динамическим сплитом/мерджем
• Данные распределены по диапазонам ключей
• Предсказуемая нагрузка на узлы
• Возможность предварительного добавления узлов под горячие диапазоны | • При сбое узла - шард перераспределяется
• Данные реплицируются для отказоустойчивости
• Автоматический сплит при переполнении шарда
• Мердж при уменьшении нагрузки | • Шарды восстанавливаются из чекпоинтов
• WAL применяется к каждому шарду
• Балансировка после восстановления
• Автоматическое перераспределение |
| **Checkpoint / Snapshot** | **Read Committed** | • Периодическое сохранение снапшотов (каждые 5 мин)
• Атомарная запись с временным файлом
• Контрольная сумма для верификации
• Сжатие снапшотов (gzip)
• Хранение последних N чекпоинтов | • При сбое во время создания - временный файл удаляется
• Предыдущий чекпоинт остаётся целым
• Атомарное переименование гарантирует целостность
• WAL LSN сохраняется в чекпоинте | • Загрузка из последнего валидного чекпоинта
• Применение WAL после чекпоинта
• Проверка контрольной суммы при загрузке
• Автоматическое восстановление из чекпоинта |
-| **WAL (Write-Ahead Log)** | **Persistent** | • Все записи сначала идут в WAL
• Segmented WAL с ротацией (64 MB)
• Пакетная запись с fsync
• CRC32 для верификации целостности
• Асинхронная запись с буферизацией | • При сбое - WAL сохраняет все записи
• fsync гарантирует запись на диск
• Segments позволяют восстанавливать частичные данные
• Индекс LSN для быстрого поиска | • Полное восстановление из WAL
• Асинхронный Recovery Manager
• Параллельное применение записей (4 воркера)
• Восстановление 2PC транзакций |
-| **2PC (Distributed Transactions)** | **Read Committed** | • Двухфазный коммит для распределённых транзакций
• Состояния: Active → Prepared → Committed/Aborted
• Координатор отслеживает статус узлов
• Таймаут Prepared транзакций (10 сек) | • При сбое координатора - транзакция в Prepared состоянии
• Автоматический откат по таймауту
• Узлы могут завершить транзакцию автономно
• Pending транзакции сохраняются в WAL | • Восстановление pending 2PC транзакций
• Проверка таймаута при старте
• Автоматический откат просроченных транзакций
• Голосование узлов для завершения |
+| **WAL (Write-Ahead Log)** | **Persistent** | • Все записи сначала идут в WAL
• Segmented WAL с ротацией (64 MB)
• Пакетная запись с fsync
• CRC32 для верификации целостности
• Асинхронная запись с буферизацией | • При сбое — WAL сохраняет все записи
• fsync гарантирует запись на диск
• Segments позволяют восстанавливать частичные данные
• Индекс LSN для быстрого поиска | • Полное восстановление из WAL
• Асинхронный Recovery Manager
• Параллельное применение записей (4 воркера)
• Восстановление Saga с оркестратором (pending‑шагов и компенсаций) |
+| **SAGA с оркестратором** | **Read Committed** | • Оркестрированная Saga для распределённых транзакций
• Последовательность шагов с компенсационными действиями для каждого этапа
• Оркестратор управляет порядком выполнения и обработкой отказов
• Таймаут на выполнение шага (10 сек) | • При сбое оркестратора — шаг остаётся в незавершённом состоянии
• Автоматическая компенсация при превышении таймаута
• Отдельные шаги могут выполняться автономно на узлах
• Pending шаги и компенсации сохраняются в WAL | • Восстановление pending Saga‑шагов при старте
• Проверка таймаутов и статуса шагов
• Автоматический запуск компенсационных действий для просроченных шагов
• Координация узлов для завершения/отката цепочки шагов |
| **Deadlock Detection** | **N/A** | • Обнаружение циклических ожиданий
• Автоматический abort одной из транзакций
• Периодическая проверка (каждую секунду)
• Поддержка распределённых deadlock-ов | • При сетевых задержках - возможны ложные срабатывания
• Abort транзакции с последующим повтором
• Распределённый deadlock detection через координатор | • Deadlock граф восстанавливается из активных транзакций
• Автоматическое разрешение при старте
• Логирование deadlock-ов для анализа |
| **MVCC (Multi-Version Concurrency Control)** | **Repeatable Read** (внутри транзакции) | • Каждая запись хранит несколько версий
• Чтение получает версию на момент начала транзакции
• Автоматическая очистка старых версий (каждые 5 мин)
• Хранение до 100 версий на документ
• Retention: 7 дней | • Версии сохраняются в памяти и WAL
• При сбое - версии восстанавливаются из WAL
• Visibility Map ускоряет проверку видимости
• ReadTimestampCache для быстрого доступа | • Версии восстанавливаются из WAL записей
• Автоматическая очистка устаревших версий
• Восстановление Visibility Map
• Кеш перестраивается при загрузке |
@@ -749,12 +749,12 @@ futriix:~> db.startSession()
## Ключевые гарантии:
-1. **ACID**: Все операции соответствуют ACID благодаря WAL + MVCC + 2PC
+1. **ACID**: Все операции соответствуют ACID благодаря WAL + MVCC + SAGA c оркестратором
2. **Durability**: fsync + WAL гарантируют сохранность данных
3. **Consistency**: Чекпоинты + контрольные суммы + верификация
4. **Isolation**: MVCC + Read Committed + Repeatable Read внутри транзакций
5. **Availability**: Raft + репликация + автоматическое переизбрание лидера
-6. **Partition Tolerance**: 2PC + таймауты + автоматический откат
+6. **Partition Tolerance**: SAGA c оркестратором + таймауты + автоматический откат
@@ -1853,7 +1853,7 @@ futriix:~> doc compression employees 550e8400-e29b-41d4-a716-446655440000
- [x] Реализовать выделение жирным шифтом все информационные сообщения в скриптах сборки
- [x] Реализовать ограничения на количество создаваемых Lua-состояний в плагинах
- [x] Реализовать WAL recovery сделать асинхронным для ускорения скорости работы субд
-- [x] Реализовать Двухфазный коммит (2PC) (Распределённые транзакции)
+- [x] Реализовать SAGA c оркестратором (Распределённые транзакции)
- [x] Голосование узлов перед коммитом в протоколе Raft
- [x] Реализовать автоматическое масштабирование
- [x] Реализовать TLS, backpressure