读改变未来的九大算法笔记02_数据库

news2024/12/24 8:38:36

 

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. 并不一定是最新的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/604101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

助力智能制造数字化转型 | 5.31 IoTDB 中航机载制造行业客户分享会回顾

5 月 31 日,IoTDB & 中航机载智能制造实践分享会在线上举办。IoTDB 与中航机载的两位产品、技术专家,结合 EMQ 与深南电路的两位技术大拿,针对制造行业智能化痛点带来了一场方案实践分享,与线上直播中上千人次的智能制造关注者…

专访瑞声科技应用软件开发总监陆其明:当一名老兵决定重新上路

编者按:从互联网公司到智能终端解决方案公司,陆其明的这次转变可能难以被人理解。但经济大环境的影响和个人的技术困境还是让他义无反顾地走向一个未知的世界。正如黄仁勋日前所言,“撤退”对聪明人来说并不容易。然而,战略性的撤…

刷题记录:一维前缀和 | leetcode-2559. 统计范围内的元音字符串数 2023/6/2

leetcode-2559. 统计范围内的元音字符串数 这道题的思路并不难找,一开始我有点看出是一维前缀和问题,但没有很确定,因此也就没有直接从这个思路走下去。还是想着先做暴力版本的吧! 这是暴力版本的代码: class Solut…

零基础搭建私有云盘并内网穿透远程访问

文章目录 摘要视频教程1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 转载自cpolar极点云的文章:使用Nextcl…

小白入门C#初探Web简易页面显示信息小案例

1、创建新项目 选择ASP.NET Core Web应用(模型-视图-控制器),然后点击下一步。 然后在项目名称里面填写CSharpDemo,点击下一步,直至创建即可。 目录结构: Connected Services:是Visual S…

计算机网络-网络层1.2

IPv6 IP地址耗尽,CIDR和NAT只是延长了IPv4地址分配结束的时间 IPv6从根本上解决了IP地址的耗尽问题 与IPv4的比较 扩大了地址空间移除校验和字段,减少了每跳的处理时间将IPv4的可选字段移出首部,变成拓展首部,路由器不对拓展首…

NIO vs BIO模型解读

目录 stream vs channel IO模型 零拷贝 传统IO NIO优化 stream vs channel stream 不会自动缓冲数据,channel 会利用系统提供的发送缓冲区、接收缓冲区(更为底层)stream 仅支持阻塞 API,channel 同时支持阻塞、非阻塞 API&a…

计算机网络-网络层1.1

IPv4 网络层打包传输数据时,数据量小则称IP数据报,数据量大则分片,每一片称为IPv4分组 分组格式 固定部分长20B,可变部分用于提供错误检测和安全等机制 版本:指IP版本首部长度:以4B为单位&#xff0c…

Java --- springboot3之web的自动配置原理

目录 一、自动配置 二、默认效果 三、WebMvcAutoConfiguration原理 3.1、生效条件 3.2、效果 3.3、WebMvcConfigurer接口 一、自动配置 1、导入web的pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-s…

计算机网络-层级架构

计网概念 计算机网络将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由软件实现资源共享和信息传递&#xff0c;同时也是一些互联的、自治的计算机系统的集合 计网组成的三种划分方式 硬件、软件、协议 硬件包含主机&#xff08;端系…

Redis底层学习(四)—存储类型-Hash篇

文章目录 特点具体服务器操作命令底层结构应用场景 特点 1.适⽤场景&#xff1a;存储⽆序字典的数据&#xff0c;⽐如&#xff1a;适合存储对象类型、存储猪⾁价格等。 2.它的内部采⽤ 数组 链表 的结构&#xff0c;类似java⾥的HashMap。 hash的key值只能是字符串。将对象存…

从C语言到C++_15(vector的模拟实现)+迭代器失效问题

目录 1. vector的基本框架 1.1 构造析构和容量 1.2 push_back&#xff0c;reserve和operator[ ] 2. vector的迭代器 2.1 四个基本迭代器 2.2 迭代器区间初始化 2.3 迭代器的分类 3. vector的其它接口函数 3.1 修改后的reserve 3.2 resize 3.3 pop_back 4. insert和…

【Android】Jadx动态调试应用

【Android】Jadx动态调试应用 1. 前言 Jadx已支持动态调试APP&#xff0c;但一直没试过&#xff0c;从逆向角度尝试走一遍流程并熟悉&#xff0c;方便日后翻阅。 2. 相关知识 2.1 动态调试原理 动态调试的原理可以概括为以下几个步骤&#xff1a; 启动应用程序进程&#x…

[数据挖掘02] pandas的分配和聚合函数(1)

一 说明 窗口函数是什么&#xff1f;窗口函数是时间序列的局部属性处理函数&#xff0c;比如&#xff0c;一维卷积滤波、移动平均、指数平均本篇我们将针对pandas对象的窗口函数展开讨论&#xff0c;并以示例展示他们的概念实质。 二 窗口函数、分组函数&#xff08; GroupBy …

2023年18个最佳的ChatGPT AI插件

​关注文章下方公众号&#xff0c;可免费获取AIGC最新学习资料 导读&#xff1a;ChatGPT已经将人工智能提升到了一个新的高度。ChatGPT 4不仅是聊天机器人&#xff0c;还可以很好地与第三方插件配合使用。我们挑选出了2023年目前18款最佳的插件来介绍给您。 本文字数&#xff…

【运维知识进阶篇】Ansible Jinja2模板详解

哈喽大家好&#xff0c;我是koten&#xff0c;本篇文章给大家介绍jinja2模板&#xff0c;这是python的全功能模板引擎。在Ansible中&#xff0c;通常会使用jinja2模板来修改被管理主机的配置文件&#xff08;saltstack中也会用到&#xff09; Ansible中使用的jinja2模板其实就…

【软件测试】软件测试管理

软件测试管理 软件测试环境测试环境的要素测试环境管理员 软件测试计划⭐测试计划目标测试计划主题测试计划制订过程定义工作进度的过程测试策略 软件缺陷(bug)管理缺陷的主要属性如何报告缺陷⭐如何跟踪缺陷缺陷度量 软件配置管理&#xff08;SCM&#xff09;软件配置管理的基…

计算机网络传输层1.0

功能 传输层提供进程到进程的逻辑通信 复用和分用 传输层对收到的报文进行差错检测 TCP/UDP 提供进程到进程的逻辑通信 网络层是提供主机间逻辑通信 从网络层来看&#xff0c;通信双方为两台主机&#xff0c;IP数据包首部给出两台主机的IP地址 而实际上的两台主机通信时两台…

Makefile路径处理:执行路径、绝对路径与相对路径的处理

问题描述 最近编写了一个 编译设备树 的 Makefile&#xff0c;遇到了使用 make -f xx/Makefile&#xff0c;执行路径变了&#xff0c;造成 Makefile 里面的一些操作路径不正确&#xff0c;无法执行 获取当前目录 make 内置的 $(CURDIR)&#xff0c;可以把当前路径的全路径打印…

Three.js--》实现图片转3D效果展示

目录 项目搭建 初始化three.js基础代码 加载图片纹理 设置着色器 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 项目搭建 本案例还是借助框架书写th…