Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
vvsh
6 / 6 / 1
Регистрация: 29.10.2009
Сообщений: 143
#1

Хранение большого количества файлов и быстрый доступ к ним

11.11.2010, 12:01. Просмотров 2335. Ответов 4
Метки нет (Все метки)

мне надо хранить загружаемые файлы чтобы доступ к любому файлу был очень быстрым. т.к. пути к файлом и список файлов пользователя хранится в базе. имеет ли разница между хранением:
1. /files/ - тут все файлы всех пользователей
2. /files/user_id/ - тут файлы конкретного пользователя
?
Заранее спасибо

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2010, 12:01
Ответы с готовыми решениями:

Парсинг большого количества страниц
Есть такой вопрос..возможно ли парсить одновременно около 1000 страниц?

Редактирование большого количества таблиц
Здравствуйте. Стоит такая задача: нужно где-то держать данные таблицы, и при...

Избавиться от большого количества обработчиков
Господа, есть такая проблема... Имеется главный index.php файл, он же...

Рассылка большого количества писем и ограничения хостера
Всем привет. Ребят, возникла такая проблема. Когда писем рассылалось...

Отправка большого количества писем через SMTP
Здравствуйте. Есть такая задачка предположим у меня база майлов юзеров которые...

4
Nazz
WEB-developer
896 / 727 / 80
Регистрация: 12.03.2009
Сообщений: 2,802
Записей в блоге: 2
11.11.2010, 13:41 #2
Цитата Сообщение от vvsh Посмотреть сообщение
1. /files/ - тут все файлы всех пользователей
думаю так будет лутше. потом работаете с файлом в етой папке для конкретного пользователя. естли же нужно искать то вы будете искать в одной папке, и естли найдёте можете сразу приступать к работе.
В инном случаи вам прийдётся искать папку, потом переходить в неё и работать с файлом, сохранять и опьять выходить, а на ето теряется времья работы.
0
odip
Эксперт С++
7161 / 3220 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
11.11.2010, 17:55 #3
да ничего там не теряется
лучше в одну кучу все не складывать
делай /files/user_id/

а вообще все сильно зависит от того - СКОЛЬКО у тебя будет этих файлов
0
vvsh
6 / 6 / 1
Регистрация: 29.10.2009
Сообщений: 143
11.11.2010, 23:29  [ТС] #4
пока у каждого пользователя с расширенными правами есть максимум 200 мб, кол-во файлов не ограничено.
0
fdhfh
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 1
27.06.2014, 04:14 #5
Как известно в одной папке не стоит хранить большое количество файлов т.к. очень быстро может произойти сбой в системе или попросту файлы будут очень медленно считываться.

Для решения этой задачи многие программисты берут md5 имени файла f789f789abc898d6892df98d09a8f8, после чего разбивают имя примерно таким образом:

/f7/89/f789abc898d6892df98d09a8f8.jpg

Математика тут очень проста - один символ это 16 вариантов.
Таким образом 2 символа это уже 16*16=256 вариантов.
В нашем случае у нас 2 вложенности по 2 символа, таким образом максимальное количество папок будет 256*256=65536 папок.
Если нам потребуется сохранить 1000000 файлов то число файлов в каждой папке не превысит 1000000/65536=15 файлов.

Да, вариант прост, но что если нам требуется не только хорошо сохранять файлы, но и еще быстро их находить?

Например у нас социальная сеть и мы хотим для каждого пользователя создать отдельную папку с номером его id и хранить в ней файлы которые в свою очередь тоже имеют свой id.
И для нас важно не только сохранить файл но и быстро найти где он лежит по его id.

Для решения этой задачи я написал класс, который позволяет сохранять на сервере большое количество файлов или папок в древовидной структуре папок.

Вот какую структуру создает класс:

Хранение большого количества файлов и быстрый доступ к ним


Древовидная структура. Хранение много файлов в папке.

Чтобы посчитать максимально число файлов которое уместится в этой структуре нужно возвести максимальное количество файлов в папке в степень количества ветвей плюс один.

На изображении мы видим 2 ветви и по 3 файла в каждой папке.
Таким образом 3 нужно возвести в степень 2+1 - 3*3*3=27 файлов.

Для сохранения не более 1000000 файлов в такой структуре нам хватит 2 ветви по 100 файлов в каждой папке (100*100*100).

В класс нужно передать массив параметров - путь к папке где будет строиться дерево, максимальное число файлов в папке, число ветвей, либо можно применить паттерн максимального числа файлов, который уже был заранее просчитан - bigint, int, mediumint, smallint:

array('upload_dir'=>Q_PATH.'/uploads/','max_file_count'=>1000,'branches'=>2,'pattern'=>'')

Сам класс можно скачать по ссылке:
Класс построения дерева папок

179_pnj809zpm.zip

Для варианта социальной сети описанной выше, требуется 2 раза использовать класс: вначале для построения дерева папок, потом для построения в каждой папке дерева для файлов.
0
27.06.2014, 04:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2014, 04:14

Закачивание на сервер файлов большого размера
Возникла проблема при закачивании файлов большого размера. Необходима...

Быстрый доступ к данным
Есть некие данные, которые нужно сделать общими для нескольких пользователей....

Хранение большого количества файлов
Есть свой видео-хостинг типа ютуба, и вот такой вопрос возник. Как мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru