Управление параллелизмом в многопользовательском режиме просмотра веб-приложений. - PullRequest
2 голосов
/ 06 июля 2010

Ребята, у меня большая проблема.

Я запускаю приложение backoffice, и представьте, у меня есть форма, которая содержит редактируемый вид сетки.

  1. 100 Пользователи переходят на страницу
  2. 100 Пользователи просматривают страницу формы как данные, предоставленные из базы данных
  3. 100 Пользователи редактируют некоторые поля
  4. Как контролировать окончательные данные и согласованность в этом примере?

Ответы [ 2 ]

0 голосов
/ 06 июля 2010

Зависит от того, что вы действительно хотите. У вас есть требования? Вы ловите предложения?

Одно из возможных решений

Если у вас есть явное действие сохранения, которое вызывается после завершения редактирования,

  1. Пользователь переходит на страницу,
  2. Пользователь изменяет таблицу,
  3. Пользователь "сохраняет",
  4. Страница извлекает текущие значения из хранилища данных (на момент сохранения)
  5. Страница сравнивает текущие значения с измененными значениями
  6. Любые конфликты подсвечиваются и просит пользователя «разрешить» конфликт
  7. Переходите к шагу 3. до тех пор, пока не будут обнаружены конфликты

Другое возможное решение

Если вы хотите избежать цикла с шага 3. до шага 7., вы всегда можете заключить шаги 4.–6 в транзакцию, что означает любую попытку сохранить блоков до тех пор, пока текущее сохранение не будет разрешено. , Это довольно трудоемко, требует немного больше работы и может эффективно снизить общий параллелизм.

Еще одно возможное решение

Другое возможное решение - сделать процесс менее дискретным и более непрерывным. Обеспечить прямой поток данных.

  1. Создание службы WindowsService / WCF, которая отправляет или разрешает опрос данных таблицы,
  2. Страница опрашивает данные или асинхронно получает данные от удаленного сервиса,
  3. Страница изменяет содержимое страницы пользователя с полученными данными
  4. Новые значения, которые не конфликтуют, временно выделяются одним цветом (указывая на бесконфликтное изменение), скажем, светло-зеленый
  5. Новые конфликтующие значения постоянно выделяются красным

Если у вас есть процесс сохранения, никакие красные значения не могут быть сохранены до разрешения.

Последнее (предлагаемое) возможное решение

Если у вас нет явного действия сохранения,

  1. Пользователь нажимает на ячейку (фактически запрашивая редактирование ячейки)
  2. Страница связывается со службой Windows \ WCF, запрашивая «блокировку» в этой ячейке,
  3. Если ни один другой пользователь не запросил «блокировку» для этой конкретной ячейки, заблокируйте ячейку для этого пользователя и верните true. Если другой пользователь запросил блокировку в этой конкретной ячейке, соблюдайте текущую блокировку и верните false.

Если удаленная служба возвращает false, тогда прецедент заканчивается, и ячейка не может быть изменена . Если удаленная служба возвращает значение true, пользователь изменяет содержимое, а когда он покидает ячейку или перезагружает страницу или что-то еще, удаленная служба снимает блокировку.

Заключение

Хорошо, немного машет рукой, но более чем достаточно жира, чтобы жевать. Подумайте, есть много возможных решений.

0 голосов
/ 06 июля 2010

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

Другими словами, учтите, что вы раздали 100 листов бумаги 100 разным людям, на каждом из которых была копия этой веб-формы.Эти 100 человек набрасывают заметки на своих бумагах, а затем передают их вам в случайном порядке.

Как вы справляетесь с последовательностью в этом сценарии?Когда вы можете ответить на этот вопрос, вы можете реализовать его.

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

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