Всё началось с того, что у меня накопились фотографии. Думаю, многим знакомо это чувство:
Ещё хуже, если «драйвер» фотоаппарата раскладывает все фотографии по датам. По-моему, так вообще невозможно ничего найти. Поэтому я попробовал хранить фотографии с тегами, и пускай это нельзя по-настоящему назвать файловой системой — свои функции она уже выполняет.
Содержание:
Архитектура
Начнём с архитектуры системы (ну логично, правда?). Пускай файлы хранятся как есть, т.е. файлами — а вся система тегов будет храниться в базе данных. Не очень удобно с точки зрения переносимости — зато мы избавлены от необходимости лазить в мета-теги и как-то там эту информацию складировать. Более того, при использовании меты мы не получаем общего индекса файлов, да и прочитать информацию из всей меты при поиске — жжжутко медленно.
Классификация и тегирование
Далее, по какой системе классифицировать файлы и назначать теги? Я предлагаю использовать плоскую систему тегов, без вложенных уровней. Любые сложные вложенности (вроде «поездка в Киев, но не летняя а весенняя») почти всегда решаются учётом даты создания фотографии.
Хранение
Теперь, как хранить фотографии? Если оставлять их начальные имена — мы совершенно не застрахованы от их повторения даже в пределах нашей базы; более того, коллизии обязательно будут. Если назначать им последовательные номера с ноля — мы оставляем бомбу замедленного действия: если нам когда-то понадобится слить две базы вместе, мы не сможем сделать это просто слиянием папок (названия файлов будут совпадать). Даже если мы установим некий префикс файлам одной из папок — в базе тоже придётся это учесть.
Поэтому можно использовать в качестве новых имён файлов GUID (и он же будет их идентификатором в базе). Кто-то может возразить, что хранить GUID в качестве индекса базы — это медленно и погано, но я пока не заметил никаких проблем: даже на атоме база с 300 фотографиями крутится очень быстро. Прелесть GUID`а в том, что он практически гарантирует неповторяемость — вероятность существования одинаковых номеров стремится к нулю. К тому же DOS и ZipMagic уже забрали ту единственную вероятность совпадения на миллион лет (шутка). Поэтому сливать две базы будет легко и просто.
При просмотре
Для удобного просмотра нужно иметь превьюшку (для каталога) и средний размер для просмотра. Полный размер оставим для возможности печати и придирчивого просмотра Генерировать эти превьюшки будем сразу после добавления фотографии в базу.
Продолжение