我正在使用以下技术和语言编写MMO服务器: .Net Framework 4,C#,SQL Server 2008 R2,实体数据模型,LINQ。
我遇到的问题是如何以及何时访问用户状态数据的永久存储(SQL Server)以提高服务器性能。
过去,当用户登录到MMO服务器时,您会将所有用户数据加载到RAM中,以便在用户连接的生命周期内进行快速读/写访问。当用户从服务器注销时,该数据将保留在数据库中。
随着实体数据模型的出现及其相关的缓存,是否需要此方法?什么时候应该Context.SaveChanges();如果是这样的话会被调用吗?
对于我的问题,我们将不胜感激。 感谢。
更多信息: 我不认为有人正在解决.NET实体模型的缓存能力。 据我所知,.NET实体数据库模型为您执行缓存,因此查询并不总是针对实际数据库运行,而是针对RAM中的数据运行。因此,从我的角度来看,我不必区分RAM数据访问和数据库访问。这是正确的假设吗?
答案 0 :(得分:2)
我不是专家,但我会坚持你的原创设计。您可能最终会占用更多内存来尝试保持上下文打开并让它跟踪用户连接生命周期内的所有更改。我建议使用POCO,在用户登录时加载对象,关闭上下文,然后在用户注销时打开新上下文,附加对象然后保存更改。
答案 1 :(得分:1)
好吧,如果您需要性能,可能需要使用带memcached的服务器池。
用户连接后,在缓存中加载所有关于他的信息,让守护进程定期将其刷新到数据库,并更新内存缓存中的数据。
RAM中的数据总是比DB中的数据更好。