Я разрабатываю приложение для бронирования событий, и мне трудно понять, как управлять процессом бронирования. Я знаю о транзакциях db и немного о блокировке, но у меня есть много бизнес-правил для проверки, прежде чем можно будет совершить бронирование, и я беспокоюсь о узких местах работы.Синхронизация заявки на бронирование C#/asp.net
Вот краткое описание того, что происходит:
- Событие имеет максимальное количество слотов
- Пользователь может заказать одно место в турнире
- Каждый пользователь имеет счет денег и каждое событие стоит определенное количество
Учитывая вышеуказанные параметры, следующие бизнес-правила, что мне нужно проверить для бронирования иметь место:
- Пользователь еще не забронировали место для этого события
- Пользователь имеет достаточно средств, чтобы заказать это событие
- Событие имеет по крайней мере одно место доступно
- Событие не конфликтует с другими события, которые пользователь забронировал (не столько проблема, сколько я могу проверить это при отображении страницы и скрыть это событие от пользователя)
Мое главное беспокойство заключается в том, что если я вытащу всю информацию из базы данных фронт (т.е. Событие, пользователь, учетная запись и существующие заказы), который к тому времени, когда я запустил всю проверку и приступаю к совершению нового бронирования, состояние системы, возможно, изменится (т.е. кто-то забронировал последнее место, деньги оставили мой счет и т. д.).
Если бы я блокировал таблицы кода/базы данных вокруг этого процесса бронирования, я потенциально (??) получил блокировку на некоторое время, влияя на другие операции в системе и вызывая проблемы с производительностью в часы пиковой нагрузки.
Может ли кто-нибудь предложить подход, посредством которого я могу управлять или, по крайней мере, ограничивать эти проблемы.
Я строю приложение asp.net в C# и с помощью SQL Server 2005.
Действительно; для системы, которую я создаю, я довольно широко смотрел на Ticketmaster. Это, безусловно, лучший ответ - идите с тем, что было доказано. –
Мысль о разделении процесса бронирования немного изменила ситуацию. Выделив шаги, которые должны произойти, я могу свести к минимуму время, когда у меня есть какие-либо блокировки или транзакции, и проверка является специфичной для конкретного этапа и позволяет собирать данные по мере необходимости. Это также позволяет мне уточнять точные сценарии отката, когда операции или проверка не выполняются с каждым шагом, который выполняется, а не обрабатывает одну большую операцию. Большое спасибо за ответ; это помогает много – swingdoctor