2010-08-10 1 views
0

Я работаю над проектом POS. Пользователь требует, чтобы это приложение могло работать как в режиме онлайн, так и в автономном режиме, что означает, что им нужна локальная база данных. Я решаю использовать репликацию SQL Server между каждым магазином и головным офисом. В каждом магазине необходимо установить SQL Server Express, а в головном офисе уже есть SQL Server Enterprise Edition. Репликация будет выполняться каждые 30 минут по расписанию, и я выбираю Merge Replication, потому что данные могут меняться как в магазине, так и в головном офисе.Какое оптимальное решение для POS-приложения?

Когда я занимаюсь POC, я нашел, что это решение работает неправильно, иногда работа - ошибка, и мне нужно повторно инициализировать ее. Это решение также занимает очень много времени, что явно неприемлемо для пользователя.

Я хочу знать, есть ли какие-либо решения лучше, чем то, что я сейчас делаю?

Update 1:

Ограничения системы являются

  1. Почти сделок может произойти в как магазин и головной офис.
  2. Некоторые транзакции должны работать в режиме реального времени, если, скажем, после того, как пользователь сохранит данные в своем местном магазине, данные должны также обновиться в головном офисе. (Если они сейчас в сети)
  3. Пользователь может работать даже в своем магазине, отключен от базы данных головного офиса.
  4. Наша оценка объема данных не более 2000 строк в день.
  5. Windows 2003 - ОС сервера в головном офисе, а Windows XP - ОС всех клиентов.

Update 2:

  1. В настоящее время они около 15 клиентов, но это число будет расти в довольно медленном темпе.
  2. Размер данных составляет от 100 до 200 строк на репликацию, я думаю, что он может составлять не более 5 МБ.
  3. Клиент подключается к серверу по линии аренды; 128 кбит/с.

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

Как и выше, я делаю вывод, что репликация может не подходит для моей проблемы, и я думаю, что это может имеет еще лучшее решение, которое может служить то, что мне нужно в Update 1:

+0

Вы не даете достаточно подробностей - вы не сообщаете нам никаких ограничений, которые у вас есть для системы, количества ожидаемых данных, мощности и ОС центрального сервера и POS-систем ... Я могу продолжать ... – Oded

+0

@Oded Я добавил информацию, как вы предлагаете, сообщите мне, если этого недостаточно. – Anonymous

+0

Еще вопросы ... сколько клиентов? Какой размер данных? Какая связь между клиентом и сервером при подключении? – Oded

ответ

2

Кажется, вам, возможно, понадобится свернуть собственный двунаправленный механизм репликации.

Часть причин, по которым так много времени, заключается в том, что по такой узкой ссылке (128 Кбит/с) две базы данных должны быть согласованными (поэтому они должны проверять все строки) до начала репликации. Как вы можете себе представить, это может (и делать) длиться долго. Даже 5Mb займет около минуты, чтобы передать эту ссылку.

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

0

Мое предложение заключается в использовании доступа MS локально и постоянно обновлять данные на сервере через определенный интервал. Добавьте обновленный столбец в каждую таблицу. Когда запись добавляется или обновляется, установите обновленный coloumn. Для удаления вам нужно иметь таблицу seprate, где вы можете поместить значение первичного ключа и имя таблицы. При синхронизации извлекают все локальные записи, обновленное поле которых не установлено и не обновляется (изменяет или вставляет) на центральный сервер. Удалите все записи, используя локальную удаленную таблицу, и все готово!

Предполагаю, что ваш центральный сервер предназначен только для сбора данных.

+0

«Объединить репликацию, поскольку данные могут меняться как в магазине, так и в головном офисе». – JeffO

0

В настоящее время я выполняю то, что вы описываете, используя репликацию SQL Server Merge Replication, настроенную для веб-синхронизации. У меня есть мои агенты, которые работают по 1-минутному графику и добились успеха.

Какие сообщения об ошибках вы видите?