数据库引擎到底是什么?


14

我已经仔细阅读了http://en.wikipedia.org/wiki/Database_engine上的定义:

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

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

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


有关以粗体显示的问题的直接答案(数据库的其余部分做什么?),请参见Bryan的答案。有关CRUD以外的数据库引擎功能的更多信息,请参阅Leigh的答案。
nealmcb '02

Answers:


15

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

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

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


这是一个非常紧凑但完整的答案。+1 !!!
RolandoMySQLDBA 2011年

顺便说一句,关于车辆与特定车辆类型的比较。
RolandoMySQLDBA 2011年

我认为,事务,ACID保证,隔离级别,并发控制,缓冲区,缓存均由数据库引擎本身处理。我为什么这么说?...查看此linux.org/threads/an-introduction-to-mysql-storage-engines.4220
Shatu 2014年

@Leigh,并发性(缺乏)不是存储引擎而不是DBMS的功能吗?如果这是DBMS的功能,那么MariaDB / MySQL为什么不能为某些存储引擎(例如MyISAM)进行事务处理?
Pacerier,2014年

@Pacerier-对于在DBMS和存储引擎之间进行分隔的系统而言,这可能是正确的,对于其他系统,这种区别是没有意义的。
Leigh Riffel 2014年

12

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

数据库软件的“其余部分”提供了可通过API或终端使用的通用接口,允许进行复杂的操作(如联接,子查询等),并管理所包含引擎的运行状况/状态和配置。引擎的维护和维护工作很多,而数据库软件隐藏了所有这些复杂性。


感谢您实际回答以粗体显示的问题!
nealmcb '02
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.