07 2021 档案
摘要:一、数据库拆分 1. 为什么要做数据库拆分 单机数据库存在的问题? 从容量、性能、可用性和运维成本上难以满足海量数据的场景。 性能方面,数据量超过一定阈值,B+树索引深度增加导致磁盘访问的IO次数增加,进而导致查询性能的下降。 容量方面,单机能存储的数据量有限 可用性方面,大量的查询落到单一的数据库
阅读全文
摘要:从单机到集群 随着数据量增加,读写并发的增加,系统可用性要求的提升,单机MySQL存在着一些问题: 容量有限,难以扩容 读写压力、QPS过大,特别是分析类需求会影响到业务事务 可用性不足,单点故障 主从复制 核心流程是: 主库将数据变更操作记录到Binlog日志文件中 从库读取主库中的Binlog日
阅读全文
摘要:专题一:主键ID生成 数据库自增 数据库多主模式 号段模式 UUID 时间戳+随机数 Redis里生成 雪花算法(SnowFlake) 滴滴出品(TinyID) 百度(Uidgenertor) 美团(Leaf) 数据库自增 基于数据库的auto_increment自增ID完全可以充当分布式ID。需要
阅读全文
摘要:MySQL事务 事务可靠性模型ACID: Atomicity: 原子性,一次事务中的操作要么成功,要么失败 Consistency: 一致性,跨表,跨行,跨事务,数据库始终保持一致状态 Isolation: 隔离性,保护事务不会互相干扰,包含4种隔离级别 Durability: 持久性,事务提交后,
阅读全文
摘要:性能优化-数据库篇1 首先我们要谈论什么是性能? 吞吐和延迟 没有量化就没有改进 :监控和度量指标可以指导我们从哪里入手 80/20原则:先优化性能瓶颈的地方 过早的优化是万恶之源:选择合适的优化时机 脱离场景谈性能都是耍流氓:对性能的要求要符合实际 一般来说,DB/SQL操作的消耗在一次处理中占比
阅读全文
摘要:解释器模式 定义:这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 使用场景:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
阅读全文
摘要:访问者模式 定义:将作用于某种数据结构中的各元素的操作分离出来封装为独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。 使用场景: 对象结构很少改变,但是需要经常在结构上定义新的操作。 需要对一个对象结构中的对象进行很多不同并且不相关的操
阅读全文
摘要:模板方法 定义:定义一个过程中的算法骨架,而将算法的一些步骤延迟到子类中。 这么做是为了将不变的部分封装到父类中实现,而将可变部分的算法由子类继承实现,便于扩展。 模板结构: 抽象模板 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。 基本方法: 抽象方法:在抽象类中声明,由具体子类实现
阅读全文
摘要:策略模式 定义:定义了一系列算法,并将每一个算法封装起来,而且他们之间还可以相互替换。 注意解决多种算法相似的i情况下,使用if/else带来的复杂和难以维护。 使用场景:1. 一个对象有很多行为,这些行为使用了多重条件选择语句实现。2.一个系统需要动态的在几种算法中选择一种。 可以使用策略模式+工
阅读全文
摘要:状态模式 定义:当一个对象得内在状态改变时,他的行为也会改变。对有状态的对象,把复杂的"判断逻辑"提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 使用场景:代码中包含大量与对象状态有关的条件语句。 注意事项:在行为受状态约束的时候使用,且状态不超过5个。 模式的结构: 环境类
阅读全文
摘要:观察者模式 定义:观察者模式(发布-订阅模式),指多个对象之间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新。 使用场景: 一个对象的改变会导致其他一个或多个对象的改变 一个对象必须通知其他对象 结构: 抽象主题(Subject):抽象目标类,它提供了一个用
阅读全文
摘要:备忘录模式 定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 使用场景:需要保存、恢复数据的相关场景。提供可回滚的操作。如游戏中的存档、应用软件里的Ctrl+Z等。 注意事项:为了符合迪米特法则,还需增加一个管理备忘录的类。为了节约内存还可使用原型模式+备忘录模式。
阅读全文
摘要:中介者模式 定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式的相互引用,从而使耦合松散,而且可以独立的改变他们之间的交互。 使用场景:多个类相互耦合,形成了网状结构。比如想租房,不用和每个房东联系,而是跟一个中介联系就行。 缺点:中介者模式把多个对象之间的相互依赖改成了中介和多个
阅读全文