Если максимально просто – каждый пользователь / приложение может локально иметь свой узел БД и взаимодействовать только с ним, а этот узел сам на заднем фоне будет синхронизироваться со всеми остальными узлами
Примеры: здесь отличный списокИз преимуществ– Максимально быстрый ответ на действия пользователя / приложения
– Удобство разработки коллаборативных систем (об этом пониже)
– Возможность оперировать без интернета
Из недостатков– Узкий набор доступных структур данных
– Имплементация алгоритма синхронизации или простая, но с низкой надежностью, или слишком сложная с высоким уровнем надежности, но с сильным упором на ГСУ ("господи спаси и убереги")
– Очень сложный дебагинг
Из особенностей– Конкуренция решается засчет использования CRDT (
самое простое объяснение, если найдете проще, киньте в комменты)
– Локи реализованы засчет
"резервирования" данных на одном из узлов, с дальнейшей передачей владения другим узлам
– Очень важна правильная настройка какие данные может видеть / менять / хранить узел
– Может существовать "центральный" узел, владеющий всеми данными
Условия для использования–
Когда конфликтов быть не может – то есть, отсутсвие конкуренции, например, например засчет распределения владения на уровне архитектуры: БД является частью приложения, в котором работник на складе должен ходить и сканировать упаковки, внося какие-то данные. В момент времени всего 1 человек (работник) взаимодействует с конкретными данными, при это в центральном хранилище находятся все данные от всех работников.
–
Когда клиенты сами могут разрешить конфликт – то есть, "коллаборация", а не "конкуренция". Например, Figma или Miro – даже если 2 человека одновременно перетянут одну карточку и кто-то сделал это не так как нужно, они смогут сами поправить это, когда увидят ошибку.
– Ну и понятное дело
распределенные системы (то есть, вообще без центрального хранилища), но тут опять же или нужно жестко равпределять владение, или операться на коллаборативность, или валидация большинством
ИтогиПодобные базы данных нужны ТОЛЬКО в определенных кейсах (низкая или отсутствующая конкурентность), когда вы уверены, что они принесут больше пользы (оффлайн, скорость работы, распределение), чем недостатков (сложность разработки и дебагинга), а таких кейсов ну процентов 10 от силы.