1

私はACIDデータベースソフトウェア製品に取り組んでいますが、WinOSでのファイルの耐久性についていくつか質問があります。

CreateFileには、 FILE_FLAG_WRITE_THROUGHFILE_FLAG_NO_BUFFERINGの2つの属性があります。ファイルの耐久性を実現するには、これらの両方が必要ですか(つまり、すべての種類のディスクまたはOSファイルのキャッシュをオーバーライドします)。彼らは同じことをしているように見えるので、私は尋ねています、そしてFILE_FLAG_NO_BUFFERINGを設定すると、 WriteFileはERROR_INVALID_PARAMETERエラーをスローします。

4

1 に答える 1

1

FILE_FLAG_NO_BUFFERINGalでキャッシュを指定しません。読み取りキャッシュも書き込みキャッシュもありません。すべてのデータは、アプリケーションとディスクの間で直接やり取りされます。これは、キャッシングが役に立たないほど大きなチャンクを読み取る場合、または独自のキャッシングを行う場合に最も役立ちます。このフラグを使用するときにデータを適切に配置することに関するWhozCraigのコメントに注意してください。

FILE_FLAG_WRITE_THROUGH関数が戻る前に、書き込みをディスクに直接書き込む必要があることを意味するだけです。これは、ファイルからデータをキャッシュするオプションをOSに提供しながら、ACIDを達成するのに十分です。

を使用FlushFileBuffers()すると、ファイルに複数の書き込みを行ってから一度にフラッシュできるため、ACIDを達成するためのより効率的なアプローチを提供できます。キャッシュされていない書き込みはハードドライブのスピンドル速度に制限されるため、1回のフラッシュで書き込みを組み合わせることが非常に重要です。7200 rpmディスクの場合、キャッシュされていない書き込みまたはフラッシュは1秒あたり最大120回です。

于 2012-11-04T06:39:12.380 に答える