--- aliases: tags: - зрелость/🌱 date: - - 2024-06-07 zero-link: - "[[00 Базы Данных]]" parents: - "[[Репликация БД]]" linked: - "[[Асинхронная репликация]]" - "[[Синхронная репликация]]" --- Полусинхронная (semi-sync). Комит прошел на одной реплике, но данные по транзакции были скопированы во все остальные реплики, но еще не были применены. Реализовано в [MySQL](00%20MySQL.md) Схема выполнения на MySQL ![](Pasted%20image%2020240206195639.png) **Как работает** - Подготовка транзакции в движке БД: Транзакция начинается на master, где собираются все изменения данных. - Запись транзакции в лог: Все изменения записываются в журнал транзакций. - Пересылка лога репликам: Журнал транзакций отправляется на реплики. Master ждет подтверждения от как минимум одной реплики о получении журнала, но не обязательно его применении. - Завершение транзакции в движке БД: После получения подтверждения от одной или нескольких реплик транзакция завершается на master, и клиент получает подтверждение. - Воспроизведение транзакции на репликах: Реплики применяют полученные изменения к своим копиям данных, но это может произойти с задержкой. **Минусы** - Проблемы консистентности данных. [Фантомное чтение](Фантомное%20чтение.md).