
MySQL/数据库
MySQL
木棉上的光
公众号:不止于Java
Github:https://github.com/cyxpdc?tab=repositories
邮箱:1142439493@qq.com
展开
-
《后端存储实战课》笔记
存储系统特点:难用、慢、场景多导致杂很多情况下,可供选择的存储方案不止一套,选择的时候需要考虑实现复杂度、性能、系统可用性、数据可靠性、 可扩展性等等非常多的条件,这些条件每一个都不是绝对不可以牺牲的以下内容以电商内容展开订单插入订单的幂等性问题:给订单系统增加一个“生成订单号”的服务,这个服务返回一个新的、全局唯一的订单号;在用户进入创建订单的页面时,前端页面先调用这个生成订单号服务得到一个订单号,在用户提交订单的时候,在创建订单的请求中带着这个订单号;重复时会报错,当然这种情况直接返回给前端原创 2020-11-28 14:59:47 · 1580 阅读 · 2 评论 -
《分布式数据库30讲》总结四:容灾
异地容灾:有灾难时,异地的应用系统会切换到备库异地读写分离:只读服务的数据一致性不保证双向同步:限制两地读写的对象为不同的数据,这样就保证不会冲突,但是两地仍然不能处理同样的数据以上三种是单体数据库的方式,分布式数据库的数据组织单位是更细粒度的分片,又有了 Raft 协议,所以就有了更加灵活的模式,如下机房级容灾:两地三中心五副本城市级容灾:三地五副本而上述方案只能达到容灾,即高可用,还没达到低延迟全球化部署的前提是多时间源、多点授时,这样不同分片的主副本就可以分散在多个机房,那么数据原创 2020-11-27 15:11:14 · 859 阅读 · 0 评论 -
《分布式数据库30讲》总结三:数据库查询
分布式数据库不推荐使用存储过程,因为移植性差、难以调试不推荐使用自增主键,因为只有唯一性,有时候达不到单调递增和连续递增;分布式数据库则在产生自增主键和使用自增主键两方面都有问题,生成自增主键时,要做到绝对的单调递增,其复杂度等同于 TSO 全局时钟,而且存在性能上限。使用自增主键导致写入数据集中在单个节点,出现“尾部热点”问题分布式数据库的主流设计理念是计算与存储分离,使计算比较容易实现无状态化,容易扩展,因此想要融合OLTP和OLAP,重点在存储上行式存储:列式存储:混合存储:融合了行和原创 2020-11-27 15:09:51 · 677 阅读 · 0 评论 -
《分布式数据库30讲》总结二:事务
原子性TCC、2PC、Percolator(2PC改进,改进第二阶段,不用commit两次)、GoldenDB(2PC改进,改进第一阶段,不用通信两次,直接跟事务管理器通信一次)以小明转账给小红2000为例:1 TCC:2PC:Percolator:GoldenDB:写操作优化方法:1 缓存写提交:将所有写操作缓存起来,直到 commit 语句时一起执行能减少一轮共识算法开销,但是1.1 如果某个业务场景同时存在长事务和海量并发的特点,那么这个缓存就可能被撑爆或者成为瓶颈1原创 2020-11-27 15:07:47 · 393 阅读 · 0 评论 -
《分布式数据库30讲》总结一:基础
分布式数据库含义:用分布式架构实现的关系型数据库,是服务于写多读少(写入能力需要可水平扩展)、低延时、海量并发 OLTP (联机交易)场景的,具有海量数据存储能力和高可靠性的关系型数据库需要达成的目标:存储、事务、查询、复制、其他分布式数据库的强一致性包括数据一致性和事务一致性,是两者的融合;数据一致性关注的是单对象、单操作在多副本上的一致性;事务一致性则是关注多对象、多操作在单副本上的一致性数据一致性:首先是状态视角,数据只有两种状态:所有副本一致或者不一致,不一致的状态是暂时,还会转换到一致原创 2020-11-27 15:03:13 · 1066 阅读 · 0 评论 -
11 分库分表
雪花算法:https://www.sohu.com/a/232008315_453160单元化:https://mp.weixin.qq.com/s/pPGppiQAySBEMZja0nwxkA1 为什么需要分库分表传统的项目结构将所有子系统的数据都交给一个mysql,无法支撑这涉及到数据库性能的瓶颈:1 数据库连接数有限:默认100个,单机最大163842 表数据量:单机表数量过多...原创 2019-12-13 18:02:03 · 208 阅读 · 0 评论 -
10 Myisam、InnoDB
《MySQL实战45讲》表结构和表数据文件:https://www.cnblogs.com/meitian/p/9886654.html、https://blog.youkuaiyun.com/lhanson/article/details/82803947InnoDB架构:https://blog.youkuaiyun.com/qqqq0199181/article/details/80659856Myisam和...原创 2019-12-13 18:01:07 · 175 阅读 · 0 评论 -
9 表相关
《MySQL实战45讲》https://mp.weixin.qq.com/s/M1dLLuePpdM9vA3F1uJGyw表空间:https://www.jianshu.com/p/48c63241effb1 数据库表的空间回收问题:为什么表数据删掉⼀半,表文件大小不变⼀个InnoDB表包含两部分,即:表结构定义和数据在MySQL 8.0版本以前,表结构是存在以.frm为后缀的文件里;...原创 2019-12-13 17:58:32 · 223 阅读 · 0 评论 -
8 关于集群
1 MySQL的主备基本的主备切换流程:M-S结构备库设置成只读,怎么写入主库的写操作,保持同步更新:readonly设置对超级(super)权限用户是无效的,而用于同步更新的线程,就拥有超级权限。update语句在节点A执行,然后同步到节点B的完整流程图:实际生产上使用比较多的是双M结构:这样切换的时候就不用再修改主备问题不过会有一个循环复制问题:业务逻辑在节点A上更新了⼀条语句...原创 2019-12-13 17:56:59 · 243 阅读 · 0 评论 -
7 MySQL的维护、性能优化
《MySQL实战45讲》Rows_examined:https://blog.youkuaiyun.com/weixin_34332905/article/details/90683568恢复数据库:https://blog.51cto.com/laobaiv1/1960846性能优化:https://www.cnblogs.com/angelica-duhurica/p/11303281.html1...原创 2019-12-13 17:52:40 · 373 阅读 · 0 评论 -
6 SQL语句执行过程中的一些question
1 SQL语句突然变慢场景:⼀条SQL语句,正常执行的时候特别快,但是有时它会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。(即MySQL偶尔“抖”一下)当内存数据页跟磁盘数据页内容不⼀致的时候,t称这个内存页为“脏页”。内存数据写⼊到磁盘后,内存和磁盘上的数据页的内容就⼀致了,称为“干净页”;两种页都在内存中。平时执行很快的更新操作,其实就是在写内存和日志;而My...原创 2019-12-13 17:48:39 · 466 阅读 · 0 评论 -
5 索引实战
3 普通索引和唯一索引的选择以如图的数据,从这两种索引对查询语句和更新语句的性能影响来进行分析3.1 查询过程假设执行查询的语句是:select id from T where k=5这个查询语句在索引树上查找的过程:先是通过B+树从树根开始,按层搜索到叶子节点,也就是图中右下角的这个数据页,然后可以认为数据页内部通过⼆分法来定位记录。对于普通索引来说,查找到满足条件的第⼀个记录(...原创 2019-12-13 17:38:12 · 181 阅读 · 0 评论 -
4 索引
来源:《MySQL实战45讲》为什么使用B+树:https://mp.weixin.qq.com/s/Mwh5T5wQNLrxORLpNvIZoA页的概念:https://segmentfault.com/a/1190000008545713sql语句执行顺序:https://www.cnblogs.com/yyjie/p/7788428.html1 索引模型索引是数据库表的“目录”。...原创 2019-12-13 17:28:02 · 260 阅读 · 0 评论 -
3 锁
来源:《MySQL实战45讲》根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。本文介绍碰到锁时的现象和其背后的原理。1 全局锁对整个数据库实例加锁加全局读锁的方法:FTWRLFlush tables with read lock使用这个命令之后,整个库处于只读的状态,其他线程的如下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表...原创 2019-12-13 17:23:36 · 250 阅读 · 0 评论 -
2 事务
来源:《MySQL实战45讲》MVCC:https://mp.weixin.qq.com/s/bM_g6Z0K93DNFycvfJIbwQ(MVCC算法图)MySQ Binlog日志格式:https://www.cnblogs.com/baizhanshi/p/10512399.htmlForce Log at Commit:https://www.cnblogs.com/f-ck-nee...原创 2019-12-13 17:20:04 · 259 阅读 · 0 评论 -
1 一条sql查询、更新语句是如何执行的
来源:《MySql实战45讲》https://www.bilibili.com/video/av49181542?from=search&seid=86616691176459423661 一条sql查询语句是如何执行的MySQL逻辑架构图:实际架构图:1.1 第一步:连接器首先要连接到数据库上,需要权限认证⼀个⽤户成功建⽴连接后,即使你⽤管理员账号对这个⽤户的权限做了...原创 2019-10-04 21:07:55 · 649 阅读 · 0 评论