Структура каталогов для большого количества файлов - PullRequest
1 голос
/ 22 марта 2012

Я сделал один сайт ... где я храню загруженные пользователем файлы в отдельных каталогах, таких как
user_id = 1
так
IMG / upload_docs / 1 / 1324026061_1.txt
IMG / upload_docs / 1 / 1324026056_1.txt

Точно так же, если
user_id = 2
так
IMG / upload_docs / 2 / 1324026061_2.txt
IMG / upload_docs / 2 / 1324026056_2.txt
...
N

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

так это правильно? Или если нет, то может ли кто-нибудь предложить мне, как хранить эти файлы в такой структуре ???

Ответы [ 2 ]

0 голосов
/ 22 марта 2012

Я бы назвал UUID для изображений и создал бы подпапки на основе имен файлов. Вы можете сделать это довольно легко с помощью chunk_split. Например, если вы создаете папку каждые 4 символа, вы получите такую ​​структуру:

img/upload_docs/1/1324/0260/61_1.txt 
img/upload_docs/1/1324/0260/56_1.txt 

Сохраняя имя изображения 1324026056_1.txt, вы можете очень легко определить, где оно принадлежит или где его получить, используя chunk_split.

Этот метод аналогичен тому, как git хранит объекты.

Как код, это может выглядеть примерно так.

// pass filename ('123456789.txt' from db)
function get_path_from_filename($filename) {
    $path = 'img/upload_docs';
    list($filename, $ext) = explode('.', $filename); //remove extension
    $folders = chunk_split($filename, 4, '/'); // becomes 1234/5678/9
    // now we store it here
    $newpath = $path.'/'.$folders.'/'.$ext;
    return $newpath;
}

Теперь, когда вы ищете файл, чтобы доставить его пользователю, используйте функцию, используя эти шаги, чтобы воссоздать, где находится файл (на основе имени файла, которое все еще сохраняется как «123456789.txt» в БД). 1015 *

Теперь, чтобы доставить или сохранить файл, используйте get_path_from_filename.

0 голосов
/ 22 марта 2012
img/upload_docs/1/0/10000/1324026056_2.txt
img/upload_docs/9/7/97555/1324026056_2.txt
img/upload_docs/2/3/23/1324026056_2.txt
...