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




Вниз

Базы данных и графика в них ! 


UnDISCOvery   (2002-01-10 13:46) [0]

Такая вот задача, вернее незадача. :) Есть видеопоток, который представляет из себя набор кадров (в формате bmp), плотность потока примерно 60 кадров в секунду. Нужно это из этого дела сделать, вроде как архив. Сейчас я сделал это в виде обычного файла на диске (через FileStream, куда пишутся подряд все кадры сжатые в jpeg). Но мой научрук совсем сдвинулся :) ... грит а давай сделай архив в виде таблицы БД, с возможностью чтения, поиска и навигации. А вот собственно и вопросы:
1. Какой алгоритм вывода графики будет наиболее быстрым, приминительно к формату видеопотока ?
2. Какую платформу БД лучше использовать ? Так как предстоит иметь дело с выборкой большого обьема BLOB полей.
3. Какие компоненты и каким образом использовать ?

Мысли пока такие: по таймеры считывать группу записей с блобами в кэш на клиенте (може быть храним. процедурой), а затем оттуда высасывать по кадру и выводить на канву, чувствую что без разделения на нити не обойтись :(.. не люблю я это.

ЗЫ. Выслушаю ЛЮБЫЕ ваши мысли по поводу сабжа !
Заранее фэнкс ! :)



Praco   (2002-01-10 15:50) [1]

Когда-то я это делал примерно так(D5, MSSQL 7.0)
DataSet.Edit;
//Field - блоб поле
(Field as TBlobField).LoadFromStream(stream);
или
(Field as TBlobField).LoadFromFile(file);
DataSet.Post;

Транзакции и обработку Exception по вкусу.

Я создавал отдельный поток для сохранения каждого кадра в MSSQL.

Можно и из другого приложения (по таймеру - почему бы и нет).Канва здесь не при чем.Читаешь кадр из файла - сохраняешь, читаешь следующий...



Mike_Goblin   (2002-01-11 09:47) [2]

А не проще хранить по-прежнему в файлах на диске, а в БД только пути к ним



Desdechado   (2002-01-11 11:09) [3]

Использование СУБД должно быть оправдано. Чем это мотивирует препод? Если только для удобства навигации, то чем его не устраивает файловая система:
- имя файла - то, что в нем заснято,
- время создания, модификации, последнего доступа - пожалуйста,
- группировка - рассовать по папкам,
- поиск - по всему вышеуказанному (не будет же он, в самом деле, искать по содержимому двоичного файла).
Зачем тут СУБД? Только для использования современных технологий? Так можно мобилой гвозди забивать.
Подумай... Может, стоит просто удобный интерфейс сделать, а детали реализации пусть останутся тайной.



Ura   (2002-01-11 11:56) [4]

Если твой научрук совсем такой умный предложи ему еще более продвинутую систему.
11 машин. Сеть 100МГб. Распределенная база.
1 машина делает обработку и рассылает кадры на другие машины, где они и ложаться в Бд. 1-ый кадр на первую 2-ой на вторую и т.д. а можно еще и запрашивать кто свободен сейчас.
Кол машин выбирается только для того, чтобы они успевали сохранить все твой кадры т.е. скоростью работы СУБД. ;-)



petr_v_a   (2002-01-11 12:02) [5]

У Oracle ( за отдельные деньги ) есть некая фигня под названием Video Information Retrivial Cartrige. Что это такое и как им пользоваться не знаю, но, судя по названию :), Вам стоит это посмотреть



Praco   (2002-01-11 12:47) [6]

"А не проще хранить по-прежнему в файлах на диске, а в БД только пути к ним"
Кстати, читаться кадры будут гораздо быстрее, чем из базы. Если планируется показывать фильмы, то этот вариант оптимальный.



UnDISCOvery   (2002-01-11 20:44) [7]

Всем отозвавшимся ! Спасибо, друзья ! Я тут ночкой погемороился и вот что получилось:
БД - MSSQL DE 7.0, доступ через ADO
Запись из видеопотока в таблицу БД
insert Cam1 (Time, Kadr)
values (:tm, :kr) - это в ADOCommand
ParamByName.Value:= Time;
ParamByName.LoadFromStream(MemoryStrm,ftGraphic)
Плотнее чем 5-6 к\с не получилось, правда и машина не супер (винт не скази, камень целерон :) ). НО в принципе довольно приемлемо. Изображение переодически подергивается когда начинаешь в базу скидывать, но это не часто, хотя и раздражает.

Чтение из базы.
ADOquery. select по времени от пользователя, затем First, SaveToStream, Jpeg.LoadFromStream, Canvas.StretchDraw(jpeg), Next
скорость чтение 17 к\с... все довольно плавно и даже перемотка получается :).

Мотивация по поводу БД звучала так: Ну так же удобнее управлять доступом и для сети все уже готово, или ты хочешь еще и сетевую версию делать ? :) Я сказал, что я уже не чего не хочу :))

А почему чтение из базы дольше ? По-моему основное время уходит на обращение к диску, а оно одинаково или я не прав ?

АААА !!! Вот еще что ! Только что вычитал что у SQLя есть специальные методы для работы с блобами: readtext, writetext. Они хранятся в виде набора страниц по 2Кб. А в поле БД только указатель на первую. Может это аргумент для прееода, чтобы он успокоился и не придумывал задач ? :)))

если есть что сказать еще пишите egen_postbox@rambler.ru




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




Наверх





Память: 0.74 MB
Время: 0.023 c
1-18790           User_OKA              2002-01-23 14:57  2002.02.07  
VarArrayCreate


1-18917           Andrews               2002-01-24 12:08  2002.02.07  
Помогите решить проблему


1-18898           Valentin2             2002-01-10 12:49  2002.02.07  
Здравствуйте ещё раз!


4-19030           Hair_Fly              2001-12-11 17:55  2002.02.07  
Как мне запустить из своего сервиса некоторое приложение ?


1-18923           LamerMen              2002-01-24 09:56  2002.02.07  
Что использовать TMemo TR..Edit?