deeman » 15 фев 2010, 15:05
На самом деле, текущий вариант хранения тайлов оптимален для большинства операций с ними. Другое дело, что со стороны системы огромное количество файлов затрудняет различные системные операции, как например, индексирование, сжатие, поиск и т.п., кроме того, при большом размере кластера начинаются "утечки" размера диска на незанятое пространство кластера. Отсюда и нужно исходить при решении задачи оптимизации. Соответственно, исходим из двух позиций: 1. Для программы SASPlanet действующая структура кеша - оптимальна. 2. Для системы данный кеш затягивает простейшие дисковые операции на пару часов и жрет свободное место на диске, почем зря. Стало быть попробуем оптимизировать последнюю позицию, т.е. сменить отношение системы к файловому кешу. Вариант с базой данных лично я откладываю по очень простой причине - такая оптимизация будет оптимизацией только для достаточно мощных компьютеров, а для моего ноутбука, который я таскаю с собой во все говна, любезно предоставленные родной страной, это будет не оптимизация, а деградация. Системных ресурсов, дискового пространства и пр. Напрашивается самое первое и простое решение - не пускать ось в виде различных индексаций-дефрагментаций и пользовательские приложения в виде антивирусов и опять же всяческих индексаций со своими нехитрыми задачами в область кеша. Как? Отделить кеш от остального пространства диска общего назначения, например - перемещением кеша на отдельный диск и запретом системных действий над этим диском (плюс задать пути исключения для пользовательских программ). Второй вариант, как уже неоднократно тут говорилось - хранение кеша в виде образа диска. Тоже неплохой вариант, единственный минус - необходимость монтировать виртуальный диск перед использованием программы. Теперь об оптимизации занимаемого места. Если вы выбрали для размещения отдельный логический диск, или монтируемый образ диска - ничего не стоит оптимизировать размер кластера под свою задачу. Только что провел эксперимент: создал монтируемый как логический диск образ программой TrueCrypt размером 100МБ (для эксперимента хватит), отформатировал его в FAT32 (на NTFS меньше входит) с размером кластера 512Б (0,5кБ), скопировал туда часть карт Gurtam (пока система не сказала нот енаф спейс). При этом на диск 104МБ влезло 16446 файлов/629 папок, заняв 98Мб (94% - очень неплохой результат). При форматировании с размером кластера 1К вошло уже 15707 файлов и 617 папок, заняв 95Мб(91%). С размером кластера 2К - 14507 файлов/593 папки, размер 92МБ(88,5%). С размером кластера 8К - 9796файлов/515 папок, 64МБ (62%). Результат очевиден: с размером кластера 512Б дисковое пространство расходуется достаточно эффективно. В обычное время, когда я не пользуюсь программой, система воспринимает виртуальный диск как один файл и не очень-то задумывается при операциях с ним. Когда снова соберусь в какие-нибудь @беня, куплю флешку 8 гигов только под эту задачу. Нужна программа - вставил SD в картридер и готово. Нет - ну и пусть лежит себе в кармашке сумки.
Это мы говорили про оптимизацию со стороны пользователя. Теперь можно было бы обсудить с автором программы вариант оптимизации и с программной точки зрения. Давайте заглянем в наиболее загруженные папки кеша. Здесь видно, что автор хранит отдельные файлы столбцами с координатами, заданными именами папок. Так почему бы тогда не склеить все смежные тайлы, находящиеся в одной папке? Арифметика для последующего отображения части склейки очень простая и графический движок уже наверняка умеет работать с отображением картинки со смещением (не с нулевой координаты). При этом, в моей папке, к примеру будет не 75 файлов (взял первую попавшуюся), а три (несколько тайлов не имеют общих границ - при скачивании несколько тайлов были пропущены). Экономия? И значительная! А вот как "обозвать" этот склеенный тайл, чтобы дать исходные данные для арифметики - это уже логистическая задача для автора)). Мне кажется, назвав склейки y10291-10493.jpg, y10495.jpg, y10497-10505.jpg сохраняется исходная мысль автора по названию файлов кеша и легко прицепить математику для отображения тайлов начиная с любого из склеенного столбца. Кстати, один из файлов (который у меня в папке не имеет общих границ) назван так же, как и оригинальный файл, т.к. по сути им и является. Осталось выслушать автора по этому поводу.