`

Asp.Net 网站优化 数据库优化措施 使用主从库(下)

阅读更多

上一篇中我们配置好了主从库,现在我们尝试在程序中使用主从库。

主从库之间是一种发布订阅的关系,发布者和订阅者之间并非实时同步的,通常会有几分钟的延时,更有甚者会有几个小时的延时。所以我们需要通过合理的使用来避开有延时这个问题。

我们希望主库尽可能的少参与查询,来提高写的及时性;同时要让从库在不影响读出数据的准确及时的前提下尽可能的分担主库的压力。

主从两个库需要在配置文件中配置两个连接字符串,CONN_Master和CONN_Slave。我们需要设定一些规则决定当前的查询应该从主库查还是需要从从库查。这个规则没有定式,只能根据业务需要来确定。下面我举几个例子来说明:

1. 以豆瓣读书书的详细页为假定场景,你可以点击这里看下页面的结构(我不是豆瓣的技术,在这里只是拿这个页面举例)
我们来分析呈现这个页面需要的数据和这些数据的实效性要求
1) 书的详细信息 时效性要求:要求及时
2) 豆瓣成员的常用标签 实效性:不需要很及时
3) 喜欢读这本书的人也喜欢读的书 属于分析数据,不需要很及时
4) 最新书评 要求及时
5) 读这本书的几个用户 及时性不高
6) 喜欢这本书的人常去的小组 属于分析数据不需要很及时
从上面的分析可以看出只有1),4)两项数据需要从主库读,而2),3),5),6)为非及时数据从从库读取即可。当然我们可以对这些实效性不高的数据做缓存处理。

2. 以论坛帖子列表页面为假定场景,玩论坛的人都喜欢顶贴,把自己的帖子顶到第一页让更多的人关注,而对于50页之后的帖子则反读的人很少;我们可以根据这个业务逻辑特征来决定在用户访问前50页帖子列表数据时从主库读,而当用户访问超过50页之后的数据时则从从库进行查询。

3. 以订单为例,通常超过三个月的订单就不会再有变化了,假定我们把订单号设计为日期格式时,根据订单号去查询订单时就可以根据订单号来决定该访问主库还是从库。

举了几个适用的场景,我们以第三个场景为例,写一段简单的示意代码看下

01 //orderNo 的格式为 20100528120105000001 即yyyyMMddHHmmss + 序号
02 public OrderInfo GetOrder(string orderNo) {
03     string connString = ConnStringGetter.GetForOrder(orderNo);
04     using (SqlConnection conn = new SqlConnection(connString))
05     {
06         ...
07     }
08 }
09   
10 public class ConnStringGetter
11 {
12     public static string GetForOrder(string orderNo) { 
13         int year = int.Parse(orderNo.Substring(0,4));
14         int money = int.Parse(orderNo.Substring(4,2));
15         int date = int.Parse(orderNo.Substring(6,2));
16         DateTime orderTime = new DateTime(year, money, date);
17   
18         TimeSpan ts = DateTime.Now - orderTime;
19 //根据订单的时间决定使用主库还是从库
20         if (ts.TotalDays > 30) return ConfigurationManager.ConnectionStrings["CONN_Slave"].ConnectionString;
21         return ConfigurationManager.ConnectionStrings["CONN_Master"].ConnectionString;
22     }
23 }

正确的使用主从库,可以很好的提升系统的性能。使用主库还是从库的选择权决定在业务逻辑的手里。

1
3
分享到:
评论

相关推荐

    Asp.Net 网站优化系列之数据库优化措施 使用主从库(全)

    网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求;这时候我们可以考虑使用主从库。

    ASP.NET 控件的使用

    9.3.5 使用ASP.NET的Profile-Parameter对象 281 9.3.6 使用QueryStringParameter对象 282 9.3.7 使用SessionParameter对象 284 9.4 通过程序执行SqlDataSource命令 285 9.4.1 添加ADO.NET参数 285 9.4.2 执行Insert...

    ASP.NET.4揭秘

    asp.net 4揭秘.第1卷》 第一部分 构建asp.net页面 第1章 asp.net framework概览2 1.1 asp.net和.net framework5 1.1.1 框架类库5 1.1.2 公共语言运行库10 1.2 asp.net控件11 1.2.1 asp.net控件概览11 1.2.2 html控件...

    嵌套 Repeater 实现主从表浏览(MVC)

    采用vs2008 + Northwind 数据库 实现主从表的浏览。 MVC 方式

    Repeater 实现主从表浏览

    采用vs2008 + Northwind 数据库 实现主从表的浏览。。

    ASP.NET3.5典型模块开发源代码

    8.2.4 在ASP.NET中使用JMail接收邮件 98 8.3 小结 103 第9章 上传和下载模块 104 9.1 上传和下载简介 104 9.2 简单的上传和下载 104 9.2.1 上传文件到服务器 105 9.2.2 从服务器下载文件 106 9.3 ...

    report machine for .net

    复杂的报表?在Report Machine面前,还会有什么复杂的报表存在吗?不,不会有的,因为这是一个功能强大,完全自动化、完全自由设计的报表控件... 22、提供webreport方案,可以在asp,asp.net,php中实现报表的打印预览。

    C#与.NET技术平台实战演练.part1

    名称空间8-1 类与对象8-l-1 类的成员8-l-2 对象8-1-3 定义类的语法8-2 类与结构的比较结构适用于"轻量型"的对象8-3 数据封装8-4 数据与方法的存取控制8-4-1 使用成员访问修饰符8-4-2 良好的数据隐藏方式...

    毕业设计:ASP.NET基于cs的电子邮件简单收发系统设计与实现(源代码+论文)

    电子邮件来源于专有电子邮件系统,早在Internet流行以前,电子邮件就已经存在了,是在主机-多终端的主从式体系中从一台计算机终端向另一台计算机终端传送文本信息的相对简单的方法下发展起来的。经历了漫长的过程...

    C#与.NET技术平台实战演练.part2

    名称空间8-1 类与对象8-l-1 类的成员8-l-2 对象8-1-3 定义类的语法8-2 类与结构的比较结构适用于"轻量型"的对象8-3 数据封装8-4 数据与方法的存取控制8-4-1 使用成员访问修饰符8-4-2 良好的数据隐藏方式...

    C#完整教程

    10.1 常用的ASP.NET服务器端控件 188 10.2 ASP.Net控件数据绑定 192 10.3 数据验证控件 209 10.4 DataGraid控件 219 10.5 AdRotator控件 235 10.6 Calender控件 236 10.7 Visual Studio.Net实现留言板 239 第十一章 ...

    ReportMachine

    4、webreport版:是对ReportMachine vcl版的再开发,用在asp,asp.net,jsp做的b/s架构的程序中,为客户端ie提供报表预览、打印、导出功能,webreport包括2部分:服务器端报表引擎(在asp,asp.net,jsp都能用,...

    Asp.NetCoreDemo.rar

    telerik reporting 在.net core 2 api 使用,如何免安装oracle 客户端运行程序,下载后的 报表文件,数据库要自己提供,这个例子实现了 主从表,从表采用子表绑定。 博客地址:...

    如何使用TreeView

    如何绑定树形结构 ,数据库中单表循环绑定, 主从表绑定。

Global site tag (gtag.js) - Google Analytics