MyWackoSite: Chilim/dRS

dRS 

dRS – это проект который был создан для репликации специфических объектных баз данных db4o, и баз данных, с которыми может работать Hibernate (Официальный сайт(англ), Википедия).

для того, чтобы приложение, использующее dRS могло отреплицировать какую-либо базу данных, ему нужно указать путь к двум конфигурационым файлам Hibernate, в которых хранятся настройки самого Hibernate, и в том числе адрес базы данных(которая должна уже существовать), имя пользователя и пароль.

//TODO

Once More

dRS – система репликации баз данных, изначально написанная для db4o (db4o= database for objects, объектная база данных), но также способная реплицировать другие БД при помощи Hibernate. Hibernate – это библиотека, реализующая ORM(Object-relational mapping) – отображение системы объектов в базу данных. Это значит, что мы можем сохранять объекты в виде строк таблиц, каждому классу объектов соответствует таблица БД.

Далее рассматриваем только репликацию Hibernate to Hibernate.

Реплицирующиеся БД называются провайдерами. Список провайдеров, с которыми реплицировалась БД хранится в таблице drs_providers (которая добавляется репликатором в БД. Еще две создаваемые в БД таблицы drs: drs_history и drs_objects) Для репликации у инициатора должны существовать конфигурационные файлы Hibernate (hibernate.cfg.xml) для обеих сторон. В таком файле прописаны настройки Hibernate, путь к базе данных, имя пользователя и пароль.

Репликация происходит так.

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

2. Версии. Каждой успешно завершенной репликации соответствует запись в специальной таблице – drs_history. В записи содержится информация о провайдере и об установленной версии БД (после репликации двум базам данных присваивается одинаковый номер версии – максимальная из версий всех объектов из двух БД + 1). В начале репликации проверяются номера версий, установленных после последней репликации друг с другом. Если они не совпадают, репликации не происходит.

3. Поиск измененных объектов. Список измененных объектов строится по номерам версий объектов (если номер версии объекта больше всех номеров версий в записях о репликации, то он был изменен после последней репликации). (Отсюда следует, что создание и изменение объектов как-то отслеживаются; возможно, тем же методом, что и у нас.) Информация об объектах хранится в таблице drs_objects.

4. Репликация: может производиться как в одну сторону (все объекты, измененные со времени последней репликации, отсылаются от одного провайдера второму) так и в обе (тогда повторяется та же операция, но от другого провайдера). Для определения поведения программы при конфликте необходимо создать ReplicationEventListener и перегрузить его метод

public void onReplicate(ReplicationEvent event).
У программы-репликатора должен быть доступ непосредственно к базам данных (в отличие от RDBR, где взаимодействуют приложения); все прочие приложения/обертки игнорируются.

5. Репликация удаленных объектов: проводится отдельно от остальных объектов. По умолчанию при конфликте объект удаляется. Каскадное удаление не поддерживается.

6. Подтверждение репликации: все изменения сохраняются в базы данных (для обеих сторон)(?).

Вся сессия рассматривается как одна транзакция. Вызов метода ReplicationSession.rollback() приводит к отмене всех изменений с начала сессии.