Когда говорят, что система является CP (согласованной и секционированной), означает ли это, что мы не можем использовать асинхронную синхронизацию между реплицированными узлами данных
Да, невозможно построить CP
систему на основе асинхронной репликации.
Также я не могу согласиться с тем, что в CP
P
означает «секционирован», потому что секционирование связано с проблемами масштабируемости базы данных. Я думаю, что CP
следует рассматривать как "непротиворечивый в случае сетевого раздела".
и что каждая запись должна копироваться синхронно?
Верно, но есть оптимизация: реплицировать данные синхронно не на все узлы, а на большинство узлов, и асинхронно на остальные узлы.
(и даже транзакционно)
Я думаю, что это зависит от типа базы данных (поддерживает ли она транзакции или нет) и от того, как определить сам термин транзакции (например, совместимый с ACID или нет). С моей точки зрения это на самом деле не относится к основным пунктам теоремы CAP.
согласованность означает, что для каждой записи последующие чтения (с любого узла) будут получать последнее обновление.
Да, в общем, но существует гораздо больше моделей согласованности, см. https://jepsen.io/consistency
В случае, если мы выполняем запись в определенный узел и синхронизируем другие узлы асинхронно, чтения, которые произойдут до окончания синхронизации, могут не получить самую последнюю запись.
True.