runewalsh писал(а):data.pack ... всегда будет НАМНОГО быстрее 10 000 отдельных файлов, в этом легко убедиться, попробовав программно обработать (даже просто скопировать куда-нибудь) одно и другое.
Э-э-э-э нет. чтобы скопировать 10000 файлов, надо не только обработать надлежащее количество информации, о котором собственно и шла речь, но и открыть 10000 файлов, и создать 10000 файлов. Кроме того, производительность системы, которая испытывает интенсивный процесс свапования, падает примерно в такое количество раз, в которое производительность устройства памяти превышает производительность устройства свапа.
Если в приложению нужна разом вся махина в десериализованном виде - тогда в результате в памяти осядет объем, равный всем 10000 файлам + этот же объем в виде страничного кеша. Если не вся - то осядет только нужный объем*2, плюс будет выигрыш в латентности по добыче данных из архива. Если памяти под кэш хватать не будет - такой монстр вытеснит оттуда всё реально нужное, включая страницы редко используемых открытых приложений и кэш их файлов (например файрфокса или оконного менеджера) - в результате рабочий стол становится оооочень неотзывчивым. примерно как у долбанного вин10-11 с его плиточным интерфейсом, если система лежит на вращающемся диске, а не на SSD/
Кстати, операция смещения позиции в файле, если он превышает определенный объем, стоит вдвое или втрое дороже, чем для короткого файла, умещающегося в один inode. Это если файловая система типа ext2/3/4/ufs/btrfs без дополнительных слоев виртуализации типа менеджера томов с поддержкой raid или снапшотов, как в zfs или wafl.
Исключая сверхбольшие хранилища типа cephfs/lustre/panfs, которые режут файл на чанки, распределяющиеся по разным устройствам хранения - там уже по барабану, как работает, лишь бы разместить.
в общем-то я против любых крайностей - и когда человек держит в одной директории 1.6 миллиона файлов и когда у него один файл размером 10 терабайт. (а вот весело его чуть-чуть модифицировать?)
Я, если что, не про единственный сжатый файл, а про архив вида
это называется tar
Это очень древняя и очень популярная идея.
Во времена написания диплома я тоже сделал свой аналог тара, но только потому, что сам тарболл (архив) находился на CD-ROM, а у него с seek-to-seek задержкой совсем плохо. А ещё выпендриться хотелось и потенциально защитить передаваемые материалы. как легко убедиться - мода на хранение ресурсов к играм в виде огромных паков вышла с популяризацией МОДов к играм. Пардон за каламбур.
data.pack/dungeon/lake/waypoint_graph.dat, который хранит последовательность чисел в формате VLQ, хорошо сжимается и хранится сжатым
обожаю господ, которые хранят на томе с включенной дедупликацией и прозрачной архивацией zip-архивы. двойной выстрел в ногу с точки зрения латентности, нагрузки на СХД и удобства работы.