(本文转自微信公众号:分布式实验室,译者:吴世曦,发布于2020年3月20日)
作为Web开发工程师,我的日常工作会用到关系型数据库,但是数据库的内部工作机制对我来讲是个黑盒子,我会有这样的问题:
数据以怎样的格式存储在内存和硬盘上?
什么时候需要将数据从内存挪到硬盘上?
为什么每张表的主键是唯一的?
事务处理是如何回滚的?
索引的格式是怎样的?
全表扫描是何时,怎样发生的?
PreparedStatement是以怎样的格式保存的?(PreparedStatement是用来执行SQL查询语句的API之一)
简而言之,数据库是如何工作的?
为了搞清这个问题,我从零写了个数据库。这个数据库是基于SQLite的,因为比起MySQL或者PostgreSQL,SQLite更加轻量级,更容易被理解。整个数据库存储在一个文件中。
SQLite
在SQLite的官网上有很多相关的文档[1],我复制了SQLite Database System:Design and Implementation[2]如下: