Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
6 / 6 / 1
Регистрация: 29.10.2009
Сообщений: 143

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

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

Студворк — интернет-сервис помощи студентам
мне надо хранить загружаемые файлы чтобы доступ к любому файлу был очень быстрым. т.к. пути к файлом и список файлов пользователя хранится в базе. имеет ли разница между хранением:
1. /files/ - тут все файлы всех пользователей
2. /files/user_id/ - тут файлы конкретного пользователя
?
Заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.11.2010, 12:01
Ответы с готовыми решениями:

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

Хранение большого количества однотипных данных
Добрый день. Подскажите, каким образом хранить данные для программы? Например, у меня имеется 1000 - 300 000 строковых данных, которые...

Хранение большого количества бинарных данных
Возник вопрос связаный с хранением данных: Мне нужно сохранять массивы бинарных данных (каждый массив - 4096 элементов по 1 байту) Если...

4
 Аватар для Nazz
898 / 729 / 80
Регистрация: 12.03.2009
Сообщений: 2,804
Записей в блоге: 2
11.11.2010, 13:41
Цитата Сообщение от vvsh Посмотреть сообщение
1. /files/ - тут все файлы всех пользователей
думаю так будет лутше. потом работаете с файлом в етой папке для конкретного пользователя. естли же нужно искать то вы будете искать в одной папке, и естли найдёте можете сразу приступать к работе.
В инном случаи вам прийдётся искать папку, потом переходить в неё и работать с файлом, сохранять и опьять выходить, а на ето теряется времья работы.
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
11.11.2010, 17:55
да ничего там не теряется
лучше в одну кучу все не складывать
делай /files/user_id/

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

Для решения этой задачи многие программисты берут 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 раза использовать класс: вначале для построения дерева папок, потом для построения в каждой папке дерева для файлов.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.06.2014, 04:14
Помогаю со студенческими работами здесь

Хранение и использование большого количества изображений
Всем привет! Подскажите способ хранения большого количества изображений, чтобы можно было эти изображения удобно использовать. Смотрел...

Самый быстрый способ отрисовки большого количества одинаковых полигонов (квадратов)
Здравствуйте. Нужно отрисовать большое число одинаковых полигонов(квадратов) как можно быстрее. У каждого квадрата есть своя позиция в...

Хранение большого количества настроек - нужна подсказка
Пишу программу, которая требует хранения множества настроек. Я их разделил на несколько типов: 1) размер и положение окна, размер...

Хранение большого количества данных (5 миллиардов пар чисел)
Всем привет! У меня возникла следующая проблема. Необходимо хранить в программе последовательность примерно из 5 миллиардов пар чисел,...

Хранение большого (15000) количества строк в строковом массиве
Здравствуйте! Мне нужно создать генератор слов. Я решил пойти путем словаря + генератор псевдослучайных чисел. Файл сделал вложением,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru