diff --git a/README.md b/README.md index 015794c..85a56b0 100644 --- a/README.md +++ b/README.md @@ -727,7 +727,7 @@ futriix:~> db.startSession() |----------|------------------|--------------------------------|----------------------------|---------------------------| | **Чтение (Read)** | **Read Committed** + MVCC | • Чтение всегда возвращает только закоммиченные данные
• MVCC предоставляет снапшот на момент начала чтения
• Используется Visibility Map для быстрого доступа к версиям
• Кеширование через ReadTimestampCache | • При потере соединения - операция повторяется автоматически (идиемпотентность)
• Если узел недоступен - запрос перенаправляется к реплике (Raft)
• Чтение из кэша возможно при недоступности основного узла | • После восстановления узла - чтение продолжается с момента прерывания
• WAL не требуется для чтения (только для записи)
• Снапшоты MVCC восстанавливаются из documentVersions | | **Запись (Write)** | **Read Committed** | • Запись сначала сохраняется в WAL (атомарно)
• Затем применяется к in-memory структурам
• Индексы обновляются атомарно с документом
• Атомарное обновление метаданных коллекции | • Если WAL запись не подтверждена - операция не применяется
• При сбое до коммита - данные не теряются (WAL)
• При потере лидера (Raft) - запись перенаправляется к новому лидеру
• Используется fsync для гарантии записи на диск | • После восстановления - запись повторяется из WAL
• Автоматическое применение WAL при загрузке
• Консистентность через LSN (Log Sequence Number)
• Segmented WAL позволяет восстанавливать частичные записи | -| **Транзакция (BEGIN...COMMIT)** | **Read Committed / Repeatable Read** (MVCC) | • Транзакция атомарна: все или ничего
• MVCC предоставляет снапшот на момент начала транзакции
• Операции внутри транзакции изолированы
• Savepoints для частичного отката
• Deadlock detection с автоматическим abort-ом | • При сбое в середине транзакции - автоматический откат
• WAL гарантирует восстановление закоммиченных транзакций
• 2PC для распределённых транзакций с таймаутом (10 сек)
• Prepared транзакции автоматически откатываются при таймауте | • Асинхронное восстановление из WAL
• Восстановление только закоммиченных транзакций
• Pending 2PC транзакции проверяются на таймаут
• Recovery Manager обрабатывает записи параллельно | +| **Транзакция (BEGIN...COMMIT)** | **Read Committed / Repeatable Read** (MVCC) | • Транзакция атомарна: все или ничего
• MVCC предоставляет снапшот на момент начала транзакции
• Операции внутри транзакции изолированы
• Savepoints для частичного отката
• Deadlock detection с автоматическим abort‑ом | • При сбое в середине транзакции — автоматический откат
• WAL гарантирует восстановление закоммиченных транзакций
• SAGA с оркестратором для распределённых транзакций с таймаутом (10 сек)
• Pending‑шаги Saga автоматически компенсируются при таймауте | • Асинхронное восстановление из WAL
• Восстановление только закоммиченных транзакций
• Pending‑шаги SAGA проверяются на таймаут
• Recovery Manager обрабатывает записи параллельно | | **Индексация** | **Read Committed** | • Индексы обновляются атомарно с документом
• Уникальные индексы проверяются перед вставкой
• Индексы хранятся в sync.Map (wait-free)
• Поддержка составных индексов | • Индексы восстанавливаются из данных при загрузке
• При сбое - индексы перестраиваются автоматически
• Консистентность через LSN
• Уникальные индексы проверяются при восстановлении | • Индексы перестраиваются из документов при старте
• WAL содержит операции обновления индексов
• Автоматическое восстановление целостности индексов
• Проверка дубликатов при восстановлении уникальных индексов | | **Удаление (Delete)** | **Read Committed** | • Soft delete сохраняет данные (метка deleted_at)
• Удаление из индексов происходит атомарно
• Физическое удаление - только после подтверждения
• Атомарное обновление счётчиков | • При сбое - операция повторяется из WAL
• Soft delete защищает от потери данных
• Окончательное удаление - после подтверждения всеми репликами
• Permanent delete требует подтверждения | • Soft delete записи восстанавливаются из WAL
• Permanent delete повторяется из WAL
• Счётчики документов восстанавливаются атомарно | | **Репликация (Raft)** | **Linearizable** (для записей) / **Read Committed** (для чтений) | • Записи проходят через Raft-журнал
• Линейная консистентность для записей
• Чтения могут быть из реплик (Read Committed)
• Автоматическое переизбрание лидера | • При сбое лидера - автоматический выбор нового (Raft)
• Запросы перенаправляются к новому лидеру
• Данные согласованы через журнал Raft
• Read-запросы могут обслуживаться репликами | • Raft журнал восстанавливается из WAL
• Новый лидер применяет все закоммиченные записи
• Реплики синхронизируются с лидером
• Автоматическое восстановление кластера |