Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.28;
Скачать: CL | DM;

Вниз

Хранение файлов в БД   Найти похожие ветки 

 
Elnino   (2009-12-14 23:10) [0]

На клиентских местах Delphi программа.
Удаленно MS SQL 2005 Express.

Есть задача аттачить файлы к проектам, информация о которых содержится в БД.

Как это лучше сделать, varbinary? Может, еще какие варианты, насколько это все оптимально? Мне почему-то кажется, что хранение файлов в БД не самый оптимальный путь, но к сожалению никакой прослойки между БД сервером и клиентом нету, соответственно нужно хранить как-то в таблице...

Лучше сделать отдельную таблицу с этими данными? Типа:

ID | ID_PROJ | FileName | Data

Или добавить допустим в текущую таблицу проектов?


 
GDI+   (2009-12-14 23:20) [1]

>>Удаленно MS SQL 2005 Express.

Стало быть ограничение на 4Гб данных. Не советовал бы на этом обрезке хранить файлы в БД.

Можно смоделировать файловую систему:
ID(GUID)|Parent|Folder(Boolean)|ID_PROJ| FileName|Description|BinData(Blob)


 
Leonid Troyanovsky ©   (2009-12-14 23:20) [2]


> Elnino   (14.12.09 23:10)  

> ID | ID_PROJ | FileName | Data

Т.е, например, FileName обозначит историческую родину.

> в текущую таблицу проектов?

Переобоснуй.

--
Regards, LVT.


 
Elnino   (2009-12-14 23:27) [3]

Насколько вообще хранение файлов напряжно для БД? Может быть замедление работы с другими таблицами? Не оптимальное расходование свободного места?

Может, есть какие-то специальные иные механизмы хранения / передачи файлов в MS SQL?


 
Плохиш ©   (2009-12-14 23:30) [4]


> На клиентских местах Delphi программа.
> Удаленно MS SQL 2005 Express.

Поставить на "удалённо" веб-сервер. Чать в 21м веке живём.


 
GDI+   (2009-12-15 00:04) [5]


> Elnino   (14.12.09 23:27) [3]
>
> Насколько вообще хранение файлов напряжно для БД? Может
> быть замедление работы с другими таблицами? Не оптимальное
> расходование свободного места?
>
> Может, есть какие-то специальные иные механизмы хранения
> / передачи файлов в MS SQL?


Сохранение блобов медленное (скорость записи на диск/4) а чтение с той же скоростью.


 
Дмитрий Белькевич   (2009-12-15 01:12) [6]

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


 
Игорь Шевченко ©   (2009-12-15 01:14) [7]

Да можно и файлы хранить, ничего страшного. Неудобно только


 
GDI+   (2009-12-15 02:08) [8]


> Игорь Шевченко ©   (15.12.09 01:14) [7]
>
> Да можно и файлы хранить, ничего страшного. Неудобно только


А в чем неудобство? Данные идут по тому же коннекту к базе. Да и с администрированием проще, чем отдельно на таблицы, отдельно на файлы к вебсерверу. Если еще нужно хранить версии файлов (для базы можно просто ввести дополнительное поле versia или разделить таблицу на две: описание файла и
ID|FileID|Versia|Data
), то вебсервер не особо хорош.


 
Игорь Шевченко ©   (2009-12-15 02:20) [9]

GDI+   (15.12.09 02:08) [8]


> А в чем неудобство?


Читать неудобно


 
GDI+   (2009-12-15 02:40) [10]


> Игорь Шевченко ©   (15.12.09 02:20) [9]
>
> GDI+   (15.12.09 02:08) [8]
>
> > А в чем неудобство?
>
> Читать неудобно


Так миниоболочку на Delphi можно несколько минут написать(вычитывается дерево в treeview, при двойном клике по ноде файл сохраняется в temp и делается shellexecute open).


 
Игорь Шевченко ©   (2009-12-15 02:41) [11]

GDI+   (15.12.09 02:40) [10]

Ну вот это и неудобно.


 
GDI+   (2009-12-15 03:27) [12]


> Игорь Шевченко ©   (15.12.09 02:41) [11]
>
> GDI+   (15.12.09 02:40) [10]
>
> Ну вот это и неудобно.


Зато очень удобно писать оболочки и добавлять различные функции по расширению функционала. Просто для удобства, если держать файлы на сервере то нужно писать трёхзвенку которая и будет этим всем управлять. А здесь работа с блобами и меньше риска ошибиться и потерять целостность.

Тот же бекап-ресторе проще.

Например вот здесь файлы лежат в базе
http://www.tidyfavorites.com/


 
Игорь Шевченко ©   (2009-12-15 03:48) [13]

GDI+   (15.12.09 03:27) [12]

Файлам-файлово. Я не собираюсь спорить, что "лучше" или не "лучше", многое от решабельных задач зависит. Но то, что неудобнее - это точно.


 
Anatoly Podgoretsky ©   (2009-12-15 09:40) [14]

> Игорь Шевченко  (15.12.2009 02:20:09)  [9]

В чем неудобство? Это всего лишь один раз освоить. Особенно удобно для ВЕБ, никаких проблем с синхронизацией файлов.


 
Дмитрий Белькевич   (2009-12-15 11:47) [15]

Случаи, конечно, всякие бывают. И в простых, когда файлов - мало - то почему нет. Но когда файлов - терабайты, то, думаю, лучше - отдельно.


 
tesseract ©   (2009-12-15 11:54) [16]


> Файлам-файлово.


Ну практически файловая система и есть БД. Просто заточенная под блобы. HFS+ и NTFS поддерживают добавление тэгов к файлам и посик в них.


 
Anatoly Podgoretsky ©   (2009-12-15 12:00) [17]

> Дмитрий Белькевич  (15.12.2009 11:47:15)  [15]

А это на доступ смотреть надо.

1. Реально есть защищеный сервер, никаких папок не виден, надо сделать запрос к базе. Твои решения.
2. Тоже самое, только для веб-сервера.


 
Игорь Шевченко ©   (2009-12-15 12:11) [18]

tesseract ©   (15.12.09 11:54) [16]


> Ну практически файловая система и есть БД. Просто заточенная
> под блобы. HFS+ и NTFS поддерживают добавление тэгов к файлам
> и посик в них.


Ерунду не надо говорить, да ?


 
tesseract ©   (2009-12-15 12:20) [19]


> Ерунду не надо говорить, да ?


Поддерживают. В NTFS файловые потоки - с пятой версии точно. В HFS+ так свои потоки и тэги можно добавлять и искать в spotlight .


 
Игорь Шевченко ©   (2009-12-15 12:31) [20]

tesseract ©   (15.12.09 12:20) [19]

Потоки и транзакционность в NTFS были с самого ее проектирования. Но каким боком относятся эти свойства к поиску - я затрудняюсь понять.

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


 
Медвежонок Пятачок ©   (2009-12-15 12:33) [21]

Как все эти действия проделать, когда файла находится в базе ?

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


 
Игорь Шевченко ©   (2009-12-15 12:38) [22]

Медвежонок Пятачок ©   (15.12.09 12:33) [21]

Как ты понимаешь, сертификатами обычно только какое-то подмножество действий из перечисленных делается.


> если хранилище в блобе, я им могу управлять, если в файле,
>  не могу.


тут не понял


 
Медвежонок Пятачок ©   (2009-12-15 12:44) [23]

тут не понял

например имеем филиал в другом регионе.
у филиала есть клиент, но он живет в "моем" регионе как и я сам.
для клиента требуется создать учетную запись, которая требует наличия сертификата.

клиент за реквизитами разумеется приходит ко мне, а не едет в другой город

сервер который обслуживает клиента - он в том самом удаленном филиале.
если сервер работает с файловым хранилищем сертификатов, мне учетку не создать.
если же хранилище лежит в блобе sql сервера, то я учетку создать могу.


 
Игорь Шевченко ©   (2009-12-15 12:49) [24]


> для клиента требуется создать учетную запись, которая требует
> наличия сертификата.


где ? в удаленном филиале ?


> сервер который обслуживает клиента - он в том самом удаленном
> филиале.
> если сервер работает с файловым хранилищем сертификатов,
>  мне учетку не создать.
> если же хранилище лежит в блобе sql сервера, то я учетку
> создать могу.


Почему не можешь, если с файловым хранилищем ?


 
Медвежонок Пятачок ©   (2009-12-15 12:54) [25]

где ? в удаленном филиале ?

да. клиент здесь, а сервер его обслуживающий там.

Почему не можешь, если с файловым хранилищем ?

ну в принципе могу и с файловым.
можно открыть шару и по неширокому каналу работать с хранилищем как с файлом.
либо научить север принимать мои запросы и работать с файлом через сервер.


 
Игорь Шевченко ©   (2009-12-15 12:58) [26]

Медвежонок Пятачок ©   (15.12.09 12:54) [25]


> либо научить север принимать мои запросы и работать с файлом
> через сервер.


Я как-то считал, что этот метод самый правильный и сервер по умолчанию это умеет. То есть, это не преимущество хранения файлов в базе, а конкретные ограничения конкретного сервера, не правда ли ?


 
tesseract ©   (2009-12-15 12:58) [27]


> Как все эти действия проделать, когда файла находится в
> базе ?


Всё кроме "Отобразить в память" и "открыть в произвольном доступе". Открыть можно произвольно  только по размеру BLOB . Атрибутов и тд можно даже больше записать.


> Почему не можешь, если с файловым хранилищем ?


Потому. Какой админ даст доступ на чтение/запись файлов и создание учётных записей в руки программиста ? Учётные в базе хранить намного спокойнее.


 
Медвежонок Пятачок ©   (2009-12-15 12:59) [28]

конечно. это вопрос удобства а не религии.
работать должно быть удобно.


 
Медвежонок Пятачок ©   (2009-12-15 13:01) [29]

но здесь еще один момент есть.
сервер мой и учить его мне.

но я же могу его научить не только этому (а сервер запущен из под lsa)
и место работы я могу сменить.


 
Игорь Шевченко ©   (2009-12-15 13:09) [30]

tesseract ©   (15.12.09 12:58) [27]


> Всё кроме "Отобразить в память" и "открыть в произвольном
> доступе". Открыть можно произвольно  только по размеру BLOB
> . Атрибутов и тд можно даже больше записать.


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

Теперь вопрос - а зачем ?


> Какой админ даст доступ на чтение/запись файлов и создание
> учётных записей в руки программиста ?


Обычно на такие случаи пишется сервер (как у Медвежонок Пятачок) и права даются серверу. Как ты понимаешь, разницы никакой, отнимать права на создание записей в базе или права на создание файлов


 
tesseract ©   (2009-12-15 13:22) [31]


> отнимать права на создание записей в базе или права на создание
> файлов


Есть. Файловый доступ - тоннель в безопасности. Возможно я слишком долго колупаюсь с разными *nix. Но это идея очень здравая.

Хранить однотипные данные, особенно не очень большие по размеру - в базе удобнее и практичнее.


 
Elnino   (2009-12-15 13:23) [32]

а что вы имеете в виду под WEB-сервером? Игорь Шевченко как альтернативу хранению в BLOB"ах что предлагает, тоже WEB-сервер?

То есть, вы имеете в виду ставить что-то типа Apache, между БД и клиентом ставить прослойку (например, тот же PHP) и весь трафик по прежнему пускать напрямую Delphi<->БД, а вот файлы записывать через PHP, правильно я понял вашу логику? Как-то монстрообразно для всего лишь хранения файлов.

А насколько богата MS SQL на хранимки, может есть вариант вызвать хранимку и передать ей поток (файл), она и сохранит его на сервере в виде файла. Забирать тоже через хранимку.
Ну а поскольку файл на сервере - то на стороне сервера с ним можно обращаться как с файлом (как я понимаю, отсутствие этого является недостатком BLOB"а).


 
Игорь Шевченко ©   (2009-12-15 13:25) [33]

tesseract ©   (15.12.09 13:22) [31]

Данные хранить - удобнее. Файлы хранить - неудобнее.


 
Медвежонок Пятачок ©   (2009-12-15 13:25) [34]

однозначного ответа нет.
все определяется спецификой файлов и характером их использования


 
Дмитрий Белькевич   (2009-12-15 13:58) [35]


> 1. Реально есть защищеный сервер, никаких папок не виден,
>  надо сделать запрос к базе. Твои решения.2. Тоже самое,
>  только для веб-сервера.


1. И что - база даст большую защищенность, чем расшаренные папки? Чем одна аутентификация (базовая) лучше другой (шаровая)? База, кстати, свой траффик может шифровать?

2. FTPS/SSL?


 
clickmaker ©   (2009-12-15 14:15) [36]

> База, кстати, свой траффик может шифровать?

ms sql может


 
Anatoly Podgoretsky ©   (2009-12-15 14:28) [37]

> Дмитрий Белькевич  (15.12.2009 13:58:35)  [35]

Зачем переводить стрелки? Я же четко указал условие, никаких папок нет и не будет  и второй вариант, тоже самое но только для ВЕБ сервера.


 
Anatoly Podgoretsky ©   (2009-12-15 14:30) [38]

> clickmaker  (15.12.2009 14:15:36)  [36]

Не требуется, это задача транспорта, а не сервера, хотя он и может.

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


 
Elnino   (2009-12-15 15:07) [39]

Игорь Шевченко, вы пишите про недостатки хранение файлов в BLOB"ах. А расскажите альтернативу, на простом языке для нубов? :-)


 
Медвежонок Пятачок ©   (2009-12-15 15:09) [40]

алтернатива фалам в блобах - файлы в файлах



Страницы: 1 2 вся ветка

Текущий архив: 2010.02.28;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.014 c
15-1260896939
Nic
2009-12-15 20:08
2010.02.28
Что думаете об ЭТОМ?! )


2-1261670806
valussev@mail.ru
2009-12-24 19:06
2010.02.28
вывод части Bitmap


3-1235327001
Nika
2009-02-22 21:23
2010.02.28
Цветовое выделение групп записей в DBGrid


6-1213512971
JanMihail
2008-06-15 10:56
2010.02.28
Как представить тему письма в нормальном виде?


15-1261043501
wHammer
2009-12-17 12:51
2010.02.28
Не заходил на данный форум уже лет 7, а может и больше :)