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

这篇具有很好参考价值的文章主要介绍了读改变未来的九大算法笔记02_数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

 

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. 大量重复(课程细节)和少量重复(课程号)进行了交换。总体而言,这是笔好交易文章来源地址https://www.toymoban.com/news/detail-473123.html

8.4. 关键特征

8.4.1. 数据库中的信息有一个预定义结构

8.5. 数据库能提前计算出需要翻多少“块”页,并能记录每“块”开始和结束的页首

8.5.1. 用于快键查找的预计算块集合被称为“B树”(B-tree)

9. 备份

9.1. 某个特定时刻对一些数据的快照

9.2. 并不一定是最新的

到了这里,关于读改变未来的九大算法笔记02_数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 读改变未来的九大算法笔记08_并非万能的算法

    2.1.1.1. Alonzo Church 2.1.1.2. 在计算理论上的突破性工作至今仍是计算机科学许多方面的基础 2.1.1.3. 单独发现了不可判定问题的存在 2.1.1.3.1. 比图灵早几个月发表了自己的成果 2.1.1.3.2. 邱奇的公式更为抽象,且并未详尽地提及由机器执行的计算 5.3.1.1. 如果输入会崩溃,那么

    2024年02月08日
    浏览(36)
  • 读改变未来的九大算法笔记05_数字签名

    3.3.1.1. 钟大小为11的乘法表 3.5.2.1. 欧几里得算法也能根据钥匙值计算出挂锁值,而这一算法要比暴力破解高效得多。这也是乘法方法被认为不安全的原因 4.2.1.1. 钟大小为22时n的三次方和七次方的值 4.5.1.1. 发明一种高效的分解因子算法只会破坏类RSA机制

    2024年02月08日
    浏览(47)
  • 读改变未来的九大算法笔记07_搜索引擎

    1.1.1.1. 惠普(Hewlett-Packard) 1.2.1.1. 从一间卧室开始的,空间很快就不够用了,于是他们转移到了车库 1.3.1.1. 谷歌 1.3.1.1.1. 门洛帕克车库 2.1.1.1. 美国工程师范内瓦·布什(Vannevar Bush) 2.1.1.2. 论文《诚若所思》(As We May Think) 2.1.1.3. 一台被称作麦麦克斯(memex)的机器

    2024年02月08日
    浏览(73)
  • 读改变未来的九大算法笔记09_指尖的精灵

    5.1.2.1. 编译器 5.1.2.2. 程序验证技术 5.2.2.1. 排序算法(快速排序等) 5.2.2.2. 图形算法(迪杰斯特拉最短路径算法等) 5.2.2.3. 数据结构(哈希表等) 5.3.2.1. CPU(中央处理器) 5.3.2.2. 监视器 5.3.2.3. 网络

    2024年02月08日
    浏览(35)
  • 向量数据库的崛起:如何改变数据存储与机器学习的未来

      每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与

    2024年04月28日
    浏览(44)
  • 读图数据库实战笔记02_图数据建模

    1.1.1. 通常用名词来表示 1.1.2. 描述一个领域中的事物或者事物类型 1.1.2.1. 汽车 1.1.2.2. 用户 1.1.2.3. 地理位置 1.1.3. 在逻辑模型和技术实现过程中,实体通常会变成“顶点” 1.2.1. 用动词(或动词短语)来表示 1.2.2. 描述实体之间的互动 1.2.2.1. 一辆卡车移动到一个位置”场

    2024年02月08日
    浏览(41)
  • flask笔记 02 | Flask数据库连接(sqlite、mysql)

    Flask没有指定使用的数据库,不像django提供了orm数据库抽象层,可以直接采用对象的方式操作数据库。但为了开发效率,在开发Flask项目中一般会选择 SQLALchemy 来操作数据库,类似django的ORM. SQLALchemy实际是对数据库的抽象,让开发者不直接使用sql语句进行开发,而是通过Pytho

    2024年01月25日
    浏览(50)
  • 【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

    这篇文章,主要介绍ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)。 目录 一、布尔查询 1.1、主键查询 1.2、两种查询方式 (1)路径参数查询 (2)请求体参数查询 1.3、match查询 (1)match (2)match_all 1.4、过滤字段 1.5、布

    2023年04月09日
    浏览(55)
  • 数据结构与算法之美学习笔记:48 | B+树:MySQL数据库索引是如何实现的?

    本节课程思维导图: 作为一个软件开发工程师,你对数据库肯定再熟悉不过了。作为主流的数据存储系统,它在我们的业务开发中,有着举足轻重的地位。在工作中,为了加速数据库中数据的查找速度,我们常用的处理思路是,对表中数据创建索引。那你是否思考过,数据库

    2024年01月16日
    浏览(82)
  • PostgreSQL 中的 JSON:彻底改变数据库中的数据灵活性

    在这篇文章中,我们将介绍 PostgreSQL 对 JSON 对象的实现和处理方法。拥有一些 Linux、Postgres 和 JSON 方面的经验是必要的,因为我们不仅要介绍这些新功能,还要介绍如何实现它们。 本文使用在 Ubuntu 23.04 上运行的 PostgreSQL 16(开发版)编写 。首先,我将简要回顾一下 JSON 的背

    2024年01月19日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包