为什么要做服务化
好处一:调用方简单 好处二:复用性,防止代码拷贝 好处三:专注性,屏蔽底层复杂度 好处四:SQL质量得到保障 好处五:数据库解耦 好处六:提供有限接口,无限性能 好处七:…
好处一:调用方简单 好处二:复用性,防止代码拷贝 好处三:专注性,屏蔽底层复杂度 好处四:SQL质量得到保障 好处五:数据库解耦 好处六:提供有限接口,无限性能 好处七:…
(1)单点系统存在的问题:可用性问题,性能瓶颈问题; (2)shadow-master是一种常见高可用方案; (3)减少与单点的交互,是单点系统优化的核心方向,常见方法有:批量写,客户端缓存; (4)水平扩展,才能做到理论上的无限性能;
• mysql5.5:不支持并行复制,大伙快升级MySQL版本; • mysql5.6:按照库并行复制,建议使用“多库”架构; • mysql5.7:按照GTID并行复制;
TopK,不难;其思路优化过程,不简单: • 全局排序,O(n*lg(n)) • 局部排序,只排序TopK个数,O(n*k) • 堆,TopK个数也不排序了,O(n*lg(k)) • 分治法,每个分支“都要”递归,例如:快速排序,O(n*lg(n)) • 减治法,“只要”递归一个分支,例如:二分查找O(lg(n)),随机选择O(n) • TopK的另一个解法:随机选择+partition
总结,对于主键与唯一索引约束: • 执行insert和update时,会触发约束检查 • InnoDB违反约束时,会回滚对应SQL • MyISAM违反约束时,会中断对应的SQL,可能造成不符合预期的结果集 • 可以使用 insert … on duplicate key 来指定触发约束时的动作 • 通常使用 show warnings; 来查看与调试违反约束的ERROR
• 并发事务,间隙锁可能互斥 (1)A删除不存在的记录,获取共享间隙锁; (2)B插入,必须获得排他间隙锁,故互斥; • 并发插入相同记录,可能死锁(某一个回滚) • 并发插入,可能出现间隙锁死锁(难排查) • show engine innodb status; 可以查看InnoDB的锁情况,也可以调试死锁