减少MVC网站中的数据库调用次数

时间:2015-04-18 02:48:05

标签: c# asp.net-mvc-4 dapper

我有一个复杂的C#MVC 4网站,可以连接到多个数据库。每个请求都要经过以下步骤

  1. 检查用户是否已登录并从身份验证Cookie获取用户名。
  2. 查询查找数据库以确定客户端数据库的位置并获取它的连接字符串(我们为每个客户端维护一个不同的数据库)。
  3. 连接到客户端数据库并运行查询以获取用户的详细信息(ID,电话号码,偏好等)。
  4. 根据请求执行选择/更新/删除或插入。
  5. 除了上述步骤之外,我们还有各种动作过滤器来查询数据库并检查角色等。这些动作过滤器必须执行步骤1,2,3和4来获取用户信息。我现在发现应用程序运行缓慢,因为它需要执行的查询数量。通过缓存会话中的连接字符串和用户详细信息,我可以大大加快速度。

    我们很快就会将网站迁移到服务器场,我不想依赖会话进行缓存。是否有任何其他明显的设计选择,我忽略或我必须继续使用memcached或某种服务器场的解决方案形式的缓存?

    修改 我应该提到数据库和网站在不同的服务器上,有时数据库调用必须通过WAN进行,具体取决于客户端的位置。我已经测量了性能,并且知道数据库调用是性能不佳的原因。

3 个答案:

答案 0 :(得分:0)

您是否考虑将客户端ID存储在身份验证Cookie中,然后保留[ClientId - >的服务器端缓存。 ConnectionString]?

答案 1 :(得分:0)

您可以在第一步后生成和验证Cookie并将数据保存在会话或cookie中。您可以使用先前存储的cookie /会话中的数据并跳过步骤1.

您可以尝试使用群集索引来更快地获取数据

答案 2 :(得分:0)

您可以尝试在此使用HttpCookieAuthenticationCookie来维护您将在视图和控制器中访问的冗余数据的状态。我要说的一个简单示例是维护已登录用户的userId和userName的状态。这是您可以用作参考的内容:

private void SetCookie(string userName, long userId)
{
   string IdUser = Common.Encrypt(userId.ToString());
   FormsAuthentication.SetAuthCookie(userName, false);
   HttpCookie uCookie = new HttpCookie("UserId", IdUser);
   Response.Cookies.Add(uCookie);
}

这只是一个示例代码,用于说明如何生成Cookie。在cookie中设置信息后,每次需要该ID或名称或电话号码或其他任何内容时,您都不必访问数据库。您只需从已创建的cookie中检索该信息即可。

希望这有帮助。

相关问题