Ответы пользователя по тегу PostgreSQL
  • Что такое потоковая репликация?

    @tsabir
    Я тоже не спец, но попробую пояснить.

    Потоковая репликация так названа в противовес не-потоковой репликации. В Постгресе ведется лог изменений в БД (как и во многоих других СУБД) — Write Ahead Log (WAL). WAL нужен для буквы D в акрониме ACID.

    Так вот этот лог можно использовать для репликации. Теперь вопрос, как это реализовать? Можно копировать файлы логов на соседний хост, и проигрывать их там, дождавшись, пока постгрес наполнит и закроет файл (обычно 16Мб) и сделает ротацию текущего файла логов. Таким образом получаем непотоковую репликацию.

    Но если при записи данных в лог, одновременно пересылать их на соседний хост, то получим потоковую репликацию. Понятно, что это происходит уже внутри базы. На уровне файловой системы это не сделаешь (если не считать DRBD и т.п.)

    А теперь представим ситуацию: вы хотите закрыть транзакцию, посылаете команду SQL COMMIT, и в ответ ждете от Постгреса подтверждение, что COMMIT прошел успешно. Если Постгрес дождался попадания данных в лог + еще и дождался репликации данных текущей транзакции на реплику, то это уже синхронная потоковая репликация.

    Синхронность/асинхронность репликации текущей транзакции можно указать перед началом транзакции, насколько я знаю, но это уже тонкости.
    Ответ написан
    Комментировать