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

Вниз

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

 
DmitrichJ   (2007-04-18 16:45) [0]

Как вы решаете проблему хранения больших картинок в БД? Есть ли резон хранить их в БД или просто складывать в папку, а в БД хранить путь. Особенно, когда БД в сети и около 40 пользователей. Спасибо.


 
Sergey13 ©   (2007-04-18 16:49) [1]

Если тебе нужен поный контроль за картинками, то лучше в БД хранить. Если картинки - это просто картинки - все равно.


 
DimaBr ©   (2007-04-18 16:52) [2]

Большие это сколько ??? Какая сетка, какой винт, сколько пользователей их видят, как часто делается бэкап и на какой носитель, как часто добавляются картинки, каков (приблизительно) суммарный объем картинок в базе ?


 
Desdechado ©   (2007-04-18 16:57) [3]

1. Хранение пути требует расшаривания сетевого ресурса или создания локальных копий картинок. А это не всегда приемлемо.
2. Хранение пути накладывает ограничение на именование сетевого ресурса или локальных путей.
3. Хранение пути не обеспечивает целостности БД, если вдруг чего случится.
4. Хранение пути - усложнение администрирования прав доступа к данным, т.к. часть контроля прав возлагается на файловую систему.


 
Desdechado ©   (2007-04-18 16:58) [4]

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


 
clickmaker ©   (2007-04-18 17:05) [5]

все перечисленное также неактуально, если раздачей картинок занимается специально обученный сервис (сервер). Т.е. end-user доступа непосредственно к файловой системе не имеет


 
Stanislav ©   (2007-04-18 17:14) [6]

40 пользователей критично -не для всех СУБД


 
Stanislav ©   (2007-04-18 17:20) [7]

Если СУБД поддерживает бэкап это еще 1 + в пользу БД.
Картинка хранящаяся в БД будет автоматически сохранена с резервной копией базы.


 
DmitrichJ   (2007-04-19 00:14) [8]

Прихожу к выводу, что лучше в БД. Они вставляются в отчёт. Большие это 5, а то и больше Мб. Кол-во 7 на одну запись. Записей уже около 100. Будет гораздо больше.
Сейчас использую InterBase 6 (фотки в БД). но работает он на Server 2003 очень медленно. и много связаных с IB6 проблем. Денег естествено на IB7 (где проблем нет) естественно нет (если, конечно нельзя его где-то скачать). Хочу перевести в MS SQL 2000, но не могу добавить туда картинку. Уже поднимал этот вопрос, но так и не получил конкретного ответа.


 
Jeer ©   (2007-04-19 01:33) [9]


> DmitrichJ   (19.04.07 00:14) [8]
>
> Прихожу к выводу, что лучше в БД.


Давно пришел к выводу, что лучше не в БД.
Много причин, в том числе - независимая от БД трансформация файлов-картинок. Впрочем, как всегда, все определяется предметной областью.


 
Sergey13 ©   (2007-04-19 09:39) [10]

> [8] DmitrichJ   (19.04.07 00:14)
> Сейчас использую InterBase 6

Выкинуть в первую очередь и поставить FireBird 1.5.4 (если юзаешь IBX) или 2 (если FIB+).

> очень медленно

Скорость работы на 90% зависит от качества программы, а не от серверных способностей. Вот например

> Большие это 5, а то и больше Мб. Кол-во 7 на одну запись.

Это значит, что прочитав даже всего одну запись ты читаешь минимум 35 мегов.


 
SlymRO ©   (2007-04-19 10:05) [11]

Упаковать картинки?


 
Ega23 ©   (2007-04-19 10:10) [12]


> Прихожу к выводу, что лучше в БД. Они вставляются в отчёт.
>  Большие это 5, а то и больше Мб. Кол-во 7 на одну запись.
>  Записей уже около 100. Будет гораздо больше.



create table Images (
  ImgID                int                  not null,
  ImgData              image                null,
  constraint PK_IMAGES primary key  (ImgID)
)
go

/*==============================================================*/
/* Table: WorkTable                                             */
/*==============================================================*/
create table WorkTable (
  WTID                 int                  not null,
  WTName               varchar(255)         not null,
  ImgID1               int                  null,
  ImgID2               int                  null,
  ImgID3               int                  null,
  ImgID4               int                  null,
  ImgID5               int                  null,
  ImgID6               int                  null,
  constraint PK_WORKTABLE primary key  (WTID)
)
go

alter table WorkTable
  add constraint FK_WORKTABL_REF1_IMAGES foreign key (ImgID1)
     references Images (ImgID)
go

alter table WorkTable
  add constraint FK_WORKTABL_REF2_IMAGES foreign key (ImgID2)
     references Images (ImgID)
go

alter table WorkTable
  add constraint FK_WORKTABL_REF3_IMAGES foreign key (ImgID3)
     references Images (ImgID)
go

alter table WorkTable
  add constraint FK_WORKTABL_REF4_IMAGES foreign key (ImgID4)
     references Images (ImgID)
go

alter table WorkTable
  add constraint FK_WORKTABL_REF5_IMAGES foreign key (ImgID5)
     references Images (ImgID)
go

alter table WorkTable
  add constraint FK_WORKTABL_REF6_IMAGES foreign key (ImgID6)
     references Images (ImgID)
go


Суть улавливаешь?


 
Desdechado ©   (2007-04-19 10:54) [13]

> Это значит, что прочитав даже всего одну запись ты читаешь минимум 35 мегов.
Не совсем так. BLOB загружается на клиента по явному требованию. И, думаю, даже сервер читает его по требованию, а без требования он читает только указатель (локатор) на место хранения в БД.

Ega23 ©   (19.04.07 10:10) [12]
Сказал бы проще, что сделать кросс-таблицу, в которой к одной записи главной таблицы можно прилепить произвольное число картинок. И тогда загружать можно не все, а какие-то конкретные.


 
Ega23 ©   (2007-04-19 11:03) [14]


> Не совсем так. BLOB загружается на клиента по явному требованию.


Серьёзно? Чё-то у меня сомнения большие...


 
Sergey13 ©   (2007-04-19 11:05) [15]

> [13] Desdechado ©   (19.04.07 10:54)

Это да, но если разместить на форме имиджи для всех картинок и нажать кнопочку показать, таки ИМХО, все и прочитается. Я к тому писАл, что продумывать эти вещи надо заранее, и например держать маленькие копии картинок для навигации по ним.


 
Desdechado ©   (2007-04-19 11:19) [16]

Ega23 ©   (19.04.07 11:03) [14]
А что делает, по-твоему, CreateBlobStream и чтение из него?


 
Ega23 ©   (2007-04-19 11:59) [17]


> А что делает, по-твоему, CreateBlobStream и чтение из него?


Ты хочешь сказать, что
create table Images (
 ImgID                int                  not null,
 ImgData              image                null,
 constraint PK_IMAGES primary key  (ImgID)
)

Select * from Images

после выполнения такого запроса при попытке прочитать данные из БЛОБа на клиенте будет каждый раз запрос к БД идти? (Я сейчас про ADO говорю)
Я всю жизнь считал, что ADO фетчит все записи до конца и независимо от типа полей в запросе.
Если я не прав, то просветите. Крайне интересно.


 
Desdechado ©   (2007-04-19 12:05) [18]

Про ADO говорить не буду, не знаю.

> на клиенте будет каждый раз запрос к БД идти
Это забота клиентского драйвера, а не клиентского приложения.



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

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

Наверх




Память: 0.5 MB
Время: 0.038 c
1-1179300822
Кирилл_А
2007-05-16 11:33
2007.07.22
Шрифт


2-1182239087
Сергей Макс.
2007-06-19 11:44
2007.07.22
Delphi и оболочка


6-1166420713
21h
2006-12-18 08:45
2007.07.22
idFTPserver anonymous


15-1182348061
Vendict
2007-06-20 18:01
2007.07.22
Проектная документация


15-1182431476
Predfer
2007-06-21 17:11
2007.07.22
Как можно передать данные в интернете





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