热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

来看看,为什么sqlserver的复制订阅能够实现数据的读写分离?

为什么sqlserver的复制订阅能够实现数据的读写分离,在我们采用读写分离的技术时,一般都是Master负责Write,然后进行事务发布.Slave进行订阅,负责read.,但是master中的数
为什么sqlserver 的复制订阅能够实现数据的读写分离,在我们采用读写分离的技术时,一般都是Master负责Write,然后进行事务发布.Slave进行订阅,负责read.,但是master中的数据最终还是要同步到slave中的,这最终还是要实现向slave中进行写的,为啥说它是读写分离呢,难道就是因为这个写的操作延后了,有点糊涂,希望高人解释一下原理,谢谢

16 个解决方案

#1


假设我现在有3台数据库服务器,我在前台应用程序中,安照不同的算法,跳转到这三台不同的数据库中,去读写,一样是减轻了读写的压力,复制订阅是否和这个做法一样?

#2


这个概念这样解释,虽然slave是需要写的,但是时效要求已经是不严格的了,因为复制是异步的,另外,master写的过程往往涉及很多复杂的逻辑判断,在slave是不必的,slave读取的是master的最后的数据库操作日志,可直接对数据库数据进行修改,也就是说效率差别是很大的。

#3


引用 1 楼 xiaosun830910 的回复:
假设我现在有3台数据库服务器,我在前台应用程序中,安照不同的算法,跳转到这三台不同的数据库中,去读写,一样是减轻了读写的压力,复制订阅是否和这个做法一样?

读写分开主要解决大并发量的,也就是一秒钟内几十万访问的压力,如果在前台应用程序跳转,势必将数据库信息放在前台应用程序,安全性很难保证。
另外3台数据库服务器表示你在数据写入的时候必须3台数据库服务器全部完成你的写入动作才算完成,这样写入过程会复杂而且低效。

#4


引用 3 楼 nbdba 的回复:
引用 1 楼 xiaosun830910 的回复:
假设我现在有3台数据库服务器,我在前台应用程序中,安照不同的算法,跳转到这三台不同的数据库中,去读写,一样是减轻了读写的压力,复制订阅是否和这个做法一样?

读写分开主要解决大并发量的,也就是一秒钟内几十万访问的压力,如果在前台应用程序跳转,势必将数据库信息放在前台应用程序,安全性很难保证。
另外3台数据库服务器表示你在数据写入的时候必……

所谓的前台应用程序跳转,只是通过与数据库连接的字符串来选择对应的数据库地址(当然也必须使用对应用户名密码),在安全性上我觉的不至于差到哪里去,因为这也是目前常用的一种做法;
对于3台数据库,我会把数据按照一定的规则,放入3台服务器,比如2011年的放入A 数据库,2012年的放入B库,2013年的放入C库,这样前台的并发(读或写)一样会分担到三台服务器,这样的效率比起复制订阅,A是msater,B和C是Slave,那个更好?还有复制订阅,是很浪费资源吗?主要浪费在那个地方?

#5


唉,还是没人再给解释解释吗?

#6


分享是相对的
说成把读取操作分散到多台服务器(复制订阅端)应该是更准确的描述方式

#7



没看花眼吧,老大出现了。。。

#8


引用 7 楼 perfectaction 的回复:
没看花眼吧,老大出现了。。。
,这是怎么个意思?呵呵,就等你给我解释了,你才是老大

#9


引用 7 楼 perfectaction 的回复:
没看花眼吧,老大出现了。。。
真不好意思,最近要解决数据库这一块,遇到的问题挺多,我也是边摸索边前行,所以想不明白的地方,就跑上来问问,让人见笑了,这也叫不打不相识啊

#10


我认为,这个读写分离和你的算法跳转其实是数据库负载均衡的两种方式。
读写分离的好处是,可以根据需要进行相关配置,如在读服务器上把read cache开的大一些,而在写服务器上可以把write cache开的大一些;
而你的算法跳转方式,其实是根据业务需要进行的数据切分,如果业务应用需要和你的算法不一致的话,那就很难办。比如,如是按年进行数据切分的,但是如果业务要求按找用户id进行查询,那就有些麻烦了(需要从3个服务器分别查询然后再进行汇总)。

在大型的实际应用中,这两种方式都是需要的。一般的做法是:先根据需求对数据库进行垂直切分,然后根据数据量情况进行水平切分,切分后的数据如果负载还是很大的话,那再进行读写分离。当然,如果业务需要不能进行切分或者没必要进行切分时,也可直接进行读写分离。

PS:大家所说的老大是6楼的邹建,邹老大喔!!sql传说中的神人!!

#11


唉,惭愧,有高人在此,在下不了解,多有得罪,不过还是希望能给一些意见,不要老是惜字如金

#12


看来还的顶顶啊

#13


再顶顶吧,期望有人回答

#14


你哪里不理解,它的作用主要是把读操作分流到多台服务器上,以减轻主服务器的压力。

#15


引用 4 楼 xiaosun830910 的回复:
引用 3 楼 nbdba 的回复:

引用 1 楼 xiaosun830910 的回复:
假设我现在有3台数据库服务器,我在前台应用程序中,安照不同的算法,跳转到这三台不同的数据库中,去读写,一样是减轻了读写的压力,复制订阅是否和这个做法一样?

读写分开主要解决大并发量的,也就是一秒钟内几十万访问的压力,如果在前台应用程序跳转,势必将数据库信息放在前台应用程序,安全性很难保证。
另外……

你说的解决方法是水平分区,但是例子不是很好,你按年份分三个服务器,但是要知道,现在查询的大部分是最近的数据,即2011年的,这样你的压力还是集中在一个服务器中。
水平分区也是一个解决方法,但分区方法必须选择,比如你按照某个ID比如客户ID来分就会好得多。
但是水平分区最大的缺点是你需要修改程序来适应你的分区方法,很难做到透明处理。

注意下3楼的回复,读写分开的主要用途。

#16


读写分析主要是为了减轻master的压力,可以避免数据堵塞或死锁的情况

推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • 在单位的一台4cpu的服务器上部署了esxserver,挂载了6个虚拟机,目前运行正常。在安装部署过程中,得到了cnvz.net论坛精华区 ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
  • Nginxgaodaima.comnginx属于七层架构,支持的是http协议,本身对tcp协议没有支持。所以不能代理mysql等实现负载均衡。但是lvs这个东西不熟悉,主要是公司 ... [详细]
author-avatar
手机用户2602922511
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有