SQL Server负载平衡优化命中或优化查询

时间:2012-01-07 05:41:00

标签: asp.net .net ado.net connection-pooling scalable

当我们的开发人员编写数据访问代码时,如果应用程序应该可以很好地扩展并处理load / Hits,我们应该真正担心什么。

鉴于这个简单的问题,你将如何以可扩展的方式解决它。

1. ProjectResource是一个类(分配给Project的封装资源)

2.分配给Project的每个资源都是User Class

3. User中的每个Project也有ReportingHeadProjectManager,他们也是User的实例

4.最后,有一个包含项目详细信息的Project

使用的班级传奇

  • 用户

  • 项目

  • ProjectResource

表格图

  1. ProjectResource

    • RESOURCEID

    • 专案编号

    • 用户ID

    • ReportingHead

    • ProjectManager

  2. 类图

    1. ProjectResource

      • ResourceId:String / Guid

      • 项目:项目

      • 用户:用户

      • ReportingHead:User

      • ProjectManager:用户

    2. 注意:

      所有用户信息都存储在用户表

      所有项目信息都存储在项目表中

      这是问题

      当遵循下面的项目操作中的资源申请时

      • 首先获取项目记录

      • 获取UserId,发出请求(使用Users DAL)获取用户实例

      • 获取ProjectId,发出请求(使用Projects DAL)获取项目信息

      • 最后将UsersProject分配给ProjectResource的实例

      显然,您可以在此处看到3 Db Calls用于填充单个ProjectResource,但是明确定义了关注点和管理对象的人员。 这是我计划的方式,因为connection poolingSql Server中也提供了ADO.net。 {{1}}

      还有另一种方法,使用表内连接然后填充,在单击中检索所有细节。

      我应该采取哪种方式?为什么?

      附加功能:

      .NET 2.0,ASP.net 2.0,C#,Sql Server 2005,DB在同一台机器托管应用程序上。

1 个答案:

答案 0 :(得分:1)

为了获得最佳性能和可扩展性,您应该尽量减少到DB的往返次数。为了向自己证明,只需运行一些基准测试;它很快变得清晰。

单次往返的一种方法是使用连接。另一种方法是返回多个结果集。后者有助于消除可能的重复数据。