webew
Войти » Регистрация
 
PHP
MySQL/MariaDB

Хранение файлов: БД или файловая система

26 мая 2009, 13:13
Автор: bur
Задача: необходимо реализовать хранилище файлов, отдельный размер которых может достигать сотен мегабайт. Суммарных размер всех фалов - до 10-50Гб. Бывают мелкие (изображения), бывают крупные (видео-файла, архивы). Файлы закачивает администратор через админку без ФТП-доступа. Файлы могут иметь ограниченный доступ.

Как лучше реализовать такое хранилище:
1) хранить бинарники в БД, обрабатывая запросы через mod_rewrite и раздавая скриптами.
2) хранить в файловой системе, чтобы Apache(nginx) сам занимался раздачей.

Хотелось бы узнать, как эффективно воспользоваться вариантом (1), т.к. он более привлекателен из-за:
- эффективной настройки прав доступа,
- удобства создания бэкапов в виде дампов (хоть и титанический, но всё же один файл).

Если (1) совсем не подходит для данных целей, как в (2) быть с ограничением прав доступа? Пример: некоторые (не все) файлы можно раздавать только зарегистрированным юзерам. Список пользователей в БД, то есть арбитром выступает скрипт.
Добавить комментарий
Отображение комментариев: Древовидное | Плоское

1234ru

Ваще если админ только пользуется, то было бы удобнее по фтп имхо.
А насчет удобства дампа - то тут будет, скорее всего, как раз неудобство. Ввиду того, что таблица будет огромных размеров, ее надо будет дампить наверняка отдельно. Т.е. один дамп писать для всех таблиц, кроме нее, второй - специально для нее.
А ваще зависит от того, насколько это интенсивно будет использоваться - может, вопрос об эффективности преждевременный?
То, что не убивает нас, делает нас инвалидами.
26.05.2009, 14:00
Ответить

bur

Редактор - блондинко, ни о каком ФТП речи не идет. Да и не гуманно это. Ты же на файловые сервисы не по ФТП льешь.
Отдельный дамп для таблицы - это да. Зато на выходе один файл, который восстанавливается в БД одной командой.
Интенсивность использования хранилища клиентами до 5000 хостов в сутки.
Как-то так.
26.05.2009, 14:04
Ответить
NO USERPIC

rgbeast

Хранить в таблице огромные файлы и отдавать их скриптом - нелогично. Будут заполняться все буферы, не будет работать докачка и.т.д. Файлы нужно хранить в ФС, а их метаинформацию в базе. Если нужна безопасность, то хранить файлы в недоступном для apache каталоге. По требованию создавать в доступном для apache каталоге символическую ссылку с длинным уникальным именем и отдавать пользователю. По симлинку апач отдаст юзеру файл, причем с докачкой, правильным использованием буферов и.т.д.
26.05.2009, 19:34
Ответить

bur

Значит файловая система.
А можно найти кроссплатформенное решение на PHP, как раздавать файлы с ограниченным доступом? Линк подразумевает использование БАШа, что не есть хорошо для виндового апача.
26.05.2009, 19:37
Ответить
NO USERPIC

rgbeast

Виндовый апач на сервере это редкость. С линком это мне просто первое что в голову пришло. Другой вариант динамически переписывать .htaccess и использовать в нем mod_rewrite чтобы отображать уникальное имя на файл в другом каталоге (наверное такое можно).
26.05.2009, 20:17
Ответить

1234ru

Цитата:
Если нужна безопасность, то хранить файлы в недоступном для apache каталоге

А как можно хранить файлы в недоступном для apache каталоге, если он потом должен их показывать?
И записывать как эти файлы туда?
То, что не убивает нас, делает нас инвалидами.
26.05.2009, 20:34
Ответить
NO USERPIC

rgbeast

Каталог будет доступен для апача, но в нем будет .htaccess запрещающий доступ к файлам через HTTP.
26.05.2009, 21:32
Ответить

1234ru

А зачем бывает нужно так делать?
То, что не убивает нас, делает нас инвалидами.
26.05.2009, 21:36
Ответить
NO USERPIC

rgbeast

Такое требование в исходной постановке задачи "Пример: некоторые (не все) файлы можно раздавать только зарегистрированным юзерам.". Поэтому хочется, чтобы файл был доступен только ограниченное время и только одному юзеру, для чего как только юзер его хочет скачать, имея на это право, файл получает новый уникальный URL. URL должен управляться из апача, чтобы избежать неэффективности php при работе с потоковой информацией.
26.05.2009, 21:57
Ответить

1234ru

Цитата:
URL должен управляться из апача, чтобы избежать неэффективности php при работе с потоковой информацией.


Т.е. в обход PHP-скриптов?
А чем тогда пользоваться? (одного .htaccess тут не хватит, т.к. он не умеет брать информацию из БД)
Perl?
То, что не убивает нас, делает нас инвалидами.
26.08.2009, 10:05
Ответить
NO USERPIC

rgbeast

Не обязательно брать информацию из БД. Можно в скрипте, который делает файл доступным переписывать .htaccess
26.08.2009, 10:23
Ответить

1234ru

Да. В принципе, так можно. Однако, производительность такого решения вызывает опасения, поскольку .htaccess в таком случае получится длинный: размер будет зависеть линейно от количества файлов, которые надо обслуживать, поскольку каждый файл надо будет описывать отдельно.

Будет ли это быстрее, чем работа PHP с потоковой информацией?
То, что не убивает нас, делает нас инвалидами.
28.08.2009, 12:43
Ответить
NO USERPIC

rgbeast

Как вариант, создавать каталог и класть в него .htaccess
Если файлы - видео, то только http-сервер сможет их правильно отдавать, вряд ли допустимо использовать PHP
28.08.2009, 13:26
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2008—2017 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100