2011-06-21 39 views
0

最近,我一直在阅读数据库管理系统(Raghu Ramakrishnan和Johannes Gehrke)。它说,磁盘空间管理器负责以页为单位分配/释放/读/写操作,以确保在一个磁头读/写中最大限度地处理数据以最大限度地减少时间。现在来实现的,说的功能,编写一个页面到磁盘我可以做如下: -以'页'为单位写入磁盘

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

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

我的问题是,这n个字节是否会成功写入磁盘上的一个单独页面,或者在使用此过程时会出现其他失真,这会阻止将缓冲区作为单个数据页面写入磁盘大小等于页面大小。万一它不会被写成一页,我必须采用什么方法?非常感谢!

回答

0

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

你可以参考使用以下链接OS的系统调用:

  1. UNIX-Like: open(2):检查出O_DIRECT标志
  2. Windows: CreateFile:检查出FILE_FLAG_WRITE_THROUGH

即使缓冲I/O库有flush()方法,操作系统不会保证flush()被调用时,数据将保持正确的方式。