Найти - Пользователи
Полная версия: Синхронизация (многосторонняя репликация) БД
Начало » Базы данных » Синхронизация (многосторонняя репликация) БД
1 2 3
pymind
Есть две базы данных:
- онлайн БД (в электронном магазине)
- складская БД

Для фиксации покупки в БД используется таблица “заказы”.
Покупка возможна как непосредственно со склада так и онлайн.

Так выглядит таблица в онлайн БД:
$ id заказа
$ название товара
$ адрес доставки

В складской БД таблица имеет только два поля:
$ id заказа
$ название товара

Нужен механизм репликации складской и онлайн версии таблиц. В результате репликации в обеих версиях БД должны быть одни и те же данные.
И если изменить название товара в заказе в одной БД то после репликации название у этого заказа должно поменяться и в другой БД.
Репликация отложенная - будет производится, например, раз в 20 минут.
Репликация многосторонняя - данные могут изменяться и вводиться в обеих БД.
Механизм допустим любой:
- по принципу сравнения записей одной таблицы с записями другой
- или перенос только изменений, зафиксированных в журнале вносимых транзакций БД

В качестве СУБД используется MySQL (через ORM - SQLAlchemy+Elixir). В случае необходимости допустимо перейти на любую бесплатную СУБД.

Существуют ли какие-нибудь готовые изящные решения такой ситуации?
Lolka
Два можно разрулить следующим образом: в одной ставятся для pk ключей только четные, для другой – только нечетные значения – это исключит конфликты с добавлением записей. Но остается сложная часть – обновления. Если в промежутке времени и одна и другая сторона обновила одну и ту же строку – надо решить, кто победил. Для этого есть разные техники.
У меня такая система работает на PostgreSQL + Bucardo для двух серверов.
Ferroman
Я так понимаю репликация нужна на уровне приложения.
Lexander
А готовое решение не устраивает?
http://www.webnext.ru/blog/2007/08/21/replication-mysql-master-slave.html
ZioN
Lexander
А готовое решение не устраивает?
http://www.webnext.ru/blog/2007/08/21/replication-mysql-master-slave.html
Если обратить внимание, на очень важное замечание в посте:

pymind
В случае необходимости допустимо перейти на любую бесплатную СУБД.
Такое “Готовое” решение, скорее всего не подойдет.
pymind
Ferroman
Я так понимаю репликация нужна на уровне приложения.
К сожалению не понимаю что вы хотели сказать.
pymind
Lexander
А готовое решение не устраивает?
http://www.webnext.ru/blog/2007/08/21/replication-mysql-master-slave.html
Как я уже заметил в своем посте, репликация здесь нужна многосторонняя (master-master). Иными словами, обе БД используются по отдельности, кажда со своим GUI (одна БД не служит для другой резервной копией (slave))
pymind
Lolka
Два можно разрулить следующим образом: в одной ставятся для pk ключей только четные, для другой – только нечетные значения – это исключит конфликты с добавлением записей. Но остается сложная часть – обновления. Если в промежутке времени и одна и другая сторона обновила одну и ту же строку – надо решить, кто победил. Для этого есть разные техники.
У меня такая система работает на PostgreSQL + Bucardo для двух серверов.
Спасибо за полезную информацию. Если не найду готового решения для MySQL, попробую Bucardo.
Lexander
pymind
Как я уже заметил в своем посте, репликация здесь нужна многосторонняя (master-master). Иными словами, обе БД используются по отдельности, кажда со своим GUI (одна БД не служит для другой резервной копией (slave))
А что мешает запустить такой же механизм на 2 базе? :)
Lexander
ZioN
Если обратить внимание, на очень важное замечание в посте:

pymind
В случае необходимости допустимо перейти на любую бесплатную СУБД.
Такое “Готовое” решение, скорее всего не подойдет.
допустимо != предусмотреть
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB