2014-11-10 3 views
0

У меня простая система комментариев пользователей. Они могут иметь изображение. В настоящее время я сохраняю загруженные пользователем изображения в папке. Я ничего в БД не писать для изображения, очень просто я имя файла изображения с комментарием ид (только одно изображение на комментарий разрешено) и хранить их все в одной папке:Ссылаясь на загруженные пользователем файлы - DB или имя файла?

move_uploaded_file($upload_pic,'images/'.mysql_insert_id().'.jpg'); 
//please note I am also upgrading to mysqli 

затем при получении комментария данные из базы данных, которую я проверяю с помощью file_exists(), и потенциально отображая полное изображение с комментарием.

if (file_exists('images/'.$fid.'.jpg')) echo '<img width="576" src="images/'.$fid.'.jpg">'; 

Теперь я хочу, чтобы изменить его, чтобы иметь возможность хранить и показывать больше кадров в должности (по-прежнему ограничены 4) и имеют также эскизы.

Здесь возникает вопрос

для такой простой системы это быстрее, чтобы хранить все ссылки на файл в отдельной таблице в базе данныхили повышения имен файлов связанных комментировать ID?

  1. Если база данных - как назвать файлы? using uniqid? Простой идентификатор таблицы сопоставления, imgname.
  2. Если имя файла Я думал о XXXXXX-Y.jpg и получал с glob("images/".round(XXXXXX/1000)."/XXXXXX-*.jpg"), имея максимум 1000 файлов в одной папке. (в настоящее время есть 6.5k изображений в сообщениях 105k за последние 10yrs)

Мне кажется, что имя файла кажется более простым, так как мне не нужно хранить дополнительную информацию, связанную с изображением, но, с другой стороны, кажется, что большинство людей использует базу данных. И хотелось бы сосредоточиться на пути с лучшей производительностью.

ответ

0

По моему опыту работы на сайте недвижимости, его довольно дорого проверить файл.

Итак, если у вас есть таблица с именами файлов в базе данных, которая будет намного быстрее отображаться. Вы не будете проверять явно для file_exists для всех четырех файлов каждый раз, вы будете просто показывать тег изображения столько раз, сколько у вас есть изображения для этого комментария в db. Например, если у вас есть 1 изображение для комментария, вам не нужно будет проверять наличие других 3, вы найдете только 1 из db, так что вы просто покажете его сразу.

Для наименовании, держать вещи простыми, как с помощью этого:

3673-1-originalfilename.jpg 
3673-2-originalfilename.jpg 
3673-3-originalfilename.jpg 

которые следуют следующему шаблону

"commentid"-"count"-"original-filename"."extension" 

Излишне говорить, но вы можете хранить больше данных об изображениях в базе данных, если вам также нравится имя файла эскиза или размер файла и т. д., и вы можете хранить любое количество изображений для комментариев по своему усмотрению.

Надеюсь, это поможет!

+0

Спасибо Рашид, я думаю, что это имеет смысл. Мне не нравится идея сохранения изображения в базе данных, но я сосредоточусь на таблице сопоставления. Как вы думаете, я разделил файлы на несколько папок, так как теперь у меня около 6500 файлов в одной папке. – John

+0

Как только вы больше не смотрите, если файлы существуют, количество файлов в папке оказывает меньшее влияние на производительность.Вероятно, вам больше не понадобится разбить их в папках. –

+0

@John Как сказал Лоренц, он не будет иметь существенного влияния на производительность, но если он поможет вам в управлении, а не в хорошей папке. (Но вам нужно знать, в какой папке находится изображение) – rashid

Смежные вопросы