Форум: "Базы";
Текущий архив: 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
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c