在上一篇中我们配置好了主从库,现在我们尝试在程序中使用主从库。
主从库之间是一种发布订阅的关系,发布者和订阅者之间并非实时同步的,通常会有几分钟的延时,更有甚者会有几个小时的延时。所以我们需要通过合理的使用来避开有延时这个问题。
我们希望主库尽可能的少参与查询,来提高写的及时性;同时要让从库在不影响读出数据的准确及时的前提下尽可能的分担主库的压力。
主从两个库需要在配置文件中配置两个连接字符串,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 | } |
正确的使用主从库,可以很好的提升系统的性能。使用主库还是从库的选择权决定在业务逻辑的手里。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
如何在数据库应用中发挥SSD的优势
在数据库应用中发挥SSD技术的优势是具有挑战性的。本文列举了处理AWS应用的一些注意事项。
-
SQL调优之“忧”:我们为什么需要SQL调优?
DBA往往认为SQL调优是必要的、重要的甚至是关键的。现实情况是,SQL调优所消耗的时间和资源,往往会把CPU和运行时间的节省抵消掉。
-
MySQL数据库网卡软中断不平衡问题及解决方案
随着数据库的优化,现在流量可以达到150M,所以我们采用了双网卡,在交换机上绑定,做LB的方式,提高系统的吞吐量。
-
EMC收购数据库优化厂商Zettapoint
据报道,EMC将以1000万美元收购数据库优化公司Zettapoint,该公司强调存储分层和业务智能数据仓库,这对于EMC来说将具有一定吸引力。