Вопрос синхронизации баз данных у меня возник, когда появилось несколько компьютеров/хостов, собирающих в той или иной мере одинаковую информацию. Вопрос определения критериев с помощью которых можно четко определить различия в базах данных поднимался каждый раз, когда необходимо было выполнить синхронизацию данных из различных источников. В этом посте я хочу осветить некоторые свои наработки в этом направлении. Я умышлено убрал привязку к каким-либо реализациям баз данных (mysql, postgresql, sqlite), чтобы выявить только общие принципы.
Если не привязываться к конкретной реализации, то содержимое двух баз (А и Б) можно условно разделить на следующие типы:
- одинаковые данные существуют в обоих базах (А и Б)
- есть уникальные данные в базе А
- есть уникальные данные в базе Б
Для определения различий в базах обычно вводятся критерии, с помощью которых можно определить, что данные идентичны либо различны.
Предопределенные ключевые поля определяющие уникальность данных могут помочь в решении данной задачи.
В зависимости от типа хранимых записей, может быть очень удобным введение дополнительного поля вычисляющего контрольную сумму вспомогательных полей. Это позволит выявлять ситуации, когда ключевые поля идентичны, а вспомогательные отличаются.
Наличие поля даты последнего изменения данных, позволят помочь в ситуации, когда ключевые поля данных в обоих базах одинаковы, вспомогательные различны и необходимо определить какие из данных наиболее актуальны. Часто бывает, что самые последние изменения являются актуальными.
Поле уникальности, контрольная сумма записи, дата последнего изменения. Эти то те критерии, которые я использую сейчас для синхронизации данных. Буду очень признателен, если кто-то сможет предложить другие критерии для эффективного, быстрого и может более легкого способа синхронизации данных.
суббота, 10 апреля 2010 г.
Подписаться на:
Комментарии к сообщению (Atom)



0 комментариев:
Отправить комментарий