5

システムにハードウェアレベルで障害が発生した場合でも、レコードのセットが常に一貫した状態に回復できることを保証して、1つのファイルにさまざまなサイズのレコードを多数保持するファイルストレージメカニズムを実装しようとしています。

これまでのところ、私が思いついたすべてのスキームは、データを順番に書き込むことに重点を置いています。書き込みが成功したことを確認するデータが各レコードの最後に追加されます。ただし、フラッシュ時にデータがディスクに順番に書き込まれるとは限らない場合は、コンテンツデータの前に確認データを書き込むことができます。

これを回避する2つの明白な方法がありますが、どちらも望ましくありません。

  1. コンテンツをフラッシュしてから、確認を書き込んでフラッシュします。フラッシュを追加すると、パフォーマンスが低下する可能性があります。
  2. 確認にチェックサムを含めます(内容を読んで有効であることを確認する必要があります)。

Windows(32ビットおよび64ビット)でC#を使用しており、.Net4.0のメモリマップトファイルの実装を使用しています

4

2 に答える 2

1

これは低レベルであり、C#に固有のOSです。CのWindowsAPIを使用してみて、API仕様を注意深く読んでください。

于 2010-07-21T22:09:22.397 に答える
0

Have you tried using the FileOptions.WriteThrough on the underlying filestream? That might help since it disables buffering. Other ideas would be to keep a separate file containing the confirmations as the last written offset, if it doesnt match your filesize (due to power outage for example ) you can simply truncate it do that size

于 2010-11-17T02:28:47.910 に答える