Способ эффективного управления бесплатными уникальными номерами - PullRequest
0 голосов
/ 15 февраля 2020

Я пишу «файловую систему», специально созданную как гибкую и эффективную единую файловую базу данных для таких вещей, как файлы для сохранения игр, где часто возникает проблема необходимости хранить множество небольших и реализуемых больших двоичных данных. Эта файловая система работает наиболее эффективно, когда (целочисленные) значения поддерживаются на низком уровне, поскольку существует неявная система сжатия, которая использует необходимые биты для хранения значения. (большие значения, больше используемых битов)

Таким образом, для отслеживания каждого файла должен быть уникальный индекс, назначенный каждому файлу. Подход fooli sh заключается в отслеживании последнего индекса и увеличении его каждый раз. Проблема заключается в том, что это быстро приведет к созданию больших чисел (снижению эффективности) и в конечном итоге к переполнению, что может привести к дублированию идентификаторов.

Решение состоит в том, чтобы повторно использовать освобожденные / освобожденные идентификаторы. Я просто понятия не имею, как эффективно определить, какие идентификаторы могут быть (повторно) использованы.

Решения, к которым я обращался:

  • Используемый битовый набор идентификаторов: я могу отслеживать каждого используемого идентификатора в виде набора битов, но это заняло бы очень много места, делая неявное сжатие значительно менее эффективным.
  • Сжатый набор битов: не вариант, так как это приведет к фрагментации или появлению временные рамки, в которых может произойти повреждение данных (очень разрушительным образом).
  • Дефрагментация для сброса идентификаторов: эта файловая система не имеет привилегии работать в фоновом режиме, как файловая система ОС. Дефрагментация является только последним средством или по запросу кода приложения.

Эта проблема не зависит от языка c, поэтому языковые ограничения или эффективность не имеют значения.

...