Форум: "Прочее";
Текущий архив: 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