Sql Server 主从数据库配置
网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求;这时候我们可以考虑使用主从库。主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作+最新数据的查询操作;从库负责查询较旧数据,做一些对实效性要求较小的分析,报表生成的工作。这样做将数据库的压力分担到两台服务器上从而保证整个系统响应的及时性。如果还无法满足业务需求,我们就要考虑创建服务器群,这里我们不做考虑!
1. 打开sql server企业管理器,在对象资源管理器里面选择复制à本地发布,右键选择新建发布

2. 打开新建发布向导,点下一步,选择发布数据的数据库

3. 我们选择Test数据库,并点击下一步,选择发布类型

4. 点击下一步,选择要发布的对象,这里我们只对表进行发布

5. 点击下一步进入筛选数据设置,这里我们要复制表的所有数据所以不做设置

6. 点击下一步,指定何时运行快照,我们选择初始话数据,并选择默认的运行快照频率

7. 继续下一步,设置快照代理的运行账户,我们选择sql server agent账户

8. 点击下一步选择创建发布,再次点击下一步设置发布的名称

9. 点击完成,完成发布的设置,并创建发布,现在在本地发布出新添加了我们创建的发布

现在成功创建了发布,我们还需要创建订阅:在本地订阅文件夹上右击新建订阅,通过向导可以很容易的创建订阅,创建订阅时可以选择以发布者推送或者订阅者主动的方式创建。具体步骤如下:
1. 通过右键菜单打开新建订阅,点击下一步,选择我们刚刚创建的发布作为订阅源

2. 选择是以推送还是以主动请求的方式同步数据,我们选择主动订阅

3. 设置执行分发代理的账户

4. 设置代理请求同步的频率

5. 设定是否立即做数据的初始化操作

6. 完成创建订阅
创建完成之后,我们可以通过在主库表中插入n条数据,然后在从库中查询的方式验证复制是否成功。
在Sql server2005中的复制创建起来很简单,我们需要根据业务需要设定复制的类型和同步的频率。
下面我们具体看下主从库的几个使用场景和一个简单的小例子。
主从库之间是一种发布订阅的关系,发布者和订阅者之间并非实时同步的,通常会有几分钟的延时,更有甚者会有几个小时的延时。所以我们需要通过合理的使用来避开有延时这个问题。我们希望主库尽可能的少参与查询,来提高写的及时性;同时要让从库在不影响读出数据的准确及时的前提下尽可能的分担主库的压力。主从两个库需要在配置文件中配置两个连接字符串,CONN_Master和CONN_Slave。我们需要设定一些规则决定当前的查询应该从主库查还是需要从从库查。这个规则没有定式,只能根据业务需要来确定。下面我举几个例子来说明:
1. 以豆瓣读书书的详细页为假定场景,你可以点击这里看下页面的结构(我不是豆瓣的技术,在这里只是拿这个页面举例)
我们来分析呈现这个页面需要的数据和这些数据的实效性要求
1) 书的详细信息 时效性要求:要求及时
2) 豆瓣成员的常用标签 实效性:不需要很及时
3) 喜欢读这本书的人也喜欢读的书 属于分析数据,不需要很及时
4) 最新书评 要求及时
5) 读这本书的几个用户 及时性不高
6) 喜欢这本书的人常去的小组 属于分析数据不需要很及时
从上面的分析可以看出只有1),4)两项数据需要从主库读,而2),3),5),6)为非及时数据从从库读取即可。当然我们可以对这些实效性不高的数据做缓存处理。
2. 以论坛帖子列表页面为假定场景,玩论坛的人都喜欢顶贴,把自己的帖子顶到第一页让更多的人关注,而对于50页之后的帖子则反读的人很少;我们可以根据这个业务逻辑特征来决定在用户访问前50页帖子列表数据时从主库读,而当用户访问超过50页之后的数据时则从从库进行查询。
3. 以订单为例,通常超过三个月的订单就不会再有变化了,假定我们把订单号设计为日期格式时,根据订单号去查询订单时就可以根据订单号来决定该访问主库还是从库。
举了几个适用的场景,我们以第三个场景为例,写一段简单的示意代码看下
- <p>//orderNo 的格式为 20100528120105000001 即yyyyMMddHHmmss + 序号</p>
 
- public OrderInfo GetOrder(string orderNo) {
 - string connString = ConnStringGetter.GetForOrder(orderNo);
 - using (SqlConnection conn = new SqlConnection(connString))
 - {
 - ...
 - }
 - }
 - public class ConnStringGetter
 - {
 - public static string GetForOrder(string orderNo) {
 - int year = int.Parse(orderNo.Substring(0,4));
 - int money = int.Parse(orderNo.Substring(4,2));
 - int date = int.Parse(orderNo.Substring(6,2));
 - DateTime orderTime = new DateTime(year, money, date);
 - TimeSpan ts = DateTime.Now - orderTime;
 - //根据订单的时间决定使用主库还是从库
 - if (ts.TotalDays > 30) return ConfigurationManager.ConnectionStrings["CONN_Slave"].ConnectionString;
 - return ConfigurationManager.ConnectionStrings["CONN_Master"].ConnectionString;
 - }
 - }
 
正确的使用主从库,可以很好的提升系统的性能。使用主库还是从库的选择权决定在业务逻辑的手里。
Sql Server 主从数据库配置的更多相关文章
- [转]Sql Server 主从数据库配置
		
本文转自:http://www.cnblogs.com/yukaizhao/archive/2010/06/02/sql-server-master-slave-mode.html 网站规模到了一定程 ...
 - sql server 主从数据库同步   利用发布 订阅是实现
		
发布订阅功能自SQL 2005之后就有了 配置方法可参考:http://blog.csdn.net/wanmdb/article/details/7515277 遇到问题: 1. 如果代理无法启动 , ...
 - sql server 查看数据库配置等信息(字符集,编码格式,版本号...)
		
select SERVERPROPERTY(N'edition') as Edition --数据版本,如企业版.开发版等,SERVERPROPERTY(N'collation') as Collat ...
 - SQL SERVER 基于数据库镜像的主从同步(数据库镜像实践汇总)
		
SQL SERVER 基于数据库镜像的主从同步 Author:chaoqun.guo createtime:2019-03-26 目录 SQL SERVER 基于数据库镜像的主从同步... 1 ...
 - sql server 主从库设计和数据库镜像设计
		
sql server 主从设计可以通过sql server 的发布订阅实现,在大数据量的时候不要用快照发布,要使用事务发布的方式实现. 主从的设计后,要将数据库的读写分离,实现数据库效率的提示 而数据 ...
 - SQL Server 2008 数据库镜像部署实例之三  配置见证服务器
		
SQL Server 2008 数据库镜像部署实例之三 配置见证服务器 前面已经完成了镜像数据库的配置,并进行那个了故障转移测试.接下来将部署见证服务器,实现自动故障转移. 一.关于见证服务器 1.若 ...
 - SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移
		
SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移 上一篇文章已经为配置镜像数据库做好了准备,接下来就要进入真正的配置阶段 一.在镜像数据库服务器上设置安全性并启动数据 ...
 - 此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行
		
错误提示:此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行.若要将此服务器连接到服务器场,请使用 SharePoint 产品配置向导,该向导可从 ...
 - SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件
		
原文:SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件 从2005开始,就引入了"数据库邮件"功能.并且取代SQLMail.原有SQLMail ...
 
随机推荐
- eclipse svn 忽略 target目录 等等... 我用的后边的方法 (转载)
			
这个build失败的解决方案就是不要把你项目的 target目录放在src repository 里面,还有 .project 和 .classpath 最好也别放到src repository 里. ...
 - 写XML配置文件时的一个乱码问题
			
首先我们用文本文档写一个xml文件如下: <?xml version="1.0" encoding="gb2312"?> <a> < ...
 - BestRW团队项目创意以及NABCD
			
一.写在前面 这次的团队项目我们队选到的是自由选题,与其说是选,不如说是分配.毕竟我们组游戏排名倒数第二···其实当我第一次听说我们队排倒数第二的时候我是有点不爽的,毕竟在这后面能够抽到的题目都是剩下 ...
 - iOS - UISplitViewController
			
前言 NS_CLASS_AVAILABLE_IOS(3_2) @interface UISplitViewController : UIViewController @available(iOS 3. ...
 - html textarea 获取换行
			
1.需求: 获取textarea中的换行符,存到数据库中,并在取出时显示出换行操作 2.实践 2.1 发现可以取到换行符 "/n" ,并且可以存储到MySQL数据库中,并不需要特殊 ...
 - Win7_Wifi热点
			
1. 怎样在Win7系统建立并开启Wifi热点 http://jingyan.baidu.com/article/48a42057a03cf7a9242504d0.html 2.
 - 新建我的 第一个maven项目
			
maven是管理项目的,myeclipse是编写代码的.第一次写项目都要配置好多东西,很麻烦,now 来看看怎样新建一个maven项目. 百度经验:jingyan.baidu.com 工具/原料 ...
 - Android 点击文字实现跳转
			
在web页面中,有a标签的超链接实现跳转,同样在Android当中,用TextView控件来显示文字,实现它的事件来跳转. 核心代码如下: //以下代码写在onCreate()方法当中 textVie ...
 - Java中List、Collections实现梭哈游戏
			
package ch8; import java.util.*; /** * Created by Jiqing on 2016/11/27. */ public class ShowHand { / ...
 - 工作流学习——Activiti流程变量五步曲 (zhuan)
			
http://blog.csdn.net/zwk626542417/article/details/46648139 ***************************************** ...