大多数/典型的数据库都使用Stdio吗?

问题描述

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

还是只是尝试获取原始磁盘内存空间地址位置并写入?当然不能,因为linux内核不允许这样做。当然,内核上下文切换和内存所有权模型会减慢数据库事务的速度。

我很好奇这是什么样子。

解决方法

MySQL和PostgreSQL都是开源的。您可以自己检查。

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