Конференция "Базы" » СУБД для хранения большого числа фотографий.
 
  • kudatsky (30.10.13 10:33) [0]
    Разрабатывается СУБД для хранения большого числа фотографий. Их количество может достичь 5-10 млн. шт. СУБД будет иметь архитектуру мастер-деталь. В мастер-таблице число записей будет 50-60 тыс. шт., в детали каждой строке и мастер будет соответствовать несколько десятков фото. Главная задача СУБД - просмотр фотографий. Т.е. пользователь выберет запись из мастера и вызовет форму просмотра . Вот здесь основная проблема. Как быстро будет выполняться выборка, не будет ли тормозить ? Желательно, что бы выборка сработала хотя бы за секунду. Если выборка будет выполняться, скажем, 10 секунд, то это никого не устроит. И какую СУБД выбрать в смысле надёжности ? Пока я использую FireBird, но это скорее всего временное рашение.
  • brother © (30.10.13 10:37) [1]
    > Пока я использую FireBird

    и какова скорость выборки?
  • Sergey13 © (30.10.13 11:04) [2]
    >Как быстро будет выполняться выборка
    Выборка чего?
    50-60 тысяч записей в главной и 100 на каждую в детали - это детский лепет для СУБД, если конечно индексами не пренебрегать. Вот передача по сети СРАЗУ 100*5(10, 20?)мегабайт на клиента - задача для СЕТИ и дисков. Если сразу. Если не сразу, а по одной и по требованию, то значительно проще.

    Если фотки будут ридонли, то хранить их в БД большого смысла нет, ИМХО. Достаточно хранить имена файлов и, возможно, миниатюры. По крайней мере в эту сторону стОит подумать.
  • Anatoly Podgoretsky © (30.10.13 11:40) [3]
    MS SQL начиная с версии 2008, тип FILESTREAM
  • Jeer © (30.10.13 16:20) [4]
    >Разрабатывается СУБД для хранения большого числа фотографий.

    Так какую СУБД Ви разрабатываете?
  • Jeer © (30.10.13 16:22) [5]
    > Главная задача СУБД - просмотр фотографий.

    Не бывает таких задач у СУБД. Вы что, туда фотокамеру приделаете или распознавание прикрутите?
  • kudatsky (30.10.13 18:36) [6]
    Прошу прощения, что не ответил сразу - работа.
    Немного подробнее опишу задачу. Речь идёт о фотографиях опор высоковольтных линий электропередач. Этих опор десятки тысяч. Каждую опору дважды в год фотографируют с 4-х сторон. Эти фотографии нужно хранить годами - тогда можно проследить динамику состояния опоры.
    Сейчас фотографии хранятся в отдельных файлах, и их несколько сотен тысяч. Работать с ними крайне неудобно. Поэтому возникла необходимость загнать всё это богатство в СУБД.
  • Медвешонок Порожок (30.10.13 18:41) [7]
    да любая оспади....
  • Inovet © (30.10.13 18:44) [8]
    Значит, меняться не будут, только добавление. А что, в ФБ фотографии уже загружены и возникли сомнения?
  • Медвешонок Порожок (30.10.13 18:44) [9]
    Вот здесь основная проблема. Как быстро будет выполняться выборка, не будет ли тормозить ?

    С базой эта проблема ну никак не связана.
    Даже если фотки будут лежать в файлах, а не в блобах, то их все равно придется тянуть по проводам на клиентскую машину.
    а толщина проводов от субд не зависит
  • Inovet © (30.10.13 18:47) [10]
    > [9] Медвешонок Порожок   (30.10.13 18:44)

    Судя по задаче, мегаколичествами тянуть не придётся.
  • RWolf © (30.10.13 18:50) [11]
    А что не так с удобством?
    D:\Фото\Опоры\2013\Oct\10000-10999\10031\4.jpg
  • Inovet © (30.10.13 19:17) [12]
    > [11] RWolf ©   (30.10.13 18:50)
    > D:\Фото\Опоры\2013\Oct\10000-10999\10031\4.jpg

    Тогда уж
    D:\Фото\Опоры\10000-10999\10031\4.2013.10.jpg

    Ну и в базе-таки удобнее выбирать/сортировать по разным критериям + всякая доп. инфа наверняка есть.
  • RWolf © (30.10.13 19:31) [13]

    > Inovet ©   (30.10.13 19:17) [12]

    Я нарисовал именно такой путь из расчёта, что проверяющий ходит(-ят) весь октябрь среди опор с фотоаппаратом, а потом сливает всё сфотографированное на винт. Копировать всё разом в 2013\Oct\ немного удобнее, чем переименовывать и раскидывать тысячи фоток по каталогам опор.
  • Inovet © (30.10.13 19:39) [14]
    > [13] RWolf ©   (30.10.13 19:31)

    Вот в том и дело, что заливать так удобнее, а смотреть по-другому. Можно, конечно, линков наворотить.
  • kudatsky (30.10.13 23:42) [15]
    Проблема в том, что работать с сотнями тысяч файлов -
    это проблема. Постоянно что-то случается. Например, может
    куда-то деться целый каталог. Неясно, куда делся и когда
    это случилось. Всё равно, что работаешь с кучей песка.
    Песчинки постоянно пропадают. Вот и появилась идея
    загрузить эти песчинки в ящик.
    И как правильно заметил Inovet, есть ещё масса дополнительной
    информации, которая будет загружена в БД.
    Меня беспокоят три момента.
    1. Не будет ли тормозить БД ? (сеть не будет)
    2. Надёжность хранения.
    3. Я пока остановился на FireBird,  т.к. хорошо его знаю.
    Может, использовать что-то другое ?
    Что скажете ?
  • kudatsky (30.10.13 23:49) [16]
    Отвечу ещё на один из предыдущих вопросов.
    Должны выполняться операторы select,
    insert, update,delete. Т.е. должна быть возможность
    добавлять новые записи с фото, удалять и
    изменять существующие.
  • Inovet © (31.10.13 04:38) [17]
    1. С чего бы ей (БД) тормозить. Есть же фотографии за все годы. Залить и убедиться. Только не постоянно тягать фото, а по мере надобности.
    2. Ну так бэкап по-любому надо делать.
  • Inovet © (31.10.13 04:42) [18]
    > [16] kudatsky   (30.10.13 23:49)

    Это само собой. Есть некая разница в подходах между тем, насколько чаще надо делать что-то одно из этого в сравнение с другими.
  • Медвешонок Порожок (31.10.13 08:38) [19]
    Т.е. должна быть возможность
    добавлять новые записи с фото, удалять и
    изменять существующие.


    Ты знаешь хоть одну субд которая этого не умеет?

    Песчинки постоянно пропадают. Вот и появилась идея
    загрузить эти песчинки в ящик.


    а есть разница из какого ящика пропадают песчинки? тем более что ящик один и тот же.
    если у тебя сегодня с диска файлы фоток пропадают, то завтра пропадет файл данных бд.
  • kudatsky (31.10.13 10:36) [20]
    Ну что же, вопрос достаточно понятен. Тем не менее, вы меня не успокоили. С нового года я начну эту работу, тогда всё станет ясно. Всем спасибо.
  • Sergey13 © (31.10.13 10:58) [21]
    2kudatsky
    Ты так и не ответил - что за выборки то?
    Разница по времени между выборками

    select ID_Foto,Name_Foto,Desc_Foto from Tab_Foto
    where id_opor=:id


    и
    select ID_Foto,Name_Foto,Desc_Foto, BLOB_Field_Foto from Tab_Foto
    where id_opor=:id



    будет примерно равна времени копирования всех фото файлов одной опоры с диска (где фотки хранятся) на диск клиента (где смотреть будут). Эту разницу можно измерить секундомером, даже без заливки фоток в БД. При этом скорость первой выборки при 100 возвращаемых записях условно можно принять за ноль.
  • kudatsky (31.10.13 16:48) [22]
    Запрос будет именно второй:
    select ID_Foto,Name_Foto,Desc_Foto, BLOB_Field_Foto from Tab_Foto
    where id_opor=:id
    Цель запроса - просмотр фотографий пользователем на локальной машине.
    На экране будет DBGrid со списком фотографий и DBImage для просмотра фото по очереди. Перемещение между фото - click или DBNavigator
  • brother © (31.10.13 18:18) [23]
    я не понял, это все для локального места? или серв с фотками отдельно, а пользователь отдельно?
  • kudatsky (01.11.13 10:15) [24]
    brother>Фотографии будут на сервере. Все пользователи на локальных машинах будут работать с одной базой данных. Пользователи с правами смогут пополнять БД новыми фото.
  • kudatsky (01.11.13 10:26) [25]
    Думаю, я нашёл решение задачи. В БД будут храниться 2 копии фото. Одна так, как она создаётся фотоаппаратом, 4х3 тыс. пикселей. Вторая - в масштабе 1:4, т.е. 1000х750 пикселей. Именно она будет использована для просмотра. Занимать она будут несколько сотен килобайт и ни сеть, ни сервер её даже не заметят. А кому нужно фото высокого разрешения, сможет скачать его за несколько секунд.
  • Inovet © (01.11.13 11:40) [26]
    > [25] kudatsky   (01.11.13 10:26)
    > Думаю, я нашёл решение задачи. В БД будут храниться 2 копии фото.

    > [25] kudatsky   (01.11.13 10:26)
    > Вторая - в масштабе 1:4, т.е. 1000х750 пикселей

    Для миниатюр и немньше хватит.

    Пользователь нажал кнопку "Семейный фотоальбом участка", выбрал, к примеру, диапазон с 1000 по 1100 - надо ему просмотреть участок длинной километров 30. А лучше эти участки хранить в отдельной таблице. Пользователю в грид вывалилось 100 записей с опорами из таблицы Опоры. Он по ним бегает. Миниатюры на данном этапе нужны ли? И какая конкретно из всей истории на каждую опору? Вряд ли нужны. Если и нужны, то не 1000х750. А вот теперь пользователь решил полюбоваться конкретной опорой во всей красе с рождения и до сегодняшнего дня. Жмёт кнопку "Личный фотоальбом" или кликает в гриде, открывается ещё один грид, хотя вот тут лучше бы не грид, но не суть - открылось окно. Сверху информация об опоре, дальше миниатюры, но опять же не 1000х750, и рядом с каждой дата съёмки и, может, ещё что-то, где-нибудь, например, справа фото в полном разрешении. Кликнул по самой памятной - фото в ПОЛНОМ разрешении подгрузилось в это где-нибудь-справа. Насмотрелся, кликнул по следующей. Смахнул слезу умиления.

    Можно ещё режим слайд-шоу сделать - "вся жизнь опоры № 123". Тогда загружать сразу за раз всю историю этой опры.
  • kudatsky (01.11.13 11:56) [27]
    Это будут не совсем миниатюры. Уменьшенная версия должна быть такой, что бы можно было рассмотреть техническое состояние опоры. А полная версия нужна, если нужно рассмотреть какие то мелкие детали конструкции, например гирлянды изоляторов на верхних траверсах.
  • Inovet © (01.11.13 12:04) [28]
    > [27] kudatsky   (01.11.13 11:56)

    Значит, храни по 3 изображения. Разумно. Полное показывай по отдельной кнопке отдельным запросом.
  • Дмитрий (05.11.13 17:46) [29]
    миниатюры или уменьшенные изображения однозначно понадобятся.
    иначе при перемешении от фото к фото сразу начнут грузиться полноценные фото, что будет грузить мозг.
    даже 1000х750 пикселей может оказаться заметно при загрузке
  • brother © (05.11.13 18:15) [30]
    3 метра...
  • Inovet © (06.11.13 00:48) [31]
    > [30] brother ©   (05.11.13 18:15)
    > 3 метра...

    3 метра * 10 лет * 2 раза в год = 60 метров
  • Дмитрий (06.11.13 19:06) [32]
    >>Этих опор десятки тысяч. Каждую опору дважды в год фотографируют с 4-х сторон
    >3 метра * 10 лет * 2 раза в год = 60 метров
    Т.е. еще умножать на количество опор
    50 гигов в год
  • Inovet © (06.11.13 19:38) [33]
    Ещё с * на 4 стороны = 240 метров на опору. А за год пофиг пока влазит в БД.
 
Конференция "Базы" » СУБД для хранения большого числа фотографий.
Есть новые Нет новых   [118764   +87][b:0][p:0.001]