Всё началось с того, что у меня накопились фотографии. Думаю, многим знакомо это чувство:

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

Архитектура

Начнём с архитектуры системы (ну логично, правда?). Пускай файлы хранятся как есть, т.е. файлами — а вся система тегов будет храниться в базе данных. Не очень удобно с точки зрения переносимости — зато мы избавлены от необходимости лазить в мета-теги и как-то там эту информацию складировать. Более того, при использовании меты мы не получаем общего индекса файлов, да и прочитать информацию из всей меты при поиске — жжжутко медленно.

Классификация и тегирование

Далее, по какой системе классифицировать файлы и назначать теги? Я предлагаю использовать плоскую систему тегов, без вложенных уровней. Любые сложные вложенности (вроде «поездка в Киев, но не летняя а весенняя») почти всегда решаются учётом даты создания фотографии.

Хранение

Теперь, как хранить фотографии? Если оставлять их начальные имена — мы совершенно не застрахованы от их повторения даже в пределах нашей базы; более того, коллизии обязательно будут. Если назначать им последовательные номера с ноля — мы оставляем бомбу замедленного действия: если нам когда-то понадобится слить две базы вместе, мы не сможем сделать это просто слиянием папок (названия файлов будут совпадать). Даже если мы установим некий префикс файлам одной из папок — в базе тоже придётся это учесть.

Поэтому можно использовать в качестве новых имён файлов GUID (и он же будет их идентификатором в базе). Кто-то может возразить, что хранить GUID в качестве индекса базы — это медленно и погано, но я пока не заметил никаких проблем: даже на атоме база с 300 фотографиями крутится очень быстро. Прелесть GUID`а в том, что он практически гарантирует неповторяемость — вероятность существования одинаковых номеров стремится к нулю. К тому же DOS и ZipMagic уже забрали ту единственную вероятность совпадения на миллион лет (шутка). Поэтому сливать две базы будет легко и просто.

При просмотре

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

Продолжение