sql server之发布订阅(读写分离)

分布式开发之发布与订阅

发布订阅:数据实时备份同步

软件环境:sql server2008 r2

硬件环境:视数据量和对应机器分配的任务而定

机器数量:视分割线标准而定(即数据分别存放的分割线)

作        用 :

  1. 数据库服务器出问题时我们也有其正常工作时的备份
  2. 一台服务器负载不起时,可以用来做负载均衡
  3. 数据库服务器可以无间断,无损失迁移
  4. 主服务器被攻击或当机时另一台服务同步机可以应急

意        义:咱们可以用于两台服务器,其中一台机器用作增删改,另外一台机器用作查询,为了防止读写分离(即发布订阅)的信息有分差,可以做出选择,即当前日期一周(时间视发布与订阅的日期而定,因为订阅是可自动设置时间的,如连续订阅或者在某一时间段订阅)以内的数据查询在发布的机器上运行,当前日期一周之前的数据在订阅机器上运行。

扩        展:

  1. 创建一个临时(发布)DB与一个分机(订阅)DB,当想数据库中insert数据的时候,插入到临时DB中,临时DB发布数据,分机DB订阅此数据(订阅的表可个根据表中的数据量波动而定,振幅小的无需订阅).  注:临时DB与所有分机DB中的除某些特定的表(振幅较大,发布的表)外,其他数据(元数据,如:issuetable, actiontable…)可以确保一致,以牺牲分机机器硬盘空间换取运行时的内存空间与效率.
  2. 以分机DB的ticket达到几百万或者发布订阅一年为分割线(分割线可根据具体情况而定),创建分机DB1。当分机DB1达到分割线时,创建分机DB2;当分机DB2达到分割线时,创建分机DB3……(若后续发现分机DB2分机DB1或者某几个机器的数据访问量并不大时,可将这些DB合多为1).当创建DB2时,可以将临时DB中与DB1中相同的数据删除(删除临时DB中被发布且已经被分机DB订阅的数据。注:若执行此方案,首先需要验证被删除的数据是否已经全部被订阅成功,其次发布订阅的实时性,在删除临时DB数据时,分机DB的数据是否也被删除,需要检查是否需要在执行该操作时,暂时取消发布订阅机制)
  3. 在数据库访问层进行配置数据库与表的对应关系,即在数据库访问层中根据需要操作的表的分割线决定数据在那个分机DB,而配置对应的连接字符串。

其        他:数据库分布式开发还有分库分表(Sharding),Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。对于海量数据的数据库,可以使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个server上。如果每张表的数据非常多,这时候适合水平切分,即把表的数据按某种规则(比如按ID散列)切分到多个数据库(server)上。

总       结:发布订阅相比Sharding,发布订阅是以牺牲物理存储空间来换取查询的执行速度,而且相比较而言,对于发布订阅可能维护的难度会更大。比如各个分机DB中的Metadata是重复的,若其中某一个表(IssueType)的某条数据的Name发生了改变,我们需要写脚本对所有的分机DB的name执行update(这里不对分机DB使用发布订阅来保证分机DB的metadata的统一,是因为如果分机DB过多没有办法保证它们的实时性。)。Sharding是根据某些表之间的关联进行分表分库,对于Metadata不会出现重复,各个库之间都是独立的数据,只是在查询的时候可能会join到多个数据库或者多个server,从而大大的降低了查询的效率。


发布与订阅


分库分表(Sharding)


原理


牺牲物理存储空间来换取查询的执行速度


把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题


Metadata


重复


不重复


维护难度




查询效率




Server之间的联系


小(各个机器上的数据是分开独立的)



需要更改proc


No


Yes


查询是否需要多台机器join

时间: 2024-11-10 17:43:33

sql server之发布订阅(读写分离)的相关文章

SQL Server 复制 - 发布订阅(SQL Server 数据同步)

原文:SQL Server 复制 - 发布订阅(SQL Server 数据同步) SQL Server的同步是通过SQL Server自带的复制工具来实现的,分发布和订阅2大步. A,复制-发布 发布之前,需要设置好几个前置条件,发布属性和快照位置.发布主要是设置发布数据库,如未设置,所有的发布,订阅可正常进行,也可通过快照同步,但是却无法在后面的修改中实时同步. 其次,设置快照位置.快照位置设置是在“分发服务器属性”中的发布服务器设置.如果设置的位置不能被订阅机访问,订阅是最好采用发布机推送订

基于SQL Server搭建主从复制实现读写分离实战演练

一.课程介绍 读写分离(主从同步)从字面意思就可以理解,就是把对数据库的读操作和写操作分离开.读写分离在网站发展初期可以一定程度上缓解读写并发时产生锁的问题,将读写压力分担到多台服务器上.读写分离的基本原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELETE),而从数据库处理SELECT查询操作.随着系统的业务量不断增长数据多了之后,对数据库的读.写就会很多.分库减少单台数据库的压力.本文以MS SQL Server数据库为例主库负责写数据.读数据.读库仅负责读数据.写

sql server 搭建发布订阅后,改端口不正常工作的问题

sql 的发布订阅,想必大家都了解,但一般都是在默认的1433的情况下搭建的,那么1433换成别的端口,发布还能正常工作吗? 在一次客户的真实场景上我就遇到了. 好了,今天不想写太多,简化下, 测试环境 发布服务器  计算机名 win-01 分发服务器  计算机名 win-01  (与发布用的同一台) 订阅服务器  计算机名 win-02 用到的试验库是  YY 在默认的端口1433  的场景下 ,我们已经搭建起了发布订阅,如图 做了两张表的复制. 我们看下 复制监视器 在win-01 的 表中

sql server 本地复制订阅 实现数据库服务器 读写分离(转载)

转载地址:http://www.cnblogs.com/echosong/p/3603270.html 再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离 比起mysql的复制,SQL server 复制相对强大 一. 名词解释 1.复制的 机构组成(类比报纸流通): 1).发布服务器(报社出版) 生产维护数据源,审阅所有出版数据的更改 发送给 分发服务器(邮局) 2).分发服务器 (邮局) 分发服务器包

sql server 本地复制订阅 实现数据库服务器 读写分离

原文:sql server 本地复制订阅 实现数据库服务器 读写分离 再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离 比起mysql的复制,SQL server 复制相对强大 一. 名词解释 1.复制的 机构组成(类比报纸流通): 1).发布服务器(报社出版) 生产维护数据源,审阅所有出版数据的更改 发送给 分发服务器(邮局) 2).分发服务器 (邮局) 分发服务器包括分发数据库,并且存储元数据.历史

SQL Server 复制:事务发布(读写分离)

一.背景 在复制的运用场景中,事务发布是使用最为广泛的,我遇到这样一个场景:在YangJiaLeClub数据库中有表.存储过程.视图.用户定义函数,需要提供给其它程序读取放入缓存,程序需要比较及时的获取到这些数据,需要从权限和性能控制的角度出发,我采用了SQL Server的事务复制技术和timestamp,下面只讲述事务复制的搭建过程: 二.实现过程 (一) 环境信息   操作系统 IP 服务器名称 数据库版本 数据库名称 数据库帐号信息 发布服务器 Windows 10 企业版  192.1

SQL SERVER 2012 使用订阅发布同步数据库

软件做大了,客户就多了,一个数据库服务器是远远不够的,当有一台数据服务器卦掉,那整个系统就会崩溃,所以必须考虑到数据库的自动同步与备份,当一台数据库服务 器宕机,自然就有用一台数据服务器启动起来保证整个软件系统的可用性.备份数据库与总数据库之间既统一又独立.这就是业务,技术服务于业务,那么摆在我们面前的问题是 如何让数据既统一又独立?其实SQLServer已经为我们提供了很好的解决方案:发布.订阅. 打开SQL Server2012的对象资源管理器我们可以看到里面有一个"复制"节点.(

Sql Server同步之订阅

1.新建一个订阅 2.订阅新建完成之后,先选择发布端 3.选择需要同步的组 4.选择目标数据库 5.选择链接发布端方式,采用sql server login 6.选择执行同步的计划 7.选择是立马执行还是等其他组同步完再执行 8.Finish.

喜大普奔,微软Microsoft JDBC Driver For SQL Server已发布到maven中央仓库

相信通过java和SQLServer开发应用的同学们都经历过如下类似的问题. 微软提供的JDBC官方驱动没有放置在Maven仓库中,这样如果你的Java应用需要访问SQL Server,你不得不下载sqljdbc4.jar至本地,然后每次都通过如下Maven命令安装这一驱动: mvn install:install-file -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar