我將要開始設計一個個人項目,該項目具有以下特點的架構:包含基於運動幾個併發用戶實時數據的Web應用程序設計
- 基本上是一個「遊戲」。
- 這項運動中的比賽定期進行模擬,其結果存儲在數據庫中。
- 用戶可以查看模擬匹配「live」的詳細信息,並在發生後查看結果。
我開發了一個類似的Web應用程序,其範圍遠小於此項目的前一次迭代。然而,在這種情況下,我選擇使用SQLite作爲我的數據庫提供者,因爲我還有一個可用於手動模擬匹配的可再發行桌面應用程序(實際上,它是作爲Web應用程序之外的獨立模擬器運行的)。我的限制現在已經轉移到只是一個Web應用程序,所以我不必擔心這種額外的複雜性。
我與我以前執行的主要問題是處理併發請求。我犯了一個錯誤,即使用一個數據庫(由磁盤上的單個文件表示)爲模擬方面(在服務器上的單獨進程中運行)和Web應用程序提供支持。因此,當用戶同時訪問網站並進行實時模擬時,由於一個進程被鎖定,所以存在各種各樣的數據庫訪問問題。我通過在數據庫操作上實現跨進程互斥來解決這個問題,但這大大降低了網站的性能。
我將使用的工具有:
- ASP.NET Web應用程序。
- SQL Server 2008 R2的數據庫...可能與一個NHibernate層的對象關係映射。
我的問題是,我如何設計這個,這樣我會實現最佳效率以及併發訪問?顯然,從文件轉移到實際的數據庫服務器會有積極的一面,但我是否需要有兩個冗餘的服務器 - 一個用於模擬過程,另一個用於Web服務器進程?
任何建議,將不勝感激!
謝謝。
感謝您的答案和提示。你有沒有使用NHibernate的經驗?由於> 90%的數據可能會通過對象映射存儲,我是否需要明確地擔心這些事情? – sohum 2010-11-04 18:10:48
我對NHibernate沒有太多經驗,但是從我所知道的情況來看,如果讓NHibernate會話保持短暫的狀態,你應該沒問題。規範化點與ORM無關,因此無論如何您都應該這樣做。 – tdammers 2010-11-05 10:45:53