Сохранение распределенных баз данных в нестабильной сети
Я столкнулся со следующей проблемой:
У меня есть множество баз данных в разных географических точках, где сеть может сильно терпеть неудачу (я пользуюсь сотовой сетью). Мне нужно, чтобы все базы данных синхронизировались, но нет необходимости находиться в режиме реального времени. Я использую Java, но у меня есть свобода выбора любой свободной базы данных.
Любые предложения о том, как я могу это достичь.
Спасибо.
Ответы
Ответ 1
Я не знаю никаких баз данных, которые предоставят вам эту функциональность из коробки; здесь сложная сложность возникает из-за необходимости обеспечения согласованности и разрешения конфликтов (например, что происходит, если сеть делится на две половины, а вы обновляете что-то до значения 123, а я обновляю ее на другой половине до 321, а затем сети снова подключиться?)
Возможно, вам придется сворачивать самостоятельно.
Для некоторых идей о том, как это сделать, посмотрите дизайн системы Yahoo PNUTS: http://research.yahoo.com/node/2304 и Amazon Dynamo: http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html
Ответ 2
Это проблема с вполне обоснованным корпусом исследований (о котором люди, по-видимому, не знают). Я предлагаю не изобретать плохое дефектное колесо, если это не совсем необходимо (например, такие необычные требования, чтобы разрешить тривиальное решение).
Некоторые ключевые слова: replication, мобильные СУБД, распределенные отсоединенные СУБД.
Кроме того, эти научные статьи актуальны (в качестве примера этой области исследований):
- Распределенные отключенные базы данных,
- Опасности репликации и решения,
- Улучшение согласованности данных в мобильных вычислениях с использованием транзакций с изоляцией,
- Работа с коррупцией сервера в слабо согласованных реплицированных системах передачи данных,
- Слух: доступ к мобильным данным с помощью оптимистической одноранговой репликации,
- Случай для непрозрачной репликации: примеры из Bayou,
- Bayou: реплицированные службы баз данных для всемирных приложений,
- Управление конфликтами обновления в Bayou, слабо подключенной реплицированной системе хранения,
- Двухуровневое кэширование клиентов и отключение работы ноутбуков в распределенных системах,
- Управление реплицированными документами в групповой системе связи,
... и т.д.
Ответ 3
Проверьте SymmetricDS. SymmetricDS - это веб-интерфейс, независимый от базы данных, программное обеспечение для синхронизации/репликации данных. Он использует технологии Интернета и баз данных для репликации таблиц между реляционными базами данных в режиме реального времени. Программное обеспечение было разработано для масштабирования для большого количества баз данных, работы через соединения с низкой пропускной способностью и выдерживания периодов отключения сети.
Ответ 4
Я не знаю ваших требований или ваших приложений, но это не вопрос быстрого ответа. Мне очень интересно посмотреть, что другие скажут. Однако у меня есть предложение, которое может или не может работать для вас, в зависимости от ваших требований и ситуации. в частности, это не поможет, если ваши пользователи должны использовать приложение, даже если сеть недоступна (автономный доступ).
Сохранение множества синхронизированных небольших баз данных - довольно сложная задача для правильной работы. Существует ли какая-либо возможность иметь только одну централизованную базу данных и либо подключать к ней клиентские приложения, либо (мое предпочтительное решение) писать некоторые веб-службы для обработки доступа/обновления данных, а не иметь кучу клиентских баз данных?
Я понимаю, что это ограничивает автономный доступ, но есть различные стратегии кэширования, которые вы можете использовать. (Это, конечно, возвращает вас к исходному вопросу.)