Предположим, я хочу написать простую базу данных (работа на Linux), которая должна удовлетворять следующим условиям:
У него только две функции:
Где index - целое число от 0 до 1M, а байты - чанк 100 байтов. Я хочу, чтобы состояния файлов передавались атомарно после каждого вызова write_chunk.
Так что я хочу быть уверен:
Я представляю себе такие реализации:
Напишите реализацию функции:
Прочитать реализацию функции:
Если мы начинаем чтение и откат файла не пустым и действительным, мы восстанавливаем 100 байт из отката и удаляем откат или просто удаляем откат, если хеш недействителен.
Мы читаем чанк из индекса позиции * 100 и возвращаем данные
Я в безопасности с помощью следующего алгоритма?
Поэтому я хочу быть уверен, что я на том же уровне безопасности, что и базы данных, такие как mysql или postgresql, выполняющие вставку после фиксации.
Какую технику я могу использовать, чтобы гарантировать атомарную и долговременную запись, я имею в виду, может быть, мне нужно использовать хеширование на чанке, чтобы убедиться, что он действителен, или использовать двойную копию файла отката. Или сохраняйте данные в файле отката немного позже, чтобы обеспечить очистку дисковых подсистем. (Я слышал, что я не безопасен, даже если я вызываю fsync после записи, это зависит от подсистемы диска, тогда он физически записывает данные).
Это должно работать, пока у вас нет параллелизма, то есть только одна из этих функций может запускаться одновременно.
Почему бы вам не использовать простую встроенную базу данных?