我正在開發一個活動預訂應用程序,並且很難弄清楚如何管理預訂過程。我知道關於數據庫交易和關於鎖定的一些信息,但是我有很多業務規則需要在預訂之前進行驗證,我擔心性能瓶頸。正在同步c#/ asp.net預訂應用程序
這裏是發生了什麼事情的總結:
- 事件包含
- 用戶可以在事件預定一個點位的最大數量
- 每個用戶都有錢帳戶和每個事件花費一定金額
鑑於上述參數,以下業務規則是我需要驗證的預定發生:
- 用戶尚未訂出一個位置這一事件
- 用戶有足夠的資金來預訂事件
- 事件已經至少一處,
- 事件不與其他衝突用戶已預訂的事件(沒有那麼多問題,因爲我可以在顯示頁面時檢查此問題並隱藏用戶的此事件)
我主要擔心的是,如果我從數據庫中提取所有信息前面(即事件,用戶,帳戶和現有預訂),當我運行所有驗證並提交新預訂時,系統狀態可能會發生變化(即其他人預訂了最後一個地點,錢已經離開我帳戶等)。
如果我要鎖定代碼/數據庫表,這個預訂過程中,我有可能(??)鎖定了一段時間,影響系統中的其他操作,並導致在高峯時間的性能問題。
任何人都可以提出一種方法,我可以管理或至少限制這些顧慮。
我建立在C#中asp.net應用程序,並使用SQL Server 2005
確實;對於我創建的系統,我非常廣泛地觀察了Ticketmaster。這是迄今爲止最好的答案 - 與已被證明有效的方法一致。 – 2009-12-02 18:48:35
關於拆分預訂流程的思考已經澄清了相當多的情況。通過隔離需要發生的步驟,我可以最大限度地減少打開任何鎖或事務的時間,並根據需要自由地收集數據。它還使我能夠在操作或驗證失敗時明確回滾場景,而不是處理一個大的操作。非常感謝答覆;它幫助很多 – swingdoctor 2009-12-03 10:53:43