LINUX.ORG.RU

[необходим совет]хранение файлов в БД


0

0

Всем доброго времени суток.

Небольшая предистория: работаю в фирме, которая оказывает услуги, пишу для нас программку, чтоб упорядочить работу с заказами. С каждым заказом у нас связанно несколько файлов (в основном макеты). Все данные по заказам я постепенно перевел в БД, теперь подошла очередь фалов.

Собственно вопрос: файлы я планирую хранить в БД на серере, но действительно ли это удобно? Насколько сильно это нагрузить сервер БД? Насколько больше дискового пространства будет использоватся? Какие еще возможны подводные камни?

Прошу людей, знакомых с подобными вопросами, дать мне ценных советов.

Немного подробностей о БД: PostgreSQL, файлы планировал хранить как бинарные данные (E'\\xxx').

В общем как-то вот так все сумбурно написалось.

Всем заранее спасибо за советы.

★★★★★

При хранении в БД проблемы могут быть с отдачей. К примеру как реализовать докачку? Если не лень писать Rang-и ручками, то нормально. Однако когда суммарный размер файлов будет слишком большой БД будет тормозить. Самое первое что можно сделать, это перенести файлы в отдельную БД, что бы не загружать основную. Файлы в конце концов и так не очень быстро отдаются. А вообще лучше всего это хранить файлы в файловой системе и отдавать nginx, а в БД хранить ссылки на файлы.

dizza ★★★★★
()
Ответ на: комментарий от dizza

файлы не большие, к тому же все пользователи находятся внутри нашей офисной сети, поэтому докачки и прочее не актуальны. работа с файлами(скачать/закачать) будет полностью реализованна в моей программе.

Хранить в файловой системе файлы действительно намного удобнее, но для этого необходимо писать фронт-энд для сервера, который будет эти фалы принимать, раскладывать по директориям и оформлять их в БД.

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

trex6 ★★★★★
() автор топика
Ответ на: комментарий от trex6

> файлы не большие, к тому же все пользователи находятся внутри нашей офисной сети, поэтому докачки и прочее не актуальны. работа с файлами(скачать/закачать) будет полностью реализованна в моей программе.

Сейчас нет — завтра да. Сейчас макеты веб-страниц, а завтра макет плаката в tiff. Сейчас только внутренние пользователи, а завтра директору понравится и скажет не посылать по электронной почте макеты, а отправлять ссылки на сайт, с логином и паролем. Требования меняются в этом мире.

anonymous
()
Ответ на: комментарий от trex6

>Хранить в файловой системе файлы действительно намного удобнее, но для этого необходимо писать фронт-энд для сервера, который будет эти фалы принимать, раскладывать по директориям и оформлять их в БД.

Делаю сейчас один проект, столкнулся с похожей задачей. Много файлов до 1-2мб, и полное нежелание писать что-то на сервере.

Решил сделать ftp, а всю логику вогнать в прогу-клиент, благо логики на 20 строк. Если у тебя всё делает прога, то это вполне нормальный выбор, в БД только пути хранить.

anonymous
()
Ответ на: комментарий от anonymous

>Сейчас нет — завтра да. Сейчас макеты веб-страниц, а завтра макет плаката в tiff. Сейчас только внутренние пользователи, а завтра директору понравится и скажет не посылать по электронной почте макеты, а отправлять ссылки на сайт, с логином и паролем. Требования меняются в этом мире.

Тогда нужно будет хитрый плагинчик для ngnix написать, чтоб он файлы из БД дергал, а не с hdd. Думаю, что это вопрос отдаленного будущего.

trex6 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

>Решил сделать ftp, а всю логику вогнать в прогу-клиент, благо логики на 20 строк. Если у тебя всё делает прога, то это вполне нормальный выбор, в БД только пути хранить.

Интересный вариант, надо будет обдумать.
А как вопрос безопасности ftp? Просто детально этот протокол не смотерл, но где-то видел не очень хорошие отзывы.

trex6 ★★★★★
() автор топика
Ответ на: комментарий от trex6

>А как вопрос безопасности ftp? Просто детально этот протокол не смотерл, но где-то видел не очень хорошие отзывы.

Не думаю что там есть какие-то жесткие проблемы. А, если сравнивать с http, он позволяет получать разных юзеров с разными правами без дополнительной возни с http-авторизацией. И без всяких post-запросов.

Ествественно надо не анонимный доступ:)

anonymous
()
Ответ на: комментарий от dizza

>Лучше уж не ftp, а WebDav

Точно, про него совсем забыл, впрочем, никогда с ним не работал серьёзно. А чем он лучше ftp?

anonymous
()

plperl

Есть два способа:
1) хранить файлы в БД
+ транзакции и все с ними связанное
+ один интерфейс для файлов и метаинформации
+ удобно настраивать права доступа
+ один бакап
- 99% объема БД занимают файлы, бакап/ресторе длится трое суток, очень обидно что 99% этого времени уходит на статичную информацию :)
- скорость обмена файлами значительно ниже, нагрузка на сеть (не забываем, что для BYTEA трафик в 3 раза больше) и на сервер выше чем доступ по ftp/smb. Если у вас тысяча пользователей одновременно не пишут файлы, то обычно это не актуально.

2) хранить файлы в ФС, а в БД только метаинформация
плюсы и минусы первого способа меняются знаками

В PostgreSQL есть очень удобная фича - plperlu. Он позволяет совместить некоторые плюсы обоих способов. В БД пишется интерфейс для BYTEA, и пользователи работают только с SQL. А файлы реально хранятся в ФС.

В ИС моей конторы к документам привязываются файлы. В БД хранится метаинформация. Сами файлы сжимаются, в них добавляется дополнительная инфа, и они хранятся на ftp. Пользователи прямого доступа к ftp не имеют - работа только через ИС. Для сторонних программ файлы доступны через файловый сервер, это реализовано на FUSE.

Эта тема регулярно обсуждается на sql.ru Там, в разделе postgresql я выкладывал даже исходники.

Serik
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.