什么是数据库引擎?

Laz*_*zer 17 database-design architecture database-engine

我已经多次浏览了http://en.wikipedia.org/wiki/Database_engine上的定义:

数据库引擎(或“存储引擎”)是数据库管理系统 (DBMS) 用来从数据库创建、读取、更新和删除(CRUD) 数据的底层软件组件。

我不明白的是剩下要做的事情,不是数据库所做的全部 CRUD 吗?

如果数据库引擎执行这些功能,那么数据库的其余部分会做什么?

Lei*_*fel 15

CRUD 旨在定义与持久存储相关的数据库所需的特征。它并不意味着描述数据库引擎可以完成的所有事情。

进行比较,从根本上讲,车辆是用于运输的设备。虽然确实如此,但这个定义当然不包括现代汽车所需要的所有细节。

数据库引擎可能会处理多个用户、事务MVCC(多版本并发控制)、缓冲区和缓存、ACID(原子性、一致性、隔离性、持久性)以及不同的隔离级别。读取可以从内存、远程数据库和磁盘上的多个表中提取数据,通过多个显式和/或隐式代码路径使用 SQL 对其进行处理,以便将其呈现给请求应用程序。创建可以分配存储,提供结构,分配值,并在存储数据之前进行自己的处理。等等。


Bry*_*gee 12

某些数据库可以运行多个引擎,具体取决于最适合工作的引擎。例如,我的许多应用程序将 InnoDB 用于大多数数据(键约束和行级锁定),MyISAM 用于会话数据(快速、较少处理)和 ArchiveDB 用于审计跟踪(仅压缩和插入/选择,无更新/删除)。

数据库软件的“其余部分”提供了一个通过 API 或终端使用的通用接口,允许复杂的操作(如连接、子查询等)并管理所包含引擎的健康/状态和配置。引擎的供给和维护有很多事情要做,而数据库软件隐藏了所有这些复杂性。