Какой минимальный размер файла на диске?

Какой минимальный размер файла на диске?
На чтение
25 мин.
Просмотров
17
Дата обновления
11.11.2024

Я пытаюсь найти решение для хранения двоичного файла с наименьшим размером на диске. Я читаю VIN автомобиля и номерной знак из базы данных размером 30 байт, и когда я помещаю его в текстовый файл и сохраняю, его размер составляет 30 Б, но его размер на диске составляет 4 КБ, что означает, что если я сохраню 100000 файлов или более того, это убило бы место для хранения.

Итак, мой вопрос в том, как я могу записать эти 30 Байт в отдельный двоичный файл до его наименьшего размера на диске и каков наименьший возможный размер 30 Б на диске, включая другую информацию, такую ​​как имя файла. и разрешения?

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


наименьший размер файла всегда равен размеру кластера вашего диска, который обычно составляет 4 КБ. для таких данных единственное разумное решение — иметь много записей в одном файле.

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

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

edit: при чтении резидентных файлов я обнаружил, что на более новых дисках с сектором 4 КБ запись MFT на самом деле тоже 4 КБ. поэтому он не становится меньше этого, независимо от того, равен ли размер данных 0 или нет.

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


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

Google ‘Cluster size’


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

Вам следует пересмотреть свое несогласие с «базами данных». Sqlite — это библиотека , предоставляющая вам возможности SQL и базы данных. И нет баз данных SQL, таких как mongodb

Конечно, все это ужасно зависит от операционной системы и файловой системы (но gdbm и sqlite должен работать во многих системах).

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


в файловых системах у вас такая же проблема. наименьший размер выделения — это один узел данных, а также i-узел. Например, в IBM JFS2 наименьший размер блока 4k, и вам нужно выделить inode. Вторая проблема — вы напишете много файлов за короткое время. Это создает проблемы с производительностью, чтобы за короткое время написать много inodes.

Каждая операция записи должна быть зафиксирована и зафиксирована. Или вы используете старую файловую систему без джорнайзинга.

Идея состоит в том, что многие из ваших регистраторов данных с помощью grep ставят разделитель между ними и записывают 200-1000 в один файл.

например:

  0102030400506070809101112131415 ;; 0102030400506070809101112131415 ;; ...  

вы можете проиндексировать их по имени файла. Порядковые номера или около того ….



В чем разница между «Размером» и «Размером на диске?»

Глядя на свойства файла Windows, я получаю два атрибута: «Размер» и «Размер на диске», а «Размер на диске» всегда больше.

Что означают эти две метрики?


Размер — это фактический размер файла в байтах.

Размер на диске — это фактическое количество место на диске. Они отличаются тем, что диск разделен на дорожки и секторы и может размещать блоки дискретного размера.

Редактирование

Для более подробного объяснения см. этот текст, который я скопировал с другого сайта:

Мы знаем, что диск состоит из дорожек и секторов. В Windows это означает, что ОС выделяет пространство для файлов в «кластерах» или «единицах распределения».

Размер кластера может варьироваться, но типичные диапазоны составляют от 512 байт до 32 КБ или более. Например, на моем диске C: размер распределения составляет 4096 байт. Это означает, что Windows выделит 4096 байт для любого файла или части файла длиной от 1 до 4096 байт.

Если у меня есть файл размером 17 КБ (килобайт), то Размер на диске будет 20,48 КБ (или 20480 байт). Расчет будет 4096 (1 единица распределения) x 5 = 20480 байт. Для хранения файла размером 17 КБ требуется 5 единиц распределения.

Другой пример: у меня есть файл размером 2000 байт. Размер файла на диске будет 4096 байт. Причина в том, что даже если весь файл может уместиться внутри одной единицы распределения, он по-прежнему занимает 4096 места (одна единица распределения) на диске (только один файл может использовать единицу распределения и не может использоваться совместно с другими файлами).

Таким образом, размер на диске — это пространство всех тех секторов, в которых сохраняется файл. Это означает, что обычно размер на диске всегда больше, чем фактический размер.

Таким образом, фактический размер файла (ов) или папки (ов) всегда следует брать из Размер при просмотре окна свойств.

Источник: в чем разница между размером и размером на диске в свойствах папки Windows.


Это связано с размерами единиц размещения, которые использовались на вашем диске при первом форматировании.

Представьте, что в вашей машине есть две канистры с бензином емкостью 2 x 10 галлонов. Каждая канистра с газом представляет собой единицу распределения. Вам нужно получить 12 галлонов бензина, поэтому вам нужно использовать обе канистры. Обычно используется 20 галлонов выделенного пространства, но заполняется только 12 галлонов.

Вот размер по умолчанию для Windows XP

  Размер диска (логический том) Размер кластера Секторы ----------  ------------------------------------------------ 512 МБ  или менее 512 байт 1513 МБ - 1024 МБ (1 ГБ) 1024 байта (1 КБ) 2 1025 МБ - 2048 МБ (2 ГБ) 2048 байтов (2 КБ) 4 2049 МБ и больше 4096 байтов (4 КБ) 8  

Если вы думаете о размере кластера как о каждой из ваших канистр с газом: каждая из них содержит 4 КБ «газа». Но ваш файл составляет 2 КБ, тогда размер заливки составляет 2 КБ, но размер на диске составляет 4 КБ

1


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

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

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

Когда вы просматриваете свойства файла, вы видите истинный размер размер файла, а также размер, который он занимает на диске, который включает любой «резерв», то есть «вершины кластера», которые не используются. Обычно это не так много на файл , и размер на диске обычно почти равен фактическому размеру, но когда вы добавляете потраченное впустую пространство из все тысячи файлов на диске могут складываться. Следовательно, когда вы просматриваете размер большой папки, особенно той, в которой много крошечных файлов, которые меньше кластера, размер на диске (т. Е. Объем дискового пространства, помеченного как используемый) может оказаться значительно больше, чем фактический размер (т. е. объем места, который фактически требуется файлам).

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

Даже на более низком уровне, если каждый кластер представляет собой только один сектор, если размер файла не является точным кратным размеру секторов на диске (обычно обычно 512 байт, теперь часто 4096 байт с расширенным форматом дисков), то между концом файла и концом сектора все равно останется неиспользуемое пространство.

Другой сценарий, при котором вы можете увидеть разницу между фактическим размером файла и размер на диске со сжатием. Когда диск сжимается (например, с использованием DriveSpace, сжатия NTFS и т. Д.), То будет разница между размером фактического файла (который необходимо знать) и фактическим размером, который занимает файл (т. Е. Использует или «занимает») на диске.

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

4


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

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

Пример в папке внутри …

0 Комментариев
Комментариев на модерации: 0
Оставьте комментарий