Запись в 2 источника данных одновременно при вызове SaveAll в CakePHP - PullRequest
2 голосов
/ 03 июня 2011

Я пытаюсь записать значения в 2 базы данных (необязательно одновременно), когда вызывается функция saveAll.Это относится не ко всем таблицам, а только к 4 из 10 таблиц в 2 базах данных.

Моя текущая логика в псевдокоде:

    $updateOk = $model->saveAll(...);

    if (!$updateOk)
      return error;

    /* start second source synchronizing */
    $model->changeDataSource('second');
    $updateOk = $model->saveAll(...);

    $model->changeDataSource('default');
    if (!$updateOk)
        return error;

    return;

Проблема в том, что иногда онане пишет во второй источник, что приводит к несоответствиям.

Мне нужен совет, как лучше решить эту проблему.У меня есть 3 возможных идеи:

  1. Следуйте приведенному выше коду и добавьте проверки, чтобы убедиться, что все сохранено, и, если это удастся, откатите значение по умолчанию для обеспечения согласованности
  2. Напишите сценарий сервера, которыйвыполняет репликацию каждый раз, когда вызывается saveAll ().(Ресурсоемкий и не очень масштабируемый)
  3. Используйте комбинацию обоих.Проверяйте непротиворечивость перед сохранением и выполняйте репликацию сценариев один раз в день

Каков наилучший способ или существуют ли более эффективные способы выполнения этого требования?Любые способы обеспечения согласованности?

1 Ответ

1 голос
/ 30 июня 2011

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

Кроме того, как вы будете масштабировать это?

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

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

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...