none
为什么sqlserver 的复制订阅能够实现数据的读写分离? RRS feed

  • 问题

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

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

    比如:
    对 于3台数据库,我会把数据按照一定的规则,放入3台服务器,比如2011年的放入A 数据库,2012年的放入B库,2013年的放入C库,这样前台的并发(读或写)一样会分担到三台服务器,这样的效率比起复制订阅,A是msater,B 和C是Slave,那个更好?还有复制订阅,是很浪费资源吗?主要浪费在那个地方?

    唉,在csdn发的东西,很快沉了,希望这里可以给点建设性的意见

    2011年8月29日 7:44

答案

  • 回答:

    1.这里说的读写分离,是相对于使用者角度来说的。

    也就是作为外部应用只能写master,读取slave,至于master自己向slave写数据这个是内部的数据同步,不算。

    2.你自己写的程序到不同机器读写,你如何保证你切换到不同数据库的时候得到的结果是一样的?比如你写到A了,但是要读取的时候你去B了,这个时候B没有,你不就是读取不到么,这个时候你还是需要将三台服务器的内容同步才能做到这点。

    3.你这个类似与分区视图(2000的)的做法,将不同时间的数据方在不同的数据库中,这个能解决第二点的问题。但是你有没有发现如果你需要读取3个年份的数据怎么办?你的确做到了读写按照年份分摊。如果采用复制订阅,写的压力几种在A上,读取的压力在BC上,数据都是一样的不会遇到你前面跨年度读取数据的问题。

    还有你按年读取的方案中如果对2011年的读写压力很大的时候,你A服务器就承受不了了。这个时候怎么办?你的方案不能解决对同一年份读写压力很大的情况,而这个情况的确是很容易发送,因为我们经常读写的就是当年的数据。

    复制订阅相对来说就没这些个问题.


    family as water
    2011年8月31日 1:08

全部回复

  • 不会也像CSDN一样,也需要自己定吧,我的天呢
    2011年8月29日 7:53
  • 这样不好吧。你这样如果要一起查询的话,还要跨库。

    replication说白了,是一种可用性技术而已,将数据备份到远端去。

    当然远端的也是可以read的。

    另外,replication还可以实现部分表的数据同步,比如功能需要,将一个表的数据从A数据库同步到B数据库。


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2011年8月29日 8:16
  • 一般地,系统的读写比例在10:1以上.master只负责写,slave负责部分的读和写(使用多个slaves)。

    你的做法不是不可以,这是另一种方案,但是你的读可以把几年的数据分开吗?数据库架构设计是要依赖于系统的架构设计的,没有哪一种方案是十全十美的。复制订阅对资源的浪费主要是要存放多份数据。


    想不想时已是想,不如不想都不想。
    2011年8月29日 10:55
    版主
  • 回答:

    1.这里说的读写分离,是相对于使用者角度来说的。

    也就是作为外部应用只能写master,读取slave,至于master自己向slave写数据这个是内部的数据同步,不算。

    2.你自己写的程序到不同机器读写,你如何保证你切换到不同数据库的时候得到的结果是一样的?比如你写到A了,但是要读取的时候你去B了,这个时候B没有,你不就是读取不到么,这个时候你还是需要将三台服务器的内容同步才能做到这点。

    3.你这个类似与分区视图(2000的)的做法,将不同时间的数据方在不同的数据库中,这个能解决第二点的问题。但是你有没有发现如果你需要读取3个年份的数据怎么办?你的确做到了读写按照年份分摊。如果采用复制订阅,写的压力几种在A上,读取的压力在BC上,数据都是一样的不会遇到你前面跨年度读取数据的问题。

    还有你按年读取的方案中如果对2011年的读写压力很大的时候,你A服务器就承受不了了。这个时候怎么办?你的方案不能解决对同一年份读写压力很大的情况,而这个情况的确是很容易发送,因为我们经常读写的就是当年的数据。

    复制订阅相对来说就没这些个问题.


    family as water
    2011年8月31日 1:08