История изменений
Исправление shkolnick-kun, (текущая версия) :
В звисимости от выбранной ФС у тебя может случиться всякое, начиная от битого файла, заканчивая разрушением ФС.
Я бы сделал файл фиксированной длины, который пишется по кольцу блоками одинаковой длины(одна запись может занимать несколько блоков но не меньше одного) + 4(четыре) файла с картами (фиксированной длины, пишем по кольцу).
Алгоритм добавления записи такой:
1.Запись пишем поблочно:
а) Обновляем карту в первом индексном файле, делаем fsync/close
б) Обновляем карту во втором индексном файле, делаем fsync/close
в) Пишем блок в архивный файл, делаем fsync/close.
г) Обновляем карту в третьем индексном файле, делаем fsync/close
д) Обновляем карту в четвертом индексном файле, делаем fsync/close
При таком раскладе вне зависимости от ФС и фазы луны в момент отключения питания у тебя всегда будет достаточно информации для того, чтобы отличить битые записи от не битых и восстановить поврежденные индексные файлы.
Исходная версия shkolnick-kun, :
В звисимости от выбранной ФС у тебя может случиться всякое, начиная от битого файла, заканчивая разрушением ФС.
Я бы сделал файл фиксированной длины, который пишется по кольцу блоками одинаковой длины(одна запись может занимать несколько блоков но не меньше одного) + 4(четыре) файла с картами (фиксированной длины, пишем по кольцу).
Алгоритм добавления записи такой:
1.Запись пишем поблочно:
а) Обновляем карту в первом индексном файле, делаем fsync/close
б) Обновляем карту во втором индексном файле, делаем fsync/close
в) Пишем блок в архивный файл, делаем fsync/close.
г)Обновляем карту в третьем индексном файле, делаем fsync/close
д)Обновляем карту в четвертом индексном файле, делаем fsync/close
При таком раскладе вне зависимости от ФС и фазы луны в момент отключения питания у тебя всегда будет достаточно информации для того, чтобы отличить битые записи от не битых и восстановить поврежденные индексные файлы.