同步c#/asp.net预订应用程序
我正在开发一个活动预订应用程序,很难弄清楚如何管理预订过程。我了解数据库事务和一点锁定,但在提交预订之前,我有很多业务规则需要验证,我担心性能瓶颈 以下是所发生情况的摘要:同步c#/asp.net预订应用程序,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我正在开发一个活动预订应用程序,很难弄清楚如何管理预订过程。我了解数据库事务和一点锁定,但在提交预订之前,我有很多业务规则需要验证,我担心性能瓶颈 以下是所发生情况的摘要: 一个事件具有最大插槽数 用户可以在活动中预订一个地点 每个用户都有一个帐户,每个活动都有一定的费用 鉴于上述参数,我需要验证以下业务规则才能进行预订: 用户尚未预订此活动的场地 用户有足够的资金预订活动 活动至少有一个地点可用 该事件与用户预订的其他事件没有冲突(问题不大,因为我可以在显示页面时对此进行检查,并向用户隐
- 一个事件具有最大插槽数
- 用户可以在活动中预订一个地点
- 每个用户都有一个帐户,每个活动都有一定的费用
- 用户尚未预订此活动的场地
- 用户有足够的资金预订活动
- 活动至少有一个地点可用
- 该事件与用户预订的其他事件没有冲突(问题不大,因为我可以在显示页面时对此进行检查,并向用户隐藏此事件)
我正在用c#和sql server 2005构建一个asp.net应用程序。我认为一个很好的例子是Ticketmaster如何为可能购买的门票预留座位。他们告诉你,你有那么多的时间,直到把座位放回库存。它促使购买者做出决定,否则其他人将有机会坐上座位。这确实是你最大的障碍。至于检查业务规则,你必须这样做。需要在那里做的事情没有什么神奇之处。如果您需要数据来验证规则,那么这就是您需要做的。通过适当的映射和概述,您可以找到效率。我希望这回答了你的问题
祝你好运 我认为一个很好的例子是Ticketmaster如何为可能购买的车票预留座位。他们告诉你,你有那么多的时间,直到把座位放回库存。它促使购买者做出决定,否则其他人将有机会坐上座位。这确实是你最大的障碍。至于检查业务规则,你必须这样做。需要在那里做的事情没有什么神奇之处。如果您需要数据来验证规则,那么这就是您需要做的。通过适当的映射和概述,您可以找到效率。我希望这回答了你的问题 祝你好运 一种解决方案:
如果你回到80年代,阅读有关交易处理的文献,你会发现讨论最多的例子之一是航空订票系统。这是一个很好的理由,因为它是OLTP主题之一,揭示了事务处理的所有问题:正确性、troughput、争用、死锁。你所描述的是一个非常相似的问题,但是你没有飞机座位,而是有活动时段。所以,是的,你会有所有这些问题 没有神奇的精灵尘埃。这是一个难题。但有一些指导方针:
- 健忘的弗雷德不能永远锁定插槽。健忘的Fred是一个用户,他打开预订屏幕,选择一个座位,然后在没有完成交易的情况下去吃午饭。如果允许,则系统将缓慢“泄漏”未使用的插槽
- 数据库锁太昂贵,在等待用户输入时无法持有
- 只有使用细粒度锁才能实现吞吐量
- 业务逻辑不应尝试对相关项进行一致更新
- 向用户显示的所有内容都应视为“暂定”
- 用户界面应准备好处理更新冲突
- 更新逻辑应始终遵循相同的层次结构(例如,如果约定的更新逻辑为Account->User->Event->Booking,则试图更新Booking->Event->User的恶意交易将导致死锁)
事实上,有一种方法可以限制这些担忧:以这种杠杆为后盾。当然不是你每天的ASP任务,所以我建议你坚持你所知道的。如果你回到80年代,阅读有关事务处理的文献,你会发现讨论最多的例子之一是航空公司预订系统。这是一个很好的理由,因为它是OLTP主题之一,揭示了事务处理的所有问题:正确性、troughput、争用、死锁。你所描述的是一个非常相似的问题,但是你没有飞机座位,而是有活动时段。所以,是的,你会有所有这些问题 没有神奇的精灵尘埃。这是一个难题。但有一些指导方针:
- 健忘的弗雷德不能永远锁定插槽。健忘的Fred是一个用户,他打开预订屏幕,选择一个座位,然后在没有完成交易的情况下去吃午饭。如果允许,则系统将缓慢“泄漏”未使用的插槽
- 数据库lo