|
|
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Добрый день! Проектирую систему и вот тут встал вопрос где хранить файлы (документы) ? Можно засунуть их в саму таблицу, а можно в виде файлов на жеском диске, а в базе хранить только пути. Смотрел другие системы, есть и с такой реализацией и с такой. База MS SQL Server. Есть какие весткие доводы чтобы НЕ ХРАНИТЬ файлы в самой базе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 06:54 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 07:57 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Спасибо. Посмотрел дискуссию - как всегда кончилось бросанием шапок друг в друга :-) Плюну наверное на это дело, сделаю хранение в базе данных. Хоть один веский довод будет - мне так проще :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 09:53 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Лучше всего хранить в базе, выделив отдельный tablespace под эту таблицу, желательно размещенный на другом диске. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 10:52 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
as111Добрый день! Проектирую систему и вот тут встал вопрос где хранить файлы (документы) ? Можно засунуть их в саму таблицу, а можно в виде файлов на жеском диске, а в базе хранить только пути. Смотрел другие системы, есть и с такой реализацией и с такой. База MS SQL Server. Есть какие весткие доводы чтобы НЕ ХРАНИТЬ файлы в самой базе? Веский довод "против" только один - размер такой таблицы в базе. Документы могут быть размером и в несколько мегабайт каждый (конечно, зависит от конкрентной задачи), тогда как пути - обычно намного менее 1 кБ . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 10:54 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
В среднем размер файлов около 1Мb. Хотя может колебаться в пределах 0,1-80Мb. Теоретически могут быть и больше, но это уже исключения из правил. Их количество? Ну это будет архив небольшой конторы. Сейчас в архиве около 1 млн документов, но их кол-во не кто точно не знает. Разные пространства для файлов, да, наверное это актуально. Еще плюсы, что их можно проиндексировать в базе, правда со сканированными документами этот фокус не пройдет... Ну и мои наблюдения... 1. Системы монстры стараются хранить их как файлы. Опыт работы показывает, что администрирование такой системы это отдельная задача. 2. Средние системы стараются хранить в базе. Проще, наглядней, все в одном ящике. Нет проблем с вирусами, админами и.д. Как самый показательный пример MS SPPS. Т.е. получается, что с хранением система получается гибче масштабируемей и т.д., но сама система получается громозкой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 11:15 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
на MS SQL сервере файлы можно хранить в отдельной таблице, а сами таблицы на отдельном HDD. IMHO почти то же самое что "хранить ссылки". ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 11:31 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
as111Т.е. получается, что с хранением система получается гибче масштабируемей и т.д., но сама система получается громозкой... Свои две копейки: -Для клиентского приложения несколько сложнее обработать файл находящийся в БД -Сложнее осуществлять поиск в файлах, особенно малораспространенных стантартов +Архив документов возможно потребует хранение версий, а вот это намного проще организовать в БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 13:54 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Estets as111Т.е. получается, что с хранением система получается гибче масштабируемей и т.д., но сама система получается громозкой... Свои две копейки: -Для клиентского приложения несколько сложнее обработать файл находящийся в БД ==== нет - а) SELECT BLOB-поля б) сохранение бинарного потока из него в файл на клиенте = 3 строки кода. -Сложнее осуществлять поиск в файлах, особенно малораспространенных стантартов ======== а) в SQL Server встроенные средства поиска б) этот пункт так-же для хранения файлов ВНЕ БД +Архив документов возможно потребует хранение версий, а вот это намного проще организовать в БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 14:16 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Спасибо! Ну вроде решили, теперь с чистой совестью буду хранить файлы в базе :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2006, 14:46 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Хотелось бы продолжить разговор с точки зрения путейца, т.е. если используется хранение в файловой системе по конкретным путя/путю, то как рациональнее? Или может назначит одну папку для хранения файлов и не заморачиваться? Или создать ограниченное их количество по типам лежащих там файлов, скажем /DOC/, /XLS/, /TXT/ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 14:49 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Ну вообще, как поведет себя NTFS, если в папке 300-500тысяч файлов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 15:22 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
По поводу выбора самого способа хранения - это предоствалено решать пользователю, ему доступны оба варианта, тогда вопрос оптимизации "путей" лучше бы как то оптимизировать, не предлагать же заниматься этим пользователю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 15:27 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
И чтой то вопрос с путями начинает откровенно попахивать 3-х звёнкой! Тигра, али я не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 15:39 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Для хранения 300-500к файлов в NTFS её надо будет потюнить на предмет выделения достаточного количества свободных allocation units, иначе систему начнёт очень забавно плющить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 15:52 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
DocAlДля хранения 300-500к файлов в NTFS её надо будет потюнить на предмет выделения достаточного количества свободных allocation units, иначе систему начнёт очень забавно плющить... Я из программы могу (ради любимого юзера) настругать скока надо папок/подпапок, так это нужно делать? Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 15:54 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
ПрограммиздищеИ чтой то вопрос с путями начинает откровенно попахивать 3-х звёнкой! Тигра, али я не прав? Да нет наверное - что тут делать в среднем звене? Наигрывать путь файла и отдавать его клиенту? Так можно и на клиенте тоже самое сделать. Я бы делал хранение в БД - со всех сторон преимущества, удобство и упрощение. Сделал один раз и забыл. -- Tygra's -- Мои фотогалереи тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 17:14 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
tygra ПрограммиздищеИ чтой то вопрос с путями начинает откровенно попахивать 3-х звёнкой! Тигра, али я не прав? Да нет наверное - что тут делать в среднем звене? Наигрывать путь файла и отдавать его клиенту? Так можно и на клиенте тоже самое сделать. Я бы делал хранение в БД - со всех сторон преимущества, удобство и упрощение. Сделал один раз и забыл. -- Tygra's -- Мои фотогалереи тут Среднее звено должно обеспечивать передачу файла туда и обратно, не прибегая ни к каким шарам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 17:35 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Лучше, чтобы был выбор,т.е. файлы не особо здоровенные, пользователь будет класть в БД, а что-нибудь типа DVD фильнов - на внешнее устройство. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 17:37 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Вставлю и я свои две копейки. Вообще, данный вопрос, как и все прочие, надо рассматривать в контексте задачи и применяемых инструментов. Если рассуждать абстрактно-субъективно, то я сторонник хранения файлов в файловой системе, а не в БД. Основных причин тому несколько. 1. Удобство сопровождения / администрирования. Мало приятного возиться с блобами в стандартных админских тулзах типа ms sql enterprise manager, IBExpert и иже с ними. 2. Индексирование содержимого файлов. Не все серверы БД умеют это хорошо делать. Я понимаю, что тут речь про ms sql у которого, вероятно, с этим все хорошо. Но есть, например, Firebird и прочие, у которых с этим вообще никак. Зато есть сторонние продукты, типа встроенного в винду Indexing Service или локального Google и т.д., которые с задачей индексирования и поиска файлов разных форматов справляются на ура. А состыковать их с сервером БД - дело техники. 3. Открывает файлы из БД и складывает их туда, как правило, пользователь со своей рабочей станции. А там, в большинстве случаев, винда и ее приложения. В случае хранения файлов в БД придется как-то описывать, что же там за файл внутри и чем его открывать. И где это нечто брать на клиентской машине. В конечном итоге получим и проблему "Save as...", которая описывалась по приведенной тут ссылке, и проблему сохранения временного файла на локальной машине пользователя. При хранении на сервере в файловой системе не сильно сложно реализовать открытие файла прямо с него родимого командой "start ИмяДокумента" - и пускай винда сама разбирается, что там ей подсунули и чем это открыть. (соглашусь, что такое поведение можно эмулировать и при хранении файлов в БД, но, как говорится, "нафига козе баян" или зачем усложнять себе жизнь). Кстати, и проблемы просмотра любимого 5GB видеоролика не возникнет - все уже написано за нас. :) Не так давно в очередной раз покумекав над очередной подобной задачкой, мы остановились на старом-добром методе хранения файлов в файловой системе. Да, и со стандартным бэкапом проблем меньше, особенно на огромных и редко изменяющихся файлах типа видеозаписей. В общем, базе - базово, а файловой системе - файлово. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 00:06 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
ПрограммиздищеСреднее звено должно обеспечивать передачу файла туда и обратно, не прибегая ни к каким шарам.не очень понятно, как это возможно без шар, в общем случае? точнее, что это будет за среднее звено, которое подсунуло ворду файл (и куда подсунуло, кстати? во временный каталог на клиенте?), а затем, когда пользователь нажал "save", сохранило его куда надо в бд. а если это не ворд, а фотошоп / корел / акробат / ... ? будем в среднем звене держать на каждое такое пользовательское приложение свою поддержку? похоже, я безнадежно отстал от жизни и чего-то не знаю в современных технологиях? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 00:13 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
ПрограммиздищеХотелось бы продолжить разговор с точки зрения путейца, т.е. если используется хранение в файловой системе по конкретным путя/путю, то как рациональнее? Или может назначит одну папку для хранения файлов и не заморачиваться? Или создать ограниченное их количество по типам лежащих там файлов, скажем /DOC/, /XLS/, /TXT/ ?мы храним по-простому: есть одна папка, назовем ее file-storage, а в ней на каждый файл заводится своя папка с именем, совпадающим с id-файла, который (id) используется в бд для привязки данного файла к прочим объектам. в этой id-папке лежит файл с тем оригинальным именем, которое было задано пользователем. что-то наверное спать пора - нет четкости фраз, путанно изъясняюсь уже... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 00:19 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
И чтой то вопрос с путями начинает откровенно попахивать 3-х звёнкой! что имеете протифф? в описываемом случае - электронный архив - имхо приемлемой альтернативы нет ... из своего опыта: время создание бэкапов БД (ORACLE) и их размер ... напрягает ... не очень понятно, как это возможно без шар, в общем случае? точнее, что это будет за среднее звено, которое подсунуло ворду файл (и куда подсунуло, кстати? во временный каталог на клиенте?), а затем, когда пользователь нажал "save", сохранило его куда надо в бд. а если это не ворд, а фотошоп / корел / акробат / ... ? будем в среднем звене держать на каждое такое пользовательское приложение свою поддержку? похоже, я безнадежно отстал от жизни и чего-то не знаю в современных технологиях? :) дык среднее звено именно для этого ... чтобы шар не было ... 1. каталог выгрузки файла - настройка пользователя на клиенте (по-умолчанию путь для временных файлов винды) 2. "когда пользователь нажал "save"" - сохранение "обычное" ... да и зачем по другому? - а. это с подавляющей вероятностью лишь промужуточное состояние документа - зачем его "выкладывать" на средний слой (исключение - если пользователь планирует работать на другом компе - ну эта фсе элементарно реализуется) б. фсякие "автосохранение" (например WORD) - эта становится смешным ... те загрузка-выгрузка (+загрузка в "родные" приложения) собственно файлов с/на среднее звено - с интерфейса приложения когда "явная", когда - нет - фсе реализуемо ... далее для приложений поддерживающих OLE по желанию оформляешь необходимый функционал по "сохранению" (а при большом желании и выгрузку) на сервере в "родные" меню и панели ... для этого ты, разумеется, должен оформлять свое приложение как OLE-сервер и прописывать в нем внешние интерфейсы ... простейший пример - 1С-архив ... но это - по желанию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 08:16 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
NSFuimusдык среднее звено именно для этого ... чтобы шар не было ... 1. каталог выгрузки файла - настройка пользователя на клиенте (по-умолчанию путь для временных файлов винды)а зачем так стремиться, чтобы шар не было? по мне так удобнее для сопровождения и проще для написания системы один раз сделать эти шары при создании пользователя в системе, отдать на них права средствами ОС и не париться, что в локальном temp-каталоге пользователя накапливается [конфеденциальная] информация, а он об этом и не подозревает (вы давно заглядывали в свой temp-каталог? там много интересного можно обнаружить ;) ). это раз. NSFuimus2. "когда пользователь нажал "save"" - сохранение "обычное" ... да и зачем по другому? - а. это с подавляющей вероятностью лишь промужуточное состояние документа - зачем его "выкладывать" на средний слой (исключение - если пользователь планирует работать на другом компе - ну эта фсе элементарно реализуется) б. фсякие "автосохранение" (например WORD) - эта становится смешным ... те загрузка-выгрузка (+загрузка в "родные" приложения) собственно файлов с/на среднее звено - с интерфейса приложения когда "явная", когда - нет - фсе реализуемо ... далее для приложений поддерживающих OLE по желанию оформляешь необходимый функционал по "сохранению" (а при большом желании и выгрузку) на сервере в "родные" меню и панели ... для этого ты, разумеется, должен оформлять свое приложение как OLE-сервер и прописывать в нем внешние интерфейсы ... простейший пример - 1С-архив ... но это - по желаниювот я и говорю, если я вас правильно понял, то на каждое внешнее приложение придется городить свой функционал. либо со стороны среднего слоя, либо со стороны внешнего приложения. либо с обеих сторон сразу. а зачем его городить, если можно сделать шару и легкую поддержку со стороны серверной и клиентской частей системы, не зависящую от типов документов? это два. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 09:05 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
авторвот я и говорю, если я вас правильно понял, то на каждое внешнее приложение придется городить свой функционал. либо со стороны среднего слоя, либо со стороны внешнего :) ниправильно поняли ... написал - по желанию с интерфейса программы загрузка "родных" для конкретного файла приложений - через shellexecute(Ex) ... все навороты с OLE - всего лишь навороты ... но имейте ввиду, что понятие "законченное приложение" включает в себя наличие у него неких внешних интерфейсов обеспечивающих доступ к его функциональности из-вне ... сопровождать приложение - одно, а обеспечивать разграниченный доступ к документам в том числе "коммерческая тайна" - эта софсем другое ... эта три :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 09:22 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
и прошу поверить мне на слово - свой TEMP я знаю :) ... ибо XML приходящий с сервера приложений и выгружаемый в TEMP бывает "небезгрешен" паэтому ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 09:30 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
2 афтору темы если уж остановишься на простом клиент-сервере (хотя вру - эта универсальный механизм) - введи в систему понятие "файловых шкафов" - в твоем случае это будут разные таблицы в БД ... соответсвенно ежедневные бэкапы необходимо нужно будет делать только с "активного" файлового шкафа ... ну и манипулируй ими переодически - сливай их допустим для создания "годового" и проч . ... возможностей для администрирования и проч. в этом случае - огромно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 09:53 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Ну чтобы клиент не видел путей, то тут уж точно БД - какое еще звено зачем приплетать. Администрировать, бэкапить и т.д. точно лучше в БД. Индексирование - ну тут разные возможности, в основном можно, про IB не говорим :) Файл откроется сам - если великие проектировщики файловых приложений не знают, что в БД можно хранить расширение файла, при запросе файла юзером сохранить во временный файл на диске с таким же расширением и дернуть стандартный метод винды открытия файла соответствующим такому типу файлов приложением - тогда о чем разговор вообще? При закрытии файла либо отслеживать это, либо явно жать кнопку сохранить файл. Пути - это зло, нужно где-то хранить, администрить фс, правильно переносить и т.д., более того, вы везде должны поддерживать возможность добраться до файла по прямому пути. В случае с БД вам пофиг, путей нет, бэкап без проблем, перенести файлы сразу все в любое другое место без переконфигурации сети и т.д. тоже без проблем. Положить куда-то локальную копию, в т.ч. части файлов - без проблем. И т.д. В общем, вообще нет проблем при хранении в БД. :)) -- Tygra's -- Мои фотогалереи тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 10:39 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
NSFuimus если уж остановишься на простом клиент-сервере (хотя вру - эта универсальный механизм) - введи в систему понятие "файловых шкафов" - в твоем случае это будут разные таблицы в БД ... соответсвенно ежедневные бэкапы необходимо нужно будет делать только с "активного" файлового шкафа ... Бэкапы обычно со всей БД бэкапятся. Это уж если хочется - да даже и нужно - делать отдельные БД по каким-то признакам. Годы, типы, отделы и т.д. Тогда и забыкапить легко будет, и поднять...... -- Tygra's -- Мои фотогалереи тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 10:42 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Бэкапы обычно со всей БД бэкапятся. "обычно" теряет всякий смысл когда идет речь о ежедневных бэкапах миллионов файлов "размером 0.1-80 Мб" то уж если хочется - да даже и нужно - делать отдельные БД по каким-то признакам. Годы, типы, отделы и т.д. Тогда и забыкапить легко будет, и поднять...... я предложил самый простой и ненадуманный вариант бэкапа - включать в него родного только ту таблицу в которую загружают файлы ВСЕХ типов, ВСЕ отделы, в течение ВСЕГО времени определяемого и контролируемого администратором ... и тд и тп ... этот механизм вообщем-то де-факто ... придуман не мной ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 10:49 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
А никто не задумывался о размере базы? Миллион файлов по 1Мб - это примерно 1Тб. Представьте, как тяжело администрировать такую базу. У нас сейчас стоит похожая задача, но там примерно 250Гб выходит, и вроде склоняемся к решению хранить пути в BFILE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 11:19 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
А никто не задумывался о размере базы? Миллион файлов по 1Мб - это примерно 1Тб. Представьте, как тяжело администрировать такую базу. истину глаголишь ... только лично я склоняюсь к среднему звену ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 11:29 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
авторМиллион файлов по 1Мб - это примерно 1Тб. Представьте, как тяжело администрировать такую базу Так в ФС не меньше получится! А то и больше, учтывая хвосты кластеров. И админить ФС с таким количеством файлов ничуть не легче. А размер MFT на такое кол-во файлов тоже не слабый получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 12:01 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Не знаю, упоминали или нет еще один плюс хранения файлов в БД - возможность применения к данным встроенных механизмов СУБД. В частности - репликация, бэкап, управление правами доступа. Это, конечно, реализуемо и в случае хранения файлов в ФС, но тогда придется использовать дополнительные интструменты и не всегда это легкореализуемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 12:16 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
IgorK авторМиллион файлов по 1Мб - это примерно 1Тб. Представьте, как тяжело администрировать такую базу Так в ФС не меньше получится! А то и больше, учтывая хвосты кластеров. И админить ФС с таким количеством файлов ничуть не легче. А размер MFT на такое кол-во файлов тоже не слабый получится. Мдя..файловая система нехилая получается, если учесть, что каждому файлу папку надо создать, да все это уровней на 40..50 по иерархии папок, так что при 1 миллионе файлов, файловых объектов больше, т.е. + папки, чем больше таких объектов,тем больше кусочков кластеров. Если детально разграничены права в самой базе, то трубуется, чтобы данные админом файл-сервера права юзерам на соотв. папки/подпапки соответствовали тем,что в БД. Но с другой стороны, восстановление из бэкапа большой БД тоже проблема. Мне захотелось обременить этими проблемами самого пользователя, пусть решает сам, а софтина должна давать выбор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 13:51 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Мне также кажется, что должно быть звено с интерфейсов, дающем возможность гулять по папкам сервера и вибирать файла(при соотв. правах), это должно быть доступно со стороны клиента, но он должен подключаться по TCP/HTTP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 13:58 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
NSFuimus Бэкапы обычно со всей БД бэкапятся. "обычно" теряет всякий смысл когда идет речь о ежедневных бэкапах миллионов файлов "размером 0.1-80 Мб" то уж если хочется - да даже и нужно - делать отдельные БД по каким-то признакам. Годы, типы, отделы и т.д. Тогда и забыкапить легко будет, и поднять...... я предложил самый простой и ненадуманный вариант бэкапа - включать в него родного только ту таблицу в которую загружают файлы ВСЕХ типов, ВСЕ отделы, в течение ВСЕГО времени определяемого и контролируемого администратором ... и тд и тп ... этот механизм вообщем-то де-факто ... придуман не мной ... Это если у вас есть возможность забыкапить отдельно одну таблицу - валяйте. А если нет - чего бэкапить будете? Потому и лучше сразу разделять и структуру всего этого сразу прописывать. К тому же, выход с одной таблицей, в которой лежит все отовсюда за период, уж не знаю кем он там придуман, больше неразберихи принесет, чем делу поможет. -- Tygra's -- Мои фотогалереи тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 14:13 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
ПрограммиздищеМне также кажется, что должно быть звено с интерфейсов, дающем возможность гулять по папкам сервера и вибирать файла(при соотв. правах), это должно быть доступно со стороны клиента, но он должен подключаться по TCP/HTTP Тема собсно навеяна тем, что допустим пользователь имеет полные права, клиентская программа запущена за пределами LAN, а пользователь собирается некоторые файлы к базе прицепить/отцепить, может быть ничё и не надо писать, пусть ему возможность доступа к файлам админ обеспечивает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 15:29 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
ПрограммиздищеМдя..файловая система нехилая получается, если учесть, что каждому файлу папку надо создать, да все это уровней на 40..50 по иерархии папок, так что при 1 миллионе файлов, файловых объектов больше, т.е. + папки, чем больше таких объектов,тем больше кусочков кластеров.а давайте-ка для начала определимся, зачем нам вообще файлы в БД? :) ну то есть тупо переносить какую-либо иерархию файлов в базу, по аналогии со структурой каталогов на диске - на мой взгляд просто ни к чему (мягко говоря). приведу пример: есть договор с поставщиком на тему свежих помидоров. кому-то из юзеров удобнее видеть документ в разделе "договоры с поставщиками", а кому-то - "договоры про помидоры" (извините за каламбур). :) но документ-то (или файл, если угодно) в обоих случаях один и тот же. а средств борьбы с миллионами файлов на одном диске/разделе/каталоге на уровне той же ос windows server есть несколько - и линки на уровне ntfs, и dfs тот же, да и всякие софт/хард продукты третьих фирм пачками продаются наверняка (я давно не изучал сей вопрос). файл в бд, фактически, нужен как некий блоб, для которого в бд хранятся атрибуты для разных целей (поиска, сортировки, группировки, выстраивания в разные иерархии и т. д.). хранить его в поле блоб или на диске - это вопрос различных удобств. на мой взгляд, хранение на диске более удобно (причины я описывал выше). кстати, всеми [не]любимый ms office (да и не только он, по-моему) имеет механизм атрибутов документов, встроенных в сам файл (document properties). засунув такой документ в блоб мы автоматически лишаем себя удовольствия поиска по таким атрибутам (думаю, что только у ms sql server есть такая возможность, если вообще есть). а если не лишаем, то получаем достаточно большой гемор по поддержке работы с этими атрибутами на серверной части разрабатываемого софта. другими словами, имея файл на диске мы имеем вагон существующих стандартных средств для работы с ним, а засунув его в блоб, в большинстве случаев, приходится эти средства реализовывать самостоятельно. либо на каждый чих вытаскивать файл из блоба на диск и делать там с ним что-то. а ради чего? просто ради того, чтобы все лежало в n-томовом файле бд? честно, не понимаю. ПрограммиздищеМне также кажется, что должно быть звено с интерфейсов, дающем возможность гулять по папкам сервера и вибирать файла(при соотв. правах), это должно быть доступно со стороны клиента, но он должен подключаться по TCP/HTTPучитывая вышесказанное, на сервере будет достаточно одноуровневой (ну или двухуровневой, смотря как считать) иерархии папок, ибо клиентское приложение не должно иметь прямой доступ в это хранилище ни под каким соусом. вся сопутствующая информация должна лежать в бд, в полях соответствующих таблиц. и, таким образом, дело клиентского приложения показать это юзеру в надлежащем виде - в виде папок, деревьев или еще как-нибудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 19:11 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
miksoftНе знаю, упоминали или нет еще один плюс хранения файлов в БД - возможность применения к данным встроенных механизмов СУБД. В частности - репликация, бэкап, управление правами доступа. Это, конечно, реализуемо и в случае хранения файлов в ФС, но тогда придется использовать дополнительные интструменты и не всегда это легкореализуемо. Такой подход обычно подвергают критике как недостаточно извращенный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 09:46 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Программиздище miksoftНе знаю, упоминали или нет еще один плюс хранения файлов в БД - возможность применения к данным встроенных механизмов СУБД. В частности - репликация, бэкап, управление правами доступа. Это, конечно, реализуемо и в случае хранения файлов в ФС, но тогда придется использовать дополнительные интструменты и не всегда это легкореализуемо. Такой подход обычно подвергают критике как недостаточно извращенный.Поизвращаться нам и в других областях возможностей предостаточно :) Кстати, вспомнил еще один плюс за храБД - транзакционность. Т.е. гарантия, что документ и запись с его атрибутами будут наличествовать или отсутстовать одновременно и будут соответствовать друг другу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 10:56 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
Я фигею. Тут не клон файловой системы обсуждают, а конкретную задачу - для какой-то системы нужно хранить файлы. Договора ли это, спецификации или рисунки - фиолетово, просто должны каким-то образом файлыы быть "привязаны" к системе. Поэтому никого не волнуют какие-то десятки миллионов просто каких-то файлов, лежащих без причины на террабайтах дисков. В связи с этим многократные упоминания об индексации текстов и уж тем более о проблеме поиска по атрибутам идут лесом, даже бегут. Но дляя интереса, вы уж попробуйте поискать по тексту или по атрибутам .doc какие-то файлы самим вордом на ваших миллионах файлов - наверное жутко быстро и эффективно будет, так??? И так, определились - проблемы поиска по тексту и свойствам файлов у нас нет. Есть собственный классификатор для этих дел, который развивается в любую нужную сторону. Есть задача - привязать договора к поставщикам (например). Привязали. Храним файлы в БД. Чего имеем из плюсов: - легкое бэкапирование - легкое манипулирование - возможность простой репликации куда хочешь - и самое главное, полная независимость от сетки : нам не нужны ни пути, смапленные на файловое хранилище, ни вечная проблема переноса-переименования-переконфигурации серверов, сети и т.д., ни вообще коннект к любому файл-серверу и т.п. Файлы всегда с нами в системе, даже если вы сидите через VPN, десять провайдеров или вообще на локальном IP - файлы тут, не нужен никакой путь никуда, вообще плевать, где и какая сеть. Это самое главное. И эта система расширяема в любые стороны на сколько хошь. Минусов нет Минусы только при размещении файлов в файловой системе. Одни минусы. ========= Vadim Kruglikа давайте-ка для начала определимся, зачем нам вообще файлы в БД? :) ну то есть тупо переносить какую-либо иерархию файлов в базу, по аналогии со структурой каталогов на диске - на мой взгляд просто ни к чему (мягко говоря). Выше все сказано автор приведу пример: есть договор с поставщиком на тему свежих помидоров. кому-то из юзеров удобнее видеть документ в разделе "договоры с поставщиками", а кому-то - "договоры про помидоры" (извините за каламбур). :) но документ-то (или файл, если угодно) в обоих случаях один и тот же. И причем тут БД? автора средств борьбы с миллионами файлов на одном диске/разделе/каталоге на уровне той же ос windows server есть несколько - и линки на уровне ntfs, и dfs тот же, да и всякие софт/хард продукты третьих фирм пачками продаются наверняка (я давно не изучал сей вопрос). А в случае с БД все уже решено, не надо никаких третьих фирм и т.д. авторфайл в бд, фактически, нужен как некий блоб, для которого в бд хранятся атрибуты для разных целей (поиска, сортировки, группировки, выстраивания в разные иерархии и т. д.). хранить его в поле блоб или на диске - это вопрос различных удобств. на мой взгляд, хранение на диске более удобно (причины я описывал выше). Файл нам нужен как файл. А причин для фс я не нашел ни у кого - нашел только незнание возможностей СУБД. авторкстати, всеми [не]любимый ms office (да и не только он, по-моему) имеет механизм атрибутов документов, встроенных в сам файл (document properties). засунув такой документ в блоб мы автоматически лишаем себя удовольствия поиска по таким атрибутам (думаю, что только у ms sql server есть такая возможность, если вообще есть). Нам этих удовольствий и не надо. :)) авторлибо на каждый чих вытаскивать файл из блоба на диск и делать там с ним что-то. а ради чего? просто ради того, чтобы все лежало в n-томовом файле бд? честно, не понимаю. Ради того, чтобы не было проблем, мной выше описанных (которыми не страдает БД). Программиздище miksoftНе знаю, упоминали или нет еще один плюс хранения файлов в БД - возможность применения к данным встроенных механизмов СУБД. В частности - репликация, бэкап, управление правами доступа. Это, конечно, реализуемо и в случае хранения файлов в ФС, но тогда придется использовать дополнительные интструменты и не всегда это легкореализуемо. Такой подход обычно подвергают критике как недостаточно извращенный. И обычно критикуют те, кто СУБД в глаза не видел. Еще раз напомню, если кто забыл - здесь не обсуждается пространная система хранения всех файлов из всех файловых серверов локального интернет-провайдера :)) Есть конкретная задача. -- Tygra's -- Мои фотогалереи тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 11:29 |
|
||
|
Стоит ли хранить содержимое файлов в полях базы данных?
|
|||
|---|---|---|---|
|
#18+
tygraНо дляя интереса, вы уж попробуйте поискать по тексту или по атрибутам .doc какие-то файлы самим вордом на ваших миллионах файлов - наверное жутко быстро и эффективно будет, так??? вы не поверите, но именно так и будет. быстро и эффективно. ибо будет использован построенный предварительно индекс. кстати, что за термин "самим вордом" - мне непонятно, ибо поиск осуществляет не он сам, точнее, поиск идет при использовании некоего api к некоему индексатору. а кто уж юзает этот апи - ворд или свой собственный софт - по барабану. tygraИ так, определились - проблемы поиска по тексту и свойствам файлов у нас нет. Есть собственный классификатор для этих дел, который развивается в любую нужную сторону.известная ошибка разработчика. сегодня нет такой задачи, завтра возникла. будем переписывать систему? опять же, а если файлов уже есть сотня-другая тысяч? будем срочно разрабатывать классификатор, писать приблуду, которая по контенту файла будет его описывать по этому классификатору. зачем, если есть стандартные средства и пользователи смогут искать свои файлы сразу? tygraЕсть задача - привязать договора к поставщикам (например). Привязали. Храним файлы в БД. Чего имеем из плюсов: - легкое бэкапирование - легкое манипулирование - возможность простой репликации куда хочешьпо первым двум пунктам ну совершенно не понимаю, чем легче бэкапить базу или пачку файлов? особенно если файлы - гиговые мувики, которые не изменяются. верю, что возможно в конкретных реализациях некоторых конкретных субд это легко решается, но в общем случае ведь это не так. tygra- и самое главное, полная независимость от сетки : нам не нужны ни пути, смапленные на файловое хранилищезато нужны пути на клиенте, куда складывать файл при работе с ним. или функционал в третьем слое, который будет, например, показывать тот же гиговый мувик, отслеживать "прокрутку" и т. д. между прочим, пути на сервере тоже особо не нужны. точнее, не нужно раздувать из этого такую проблему, ибо путей там два: один к общему хранилищу внутри системы, а второй - к каталогу с домашними каталогами пользователей системы, которые генерятся по определенным правилам. tygraни вечная проблема переноса-переименования-переконфигурации серверов, сети и т.д., ни вообще коннект к любому файл-серверу и т.п. Файлы всегда с нами в системе, даже если вы сидите через VPN, десять провайдеров или вообще на локальном IP - файлы тут, не нужен никакой путь никуда, вообще плевать, где и какая сеть.вы что-нибудь про, например, WebDAV слышали? Становится также пофигу, за какими там vpn/fw/etc лежит файлик. кстати, MS Office его отлично понимает. tygra автора средств борьбы с миллионами файлов на одном диске/разделе/каталоге на уровне той же ос windows server есть несколько - и линки на уровне ntfs, и dfs тот же, да и всякие софт/хард продукты третьих фирм пачками продаются наверняка (я давно не изучал сей вопрос). А в случае с БД все уже решено, не надо никаких третьих фирм и т.д.ага-ага, вы это расскажите крупным конторам, которые покупают аппаратные хранилища по куче террабайт. как раз от третьих фирм. кстати, этим третьим фирмам в общем-то тоже пофигу, что там в этом хранилище лежит - один огромный файл бд или миллион просто файлов. кстати, основной аргумент-то вы и поскипали. повторюсь, на всякий случай: имея файл на диске мы имеем вагон существующих стандартных средств для работы с ним, а засунув его в блоб, в большинстве случаев, приходится эти средства реализовывать самостоятельно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 22:25 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1544784]: |
0ms |
get settings: |
5ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
172ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 483ms |

| 0 / 0 |
