Я разрабатываю сайт, который позволяет людям загружать изображения. Мы уменьшаем каждое изображение до 4 размеров. Мы ожидаем много-много изображений и рассматриваем способы повышения производительности в отношении файловой структуры, поскольку на самом деле нам не нужен один каталог с 10000 файлами. У кого-нибудь есть предложения относительно того, как мы организуем файлы?
Варианты, которые кажутся очевидными:
у каждого пользователя есть своя папка, а внутри нее - папка каждого размера.
(Каждая из четырех папок может содержать много изображений)
/user_uploads/user01/
|-/size_thumb/
|-/size_small/
|-/size_medium/
|-/size_large/
/user_uploads/user02/
|-/size_thumb/
|-/size_small/
|-/size_medium/
|-/size_large/
etc etc
или фотографии каждого пользователя хранятся в одной папке для каждого пользователя (больше фотографий в каталоге, но меньше каталогов в целом)
/user_uploads/user01/
/user_uploads/user02/
etc etc
каждая фотография хранится по размеру
много-много фотографий в каталоге (могут быть дополнительные подпапки по дате?)
/user_uploads/small/
/user_uploads/medium/
/user_uploads/large/
/user_uploads/thumbs/
У кого-нибудь есть идеи? Я думаю, мы, наверное, пойдем с /user_uploads/userID/
если ни у кого нет предложений.
(Сейчас все будет размещено на одном компьютере, поэтому нам не нужно беспокоиться о том, что файлы находятся на разных серверах)
Возможно, вы захотите попробовать md5-хеширование изображения по мере его загрузки, а затем сохранить их в структуре каталогов, подобной приведенной ниже. Предполагая 3 изображения, которые хешируют:
И структура папок выглядит так:
/images/orig/2/2b/2b0/2b00042f7481c7b056c4b410d28f33cf.jpg /images/orig/8/84/84b/84bdbf7c4d48e16642af4c317df428c2.jpg /images/orig/7/7b/7b2/7b2a7edc6e86224d6ba0f97b717c80ed.jpg /images/large/2/2b/2b0/2b00042f7481c7b056c4b410d28f33cf.jpg /images/large/8/84/84b/84bdbf7c4d48e16642af4c317df428c2.jpg /images/large/7/7b/7b2/7b2a7edc6e86224d6ba0f97b717c80ed.jpg /images/small/2/2b/2b0/2b00042f7481c7b056c4b410d28f33cf.jpg /images/small/8/84/84b/84bdbf7c4d48e16642af4c317df428c2.jpg /images/small/7/7b/7b2/7b2a7edc6e86224d6ba0f97b717c80ed.jpg
Вы можете создать столько уровней, сколько хотите, чтобы размеры каталогов были управляемыми. Также, если вы предпочитаете, вы можете использовать некоторый идентификатор пользователя для идентификации изображений и по-прежнему использовать аналогичную структуру, например. предполагая идентификатор пользователя 14: (/images/orig/0/00/0014/0014.jpg)
Вы можете хранить хеш-данные пользователя -> изображения в своей базе данных, сохраняя при этом изображения в файловой системе. Несмотря на то, что это может Если вы можете хранить изображения в базе данных, есть причины, по которым вы можете этого не делать. Хранение их в файловой системе значительно упрощает их перемещение, например, в CDN или в облако по мере вашего роста. Это также позволяет вам размещать каталоги на разных дисках для повышения производительности чтения, если вам это нравится.
Тот факт, что вы хешируете исходное изображение в md5, означает, что если 30 человек загрузят одно и то же изображение, вы сохраните только одну копию (всех размеров) этого изображения в своей файловой системе вместо 30 копий.