我的一般理解是典型的数据库管理系统绕过文件系统是否正确?我知道他们在磁盘上管理自己的空间,他们将实际数据和索引系统(如B树)直接写入磁盘块,绕过文件系统的任何中间帮助。
这假设root将为数据库用户提供直接从磁盘块读取和写入的权限。在Linux中,这仍然更容易,因为可以将磁盘视为文件。
非常感谢任何指向真实案例研究的指针。
答案 0 :(得分:5)
大多数都依赖于WAL等基础文件系统:基本上他们将其外包给操作系统。
某些DBMS支持(Oracle,MySQL)“原始”分区,但这并不典型。太麻烦了(see this chat about Postgres),因为你的原始分区仍然需要WAL等。答案 1 :(得分:2)
DBMS不绕过文件系统。如果是这种情况,表名在Windows下不会区分大小写,在Linux下(在MySQL中)区分大小写。他们所做的是在文件系统上分配大空间(顺便说一句,数据仍然可以作为底层操作系统中的文件/文件集),并管理内部数据结构。这降低了碎片和总体开销。以类似的方式缓存系统工作 - Varnish通过一次调用操作系统来分配它所需的整个内存,然后保持内部数据结构。
答案 2 :(得分:1)
不完全,mysql要求数据目录并将数据存储在特定的file format中,它会尝试优化读取,从文件写入并在那里存储索引。
从一个存储引擎到另一个存储引擎也可能有所不同。 Mongodb将内存映射文件用于磁盘IO 期待在这里进行更多讨论。