问题描述
我在任何地方都找不到任何文档或任何可以回答我的问题的东西。像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实例。