zoukankan      html  css  js  c++  java
  • DDIA读数笔记【第五章】

      复制,这是为了增加系统容错性而产生的概念。

      复制意味着在通过网络连接的多台机器上保留相同数据的副本。

    • 使得数据与用户在地理上接近(从而减少延迟)
    • 即使系统的一部分出现故障,系统也能继续工作(从而提高可用性)
    • 扩展可以接受读请求的机器数量(从而提高读取吞吐量)

      复制的困难在于数据会随着时间变化而改变,不然就根本不是问题了。改变似乎也是软件开发中遇到的最常见、困难的问题,需求变更、表结构变更……每个都会让我这种低段位开发码农很痛苦。

      三种流行的复制变更算法:单领导者(single leader),多领导者(multi leader)和无领导者(leaderless)。

      主库与从库,领导者与追随者。领导者可以读、写,追随者只可以读。

      

       

      同步与异步复制,概念就和js的同步异步差不多啊,同步就是所有库写完了,才能写下一个,异步就是主库只管写,从库慢慢更新。然后介绍了几种错误的处理方式。

      复制的实现方法

      1、基于语句,就是记录下所有执行SQL发给从库,但SQL会使用返回随机值的函数,这样就会让数据对应不上了。

      2、传输预写日志,

      3、逻辑日志,基于行,

      然后就是复制延迟引发的问题了,无非是读写不一致。

      单调读:每个用户只从一个从库读数据,不会引发数据错乱的问题。

      复制延迟:数据库的事务功能。单节点上已实现的很好,但在分布式上,数据库并没有实现。

      

      多主复制,类似关系数据库多对多的关系,即是领导者,又是追随者。

      解决多主的写入冲突,分布式的最好解决方案是避免冲突,

       

       无主复制

      

     

      

     

  • 相关阅读:
    为什么要使用Handler
    使用Java中的Timer和TimerTask
    Top子句对查询计划的影响
    一个单表死锁的示例
    tracer token 追踪标记
    DDL Trigger
    事物复制的troubleshooting 1
    在分发服务器上查看信息
    将windows 2003 sp2的cluster升级到windows 2008 r2
    DistributionDB过大的原因
  • 原文地址:https://www.cnblogs.com/weixin-tt/p/13940920.html
Copyright © 2011-2022 走看看