Мне было интересно, есть ли какие-либо инструменты postgresql, которые облегчили бы репликацию только для чтения по запросу. Вот описание проблемы:Postgresql избыточность для запросов только для чтения с обновлением по запросу
Каждый процесс изменения данных выполняется в виде нескольких операций (процессы являются сложными - например, данные загрузки, запуска вычислений, которыми управляют больше данных и т.д.). Пока процесс не завершен, я считаю, что база данных будет непоследовательной для отчетности.
Отчеты должны использовать только последовательные данных, но они не должны ждать данных процесса для завершения изменяющихся - они должны использовать старые (согласующихся) данные.
В идеале, отчеты должны работать на последовательной снимок базы данных. Идея решения этой проблемы заключается в следующем:
- есть два сервера - главный и подчиненный. Первоначально оба имеют точно такие же данные.
- всех процессы передачи данных изменяющего будут работать на мастер
- всех задачи отчетности будут работать на ведомом
- когда данные процесс изменяющих завершен, обновление ведомого срабатывают. Триггер будет, например: выполнить некоторую команду, создать файл в файловой системе и т. Д. Чтение частично обновленного ведомого не разрешено.
- это не займет слишком много времени - должна быть пропорциональна размеру изменений на мастер
не будет использоваться невольник для обеспечения отказоустойчивости, это не цель.
Есть ли хорошее решение этой проблемы? Или, может быть, его можно решить по-другому?
Почему бы вам не сделать свой «изменение данных процесса» для выполнения одной транзакции, которая отражает ваши потребности бизнеса? Для этого нужны транзакции: не делайте ничего видимого, пока данные не будут согласованы. –
Одно из решений, о котором я могу думать: создать таблицы FDW для каждой исходной таблицы, создать материализованные представления на основе таблиц FDW и обновить MVIEWS, как только вы узнаете свою базу данных находится в согласованном состоянии. –
Запуск всего по одной транзакции на самом деле не вариант. Процесс включает в себя несколько потоков, процессов, двоичных файлов. Мат. представления могут быть опцией потенциально, если они могут обновлять только новые данные, а не весь вид - насколько мне известно, postgresql не поддерживает его (?). Это займет слишком много времени. –