Временная метка в таблице MySQL - PullRequest
2 голосов
/ 09 июня 2009

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

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

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

Таким образом, я могу включить скрипт обновления в другие мои скрипты и не беспокоиться о синхронизации данных.

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

Я попытался сделать «ПОКАЗАТЬ СТАТУС ОТ ЖИЗНЕННОЙ БИБЛИОТЕКИ», но поскольку все таблицы - InnoDB, «Время обновления» отсутствует, плюс, похоже, что «Время создания» было этим утром, что заставило меня поверить, что база данных резервируется и воссоздается ежедневно.

Есть ли какое-либо другое свойство в таблице, которое показывало бы, какое из двух новее? Возможно, «Новейшая дата в ряду»?

Ответы [ 3 ]

2 голосов
/ 09 июня 2009

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

Не зная, какая у вас модель данных, и вообще не понимая, что такое ваша модель синхронизации, у вас есть несколько вариантов:

  1. Сравнение первичных ключей с действующей базой данных и тестовой базой данных. Когда test> live ID, сделайте обновление.
  2. Использование меток времени в таблице, чтобы определить, нужно ли ее обновлять
  3. Используйте md5-хэш таблицы базы данных и дату изменения (UTC), чтобы определить, изменилась ли таблица.

Короче говоря: синхронизация базы данных очень сложна. Реализуйте решение, которое является специфическим для вашего приложения. Не существует «универсального» решения, которое будет работать идеально.

0 голосов
/ 09 июня 2009

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

0 голосов
/ 09 июня 2009

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

Но какую версию mysql вы используете?

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