我将要开始设计一个个人项目,该项目具有以下特点的架构:包含基于运动几个并发用户实时数据的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