Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.02.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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]

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


 
Elnino   (2009-12-15 15:24) [41]

это понятно. Вопрос в другом - сейчас есть связка Delphi_клиент(ADO)<->БД.

Что конкретно делать, чтобы перейти на систему файлы в файлах? И оправданно ли это лишь ради файлов.


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

И оправданно ли это лишь ради файлов.

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


 
clickmaker ©   (2009-12-15 15:59) [43]

> оправданно ли это лишь ради файлов

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


 
Elnino   (2009-12-15 16:03) [44]


> конечно не оправдано.

ну тебе явно премия "самый остроумный человек года".

Но если ты бы читал внимательнее, то понял бы, что речь идет о том, оправдан ли ввод дополнительных механизмов (например, Apache + PHP) чтобы только хранить файлы.

Также интересует мнение ИШ насчет альтернативы хранения файлов в BLOB.

И третий момент - так можно с помощью хранимок MS SQL (2005 и выше) реализовать хранение файлов в виде файлов?


 
clickmaker ©   (2009-12-15 16:05) [45]

> так можно с помощью хранимок MS SQL (2005 и выше) реализовать
> хранение файлов в виде файлов?

см. FILESTREAM в BOL


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

Но если ты бы читал внимательнее, то понял бы, что речь идет о том, оправдан ли ввод дополнительных механизмов

я же сказал, что не оправдан.


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

дополнительных механизмов (например, Apache + PHP)

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

а задавая дурацкие вопросы, будешь получать дурацкие ответы. либо пространные рассуждения про оправдано не оправдано.
(чем оправдано?, кем оправдано?, зачем оправдано?)


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

так можно с помощью хранимок MS SQL (2005 и выше) реализовать
> хранение файлов в виде файлов?


с их помощью можно вообще черта лысого реализовать и даже больше этого.
и еще останется на сдачу.


 
Elnino   (2009-12-15 16:28) [49]


> для клиента если данные будут поставляться апачем - это
> нифига не файлы

для клиента, чем бы данные не поставлялись (окромя диспетчера файлов windows), они файлами не будут. Так как с клиентской стороны над ними нельзя выполнять нативные API функции windows (это ведь у нас сейчас критерий что такое файл?).


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

(окромя диспетчера файлов windows)

ну так о чем мы тогда говорим?
если говорим о файлах, то не надо говорить о хранимках и прочих апачах.


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

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

Ну а при открытых портах базы он "не будет виден"? :)


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

А пинговаться SFTP и не обязано. Да и потом - что значить файлового доступа? А доступ до блобов базы - это не файловый доступ?


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


> окромя диспетчера файлов windows


Это кто ?



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

Форум: "Прочее";
Текущий архив: 2010.02.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.59 MB
Время: 0.005 c
6-1213366187
JanMihail
2008-06-13 18:09
2010.02.28
Новое письмо на Email ???


1-1238665266
salexn
2009-04-02 13:41
2010.02.28
Проблема с динамической загрузкой пакета


15-1260917974
DillerXX
2009-12-16 01:59
2010.02.28
Инженерно-удлинительное


2-1261763355
Pup
2009-12-25 20:49
2010.02.28
простейшие фигуры с помощью TShape


15-1260893769
ocean
2009-12-15 19:16
2010.02.28
Бунт машин





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский