我正在尝试实现一种文件存储机制,它可以在单个文件中容纳多个大小可变的记录,并保证即使系统在硬件层面发生故障,记录集也始终可以恢复到一致的状态。
目前,我想到的每种方案都依赖于顺序写入数据。每个数据块末尾都会附加确认数据以确认写入成功。但如果在刷新时数据不是按顺序写入磁盘,则可能先写入确认数据再写入内容数据。
有两种明显的解决方法,但都不理想:
1. 刷新内容,然后写入确认并刷新。增加额外的刷新可能会降低性能。 2. 在确认中包含校验和(需要读取内容来验证其有效性)。
我使用的是C#在Windows上(32位和64位)和.Net 4.0的内存映射文件实现。
目前,我想到的每种方案都依赖于顺序写入数据。每个数据块末尾都会附加确认数据以确认写入成功。但如果在刷新时数据不是按顺序写入磁盘,则可能先写入确认数据再写入内容数据。
有两种明显的解决方法,但都不理想:
1. 刷新内容,然后写入确认并刷新。增加额外的刷新可能会降低性能。 2. 在确认中包含校验和(需要读取内容来验证其有效性)。
我使用的是C#在Windows上(32位和64位)和.Net 4.0的内存映射文件实现。