ASP.NET中的数据访问:内存中集合与数据库

时间:2013-11-12 16:18:30

标签: asp.net asp.net-mvc entity-framework azure sql-server-express

我是ASP.Net,MVC和实体框架的新手。

我想了解小型数据库的最佳实践。例如,在Contoso大学说,我们知道只有几百或几千名学生和课程。因此,所有数据都可以很好地适应内存。那么最好是使用内存中的集合并避免潜在的高延迟数据库操作吗?

我在考虑部署到Windows Azure的小规模生产网站。

更具体地说,我想到的特定场景有几千条只读的记录,尽管用户也可以创建自己的项目。想想一组电影,专辑或歌词,这些电影,专辑或歌词已经从几千个热门标题的列表中脱机组装。用户可以浏览该集合(只读),并且大多数时间他们可以在那里找到他们正在寻找的内容。但是,用户也可以添加自己的记录。

由于流行的游戏适合内存,而且这些都是只读的,最好不要将数据库用于热门游戏吗?您将如何组织此方案的数据和代码?

感谢您的任何想法和指示。

2 个答案:

答案 0 :(得分:2)

我认为数据库是存储信息的好地方。

但是,您担心数据库延迟。

您可以通过缓存来缓解这种情况 - 数据存储在内存中。

简而言之,它不是一个或两个场景......

答案 1 :(得分:1)

您绝对应该将数据存储在某些持久性存储介质(SQL,Azure表,XML文件等)中。将项目存储在内存中的问题是:

  1. 您必须找到一种方法为应用程序存储一次,而不是每个用户存储一次。否则,您的内存空间中可能会有多个2-5 MB数据集的副本。

  2. 用户可以添加记录,这些记录可供所有人查看或仅供参考。您将如何处理用户特定数据。

  3. 如果你的应用程序池回收,服务器被Azure工程师等移动,你必须重新填充这些数据。

  4. 如上所述,缓存可以真正帮助缓解任何SQL Azure延迟(顺便说一句,不是那么高,我们使用SQL Azure和Web角色并且没有任何问题)。

  5. 复杂查询。当然,您可以使用LINQ在内存列表中进行处理,但SQL实际上是为了以快速,高效,数据安全的方式执行关系查询而构建的。

  6. 对内存中的集合进行线程安全操作可能很麻烦。

  7. 修改/附录

    我们发现,使用SQL Azure的关键是不要发出大量微小的查询,而是尽可能少地查询所需的数据。这是所有Web应用程序应该执行的操作,但在使用SQL Azure而不是本地托管数据库时会更加明显。最后,就性能/缓存/等而言,不要过早优化!让您的应用程序正常运行,然后找出瓶颈。通常情况下,它将成为解决瓶颈问题的代码解决方案,而不一定是硬件/基础架构问题。