Я пытаюсь реализовать механизм хранения файлов, который содержит несколько записей переменного размера в одном файле с гарантией того, что набор записей всегда можно будет восстановить в согласованное состояние, даже если система выйдет из строя на аппаратном уровне.
До сих пор каждая схема, которую я придумал, основывалась на последовательной записи данных. В конец каждой записи будет добавлен некоторый фрагмент данных, который подтверждает, что запись прошла успешно. Однако, если данные не обязательно записываются на диск последовательно при сбросе, тогда данные подтверждения могут быть записаны до данных содержимого.
Есть два очевидных способа обойти это, но оба нежелательны:
- Сбросьте содержимое, затем напишите подтверждение и слейте его. Добавление дополнительной промывки может снизить производительность.
- Включите контрольную сумму в подтверждение (потребуется прочитать содержимое, чтобы подтвердить, что оно действительно).
Я использую С# в Windows (32- и 64-разрядная версия) и реализацию файла с отображением памяти .Net 4.0.