У меня есть база данных, которую я собираюсь реплицировать по причинам резервного копирования (в данный момент производительность не является проблемой).
Мы правильно настроили репликацию, протестировали ее, и все было в порядке.
Затем мы поняли, что он реплицирует все записи во временные таблицы, что фактически означало, что репликация данных за один день заняла почти два часа для неработающего ведомого устройства.
Причина этого в том, что мы пересчитываем некоторые данные в нашей базе данных с помощью cronjob каждые 15 минут, чтобы обеспечить их синхронизацию (в общей сложности это занимает ~ 3 минуты, поэтому эти операции недопустимы во время веб-запроса; вместо этого мы просто сохраняем изменения, не пытаясь что-либо пересчитать во время веб-запроса, а затем выполняем всю работу навалом). Для эффективной обработки этих данных мы используем временные таблицы (поскольку существует много взаимозависимостей).
Теперь, первая проблема заключается в том, что временные таблицы не сохраняются, если мы перезапускаем ведомое устройство, пока оно находится в середине обработки транзакций, использующих эту временную таблицу. Этого можно избежать, не используя временные таблицы, хотя это имеет свои проблемы.
Более серьезная проблема состоит в том, что ведомое устройство может легко догнать менее чем за полчаса, если бы не было всего этого повторного вычисления (что он делает один за другим, поэтому нет никакой пользы для восстановления данных каждые 15 минут ... и вы можете буквально увидеть, что он застрял, скажем, в 1115, только чтобы быстро наверстать упущенное и застрял в 1130 и т. д.).
Одно из решений, которое мы придумали, состоит в том, чтобы убрать всю эту перерасчет из реплицированной базы данных, чтобы ведомый не воспроизводил ее. Но у него есть недостатки, заключающиеся в том, что нам придется сокращать таблицы, которые он в конечном итоге обновляет, что делает нашего ведомого по сути «кастрированным», т.е. нам придется пересчитать все на нем, прежде чем мы сможем его использовать.
У кого-нибудь была похожая проблема и / или как бы вы ее решили? Я что-то упускаю из виду?