Одноранговая репликация базы данных sqlite - PullRequest
5 голосов
/ 19 сентября 2011

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

Для простоты репликация должна поддерживать только репликацию с добавлением данных, т.е. только INSERT, а не DELETE или UPDATE,

Кто-нибудь знает хорошую или идеально кроссплатформенную технологию или метод создания такой системы?В настоящее время я смотрю на JXTA и JXSE, но меня отталкивает их сложность и очевидное отсутствие жизни в сообществе после перехода Sun на Oracle.

Спасибо!Frans

Ответы [ 2 ]

0 голосов
/ 11 октября 2011

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

  • В частности, нам нужно знать, какой язык вы хотите использовать, или какие языки вы предпочитаете избегать.
  • Кроме того, подумайте, как вы намереваетесь выполнить одноранговый переход - можете ли вы настроить доверие между парами узлов вручную или хотите, чтобы они автоматически обнаруживались?
  • Предполагается, что все узлы могут вставлять данные?

Если вы можете использовать PHP, и вам нравится ручной просмотр пар узлов, тогда мой подход может быть интересен. Настройте ORM, например Doctrine, Propel или NotORM, и попросите каждый узел регулярно синхронизироваться с источником времени в Интернете. Для каждой новой строки в БД захватите данные (либо в массиве, либо в объекте ORM), сериализуйте их и отправьте на все узлы, с которыми у вас есть доверительные отношения. В случае неудачной отправки запомните это и повторяйте через определенные промежутки времени (возможно, отказ от работы после того, как удаленный узел не сможет ответить на большое количество попыток).

Нажатия могут быть инициированы вашим приложением, которое создает строку, или могут быть вызваны любым планировщиком, доступным на каждой машине. Push-сообщение может быть XML или для простоты может быть просто POST-сообщением, содержащим новую строку и любые метаданные (например, отметку времени сохранения, чтобы разрешить порядок INSERT для нескольких узлов).

Если ваши узлы не имеют статических IP-адресов, они могут быть зарегистрированы с помощью службы динамической адресации DNS, чтобы каждый узел мог поддерживать связь со сверстниками, даже если их IP-адрес изменяется. Вы также можете рассмотреть возможность добавления системы подписи сообщений, чтобы гарантировать подлинность сообщений между узлами.

0 голосов
/ 08 октября 2011

Возможно, вы захотите изучить JGroups для уровня связи, если вам не нравится JXTA.Для репликации, я думаю, вам придется реализовать свой собственный код.

...