0

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

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

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

更具体地说,我正在考虑的特定场景有几千条只读记录,尽管用户也可以创建自己的项目。想想从几千个流行标题列表中离线组装的电影、专辑或歌词的集合。用户可以浏览集合(只读),并且大多数时候他们会在那里找到他们正在寻找的东西。但是,用户也可以添加自己的记录。

既然流行的标题适合内存,而且这些都是只读的,那么最好不要为流行的标题使用数据库吗?对于这种情况,您将如何组织数据和代码?

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

4

2 回答 2

2

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

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

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

简而言之,这不是一个非此即彼的场景......

于 2013-11-12T16:26:37.117 回答
1

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

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

  2. 用户可以添加记录,这些记录是供所有人查看的,还是仅供它们查看。您将如何处理用户特定数据。

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

  4. 如上所述,缓存确实有助于缓解任何 SQL Azure 延迟(顺便说一句,这并不高,我们使用 SQL Azure 和 Web 角色并且没有任何问题)。

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

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

编辑/附录

我们发现,使用 SQL Azure 的关键是不要发出大量微小的查询,而是在尽可能少的查询中获取所需的数据。这是所有 Web 应用程序都应该做的事情,但是当使用 SQL Azure 而不是本地托管的数据库时,它变得更加明显。最后,就性能/缓存/等而言,不要过早优化!让您的应用程序正常工作,然后确定瓶颈。通常,这将是解决瓶颈的代码解决方案,而不一定是硬件/基础设施问题。

于 2013-11-12T16:35:34.103 回答