文件持久性设置

时间:2012-11-04 06:20:01

标签: c++ windows file

我正在研究ACID数据库软件产品,我对WinOS上的文件持久性有一些疑问。

CreateFile有两个属性, FILE_FLAG_WRITE_THROUGH FILE_FLAG_NO_BUFFERING - 我是否需要这两个属性来实现文件持久性(即覆盖所有类型的磁盘或OS文件)缓存)?我问他们似乎做了同样的事情,设置 FILE_FLAG_NO_BUFFERING 会导致WriteFile抛出 ERROR_INVALID_PARAMETER 错误。

1 个答案:

答案 0 :(得分:1)

FILE_FLAG_NO_BUFFERING指定没有缓存。没有读取或写入缓存,所有数据都直接进出应用程序到磁盘。如果您阅读如此大的块,缓存无用或您自己进行缓存,这是非常有用的。 注意WhozCraig对使用此标记时正确对齐数据的评论。

FILE_FLAG_WRITE_THROUGH仅表示写入应在函数返回之前直接写入磁盘。这足以实现ACID,同时它仍然为操作系统提供了从文件缓存数据的选项。

使用FlushFileBuffers()可以提供更有效的方法来实现ACID,因为您可以对文件执行多次写入,然后一次性刷新它们。在一次刷新中组合写入非常重要,因为非高速缓存写入会限制您的硬盘主轴速度。对于7200 rpm磁盘,每秒最多120次非缓存写入或刷新。

相关问题