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

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

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

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

dcehwd8y4fcf42wduasdha.jpg

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

вопросы..

  1. это правильный способ хранения этих изображений?

  2. Как я буду хранить эскизы?

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

5 ответов


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

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

    $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 уровня глубины), вы вряд ли достигнете даже сотен изображений в каталоге, так как у вас будет максимальное количество каталогов почти 17 мм. 16* * 6.

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

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

    /aa/bb/cc / aabbccddddddddddddddd_thumb.формат JPG
    /aa/bb/cc / aabbccdddddddddddddddd_large.формат JPG
    /aa/bb/cc / aabbccdddddddddddddd_full.формат JPG

    или подобное

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

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

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

и пальцы, как полагают Аквинского, просто appent _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, чтобы Безопасности.

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