Какое лучшее решение для POS-приложений? - PullRequest
0 голосов
/ 10 августа 2010

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

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

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

Обновление 1:

Ограничения системы:

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

Обновление 2:

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

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

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

Ответы [ 3 ]

2 голосов
/ 11 августа 2010

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

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

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

0 голосов
/ 31 августа 2010

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

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

0 голосов
/ 10 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...