Главная страница
    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]

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



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

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

Наверх




Память: 0.56 MB
Время: 0.005 c
2-1261836632
Student :)
2009-12-26 17:10
2010.02.28
Чтение параметра реестра


1-1226920476
Franzy
2008-11-17 14:14
2010.02.28
Out of Memory - непонятки


13-1124615958
Darklight
2005-08-21 13:19
2010.02.28
Экземпляр класса ещё не создан как проверить его на null referenc


15-1260967450
dr_creigan
2009-12-16 15:44
2010.02.28
debug под Vista


1-1237789977
Riply
2009-03-23 09:32
2010.02.28
Получение EnvironmentStrings среды.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский