在最基础的层面上,数据库需要做两件事:当您给它一些数据时,它应该存储数据,当您稍后再问它时,它应该将数据返回给您。
在第2章中,我们讨论了数据模型和查询语言。即应用程序开发人员向数据库提供数据,以及可以再次请求它的机制。在这一章中,我们从数据库的角度讨论同样的问题:我们如何存储我们所提供的数据,以及当数据库被请求时如何再次找到它。
作为一个应用程序开发人员,为什么要关心数据库如何在内部处理存储和检索呢?你可能不会从头开始实现自己的存储引擎,但是确实需要从可用的许多引擎中选择适合你应用程序的存储引擎。为了优化存储引擎在你的平台上良好运行,你需要对存储引擎在引擎盖下做什么有一个大致的了解。
特别地,为事务性优化的存储引擎和针对分析优化的存储引擎之间有很大的区别。我们稍后将在“事务处理或分析”中探索这种区别。
首先我们将从这一章开始,讨论你可能熟悉的一些数据库中使用的存储引擎:传统的关系数据库,以及大多数所谓的NoSQL数据库。我们将研究两个存储引擎:日志结构的存储引擎,以及面向页面的存储引擎,如b树。