Лучший способ обновить таблицы SQL при запросе

0

Поэтому у меня есть таблица MySQL, где она должна обновляться ежедневно, а структура выглядит следующим образом:

siteid    user  proportion
1000      1     0.1
1000      2     0.5
1000      3     0.4

Проблема в том, что другим частям кода необходимо получить доступ к этой таблице, пока она обновляется, а обновление может занимать несколько минут каждый день. Это то, что происходит в повседневной жизни:

  • Задача работает около 8 утра по EST каждый день, чтобы обновить приведенную выше таблицу на основе вчерашних данных. Это обновление может занять до получаса.
  • Пользователи должны иметь доступ к этой таблице в любое время, чтобы получать самые последние обновления

Я придумал следующие идеи, но уверен, что никто из них не заработает меня:

  • Создайте временную таблицу для доступа к ней при обновлении основной таблицы: это не похоже на хорошую идею, так как есть пять из этих таблиц и невозможно выполнить переход между временной и основной таблицей.
  • Прекратите выполнение всех операций, в то время как обновляемая таблица невозможна, так как другой код, обращающийся к таблицам, должен всегда работать и работать.

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

ЗАМЕТКИ:

  1. Там таблицы содержат миллионы строк.
  2. Я использую MySQL здесь и, как уже упоминалось, не смог заблокировать транзакции, поскольку все должно быть вживую.
  3. Бэкэнд-код написан на python
  • 0
    Вы можете заблокировать таблицу, пока каждая транзакция не будет завершена?
  • 1
    Чего вы ждете от ответа здесь? Это невероятно расплывчато.
Показать ещё 3 комментария
Теги:

1 ответ

0

Вы можете это сделать, может быть, так?

  1. Имеют две таблицы с одинаковой структурой, имена которых заканчиваются на _A и _B.
  2. У вас есть представление, которое можно переключать "на лету", чтобы указать на _A или _B (в Oracle мы будем использовать синоним).

В процедуре обновления: 1. Скопируйте данные с _A на _B. 2. Наведите точку на _A (обновите представление). 3. Сделайте обновления для _B 4. Просмотрите точку на _B (обновите представление).

В следующий раз, когда вы запустите, вы повторите этот процесс, но ссылки _A станут _B и наоборот. Возможно, вам захочется отслеживать все текущие таблицы (_A ИЛИ _B).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню