PHP отслеживает последние обновления базы данных MySQL для отправки в приложение Rails? - PullRequest
0 голосов
/ 16 декабря 2010

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

У меня есть другая,полностью отдельное приложение Rails, которое мне нужно для импорта записей из внешней базы данных MySQL (приложение Rails работает на PostgreSQL и размещается удаленно).

Итак ... извините за крайнюю неэффективность этой установки (это система с переходной экономикой), мне нужно следующее: PHP-скрипт, который может либо опрашивать, либо вызываться всякий раз, когда происходит обновление базы данных MySQL.(обновляет ли это обновление информацию о записи, созданной новой записи или удаленной существующей записи и т. д.), затем отправьте эту информацию (в JSON) через запрос POST в приложение Rails.

Я ужеу меня написан PHP-скрипт, который может извлекать данные из MySQL и анализировать их для моего приложения Rails, но я не знаю, как (а) заставить скрипт опрашивать или вызывать его при каждом обновлении, или (б) как сказать ему, чтобы он нашел только самые последние изменения (с момента последнего опроса, учитывая, что более одной записи могли быть изменены / созданы / удалены).

Может кто-нибудь посоветовать по этому поводу?


В качестве следствия, если кто-нибудь знает, как пропустить PHP и выполнить эту же процедуру непосредственно из Rails во внешнюю базу данных MySQL, я (очевидно) предварительноДля этого метода.Однако в интересах получения хотя бы одного работоспособного решения я с радостью приму решение на основе Rails или PHP.

1 Ответ

0 голосов
/ 16 декабря 2010

Вот один подход, который делает все это в Rails:

Настройка задания cron, которое запускается каждые пять минут. Он либо запускает задачу rake, либо скручивает определенный URL-адрес в вашем приложении Rails (в идеале, включая токен безопасности, просто для хорошей меры). Я предпочитаю последнее - оно проще и не запускает новый процесс.

Действие, запускаемое заданием cron, может посмотреть на столбец созданного в каждой таблице и определить, что может быть новым. Для потенциально новых записей - как определено созданным_произведением - проверьте, действительно ли они новые, и, если они есть, запишите их в свою базу данных PostgreSQL. Есть два способа проверить, являются ли записи новыми:

  1. Если первичные ключи всегда совпадают между MySQL и PostgreSQL, вы можете просто попытаться сохранить запись, явно задав первичный ключ. Если запись уже была сохранена, вы получите исключение, которое затем можете перехватить.

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

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

Подключение приложения Rails к базе данных MySQL не должно быть слишком сложным. Вот некоторая информация об этом:

http://pullmonkey.com/2008/4/21/ruby-on-rails-multiple-database-connections/

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