核心摘要
从本质上讲,数据库只是一个日志文件
正文
很多关于数据库的知识。它们是复杂的关键任务应用程序,有时需要专业的主题专家来维护它们,但这并不意味着它们也是某种神奇的黑匣子。数据库是我们应用程序的支柱,您对它们的工作方式了解得越多,您就越能更好地使用它们、针对它们编写应用程序以及在不可避免地出现问题时解决问题。
因此,让我们深入探讨您应该(可能)了解的有关数据库的七件事。
注意:除非特别说明,否则我通常会讨论 PostgreSQL 或 MySQL 等关系数据库,而不是 NoSQL 数据库。
1. 数据库存储事务——不是状态(种类)
数据库,或者说它们的内部架构,不是很直观。您可能认为数据库只是一个或两个数据文件和一些管理对该数据文件的连接和修改的代码。在某种程度上你是对的。但实际上,从本质上讲,数据库只是一个日志文件。此日志文件是已提交到数据库的事务列表,这些事务按提交顺序保存。
其他一切(您的表、行、模式等的状态)都是从记录在此日志中的累积更改中出现的。每个数据库引擎以不同的方式存储此日志,但部分伪日志可能如下所示:
2021-06-07 12:24:35.044513-4000 INSERT INTO 'People' "jeff" "wilson"
2021-06-07 12:25:33.232098-4000 INSERT INTO 'People' "mike" "lou"
2021-06-07 12:25:37.140013-4000 INSERT INTO 'People' "pat" "cat"
2021-06-07 12:26:11.030002-4000 INSERT INTO 'People' "mark" "wilson"
如果数据文件以某种方式损坏,则数据库可以根据此日志重建其表、数据库、模式和其他所有内容。但是有一个非常重要的警告:一旦事务提交或回滚,它就会从日志中删除。日志的目的是在事务完成之前暂存更改——而不是作为一种备份机制。可以从日志中恢复数据库中一些小的和无关紧要的 blip,但比 blip 更严重的任何事情都需要恢复某种外部备份。
在 PostgreSQL 和其他一些关系数据库中,此日志称为预写日志 (WAL)。管理此 WAL 及其各种功能是对这些数据库进行性能调优以及 PostgreSQL 如何管理复制的重要组成部分。写入 WAL 的任何事务也会广播到其复制对等方,以便他们可以将事务添加到他们的 WAL。
了解这种机制是了解数据库如何工作并在出现问题时对其进行故障排除的关键。
加入我们一起学习SwiftUI
QQ:3365059189
SwiftUI技术交流QQ群:518696470
教程网站:www.openswiftui.com