Я рассматриваю различные базы данных, поддерживающие MVCC, для предстоящего проекта, и PostgreSQL пришел на мой радар.Могу ли я запускать вакуумом PostgreSQL раз в 1-2 минуты?
Требование моей программы включает последовательность примерно как следующее:
Читайте некоторую информацию от текущей версии базы данных, изменять 80-90% данные и записать его обратно в один или больше транзакций (представьте себе что-то вроде обновления сетки в Game of Life от Conway, где требуется как старое, так и новое состояние сетки).
Подождите 1-2 минуты после фиксации. В течение этого времени клиенты могут выпускать сообщения против новых данных.
Повторите.
Базы данных будут ограничены чем-то вроде 2-4 ГБ.
~ 90% изменений - это обновления существующих объектов, ~ 5% будут новыми объектами и ~ 5% будут удалены.
Итак, мой вопрос: могу ли я разумно запустить обычную команду VACUUM в качестве шага 1.5 раз в 1-2 минуты, и у PostgreSQL будет возможность идти в ногу с потенциально 2-3 + ГБ изменений, которые выполняются каждый раз?
Возможно, вам не нужно запускать его вручную. Регулировка параметров автоматического вакуума для этой конкретной таблицы должна быть достаточной. Но вакуум необходим только при удалении или вставке большого количества строк. Обновлениям не нужен такой агрессивный вакуум. –
Я понимаю, что каждое обновление также генерирует новую запись с новым XID, и поскольку я буду обновлять 80-90% объектов за каждый цикл, я ожидаю, что у меня будет много старых записей. – MindJuice
Возможно, важно также отметить, что, хотя шаг 1 запущен, клиенты также могут выдавать чтения с «старым» состоянием базы данных с шага «0», поэтому эти старые записи должны быть доступны, в то время как новые генерироваться. – MindJuice