Работа с BLOB полями в InterBase/FireBird

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Dinosauro
Сообщения: 7
Зарегистрирован: 24 окт 2005, 14:25

Работа с BLOB полями в InterBase/FireBird

Сообщение Dinosauro » 14 янв 2006, 14:20

Подскажите, пожалуйста, существует ли возможность дописывать данные в BLOB поле не перезаписывая его целиком средствами Server API или используя компоненты, например FibPlus ?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 15 янв 2006, 02:24

нет изменить блоб частично невозможно. потому что версионность - при изменении блоба сервер должен сохранить его старое содержимое целиком, и записать новое содержимое.

Dinosauro
Сообщения: 7
Зарегистрирован: 24 окт 2005, 14:25

Работа с BLOB полями в InterBase/FireBird

Сообщение Dinosauro » 15 янв 2006, 13:45

Спасибо Kdv, за ответ, Вы очень помогли.
Продолжая тему, хотелось бы понять существует ли в InterBase/Furebird возможность отключить версионность, т.е. изменять данные в однопользовательском режиме, т.к. есть проблема с размерами файла БД (много BLOB и иногда они часто изменяются), а проводить сбоку мусора автоматически или в ручном режиме часто не хотелось бы.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 15 янв 2006, 17:57

нет, отключить версионность совсем нельзя. Слова про "проводить сборку мусора" - это личный опыт, проблема, или пока предположения?
У вас база размером 10 или больше гигабайт, и миллионы записей с блобами? Или блобы по сотне мегабайт?

Dinosauro
Сообщения: 7
Зарегистрирован: 24 окт 2005, 14:25

Работа с BLOB полями в InterBase/FireBird

Сообщение Dinosauro » 16 янв 2006, 14:24

Более подробно о системе. С технологического оборудования каждую минуту снимаются значения около 40000 параметров и архивируются в БД Firebird 1.5. Данные могут приходить с различной временной меткой(не в порядке хода времени). Для более быстрой выборки данных их хранение основано на BLOB полях. В таблице с данными следующие поля: идентификатор параметра и набор BLOB полей для хранения сигналов (11 байт на сигнал). Размер блоба равен страницы данных в БД - 4096 байт. В данном случае в таблице 4 BLOB поля. Пишет только один клиент, держа в памяти для каждого параметра один BLOB и если пришли данные он просто апдейтит этот BLOB. При таком раскладе если не проводить "сборку мусора" совсем, то примерно через несколько часов размер файла БД переваливает за 10 ГБ, а на самом деле "чистых" данных за сутки должно быть 40000*60*24*11 - примерно 600 МБ. Проблема, конечно, решилась включением сбоки мусора через каждые 20000 транзакций(можно наверное сделать и побольше). Просто при больших объемах файла БД скорее всего будут ощущаться тормоза при выбоке.

Если кто-то что-то захочет добавить буду признателен.
Спасибо, Kdv.

А так считаю, что тема закрыта...

Andrew Sagulin
Сообщения: 53
Зарегистрирован: 11 мар 2005, 15:44

Re: Работа с BLOB полями в InterBase/FireBird

Сообщение Andrew Sagulin » 18 янв 2006, 08:13

Dinosauro писал(а):Данные могут приходить с различной временной меткой(не в порядке хода времени).
А насколько разбросаны по времени данные для одной и той же временной метки? В смысле, нельзя ли сделать буфер (несколько буферов) в файле или ОЗУ, в которых бы накапливались данные для каждой метки, и только по получении информации от всех датчиков сохранять данные в БД?

Ответить