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