Найти новые строки в базе данных - PullRequest
2 голосов
/ 24 октября 2009

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

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

Помимо отметок времени (вполне очевидная и, по-видимому, распространенная идея), есть ли рекомендуемая лучшая практика для такого рода вещей?

Ответы [ 5 ]

2 голосов
/ 24 октября 2009

Другие идеи:

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

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

1 голос
/ 24 октября 2009

Вместо временной метки поместите в таблицу столбец автоинкремента и сохраните наибольшее на данный момент значение этого столбца. Когда вам нужно обновить, выберите auto_column> my_largest_value.

0 голосов
/ 24 октября 2009

Поскольку в MySQL нет встроенного средства сбора данных об изменениях, вы можете реализовать триггеры INSERT, UPDATE и DELETE, чтобы собирать то, что вам нужно, в таблицу аудита и извлекать данные из нее. Вроде техника репликации бедного человека.

0 голосов
/ 24 октября 2009

Посмотрите на тип столбца Timestamp - он автоматически обновляется при создании или изменении записи.

Часовой пояс не должен быть проблемой, в зависимости от того, как вы запросите его. Сохраняет значение в формате UTC, которое не имеет летнего времени.

0 голосов
/ 24 октября 2009

Многие базы данных используют временную метку для проверки параллелизма, так что это естественный (и правильный IMO) способ сделать это. Особенно, если для проверки параллелизма уже используется поле метки времени.

Во время изменений летнего времени вам нужен способ аннулировать ваш кэш записей на клиенте, чтобы он перезагрузил все записи после изменения времени.

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

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