我不是一个CS /软件工程背景的人,但最近我开始用Python开始自己研究Flask开发。
目前我正在研究“数据库”这个话题,在互联网上对这个问题做了进一步的研究,我遇到了一些术语,即数据库、数据库管理系统、数据库引擎和存储引擎。互联网上的不同来源似乎给出了上述不同的定义。
从互联网和米格尔·格林伯格的网页开发书中,我对以下几点感到困惑:
因此,基于以上3点,我想提出的问题如下:
或
如果有人能帮我澄清我对这个术语的疑虑,我真的很感激。我尝试过在互联网上做研究,也在“堆栈溢出”中浏览过帖子,但我仍然不能正确理解这个概念。
谢谢!
发布于 2018-11-16 10:40:45
DBMS必须始终包含一个存储引擎来发挥它们的作用。这就是模块化,即仅限于内存中的系统,这些系统被故意设计为一旦关闭所有数据就会丢失(因此,从一开始称它们为“DBMS”可能会被认为是有问题的)。
但是DBMS比单纯的存储引擎为用户做的更多。例如,DBMS还在数据库更新期间对用户提供的数据执行完整性检查。
数据库管理系统是数据库管理系统,它清楚地表明它是一个用于管理数据库(一种有组织的数据收集)的软件(/engine)。
因此,根据传统观点,您可以得到DBMS =数据库引擎= IMS / IDMS / DB2 / PostgreSQL /.存储引擎=数据库管理系统使用的存储组件,这些组件通常是专用的,实际上没有命名,但并不总是这样,其中一些“命名的”存储引擎MyISAM、InnoDB、Microsoft、BerkeleyDB (??)可能还有其他人。
不幸的是,该行业的绝大多数数据库从业者都犯了错误,错误地交替使用这些术语,从而导致/助长/延续了导致您问这个问题的混乱。你被警告过:-)
发布于 2018-11-18 10:00:03
我认为DBMS是指整个软件产品-- PostgreSQL、Oracle、DB2等。
然而,这些都是庞大而复杂的产品。就像复杂的软件一样,它们被分成不同的组件,每个组件都有自己的特定功能,并且在它们之间有定义良好的接口。一个组件将处理验证和解析SQL;一个将负责内存;另一个将处理IO,等等。最后一个-- IO引擎--通常被称为存储引擎,我猜是因为它“驱动”数据进出磁盘。为什么它被称为引擎而不是组件或子系统,这是任何人的猜测。
这些名称没有ISO标准。因此,任何供应商,学术或博客作者都可以自由使用,重用和定义他或她认为合适的术语。
有些DBMS允许各种IO组件,每个组件实现不同的技术。MySQL有InnoDB和MyISAM。MongoDB有WiredTiger和MMap。如果数据位于“正常”表、内存表或具有列存储索引中,则Server具有不同的磁盘格式和幕后算法。如果这是作者选择使用的术语的话,这些可以被认为是不同的存储引擎。
由于DBMS的基本目的是存储和检索数据,因此很容易看出存储部分如何成为整个产品的同义词。从这个角度来看,其他组件被视为存储的辅助组件。也许这曾经是真的。在支持复杂身份验证、多模型API和仅内存存储的现代系统中,我认为这是站不住脚的。
https://stackoverflow.com/questions/53333241
复制相似问题