Задача: необходимо реализовать хранилище файлов, отдельный размер которых может достигать сотен мегабайт. Суммарных размер всех фалов - до 10-50Гб. Бывают мелкие (изображения), бывают крупные (видео-файла, архивы). Файлы закачивает администратор через админку без ФТП-доступа. Файлы могут иметь ограниченный доступ.
Как лучше реализовать такое хранилище:
1) хранить бинарники в БД, обрабатывая запросы через mod_rewrite и раздавая скриптами.
2) хранить в файловой системе, чтобы Apache(nginx) сам занимался раздачей.
Хотелось бы узнать, как эффективно воспользоваться вариантом (1), т.к. он более привлекателен из-за:
- эффективной настройки прав доступа,
- удобства создания бэкапов в виде дампов (хоть и титанический, но всё же один файл).
Если (1) совсем не подходит для данных целей, как в (2) быть с ограничением прав доступа? Пример: некоторые (не все) файлы можно раздавать только зарегистрированным юзерам. Список пользователей в БД, то есть арбитром выступает скрипт.
Хранение файлов: БД или файловая система
26 мая 2009, 13:13
Автор: bur
|
1234ruВаще если админ только пользуется, то было бы удобнее по фтп имхо.А насчет удобства дампа - то тут будет, скорее всего, как раз неудобство. Ввиду того, что таблица будет огромных размеров, ее надо будет дампить наверняка отдельно. Т.е. один дамп писать для всех таблиц, кроме нее, второй - специально для нее. А ваще зависит от того, насколько это интенсивно будет использоваться - может, вопрос об эффективности преждевременный? То, что не убивает нас, делает нас инвалидами.
|
26.05.2009, 14:00 Ответить |
|
|
burРедактор - блондинко, ни о каком ФТП речи не идет. Да и не гуманно это. Ты же на файловые сервисы не по ФТП льешь.Отдельный дамп для таблицы - это да. Зато на выходе один файл, который восстанавливается в БД одной командой. Интенсивность использования хранилища клиентами до 5000 хостов в сутки. Как-то так. Fastcoder.org — портал для JavaScrpt-программистов
|
26.05.2009, 14:04 Ответить |
|
NO USERPIC
|
rgbeastХранить в таблице огромные файлы и отдавать их скриптом - нелогично. Будут заполняться все буферы, не будет работать докачка и.т.д. Файлы нужно хранить в ФС, а их метаинформацию в базе. Если нужна безопасность, то хранить файлы в недоступном для apache каталоге. По требованию создавать в доступном для apache каталоге символическую ссылку с длинным уникальным именем и отдавать пользователю. По симлинку апач отдаст юзеру файл, причем с докачкой, правильным использованием буферов и.т.д. |
26.05.2009, 19:34 Ответить |
|
|
burЗначит файловая система.А можно найти кроссплатформенное решение на PHP, как раздавать файлы с ограниченным доступом? Линк подразумевает использование БАШа, что не есть хорошо для виндового апача. Fastcoder.org — портал для JavaScrpt-программистов
|
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 Ответить |
© 2007—2012 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
