1

В продолжение вопроса, который я задал для StackOverflow, существуют ли какие-либо файловые системы, в которых данные записываются "снизу вверх" или "снизу вверх", а не сверху вниз?

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

Существует ли такой зверь? Если так, что это, и где это находится?

6 ответов6

3

То, что вы просите, это не просто «обращенная» файловая система. Вам нужна файловая система со структурой записей «обращенная», то есть файловая система записей, в которой запись, добавленная последней, появляется первой в файле. На самом деле обратный аспект, вероятно, будет реализован как «вы можете вставить запись перед первой существующей записью».

Интерфейсы файловой системы, встречающиеся в операционной системе, обычно встречающейся на ПК (Unix, Windows и даже более экзотических), имеют только байтовую структуру - они не имеют понятия записи. Так что тебе не повезло.

Одним из возможных подходов было бы сделать каждую запись журнала отдельным файлом в каталоге. Затем просмотрите каталог в обратном порядке времени создания файла или в обратном порядке имен, если вы даете монотонно увеличивающиеся имена записям журнала. Поскольку у вас может быть большое количество записей в журнале, убедитесь, что вы используете файловую систему, которая хорошо поддерживает большие каталоги (например, в Linux reiserfs и ext3 с функцией dir_index подходят, но ext2 нет), либо используйте подкаталоги ( один для первых 1000 записей, один для следующих 1000 и т. д.).

Другой подход заключается в использовании более сложной базы данных, например базы данных, к которой можно обращаться в SQL, и просто выбирать записи в обратном порядке при их создании (SELECT message FROM logs ORDER BY date DESC).

2

Я не совсем уверен, что ничего не существует, но я, конечно, никогда не слышал об этом. Если они могут быть сделаны, я должен подумать, что будут некоторые серьезные недостатки.

Для добавления к файлу обычно требуется полная копия существующих данных. В файловой системе вы могли бы справиться с этим, добавив блок в начало файла, но это по-прежнему вызывает несколько незначительных проблем. Блоки со свободным пространством вначале должны были бы сохранить свободное пространство, поэтому, скорее всего, потребовалось бы дополнительное стремление диска найти правильное местоположение.

Работа со свободным пространством на диске при работе в обратном направлении станет основной болью. Это противоречило бы большинству методов программирования, так как вам нужно будет найти максимальный индекс, а затем вернуться обратно.

Я могу предположить, что это замедлит работу с большими файлами и определенно будет нелепой вещью для программирования.

Вместо того чтобы найти обратную файловую систему, почему вы не можете просто записать файл как обычно и проанализировать его в обратном порядке? Разработайте базовую схему форматирования сообщений, прочитайте файл и проанализируйте сообщения из него, а затем отобразите их в порядке очереди. Если вам нужны только последние сообщения, найдите конец файла, затем верните n сообщений. Это будет иметь аналогичный результат, но с гораздо меньшим количеством работы и сопоставимой или лучшей производительностью.

1

Вам необходимо разделить идеи хранения и поиска. Даже в упомянутых вами блогах записи, скорее всего, хранятся в прямом хронологическом порядке, но отображаются в обратном хронологическом порядке (игнорируя тот факт, что это стало проще благодаря структурированному хранилищу).

Можно предположить создание упрощенной структурированной системы хранения, которая будет хранить записи в привычном прямом порядке с "записями" произвольной и переменной длины с указателями смещения в байтах, хранящимися в файле ресурсов в формате фиксированной длины (64 бита будут файлы поддержки более 18 миллионов терабайт). Поиск последней записи, или nth записи, или последней записи last - n в файле указателя, затем байт, на который она указывает в основном файле, будет тривиальным и быстрым. Уловка, которую позволила бы специальная файловая система или драйвер, состояла бы в том, чтобы сделать это атомарным и сделать файл ресурсов прозрачным.

0

К сожалению, нет простого способа сделать то, что вы хотите. Это потребует перезаписи всего файла при каждом добавлении записи. Это будет медленным и становится медленнее по мере роста файла. Я думаю, что лучшее, что вы можете сделать - это журнал с последовательным ключом, который переворачивается на дисплее, но хранится в "обычном" порядке на диске. Любой БД SQL может сделать это легко, но это может потребовать больше ресурсов, чем вы хотите.

0

Вы ищете порядок байтов, который является порядком байтов? Зачем вам организовывать файлы журналов на уровне файловой системы, а не просто упорядочивать их, скажем, через ls?

Если речь идет о Endianness, есть несколько доступных файловых систем.

0

На ум приходят две мысли:

Некоторые системы контроля версий сохраняют первую версию контролируемого файла полностью и все последующие версии как изменения, в то время как другие сохраняют текущую версию контролируемого файла полностью, а все предыдущие версии - как изменения.

Если вы записываете события времени выполнения в базе данных, а не в простом файле, вам может быть непрозрачно, хранит ли база данных события последовательно, в обратном порядке или случайно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .