Если у меня 3 базы данных
- Db1: only for writes, publisher
- Db2: only for reads, subscriber to Db1
- Db3: только для чтения, подписчик на Db1
Просто поясню, что «только для чтения» означает, что мое приложение не будет пытаться изменить эту базу данных. Обратное применимо к «только для записи». Я не говорю об особенностях самой базы данных. Возможно, я воспользуюсь разрешениями для этого, но в любом случае.
Некоторые вопросы, на которые я не смог найти ответы, бегло просмотрел официальную документацию по логическому репликация:
В сценарии, когда происходит новая запись в Db1, будут ли оба Db2 и Db3 блокироваться при синхронизации с изменениями, или они собираются разрешить чтение, которое будет выполняться параллельно с синхронизацией?
Если сервер подписчика выполняет чтение к моменту публикации нового изменения в Db1, будет ли доступное изменение следующей операцией, которая будет выполнена, как только они прибудут к подписчику, независимо от того, сколько операций чтения уже ожидали выполнения (если есть)?
Меня беспокоит согласованность в кластере с балансировкой нагрузки (только для чтения) серверов PostgreSQL, которые являются репликами Db1. Все они должны быть синхронизированы с Db1, не допуская никаких новых операций чтения до синхронизации с новыми изменениями, опубликованными Db1. Если я не могу сделать это с помощью логической репликации, то каковы альтернативы, если они есть?