Most/Typical 数据库使用 Stdio 吗?

Do Most/Typical Databases Use Stdio?

我在任何地方都找不到任何文档或任何可以回答我问题的东西。像postgres或mysql之类的rdbms是否像普通文件一样使用c库写入数据?

或者他们只是试图获取原始磁盘内存 space 地址位置并写入其中?当然不是,因为 linux 内核不允许这样做。当然,内核上下文切换和内存所有权模型会减慢数据库事务。

我很好奇这在引擎盖下是什么样子。

MySQL 和 PostgreSQL 都是 open-source。你可以自己查一下。

https://github.com/mysql/mysql-server/blob/5.7/include/my_global.h#L53

#include <stdio.h>

https://github.com/postgres/postgres/blob/master/src/include/c.h#L59

#include <stdio.h>

MySQL 有一项功能可以做 raw I/O directly to disk partitions。但是对于现代文件系统,这是否有很大好处值得怀疑。我从未处理过以这种方式配置的 MySQL 实例。

据我所知,PostgreSQL never supported I/O to raw disk partitions