Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 以'为单位写入磁盘;第'页;_Database Design_File Io - Fatal编程技术网

Database design 以'为单位写入磁盘;第'页;

Database design 以'为单位写入磁盘;第'页;,database-design,file-io,Database Design,File Io,最近,我一直在阅读数据库管理系统(Raghu Ramakrishnan和Johannes Gehrke)。它说,磁盘空间管理器负责以页面为单位的分配/解除分配/读/写操作,以确保在一个磁头读/写中进行最大数量的数据操作,从而将时间减到最少。现在,要实现一个函数,将一页写入磁盘,我可以执行以下操作:- 1-将n字节的数据写入内存中的缓冲区,其中n是页面大小 2使用C++中的简单文件I/O操作将此缓冲区写入文件。 我的问题是,这n个字节是否会成功写入磁盘上的一页,或者在使用此过程时是否会出现其他失真

最近,我一直在阅读数据库管理系统(Raghu Ramakrishnan和Johannes Gehrke)。它说,磁盘空间管理器负责以页面为单位的分配/解除分配/读/写操作,以确保在一个磁头读/写中进行最大数量的数据操作,从而将时间减到最少。现在,要实现一个函数,将一页写入磁盘,我可以执行以下操作:-

1-将n字节的数据写入内存中的缓冲区,其中n是页面大小

2使用C++中的简单文件I/O操作将此缓冲区写入文件。


我的问题是,这n个字节是否会成功写入磁盘上的一页,或者在使用此过程时是否会出现其他失真,从而阻止缓冲区作为一页数据写入磁盘,尽管其大小等于页面大小。如果不是一页的话,我应该采取什么方法?非常感谢

通常,数据库系统会使用直接I/O将内存中的页面持久化到磁盘。数据库系统可以通过直接I/O控制、估计和优化磁盘写入,直接I/O不受操作系统或缓冲库的缓冲

您可以通过以下链接引用操作系统的系统调用:

  • :查看O_DIRECT(直接)标志
  • :通过
  • 即使缓冲的I/O库有flush()方法,OSs也不能保证在调用flush()时数据能够正确地保存到磁盘上