Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 17, 2009 21:26:53

pymind
От:
Зарегистрирован: 2009-07-23
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Синхронизация (многосторонняя репликация) БД

Есть две базы данных:
- онлайн БД (в электронном магазине)
- складская БД

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

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

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

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

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

Существуют ли какие-нибудь готовые изящные решения такой ситуации?



Отредактировано (Сен. 17, 2009 21:44:10)

Офлайн

#2 Сен. 17, 2009 23:34:46

Lolka
От:
Зарегистрирован: 2007-09-29
Сообщения: 128
Репутация: +  0  -
Профиль   Отправить e-mail  

Синхронизация (многосторонняя репликация) БД

Два можно разрулить следующим образом: в одной ставятся для pk ключей только четные, для другой – только нечетные значения – это исключит конфликты с добавлением записей. Но остается сложная часть – обновления. Если в промежутке времени и одна и другая сторона обновила одну и ту же строку – надо решить, кто победил. Для этого есть разные техники.
У меня такая система работает на PostgreSQL + Bucardo для двух серверов.



Офлайн

#3 Сен. 17, 2009 23:41:37

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Синхронизация (многосторонняя репликация) БД

Я так понимаю репликация нужна на уровне приложения.

Офлайн

#4 Сен. 18, 2009 09:58:45

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Синхронизация (многосторонняя репликация) БД

А готовое решение не устраивает?
http://www.webnext.ru/blog/2007/08/21/replication-mysql-master-slave.html



Офлайн

#5 Сен. 18, 2009 14:11:10

ZioN
От:
Зарегистрирован: 2007-07-12
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Синхронизация (многосторонняя репликация) БД

Lexander
А готовое решение не устраивает?
http://www.webnext.ru/blog/2007/08/21/replication-mysql-master-slave.html
Если обратить внимание, на очень важное замечание в посте:

pymind
В случае необходимости допустимо перейти на любую бесплатную СУБД.
Такое “Готовое” решение, скорее всего не подойдет.



Офлайн

#6 Сен. 18, 2009 15:22:46

pymind
От:
Зарегистрирован: 2009-07-23
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Синхронизация (многосторонняя репликация) БД

Ferroman
Я так понимаю репликация нужна на уровне приложения.
К сожалению не понимаю что вы хотели сказать.



Офлайн

#7 Сен. 18, 2009 15:27:52

pymind
От:
Зарегистрирован: 2009-07-23
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Синхронизация (многосторонняя репликация) БД

Lexander
А готовое решение не устраивает?
http://www.webnext.ru/blog/2007/08/21/replication-mysql-master-slave.html
Как я уже заметил в своем посте, репликация здесь нужна многосторонняя (master-master). Иными словами, обе БД используются по отдельности, кажда со своим GUI (одна БД не служит для другой резервной копией (slave))



Офлайн

#8 Сен. 18, 2009 15:31:11

pymind
От:
Зарегистрирован: 2009-07-23
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Синхронизация (многосторонняя репликация) БД

Lolka
Два можно разрулить следующим образом: в одной ставятся для pk ключей только четные, для другой – только нечетные значения – это исключит конфликты с добавлением записей. Но остается сложная часть – обновления. Если в промежутке времени и одна и другая сторона обновила одну и ту же строку – надо решить, кто победил. Для этого есть разные техники.
У меня такая система работает на PostgreSQL + Bucardo для двух серверов.
Спасибо за полезную информацию. Если не найду готового решения для MySQL, попробую Bucardo.



Офлайн

#9 Сен. 18, 2009 16:17:07

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Синхронизация (многосторонняя репликация) БД

pymind
Как я уже заметил в своем посте, репликация здесь нужна многосторонняя (master-master). Иными словами, обе БД используются по отдельности, кажда со своим GUI (одна БД не служит для другой резервной копией (slave))
А что мешает запустить такой же механизм на 2 базе? :)



Офлайн

#10 Сен. 18, 2009 16:19:04

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Синхронизация (многосторонняя репликация) БД

ZioN
Если обратить внимание, на очень важное замечание в посте:

pymind
В случае необходимости допустимо перейти на любую бесплатную СУБД.
Такое “Готовое” решение, скорее всего не подойдет.
допустимо != предусмотреть



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version