Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 реализовать репликацию  [new]
maximIZ
Member

Откуда: Спб
Сообщений: 640
Добрый день. Есть головная организация где крутиться будет издатель и есть несколько филиалов, подписчиков. Есть таблица - в которой по сути хранится переписка персонала. Здесь реализовано что-то вроде чата. Помимо всего прочего реплицируется много таблиц, но речь сейчас пойдет конкретно о этой табличке. Т.е. сами филиалы еще и издатели, по логике менеджер одного филиала пишет в другой филиал и сообщение уходит по репликации в голову а голова реплицирует уже туда куда нужно. У каждого филиала хранятся только свои сообщения, в голове хранится вся переписка. Так вот вопрос, как реализовать в голове репликацию чтобы в филиал уходила только его порция сообщений, т.е. то что адресовано пользователям того филиала. Сама собой есть поле по которому можно определить в какой филиал идет сообщение. У меня два варианта: либо настраивать публикацию на каждый филиал и в фильтре прописать условие. Либо (при создании реплики на подписчиках создаются процедуры, которые как я понял отвечают за вставку - обновление данных) изменить эти процедуры и прописать там условие. Может есть другие варианты? И как вообще правильно поступить в такой ситуации? Использую я публикацию транзакций.
18 дек 11, 14:50    [11784665]     Ответить | Цитировать Сообщить модератору
 Re: реализовать репликацию  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8879
Для начала select @@version, хотя, у Вас уже выбран способ репликации.
Наверное, если переписка интенсивная, то лучше бы настроить по отдельной репликации на каждый филиал.
Если же объём невелик и их (филиалов) немного, то лучше таки да, фильтр на принимающей стороне. Простейшая таблица (нереплицируемая!) с наименованием/кодом филиала позволит идентичной процедурой принимать на разных серверах корреспонденцию, адресованную только конкретному филиалу.

PS Странное решение вообще-то... Но вполне имеет право на жизнь.
18 дек 11, 15:36    [11784726]     Ответить | Цитировать Сообщить модератору
 Re: реализовать репликацию  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
Если обмен только Центр <-> Филиал, можно посмотреть в сторону merge-репликации с параметризованными фильтрами.

Если обмен Филиал1 <-> Центр <-> Филиал2, то откажитесь от репликации таблицы. Сделайте через репликацию вызовов хранимых процедур. Получится одна репликация в центре во все филиалы и обратная репликация в центр в каждом филиале.

Либо реализуйте все через ServiceBroker.
18 дек 11, 16:17    [11784817]     Ответить | Цитировать Сообщить модератору
 Re: реализовать репликацию  [new]
maximIZ
Member

Откуда: Спб
Сообщений: 640
invm
Сделайте через репликацию вызовов хранимых процедур.


а что за репликация такая, ни как не пойму
18 дек 11, 18:42    [11785112]     Ответить | Цитировать Сообщить модератору
 Re: реализовать репликацию  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
Публикация выполнения хранимых процедур в репликации транзакций
18 дек 11, 19:09    [11785144]     Ответить | Цитировать Сообщить модератору
 Re: реализовать репликацию  [new]
maximIZ
Member

Откуда: Спб
Сообщений: 640
идея очень хорошая. только я не понял немножко. Скажем филиал 2 отправляет сообщение в филиал 1 и оно идет через головной офис. Если использовать эту технология то создастся и выполнится процедура на insert в головном отделении и в результате наше сообщение появится в базе головы но в филиале 1 оно не появится. Или я чего недопонял.
18 дек 11, 20:39    [11785349]     Ответить | Цитировать Сообщить модератору
 Re: реализовать репликацию  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
maximIZ
идея очень хорошая. только я не понял немножко. Скажем филиал 2 отправляет сообщение в филиал 1 и оно идет через головной офис. Если использовать эту технология то создастся и выполнится процедура на insert в головном отделении и в результате наше сообщение появится в базе головы но в филиале 1 оно не появится. Или я чего недопонял.
Вы недопоняли. Ничего автоматом не создастся. Все необходимые процедуры должны быть написаны и нужные из них опубликованы. Логически рассматривайте репликацию хранимых процедур как автоматический асинхронный RPC, т.е. реплицируются действия, а не данные. Например:
в филиале
create procedure dbo.uspMSG_SendToHQ
	@Source sysname,
	@MessageBody varchar(max)
as
begin
 set nocount on;
end;
в центре
create procedure dbo.uspMSG_SendToHQ
	@Source sysname,
	@MessageBody varchar(max)
as
begin
 set nocount on;
 
 insert into dbo.Messages (...) values (...);
end;
В филиале вы публикуете uspMSG_SendToHQ и подписываете центр на эту статью. Теперь если в филиале вызвать в транзакции uspMSG_SendToHQ и эту транзакцию подтвердить, то этот вызов будет отреплицирован в центр.

Если у вас версия сервера >= 2005, то смотрите в сторону ServiceBroker с внутренней активацией.
18 дек 11, 21:57    [11785634]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить