дырявые файлы (sparse files)

Feb 12, 2024 15:37

любопытно, кто-нибудь с сабж работал ( Read more... )

Leave a comment

Comments 14

lj_frank_bot February 12 2024, 12:39:11 UTC
Здравствуйте!
Система категоризации Живого Журнала посчитала, что вашу запись можно отнести к категории: Технологии.
Если вы считаете, что система ошиблась - напишите об этом в ответе на этот комментарий. Ваша обратная связь поможет сделать систему точнее.
Фрэнк,
команда ЖЖ.

Reply


trilirium February 12 2024, 12:56:28 UTC

И во всех Юниксах, и во всех Виндах - есть pipes. Иногда даже named pipes.

Reply

nicka_startcev February 12 2024, 13:04:11 UTC
у труб есть пачка недостатков
1. емкость около 1 страницы, а не стопицот
2. при перезагрузке данные теряются

Reply

trilirium February 12 2024, 13:12:16 UTC

А, ну то есть, данные должны переживать перезагрузку? Хмм.

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

Reply

nicka_startcev February 12 2024, 13:24:11 UTC
>вроде кольцевого буфера, только в дисковом файле

ага. именно оно. но, как-то так, уже прочитанное начало нужно убирать нахрен, а не хранить вечно.

Reply


aso February 12 2024, 12:57:01 UTC
Гхм.
Кмк, это либо на уровне файловой системы поддерживаться дОлжно (кажется, вдосовском FATe было что-то такое когда-то - для файлов баз данных) - либо на уровне СУБД можно реализовывать.
Типо "кластеры" - отдельные записи в таблице + ключевые поля для упорядочивания + мпометка записей как "удалённых" (ну или спесияльное дополнительное поле).
И вперёд...

Reply

trilirium February 12 2024, 13:15:03 UTC

>> (кажется, вдосовском FATe было что-то такое когда-то

Насколько помню - нет. Нет специального значения в FAT, чтоб показать "в этом кластере нет данных".

Reply


dumendil February 12 2024, 13:24:54 UTC

В linux довольно часто используется, например для образов дисков. Ничего особенного, кроме установки нужного offset не требуется. В винде вроде надо при создании файла флажок ставить, но тут я не знаю точно.
Однако, это, похоже не то, что вам надо, удалять данные из файла невозможно, только переписывать (да собственно, по-моему, нигде так нельзя делать). Самое подходящее для вас, делать это через копирование нужных данных в другой файл, пропуская ненужные.
Ну или, как тут правильно подсказали, организовать кольцевой буфер. Или использовать redis, данные в нём перезагрузку переживают, нужно только проверить настройки, в некоторых сборках пакета это отключают по умолчанию для скорости.

Reply


yatur February 12 2024, 13:44:34 UTC
То, что вы описываете - это классическая очередь (persistent queue).
Подойдет плюс-минус любая реализация очередей, например RabbitMQ.
Если у вас уже есть Redis, Kafka или IBM MQ, можно использовать их, если нет - я бы взял Rabbit.

Reply


Leave a comment

Up