数据库管理系统通常会绕过文件系统是真的吗?
Posted
技术标签:
【中文标题】数据库管理系统通常会绕过文件系统是真的吗?【英文标题】:Is it true that database management systems typically bypass file systems..? 【发布时间】:2011-10-09 06:26:11 【问题描述】:我对典型数据库管理系统绕过文件系统的一般理解是否正确?我知道他们在磁盘上管理自己的空间,他们将实际数据和索引系统(如 B 树)直接写入磁盘块,绕过文件系统的任何中间帮助。
这假定 root 将提供数据库用户直接从磁盘块读取和写入的权限。在 Linux 中,这仍然更容易,因为磁盘可以被视为文件。
任何指向真实案例研究的指针将不胜感激。
【问题讨论】:
【参考方案1】:大多数依赖WAL 等的底层文件系统:基本上他们将其外包给操作系统。
一些 DBMS 支持(Oracle、mysql)“原始”分区,但这不是典型的。太麻烦了 (see this chat about Postgres),因为你的原始分区上仍然需要 WAL 等。
【讨论】:
【参考方案2】:DBMS 不会绕过文件系统。如果是这种情况,表名在 Windows 下将不区分大小写,在 Linux(在 MySQL 中)下不区分大小写。他们所做的是在文件系统上分配大空间(顺便说一下,数据在底层操作系统中仍然以文件/文件集的形式可见)并管理内部数据结构。这降低了碎片和整体开销。缓存系统的工作方式类似——Varnish 通过一次调用操作系统来分配它需要的全部内存,然后维护内部数据结构。
【讨论】:
"Windows 下表名不区分大小写" 这与文件系统无关,因为它取决于 DBMS 如何识别表。例如,SQL Server 在 Windows 上支持区分大小写和不区分大小写的排序规则。【参考方案3】:不完全是,mysql 要求数据目录并将数据存储在特定的file format 中,它会尝试优化文件的读取、写入并在那里存储索引。
此外,它还可能因存储引擎而异。 Mongodb 使用内存映射文件进行磁盘 IO 期待这里的更多讨论。
【讨论】:
但research.microsoft.com/apps/pubs/?id=64525 之类的文章让我认为数据库中的对象不是通过文件系统存储的,因此引发了诸如 blob 与文件系统之类的辩论的范围。我哪里错了? blob 与文件系统的争论讨论了通过数据库层的好处是否带来了足够的好处,而不是绕过数据库层(这与绕过文件系统层的数据库完全不同)以上是关于数据库管理系统通常会绕过文件系统是真的吗?的主要内容,如果未能解决你的问题,请参考以下文章