首页
学习
活动
专区
工具
TVP
发布

鸿的学习笔记

专栏作者
330
文章
280239
阅读量
49
订阅数
关于数据库的一些学习笔记
一、锁、并发 一个很有趣的事实:容易理解的模型性能都不好,性能好的模型都不容易理解。(性能好,这就意味着锁的颗粒度很少,这样就需要更多的细节) 事务单元: 一个简单的例子: bob给smith100元 顺序是: 锁定bob账户,锁定smith账户,查看bob账户是否有100元,bob账户减100元,smith账户增加100元,分别解锁。 这个时候很重要的是事务的一致性,客户端的查看,都要是一致的,四个原则ACID。 事务之间的抽象: 读写,写读,读读,写写 方式: 序列化读写: 优势:不需要冲突控制 劣势:慢速设备 排他锁事务单元之间没有冲突,就应该并行,只有两个事务单元共享数据时,只能排队。 读写锁: 写和读分开,读之间是并行 排队法: 针对同一个单元的访问控制 MVCC: 写时复制的方式,对写进行优化,能够做到写不阻塞读 二、事务的常见问题 读写之间的先后顺序: 逻辑时间戳 SCN(oracle) Trx_id(Innodb) 还有物理时间戳,实际上就是时钟的概念 故障恢复: 业务属性不匹配:记录下所有操作的反操作。 系统崩溃:checkpoint 死锁产生的原因: 两个线程,同时获得了不同的锁,但是这两个锁具有逻辑关系。方案:降低隔离性,碰撞检测(会把所有的锁记录下来,两个集合的并集,中止其中一边),等锁超时(解锁) 不同方向 相同资源 三、单机事务 ACID。 原子性:一个事务要么同时成功,要么同时失败。要回滚到事务的初始状态,不存在中间态。只记录了undo日志回滚。 一致性:can(happen before)保证能够看到系统内的所有更改 隔离性:以性能为理由,对一致性的破坏。快照读的情况下能保证在读到一致性的同时实现读未提交。 持久性:事务完成后,该事务对数据库所作的更改便持久的保存在数据库之中。持久性和延迟二选一。 四、分布式事务 目标: 提供与单机事务一样的操作 可按需无限扩展 问题:基于锁的事务遇到的问题 --2PL到2PC --异常处理 --日志记录 --延迟问题 MVCC碰到的问题 --顺序 数据共享,时序,延迟,超时是否成功,光速不是无限的
哒呵呵
2018-08-06
3540
没有更多了
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档