Чтение онлайн

ЖАНРЫ

Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Борри Хелен

Шрифт:

ВНИМАНИЕ! Никогда не пытайтесь выполнить то же для любой базы данных, которая не является "пустой" - т. е. содержит определенные пользователем объекты.

. ! .

Пора дальше

Теперь мы переходим к типам данных, которые Firebird реализует посредством больших двоичных объектов (BLOB), включая текст, нетипизированные двоичные и пользовательские форматы и специализированные реализации BLOB, которые Firebird представляет как типы ARRAY.

ГЛАВА 12. BLOB и массивы.

Типы BLOB (Binary Large Objects, большие двоичные объекты) являются сложными структурами, используемыми

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

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

Типы BLOB

Почти любой вид сохраняемых данных может храниться в BLOB: графические картинки, векторные рисунки, звуковые файлы, видео, документы размером с главу или целую книгу, любой вид мультимедийной информации. Поскольку BLOB может содержать различные виды информации, он требует специальной обработки чтения и записи на клиенте.

Типы BLOB могут, когда это возможно [28] , хранить содержимое файлов, сгенерированных другими приложениями, такими как текстовые процессоры, программное обеспечение CAD или редакторы XML. Преимущества могут быть в управлении транзакциями для динамических данных, защите от внешнего интерфейса, управлении версиями и возможности доступа к внешне созданным данным с помощью средств операторов SQL.

Столбцы BLOB не могут быть проиндексированны.

28

Тип BLOB не является волшебной палочкой для сохранения и поиска больших объемов файлов двоичных данных. Иногда при учете производительности накладные расходы и неуправляемость хранения нединамических объектов данных, вроде фильмов или звуков, в базе данных перевешивает преимущества, которые вы предполагали. Хранение ссылок на объекты файловой системы может быть хорошим решением.

Поддерживаемые типы BLOB

Firebird имеет два предварительно определенных типа BLOB, отличающиеся атрибутом подтипа (ключевое слово в SQL SUB_TYPE), как описано в табл. 12.1.

Таблица 12.1. Предварительно определенные подтипы BLOB

Определение

Алиас SQL

Назначение

BLOB SUB_TYPE 0

Не используется

Общий тип BLOB данных любого вида, включая текст. Общее название: "нетипизированный двоичный BLOB", однако Firebird ничего не знает о его содержании

BLOB SUB_TYPE 1

BLOB SUB_TYPE TEXT

Более специализированный подтип для хранения полного текста. Эквивалентен типам CLOB и MEMO, реализованных в некоторых других СУБД. Рекомендуется использовать с интерфейсами приложений, таких как компоненты RAD или поисковые машины, которые выполняют специальную трактовку для каждого типа

Подробнее
о подтипах

Подтип BLOB является положительным или отрицательным целым, которое указывает природу данных, содержащихся в столбце. Помимо двух предопределенных типов для общего использования Firebird имеет множество подтипов, которые он применяет для внутренних целей. Все эти внутренние подтипы имеют положительные номера.

Пользовательские подтипы могут быть добавлены с отличающимися идентификаторами особых типов для объектов данных, таких как HTML, XML или текстовый процессор, картинки JPEG или PNG и т.д.
– именно вам делать выбор. Отрицательные номера подтипов (от-1 до -32 768) резервируются для пользовательских подтипов.

Система подтипов BLOB также позволяет выполнять специфические преобразования одного подтипа в другой. Firebird осуществляет поддержку автоматического преобразования между парой подтипов BLOB в форме BLOB-фильтров. Фильтры BLOB являются специальным видом внешних функций с единственным назначением: получение объекта BLOB одного формата и преобразование его в объект BLOB другого формата. Возможно создание BLOB-фильтра для преобразования между пользовательским (отрицательным) и предварительно определенным подтипами - обычно TEXT.

Объектный код для BLOB-фильтров размещается в библиотеках коллективного доступа. Фильтр, вызываемый при необходимости динамически, распознается на уровне базы данных (не сервера) при его объявлении в метаданных:

DECLARE FILTER <имя-фильтра>

INPUT_TYPE <подтип> /* идентифицирует тип преобразуемого объекта */

OTPUT_TYPE <подтип> /* идентифицирует тип создаваемого объекта */

ENTRY_POINT '<имя-точки-входа>' /* имя экспортируемой функции */

MODULE_NAME '<имя-внешней-библиотеки>';

/* имя библиотеки BLOB-фильтра */

! ! !

ПРИМЕЧАНИЕ. Написание и использование BLOB-фильтров выходит за пределы тем настоящего руководства. Информацию по этой теме можно найти в базах знаний Firebird.

. ! .

Firebird не проверяет тип или формат данных BLOB. При планировании их хранения вы должны создать такой код вашего приложения, чтобы формат данных был согласован с их подтипом, неважно предварительно определенным или пользовательским.

Сегменты BLOB

Данные BLOB хранятся в различных форматах в обычном столбце данных и вне столбца. Они хранятся в виде сегментов на одной или более страницах базы данных. Сегменты являются дискретными фрагментами неформатированных данных, которые обычно создаются приложением в виде потока и передаются функциям API для пакетирования и передачи по сети по одному блоку за раз непрерывно.

В структуре записи ссылка на данные BLOB осуществляется с помощью идентификатора BLOB (BLOB_ID). BLOB_ID является уникальной шестнадцатеричной парой, которая обеспечивает перекрестные ссылки между данными BLOB и содержащей их таблицей. При поступлении на сервер сегменты сохраняются в базе в том же порядке, как они были получены, хотя не обязательно с теми же размерами фрагментов, с которыми они передавались.

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

Примеры синтаксиса

Следующий оператор определяет два столбца BLOB: BLOB1 подтипа 0 (по умолчанию) и BLOB2 подтипа 1 (TEXT, с набором символов по умолчанию):

CREATE TABLE TABLE2

(BLOB1 BLOB, /* SUB_TYPE 0 */

Поделиться с друзьями: