Альтернатива столбцу меток времени для синхронизации - PullRequest
2 голосов
/ 06 января 2012

У меня есть локальная база данных mysql и производственная база данных mysql. Я делаю изменения локально и использую сторонний инструмент для синхронизации изменений с живым сервером. Инструмент использует функцию контрольной суммы для определения измененных строк. Моя структура БД проста, одно поле varchar200 (действует как первичный ключ) и текстовое поле.

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

Я ищу полезную идею или альтернативу метке времени, которая изменяется при изменении строки.

PS: я опубликовал похожий вопрос , но не получил никаких полезных ответов. Я не хочу полагаться на дополнительные столы.

Ответы [ 3 ]

2 голосов
/ 06 января 2012

Мой совет: не используйте TIMESTAMP тип данных, используйте DATETIME. Они содержат данные одного и того же типа, но разница в том, что TIMESTAMP обновляется каждый раз, когда вы касаетесь строки , даже если вы не установите этот столбец, он будет обновляться с помощью «сейчас», включая вставки .

Это означает, что при использовании TIMESTAMP вы никогда не сможете по-настоящему синхронизировать две базы данных - этот столбец всегда будет отличаться. Если вы используете DATETIME, вы можете сохранить данные этого столбца.

Если вы не можете закодировать свои приложения, чтобы обновить столбец DATETIME словом "сейчас", просто создайте триггер, который сделает это за вас.

2 голосов
/ 06 января 2012

Вы можете сделать несколько вещей:

  1. добавить столбец «грязный» в исходную таблицу. Сделайте это одним битом, который вы переворачиваете, когда строка изменяется, и переворачиваете ее, когда она синхронизируется. Если идентификатор строки является первичным ключом, это простая вставка ... при обновлении дубликата ключа
  2. хранить все ваши времена как GMT. Так что больше не надо сражаться за часовой пояс. Это стандартная практика, где бы ни находилось время.
  3. настроить репликацию между двумя серверами, чтобы MySQL сделал для вас копирование / обновление. Это именно то, для чего он предназначен, и он хорошо работает.
0 голосов
/ 15 сентября 2017

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

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