本文共 1833 字,大约阅读时间需要 6 分钟。
红黑树,是一种高效的自平衡二叉查找树
Rudolf Bayer 于1978年发明红黑树,在当时被称为对称二叉 B 树(symmetric binary B-trees)
。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的红黑树
。
红黑树具有良好的效率,它可在近似O(logN)
时间复杂度下完成插入、删除、查找等操作,因此红黑树在业界也被广泛应用,比如 Java 中的 TreeMap,JDK 1.8 中的 HashMap、C++ STL 中的 map 均是基于红黑树结构实现的。
死记硬背,很难学会
红黑树的结构和设计都非常优秀,也同样在实现上有着复杂的处理逻辑,包括插入或者删除节点时;颜色变化、旋转操作等操作。但如果只把这些知识点硬背下来,什么时候染色、什么时候旋转,是没有多大意义的,用不了多久也就忘记了。所以这部分的学习,了解其根本更重要。
我们先来了解一下主备同步的原理,下面以一个update语句来介绍主库与备库间是如何进行同步的。
上图是一个update语句在节点A执行,然后同步到节点B的完整流程图,具体步骤有:
主备同步的工作原理其实就是一个完全备份加上二进制日志备份的还原。不同的是这个二进制日志的还原操作基本上是实时的。
备库通过两个线程来实现同步:
从上面的流程可以看出,主备同步的关键是binlog。
M-S结构,两个节点,一个当主库、一个当备库,不允许两个节点互换角色。
在状态1中,客户端的读写都直接访问节点A,而节点B是A的备库,只是将A的更新都同步过来,到本地执行。这样可以保持节点B和A的数据是相同的。
当需要切换的时候,就切成状态2。这时候客户端读写访问的都是节点B,而节点A是B的备库。
双M结构,两个节点,一个当主库,一个当备库,允许两个节点互换角色。
对比前面的M-S结构图,可以发现,双M结构和M-S结构,其实区别只是多了一条线,即节点A和B之间总是互为主备关系。这样在切换的时候就不用再修改主备关系。
在实际生产使用中,多数情况是使用双M结构的。但是,双M结构还有一个问题需要解决。
业务逻辑在节点A执行更新,会生成binlog并同步到节点B。节点B同步完成后,也会生成binlog。(log_slave_updates设置为on,表示备库也会生成binlog)。
当节点A同时也是节点B的备库时,节点B的binlog也会发送给节点A,造成循环复制。
解决办法:
解决后的流程:
为了应付面试也刷了很多的面试题与资料,现在就分享给有需要的读者朋友,资料我只截取出来一部分哦,有需要的可以来找我获取哈
ps://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)**
[外链图片转存中…(img-jmMCCryO-1620452187263)]
转载地址:http://xqksz.baihongyu.com/