システムにハードウェアレベルで障害が発生した場合でも、レコードのセットが常に一貫した状態に回復できることを保証して、1つのファイルにさまざまなサイズのレコードを多数保持するファイルストレージメカニズムを実装しようとしています。
これまでのところ、私が思いついたすべてのスキームは、データを順番に書き込むことに重点を置いています。書き込みが成功したことを確認するデータが各レコードの最後に追加されます。ただし、フラッシュ時にデータがディスクに順番に書き込まれるとは限らない場合は、コンテンツデータの前に確認データを書き込むことができます。
これを回避する2つの明白な方法がありますが、どちらも望ましくありません。
- コンテンツをフラッシュしてから、確認を書き込んでフラッシュします。フラッシュを追加すると、パフォーマンスが低下する可能性があります。
- 確認にチェックサムを含めます(内容を読んで有効であることを確認する必要があります)。
Windows(32ビットおよび64ビット)でC#を使用しており、.Net4.0のメモリマップトファイルの実装を使用しています