Синхронизация базы данных SQL - PullRequest
5 голосов
/ 11 июня 2011

Мы разрабатываем приложение, используя PHP и Symfony Framework. В идеале система должна работать на удаленном сервере, чтобы она могла быть доступна в любом месте онлайн. Тем не менее, также должна быть доступность в автономном режиме.

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

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

http://dev.mysql.com/doc/refman/5.0/en/replication.html

http://www.phpmyadmin.net/home_page/index.php

1 голос
/ 17 июня 2011

Это действительно зависит от вашего приложения.

Наиболее надежной системой, вероятно, будет мастер-среда с объектно-ориентированными базами данных, такими как CouchDB.

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

Подход, описанный в этом ответе, однако, работает хорошо, только если вы можете свести свои изменения к объектам документа.

Эта процедура выглядит следующим образом:

  • Каждый документ получает метку времени last_modification.

  • Клиент сохраняет метку времени, когда она последний раз синхронизировалась с сервером.

  • Удаленные документы не удаляются сразу, а получают отметку времени удаленного_

  • Когда соединение прерывается, клиент может продолжить изменять локальные документы

  • Когда соединение устанавливается снова, каждая модификация на сервере и клиенте, которая произошла после последней отметки времени синхронизации, извлекается.

  • Документы обновляются в обоих направлениях. Разрешение конфликтов в документах, которые были изменены с обеих сторон, выполняется на основе временной карты lsat_modification

  • Имейте в виду, что на сервере и клиенте могут быть небольшие смещения во времени, поэтому вы не можете на 100% полагаться на него. Синхронизация нужна. Также вы потеряете модификации, сделанные той стороной, которая изменила первой. Однако это должно быть проблемой, с которой вы можете столкнуться в своем приложении (например, системные конфликты cvs)

  • Также могут быть выбраны временные метки изменений документа и / или полей

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

Ваша проблема также возникает в системах CVS при разработке программного обеспечения (версии SVN и прочее!)

Представьте, что всегда выполняется svn-проверка, а затем svn-обновление. Маби, это возможно для вашего приложения, если вы храните свои данные в файлах XML или что-то подобное?

SVN немного старомоден, имеет некоторые недостатки и не настолько надежен, поэтому для этого случая он не подходит, но GIT может очень хорошо выполнять эту работу.

Системы мастер-репликации на основе SQL (Mysql и т. Д.) Также очень мощные, но в то же время довольно сложны в обслуживании и не так просты в настройке.

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

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