Структура папок для хранения миллионов изображений?

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

Я искал и нашел примеры изображений, хранящихся как хэши.... например...

Если я загружу, coolparty.jpg, мой script преобразует его в хеш файл Md5, в результате чего..

dcehwd8y4fcf42wduasdha.jpg

и который хранится в /dc/eh/wd/dcehwd8y4fcf42wduasdha.jpg но для 3 миниатюр я не знаю, как их хранить.

ВОПРОСЫ..

  • Правильно ли это сохранить эти изображения?

  • Как сохранить миниатюры?

  • В PHP что такое пример кода для хранения этих изображений с использованием метода выше?

Ответ 1

Как я использую структуру папок:

  • Я загружаю фотографию и перемещаю ее, как вы сказали:

    $image = md5_file($_FILES['image']['tmp_name']);
    // you can add a random number to the file name just to make sure your images will be "unique"
    $image = md5(mt_rand().$image);
    $folder = $image[0]."/".$image[1]."/".$image[2]."/";
    
    // IMAGES_PATH is a constant stored in my global config
    define('IMAGES_PATH', '/path/to/my/images/');
    // coolparty = f3d40fc20a86e4bf8ab717a6166a02d4
    $folder = IMAGES_PATH.$folder.'f3d40fc20a86e4bf8ab717a6166a02d4.jpg';
    // thumbnail, I just append the t_ before image name
    $folder = IMAGES_PATH.$folder.'t_f3d40fc20a86e4bf8ab717a6166a02d4.jpg';
    // move_uploaded_file(), with thumbnail after process
    // also make sure you create the folders in mkdir() before you move them
    
  • Я считаю, что это основной способ, конечно, вы можете изменить структуру папок на более глубокую, как вы сказали, с 2 символами, если у вас будет миллионы изображений.

Ответ 2

Причина, по которой вы будете использовать такой метод, - просто уменьшить общее количество файлов в каталоге (inodes).

Используя описанный метод (3 уровня глубины), вы вряд ли достигнете даже сотен изображений в каталоге, поскольку у вас будет максимальное количество каталогов почти 17MM. 16 ** 6.

Что касается ваших вопросов.

  • Да, это прекрасный способ их сохранить.
  • То, как я это сделаю, будет

    /aa/bb/cc/aabbccdddddddddddddd_thumb.jpg
    /aa/bb/cc/aabbccdddddddddddddd _large.jpg
    /aa/bb/cc/aabbccddddddddddddddd _dll_.jpg

    или аналогичный

  • В сети есть множество примеров того, как фактически хранить изображения. У вас есть более конкретный вопрос?

Ответ 3

Если вы говорите о миллионах фотографий, я предлагаю вам отнести их к третьей стороне, такой как Amazon Web Services, более конкретно для этой Amazon S3. Нет ограничений на количество файлов, и, если вам не нужно фактически перечислять файлы, нет необходимости отдельно их разделять на каталоги (и, если вам нужно перечислить, вы можете использовать разные разделители и префиксы - http://docs.amazonwebservices.com/AmazonS3/latest/dev/ListingKeysHierarchy.html). И ваши расходы на хостинг/переименование, вероятно, будут ниже, чем делать сами - и они будут скопированы.

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

И превью, как было предложено aquinas, просто добавьте _thumb1 и т.д. в имя файла. Или сохраните в отдельных папках themsevles.

Ответ 4

1) Что-то только вы можете ответить. Как правило, я предпочитаю хранить изображения в базе данных, чтобы вы могли иметь ОДИН последовательную резервную копию, но YMMV.

2) Как? Как насчет /dc/eh/wd/dcehwd 8y4fcf42wduasdha_thumb1.jpg,/dc/eh/wd/dcehwd8y4fcf42wduasdha_thumb2.jpg и/dc/eh/wd/dcehwd8y4fcf42wduasdha_thumb3.jpg

3). Вы спрашиваете, как записать файл в файловую систему или...?

Ответ 5

Улучшить ответ.

Для миллионов изображений, как и да, правильно, что использование базы данных замедлит процесс

Лучшим вариантом будет использование "Файловой системы сервера" для хранения изображений и использования .htaccess для добавления безопасности.

или вы можете использовать веб-службы. многие серверы, например, предоставляют Images Api для загрузки, отображения. Вы также можете использовать этот вариант. Например, Amazon