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

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

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

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

dcehwd8y4fcf42wduasdha.jpg 

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

ВОПРОСОВ..

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

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

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

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

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

     $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 символами, если у вас будет миллионы изображений.

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

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

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

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

    /aa/bb/cc/aabbccdddddddddddddd_thumb.jpg
    /aa/bb/cc/aabbccdddddddddddddd_large.jpg
    /aa/bb/cc/aabbccdddddddddddddd_full.jpg

    или похожие

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

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

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

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

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

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

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

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

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

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

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