5

我正在尝试实现一种文件存储机制,该机制在单个文件中保存许多大小可变的记录,并保证即使系统在硬件级别出现故障,记录集也始终可以恢复到一致的状态。

到目前为止,我提出的每个方案都以顺序写入数据为中心。一些数据将附加到每条记录的末尾,以确认写入成功。但是,如果数据在刷新时不一定按顺序写入磁盘,那么确认数据可以在内容数据之前写入。

有两种明显的方法可以解决这个问题,但都是不可取的:

  1. 刷新内容,然后写入确认并刷新。添加额外的刷新可能会降低性能。
  2. 在确认中包含校验和(需要阅读内容以确认其有效)。

我在 Windows(32 位和 64 位)和 .Net 4.0 的内存映射文件实现上使用 C#

4

2 回答 2

1

这对于 C# 来说太低了,而且是特定于操作系统的。尝试使用 C 中的 Windows API,并仔细阅读 API 规范。

于 2010-07-21T22:09:22.397 回答
0

您是否尝试过在底层文件流上使用 FileOptions.WriteThrough?这可能会有所帮助,因为它会禁用缓冲。其他想法是保留一个包含确认的单独文件作为最后写入的偏移量,如果它与您的文件大小不匹配(例如由于停电),您可以简单地截断它做那个大小

于 2010-11-17T02:28:47.910 回答