一个数据库在最基础的层次上需要完成两件事情:当你把数据交给数据库时,它应当把数据存储起来;而后当你向数据库要数据时,它应当把数据返回给你。在数据模型和查询语言章节中,我们讨论了程序员将数据录入数据库的格式,以及再次要回数据的机制。这里我们进一步讨论,数据库如何存储我们提供的数据,以及如何在我们需要时重新找到数据。
作为程序员,为什么要关心数据库内部存储与检索的机理?你可能不会去从头开始实现自己的存储引擎,但是你确实需要从许多可用的存储引擎中选择一个合适的。而且为了协调存储引擎以适配应用工作负载,你也需要大致了解存储引擎在底层究竟做什么。特别需要注意,针对事务性负载和分析性负载优化的存储引擎之间存在巨大差异。
目前主流的存储引擎主要分为两大类:日志结构(log-structured) 的存储引擎,以及面向页面(page-oriented) 的存储引擎(例如 B 树)。