【发布时间】:2011-05-05 04:45:15
【问题描述】:
我即将开始设计具有以下特点的个人项目的架构:
- 本质上是一个“游戏”,包含基于一项运动的多个并发用户。
- 定期模拟这项运动的比赛,并将结果存储在数据库中。
- 用户可以“实时”查看模拟比赛的详细信息,并在比赛发生后查看结果。
我开发了一个类似的 Web 应用程序,其范围与该项目的前一个迭代相比要小得多。然而,在这种情况下,我选择使用 SQLite 作为我的数据库提供程序,因为我还有一个可重新分发的桌面应用程序,可用于手动模拟匹配(实际上它作为 Web 应用程序之外的独立模拟器运行)。我的约束现在已经转变为仅是一个 Web 应用程序,因此我不必担心这种额外的复杂性。
我之前实现的主要问题是处理并发请求。我犯了一个错误,即使用一个数据库(由磁盘上的单个文件表示)来支持模拟方面(在服务器上的单独进程中运行)和 Web 应用程序。因此,当用户在进行实时模拟的同时访问网站时,会出现各种数据库访问问题,因为它被一个进程锁定。我通过在数据库操作上实现跨进程互斥来解决此问题,但这大大降低了网站的性能。
我将使用的工具是:
- 用于 Web 应用程序的 ASP.NET。
- 用于数据库的 SQL Server 2008 R2...可能带有用于对象关系映射的 NHibernate 层。
我的问题是,我该如何设计才能实现最佳效率以及并发访问?显然,从文件转移到实际的数据库服务器会有好处,但我是否需要两台冗余服务器——一台用于模拟进程,一台用于 Web 服务器进程?
任何建议将不胜感激!
谢谢。
【问题讨论】:
标签: asp.net sql-server-2008 database-design web-applications concurrency