会员
周边
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
躺柒
博客园
首页
新随笔
联系
订阅
管理
随笔 - 788
文章 - 0
评论 - 17
阅读 -
49126
读改变未来的九大算法笔记02_数据库
事务经常因为不可预料的原因而不能完成
合集 - 读改变未来的九大算法(10)
1.
读改变未来的九大算法笔记
10_读后总结与感想
2023-06-12
2.
读改变未来的九大算法笔记
01_数据压缩
2023-06-02
3.
读改变未来的九大算法笔记
02_数据库
2023-06-03
4.
读改变未来的九大算法笔记
03_纠错码
2023-06-04
5.
读改变未来的九大算法笔记
04_公钥加密
2023-06-05
6.
读改变未来的九大算法笔记
05_数字签名
2023-06-06
7.
读改变未来的九大算法笔记
06_图形识别
2023-06-08
8.
读改变未来的九大算法笔记
07_搜索引擎
2023-06-09
9.
读改变未来的九大算法笔记
08_并非万能的算法
2023-06-10
10.
读改变未来的九大算法笔记
09_指尖的精灵
2023-06-11
1. 基础思想
1.1. 预写日志记录
1.2. 两阶段提交
1.3. 关系数据库
2. 两个事实
2.1. 计算机程序会崩溃
2.1.1. 当一个程序崩溃时,它会丢掉所有正在处理的东西
2.1.2. 只有安放在计算机文件系统中的信息会得到保存
2.1.3. 崩溃相当宽泛:包括任何可能导致计算机停止运行进而损失数据的事
2.1.3.1. 可能的事件包括断电、硬盘出错、其他硬件出错,以及操作系统或应用程序中的漏洞
2.1.4. 即便这些泛指的崩溃极少发生,一些数据库也不能承受崩溃的风险
2.1.4.1. 银行、保险公司和其他数据代表实际金钱的组织,这些组织不能承受任何情况下记录中出现不一致性的风险
2.2. 硬盘和闪存条等计算机存储设备一次只能写入少量数据
2.2.1. 基本上在500个字符左右
2.2.2. 现代设备每秒能执行成千上万次这种500个字符的写入操作
2.2.2.1. 现实是磁盘内容每次只能改变数百个字符
2.2.3. 通常来说,对任何一个大小合理的数据库而言,更改两行的确需要两次单独的磁盘操作
3. 交易处理中的两个主要问题
3.1. 高效性
3.2. 可靠性
4. 一致性
4.1. Consistency
4.2. 数据库中的信息并不自相矛盾
4.3. 存在不一致性非常有害且不能为自动化工具纠正的情况
4.3.1. 银行转账
5. 预写日志记录
5.1. “待办事项表把戏”
5.1.1. To-do List Trick
5.2. 基本思想
5.2.1. 维护一个数据库计划采取的动作日志
5.2.1.1. 日志被存储在硬盘或其他一些永久性存储介质中
5.2.1.1.1. 日志中的信息就能幸免于崩溃和重启
5.2.1.2. 在一项事务的任何动作得到执行前,它们都被记录在日志中,然后再被保存到磁盘里
5.2.1.3. 如果事务成功完成,我们就能删除日志中的待办事项列表,进而节省一些空间
5.2.2. 幂等
5.2.2.1. idempotent
5.2.2.2. 数据库日志中创建的每一项都有相同的效果,不管日志被执行一次、两次,还是更多次
5.2.2.3. 在从崩溃中恢复后,数据库只需重新执行任一完整事务的日志活动即可,而且处理不完整事务也变得很容易了
5.2.2.4. 任何不以“终止事务”项结束的日志活动会按照相反顺序撤销,让数据库恢复事务未开始前的状态
5.3. 能阻止不一致性
5.3.1. 排除了数据损坏,但并未消除数据丢失
6. 事务
6.1. 吉姆·格雷(Jim Gray)
6.1.1. 1992年首次出版
6.1.2. 《事务处理:概念与技术》(Transaction Processing:Concepts and Techniques
6.1.3. “容错”(Fault-tolerance)
6.2. 不管事务是完成还是“回滚”,数据库仍然能保持一致性
6.3. 每一笔事务都是原子态(Atomic)
6.4. 一笔原始态的事务不能被分成更小的操作
6.4.1. 要么整笔事务成功地完成,要么数据库处于其原始状态,就像事务从未开始一般
6.5. 事务能“锁定”单行或单列,或整张表
6.5.1. 一旦该项事务成功完成,就会“解锁”之前被它“锁定”的所有数据
6.5.2. 之后,其他事务就能更改之前被“冻结”的数据
6.6. 事务经常因为不可预料的原因而不能完成
6.6.1. 有时候数据库事务必须被取消,这被称为“回滚”或“放弃”一次事务
6.7. 如果一项事务需要“回滚”,数据库程序只需通过预写日志(比如待办事项列表)逆向操作,就能逆转事务中的每项操作
7. 两阶段提交协议
7.1. “预备提交把戏”
7.1.1. Prepare-thencommit Trick
7.1.2. 在预备阶段,“主管”复制品检查是否所有复制品都能完成事务。
7.1.3. 一旦所有事情都妥当,“主管”复制品就会让所有复制品提交数据
7.1.4. 在预备阶段,其中一个复制品出错了
7.1.5. “撤销”阶段,其中每个复制品都必须“回滚”事务
7.2. 复制是抵御数据丢失的绝佳方法
7.2.1. 将为朝向阻止任何数据丢失的目标做出巨大努力
7.3. 保有两份及以上的数据库拷贝
7.3.1. 每份数据库拷贝都被称为复制品(replica)
7.3.2. 所有拷贝的集合被称为复制数据库(replicated database)
7.3.2.1. 复制数据库能随时保持数据库的所有拷贝同步
7.3.3. 复制品在地理上是分开的
7.3.3.1. 其中一份复制品被一场灾难抹掉,另一份复制品也还在
7.3.3.2. 同一数据库的多份拷贝被存储在不同地点
7.4. 锁定(locking)
7.4.1. 死锁
7.4.1.1. 许多数据库都会定期运行侦测死锁的特殊程序。当发现一个死锁时,死锁的其中一项事务会被取消,以便让另一项事务进行
7.4.1.2. “回滚”能通过对待办事项列表把戏稍做变更来实现
7.4.1.2.1. 预写日志必须包含足够的额外信息才能在必要时撤销每次操作
8. 关系数据库
8.1. 埃德加·科德(E.F.Codd)
8.1.1. 1970年
8.1.2. IBM研究员
8.1.3. 论文《大型共享数据库数据的关系模型》(A Relational Model of Data for Large Shared Data Banks)
8.2. “虚表把戏”
8.2.1. Virtual Table Trick
8.2.2. 尽管所有的数据库信息都能被存储在一张固定大小的表中,数据库也能在需要时生成新的临时表(虚表)
8.3. 基本思想
8.3.1. 每张表都存储不同的信息集,但不同表中的个体通常都以某种方式相连
8.3.1.1. 表策略还有另一个巨大优势。如果表设计无误,对数据库的变更会更容易
8.3.1.2. 大量重复(课程细节)和少量重复(课程号)进行了交换。总体而言,这是笔好交易
8.4. 关键特征
8.4.1. 数据库中的信息有一个预定义结构
8.5. 数据库能提前计算出需要翻多少“块”页,并能记录每“块”开始和结束的页首
8.5.1. 用于快键查找的预计算块集合被称为“B树”(B-tree)
9. 备份
9.1. 某个特定时刻对一些数据的快照
9.2. 并不一定是最新的
合集:
读改变未来的九大算法
好文要顶
关注我
收藏该文
微信分享
躺柒
粉丝 -
50
关注 -
0
+加关注
0
0
升级成为会员
«
上一篇:
读改变未来的九大算法笔记01_数据压缩
»
下一篇:
读改变未来的九大算法笔记03_纠错码
posted @
2023-06-03 06:51
躺柒
阅读(
53
) 评论(
0
)
编辑
收藏
举报
刷新页面
返回顶部
登录后才能查看或发表评论,立即
登录
或者
逛逛
博客园首页
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
相关博文:
·
读数据保护:工作负载的可恢复性13一致性模型
·
读高性能MySQL(第4版)笔记02_MySQL架构(下)
·
4.10学习总结
·
数据库原理 第五章 事务与并发控制
·
数据库系统原理
阅读排行:
·
【.NET】调用本地 Deepseek 模型
·
CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
·
DeepSeek “源神”启动!「GitHub 热点速览」
·
我与微信审核的“相爱相杀”看个人小程序副业
·
Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
公告
昵称:
躺柒
园龄:
2年1个月
粉丝:
50
关注:
0
+加关注
<
2025年2月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
合集
学信息系统项目管理师第4版(35)
学系统集成项目管理工程师(中项)(43)
读高性能MySQL(第4版)(21)
读发布!设计与部署稳定的分布式系统(第2版)(34)
随笔及总结(26)
读改变未来的九大算法(10)
读数据压缩入门(11)
读C#代码整洁之道(8)
读编程与类型系统(12)
读函数式编程思维(6)
读Java8函数式编程(9)
读Java实战(第二版)(20)
读Java性能权威指南(第2版)(31)
读SQL进阶教程(17)
选读SQL经典实例(23)
读SQL学习指南(第3版)(13)
读图数据库实战(11)
读程序员的制胜技(15)
读像火箭科学家一样思考(16)
读程序员的README(19)
读算法霸权(13)
读元宇宙改变一切(14)
读AI3.0(10)
读千脑智能(13)
读十堂极简人工智能课(9)
读人工不智能:计算机如何误解世界(10)
读算法的陷阱:超级平台、算法垄断与场景欺骗(20)
读所罗门的密码(21)
读天才与算法:人脑与AI的数学思维(26)
读人工智能时代与人类未来(19)
读AI未来进行式(12)
读AI新生:破解人机共存密码(18)
读人工智能全传(16)
读写给大家的AI极简史(7)
读零信任网络:在不可信网络中构建安全系统(21)
读软件开发安全之道:概念、设计与实施(17)
读软件设计的要素(7)
读构建可扩展分布式系统:方法与实践(16)
读数据湖仓(9)
读数据工程之道:设计和构建健壮的数据系统(34)
读数据质量管理:数据可靠性与数据质量问题解决之道(20)
读数据保护:工作负载的可恢复性(31)
读量子霸权(18)
读算法简史:从美索不达米亚到人工智能时代(15)
读当我点击时,算法在想什么?(7)
读DAMA数据管理知识体系指南(4)
更多
随笔档案
2025年2月(25)
2025年1月(31)
2024年12月(31)
2024年11月(30)
2024年10月(31)
2024年9月(30)
2024年8月(31)
2024年7月(31)
2024年6月(30)
2024年5月(31)
2024年4月(30)
2024年3月(31)
2024年2月(29)
2024年1月(31)
2023年12月(31)
2023年11月(30)
2023年10月(31)
2023年9月(30)
2023年8月(31)
2023年7月(31)
2023年6月(30)
2023年5月(31)
2023年4月(31)
2023年3月(36)
2023年2月(28)
2023年1月(26)
阅读排行榜
1. C#代码整洁之道读后总结与感想(599)
2. 选读SQL经典实例笔记01_检索和排序(369)
3. 读C#代码整洁之道笔记01_C#的编码标准和原则(311)
4. 读C#代码整洁之道笔记04_重构C#代码识别代码坏味道(309)
5. 学信息系统项目管理师第4版系列02_法律法规(268)
评论排行榜
1. 2023年1月随笔(11)
2. 2023年10月随笔之婚宴趣事多(2)
3. 读高性能MySQL(第4版)笔记12_查询性能优化(下)(2)
4. 读Java性能权威指南(第2版)笔记18_垃圾回收E(2)
推荐排行榜
1. 读高性能MySQL(第4版)笔记01_MySQL架构(上)(2)
2. 选读SQL经典实例笔记01_检索和排序(2)
3. 读软件设计的要素01概念(1)
4. 读AI未来进行式笔记01深度学习(1)
5. 读所罗门的密码笔记01_当人类遇见机器(1)
最新评论
1. Re:2023年10月随笔之婚宴趣事多
@gz4621 wondershare mindmaster...
--躺柒
2. Re:2023年10月随笔之婚宴趣事多
大神 思维导图用的什么软件制作的?
--gz4621
3. Re:读高性能MySQL(第4版)笔记12_查询性能优化(下)
@东围居士 建议读新版。...
--躺柒
4. Re:读高性能MySQL(第4版)笔记12_查询性能优化(下)
第4版相比第3版好像缩减了好多内容?楼主推荐第3版还是第4版
--东围居士
5. Re:读Java性能权威指南(第2版)笔记18_垃圾回收E
@屠炉 没有用第三方工具,手动的。 有几个平台直接支持markdown导入,只是要调整一下图片上传即可。...
--躺柒
点击右上角即可分享
支持DeepSeek的编程助手
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库