Синхронизация базы данных

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

Одно из решений - разместить базу данных в облаке, но соединение с базой данных, облако и подключение к Интернету должны быть всегда доступны. Так бывает не всегда.

Итак, мой вопрос: есть ли какая-либо система синхронизации базы данных или библиотека синхронизации, чтобы я мог работать без подключения к локальной базе данных и при подключении синхронизировать внесенные мной изменения и получать изменения, внесенные другими?

Обновлять:

Приложение находится под Windows (7 / xp) (пока)

Это в Delphi 2007 win32

Все клиенты должны иметь доступ на чтение / запись

У всех клиентов есть подключение к Интернету, но не всегда

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

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


person Jlouro    schedule 27.05.2012    source источник
comment
Да много. Я думаю, вам нужно задать более конкретный вопрос ....   -  person Mitch Wheat    schedule 27.05.2012
comment
Разрешение конфликтов - сложная проблема. В конце концов, с отключенной системой два человека могут легко изменить одно и то же поле в одной и той же записи или выполнить серию правок, которые невозможно согласовать (удалить запись в одном месте, изменить ее в другом). Отключенные базы данных должны иметь очень строгие ограничения на то, что можно делать при отключении, иначе такие вещи, как удаление, должны быть заменены такими вещами, как Tombstoning, чтобы сделать синхронизацию менее сложной.   -  person Warren P    schedule 27.05.2012
comment
Чем больше я об этом думаю, тем больше ломается. Например, поля первичного ключа Identity / Autoincrement плохо работают в распределенной БД, где создание новых записей разрешено на отключенных клиентах. Вам понадобится уникальный идентификатор, который является глобально уникальным для всех отключенных систем, так что до свидания, автоматически увеличивающиеся 32-битные целочисленные столбцы идентификаторов и привет GUID для всех первичных ключей. Практически единственное, что работает чисто, - это правки, и даже в этом случае возникают конфликты.   -  person Warren P    schedule 27.05.2012
comment
Да, поэтому я спрашиваю. Я все это вижу и многое другое. Но есть ли способ справиться с этим или примирить это после?   -  person Jlouro    schedule 28.05.2012
comment
Привет @Jlouro! @WarrenP верен, но для того, что я испытал в этой проблеме, есть уровни неопределенности, с которыми готов иметь дело системный архитектор. Я ответил на этот вопрос, который я использую во многих проданных мною системах. До сих пор это работало у моих клиентов месяцами!   -  person Please_Dont_Bully_Me_SO_Lords    schedule 12.08.2012


Ответы (5)


У вас есть множество проблем, когда вы думаете о таком решении. Во-первых, есть множество возможных решений, таких как:

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

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

Однако при выходе из корпоративной сети возникает множество других проблем. А как насчет безопасности данных и прав доступа? Есть ли у вас другие варианты, например, облегчить доступ к базе данных из сети? Пользователям нужен только доступ для чтения к базе данных или доступ для чтения и записи? Требуется ли одновременный доступ к обеим версиям. Будут ли обновления для обоих одновременно?

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

person Gordon Linoff    schedule 27.05.2012

Я считаю, что RemObjects DataAbstract допускает автономный режим и синхронизацию с помощью того, что они называют Портфели. Все остальные ваши требования (безопасность, шифрованные соединения и т. Д.) Также покрываются.

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

person Leonardo Herrera    schedule 28.05.2012
comment
Очень красивый RemObjects DataAbstract, но мне он не бесплатно. :-( - person Please_Dont_Bully_Me_SO_Lords; 12.08.2012
comment
Нет это не так. Но это дешево, учитывая все, что предлагает. - person Leonardo Herrera; 13.08.2012
comment
Лучше создать свой собственный код, вы сможете настроить его так, как вам больше всего нужно. - person Please_Dont_Bully_Me_SO_Lords; 15.08.2012
comment
@EASI - Если так, то зачем останавливаться на автономном режиме и синхронизации? Вы наверняка сможете написать лучшую базу данных! И, возможно, лучшая операционная система, пока вы в ней работаете! - person Leonardo Herrera; 16.08.2012

В мире Java доступны некоторые продукты (лицензия SymmetricDS lgpl) - помимо того, что это фактически рабочая система, в ней документируется, как она обеспечивает синхронизацию. Подключается к любой базе данных с поддержкой jdbc. . Существует профессиональная версия, но в руководстве пользователя (загружаемый PDF-файл) представлена ​​схема базы данных и правила синхронизации push-pull. Полезно, если вы хотите построить свой собственный.

Кстати, есть репликация данных, поэтому отметьте, что это поможет.

person DavidG    schedule 12.07.2013

Одна из бесплатных возможностей - это Microsoft Sync Framework: http://msdn.microsoft.com/en-us/sync/bb736753.aspx

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

person Shiraz Bhaiji    schedule 27.05.2012

Можно ли совместно использовать базу данных, такую ​​как .mdb, и работать нормально? Я пытаюсь, но иногда файл, в котором база данных изменяется с DB на DB1, я использую delphi Xe4 и Google Drive. Спасибо

person ml.    schedule 11.07.2013