DBMS、数据库引擎和存储引擎有什么区别?

3
我不是计算机科学或软件工程背景,但最近开始自学Python的Flask web开发。我现在正在学习“数据库”主题,并在互联网上进一步研究这个主题时,遇到了几个术语:数据库(database)、数据库管理系统(DBMS)、数据库引擎(database engine)和存储引擎(storage engine)。不同的互联网来源似乎对上述内容给出了不同的定义。
从互联网和Miguel Grinberg的Web开发书中,以下是我困惑的一些要点:
1. 在Miguel Grinberg的书中,作者似乎暗示数据库引擎= DBMS = MySQL、SQLite、Postgres等软件应用程序。 来源:Miguel Grinberg的书第53页,数据库章节
2. 在维基百科中,提到数据库引擎(或存储引擎,维基百科中提到的)是像InnoDB、MyISAM、Aria等软件应用程序。 链接:https://en.wikipedia.org/wiki/Database_engine 3. 在Quora上,一个评论者(Stephen Kinght)说DBMS和数据库引擎是两个不同的实体,其中数据库引擎仅是DBMS组件的一部分,负责管理数据库。 链接:https://www.quora.com/What-are-some-database-storage-engines 所以,基于以上三点,我心中的问题如下:
1. DBMS = 数据库引擎/存储引擎 = MySQL、SQLite、Postgres等软件应用程序吗?
或者
2. DBMS != 数据库引擎/存储引擎?(其中DBMS = MySQL、SQLite、Postgres,数据库引擎/存储引擎分别为InnoDB、Aria、MyISAM等)
我真的很感激如果有人能帮助澄清我的这些术语疑惑。我已经尝试在互联网上做了一些研究,并阅读了Stack Overflow上的帖子,但仍然无法真正理解这个概念。
谢谢!
2个回答

5
一个数据库管理系统(DBMS)必须始终包括存储引擎来发挥其作用。这除了那些故意设计为关闭后丢失所有数据的纯内存系统(由于这个原因,它们可能被认为在第一时间称之为“DBMS”是有问题的),都适用。
但是DBMS为用户提供的不仅仅是一个简单的存储引擎。例如,DBMS还会对用户在数据库更新期间提供的数据执行完整性检查。
而DBMS代表数据库管理系统,这清楚地表明它是一种用于管理数据库(组织的数据集合)的软件/引擎。
所以按照传统的惯例,你会得到DBMS =数据库引擎= IMS / IDMS / DB2 / PostgreSQL / ...和存储引擎= DBMS使用的存储组件,通常是专有的且未命名,但并非总是如此,其中一些“命名”的存储引擎是MyISAM、InnoDB、Microsoft Jet、BerkeleyDB(???)等,可能还有其他。
不幸的是,业界的绝大多数数据库从业人员都犯了将这些术语交替使用、粗心和错误,从而导致/促进/延续了你提出这个问题的混淆。你已经受到警告了 :-)

1
我认为DBMS是指整个软件产品 - PostgreSQL、Oracle、DB2等。这些都是庞大复杂的产品,通常被分成组件,每个组件都有自己特定的功能,并且它们之间有明确定义的接口。一个组件将处理SQL验证和解析;一个将负责内存;另一个将处理IO等。最后一个 - IO - 通常被称为存储引擎,我想是因为它 "驱动" 数据到磁盘上和从磁盘上读取数据。为什么它被称为引擎而不是组件或子系统,任何人都可以猜测。
这些名称没有ISO标准。因此,任何供应商、学者或博客作者都可以自由使用、重复使用和定义术语。
一些DBMS允许多种IO组件,每个组件实现不同的技术。MySQL有InnoDB和MyISAM。MongoDB有WiredTiger和MMap。如果数据在“普通”表中、内存表中或具有列存储索引,则SQL Server具有不同的磁盘格式和幕后算法。如果作者选择使用这些术语,这些可以被视为不同的存储引擎。

由于数据库管理系统(DBMS)的基本目的是存储和检索数据,因此很容易看出存储部分如何成为整个产品的代名词。从这个角度来看,其他组件被视为存储的附属品。也许曾经是这样的。在支持复杂身份验证、多模型API和仅内存存储的现代系统中,我认为这不再是可辩护的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接