Я считаю, что второй вариант лучше: БД дает вам гораздо больше гибкости, и я думаю, что производительность выше, чем у файловой системы, если вы установите правильные индексы.
В подходе файловой системы вы ограничены только одной категорией на изображение, когда в БД вы можете установить несколько категорий для изображения.
Дело в том, что Db более грязный, извините, я не могу найти причину того, как он будет более грязным, возможно, вы имеете в виду, что файлы не организованы в файловой системе, но вам все равно нужно организовать файлы на файловую систему и разделите их на несколько папок для лучшей производительности, и если вы хотите получить все загруженные изображения, вы запрашиваете у них все базы данных, что будет намного быстрее, чем ls для всех папок категорий.
Под организацией файлов в файловой системе при использовании подхода БД я имею в виду, что вам нужно разделить их на несколько папок, на самом деле это зависит от того, как вы прогнозируете загрузку изображений:
- Если вы прогнозируете, что загрузка будет продолжаться долго, я думаю, что лучше поместить файлы в каталоги по диапазону по времени (день, неделя, месяц), например, если я загружаю изображение сейчас, оно перейдет к
«/web_path/uploaded_photos/week4_2012/[some_generated_string].jpg"
- Если вы не знаете, как предсказать загрузку, я предлагаю вам разделить файлы на папки на что-то общее, например, первые две буквы в хеше MD5 в имени изображения, например, если мое имя файла "photo_2012" .jpg "хеш будет" c02d73bb3219be105159ac8e38ebdac2 ", поэтому путь в файловой системе будет" /web_path/uploaded_photos/c/0/[some_generated_string].jpg"
Второй аргумент, требующий большого количества запросов к БД, не совсем верен, потому что вам понадобится такое же количество запросов в файловой системе, которые намного медленнее.
Удачи.
PS
Не забудьте сгенерировать новое имя файла для любого загруженного изображения, чтобы не возникало коллизий при загрузке разными пользователями одного и того же имени изображения или одного и того же пользователя.