Обзор возможностей Oracle Multimedia
Александр Рындин, Oracle СНГ
Архитектура
Oracle Multimedia (в прошлом Oracle interMedia) - это возможность Oracle Database 11g для управления мультимедийным контентом (изображения, звук, видео). Использование этой функции позволяет управлять мультимедийными данными интегрированно с реляционной информацией. Oracle Multimedia умеет работать с большинством популярных мультимедийных форматов. Хранить такие мультимедийные данные можно разными способами (внутри и вовне базы). Также предоставляется целый спектр интерфейсов для использования этих сервисов (объектный, реляционный). Для разработки приложений Oracle поставляет набор Java интерфейсов и компонентов.
На слайде ниже показана общая архитектура Oracle Multimedia
Типы данных
Поддержка мультимедийных данных реализована через использование объектно-реляционных типов данных:
- ORDAudio - имеет специфичные для звукового файла свойства
- ORDImage - имеет специфичные для графического файла свойства
- ORDVideo - имеет специфичные для видео файла свойства
- ORDDoc - имеет общие для всех мультимедиа файлов свойства
Как и любые объектные типы экземляры ORDAudio, ORDDoc, ORDImage и ORDVideo состоят из атрибутов (включает метаданные и медиаданные) и методов. Медиаданные - это реальное видео, аудио или графическое изображение. Метаданные - это информация о данных: длина объекта, метод компрессии, формат. Методы - это процедуры, которые могут быть выполнены для объекта, такие как getContent() и setProperties().
Все четыре типа данных хранят информацию в объектно реляционном типе данных ORDSource.
Медиаданные могут храниться как в виде BLOB (большой плюс - транзакционный контроль), а могут вовне базы данных. В последнем случае в базе данных будет храниться указатель на медиаданные. Указатель может быть в одном из следующих видов:
- BFILE
- HTTP URL
- Пользовательский источник для media data server (RealNetworks Streaming Servers или Microsoft Windows Media Services), а также других серверов
Примеры приложений
Некоторые примеры приложений, которые могут использовать Oracle Multimedia:
- Электронный архив с медицинскими записями (включая DICOM изображения)
- Удаленное обучение
- Агенство недвижимости
- Архив фотографий (художественная галерея или профессональные фотографы)
- Электронный архив документов
- Публикация в web
Отдельного упоминания заслуживает возможность хранения DICOM данных. Это стандартный формат для хранения медицинских изображений. Этот формат включает в себя также набор метаданных (ФИО пациента, дату снимка и т.д.). Более подробно я опишу этот формат в отдельной статье.
Загрузка данных
Мультимедийные данные перед использованием в базе данных должны быть туда загружены. Для этого можно использовать следующие инструменты:
- SQL*Loader - встроенная утилита Oracle, позволяющая загружать данные в базу. В нашем случае - LOB данные и внешние мультимедийные файлы в таблицу
Пример загрузки с помощью SQL*Loader
The lob_test_data.txt file contains regular data and references to the files holding the CLOB and BLOB data.
1,one,01-JAN-2006,clob_test1.txt,blob_test1.doc
2,two,02-JAN-2006,clob_test2.txt,blob_test2.doc
Now we have all the data, we need a table to load the data into.
DROP TABLE lob_tab;
CREATE TABLE lob_tab (
number_content NUMBER(10),
varchar2_content VARCHAR2(100),
date_content DATE,
clob_content CLOB,
blob_content BLOB
);
Next, we define the SQL*Loader controlfile, called lob_test.ctl, that will allow us to load the data.
LOAD DATA
INFILE 'lob_test_data.txt'
INTO TABLE lob_tab
FIELDS TERMINATED BY ','
(number_content CHAR(10),
varchar2_content CHAR(100),
date_content DATE "DD-MON-YYYY" ":date_content",
clob_filename FILLER CHAR(100),
clob_content LOBFILE(clob_filename) TERMINATED BY EOF,
blob_filename FILLER CHAR(100),
blob_content LOBFILE(blob_filename) TERMINATED BY EOF)
Notice that the filename columns in the datafile are marked as FILLERs, so they are not loaded into the table, but they are used in the LOBFILE definition to identify the loacation of the LOB information.
The data is then loaded using the following SQL*Loader command, run from the command line in the same directory as files.
sqlldr userid=test/test@db10g control=lob_test.ctl log=lob_test.log bad=lob_test.bad
- PL/SQL
Доступ к данным, хранящимся в Oracle Multimedia
Приложения могут получать доступ к данным в Oracle Multimedia с помощью SQL, PL/SQL, OCI или Java:
- Oracle Multimedia Java API
Позволяет Java приложениям в любом звене (база данных, сервер приложений, клиент) получать и модифицировать мультимедийные данные. Oracle Multimedia Java API позволяет включать в JDBC result set как традиционные реляционные, так и Oracle Multimedia данныею
- Streaming Content from Oracle Database
Можно также использовать специальный plug-in от Oracle для распространения данных через RealNetworks и Microsoft Windows Media сервера. Plug-in можно скачать по адресу: http://www.oracle.com/technology/software/products/intermedia/index.html
Java-приложение для Oracle Multimedia
- Прежде чем начинать разработку приложения давайте проинсталлируем базу данных с примерами. По этой ссылку нужно выполнить пункты 1 и 2.
- Кроме того, необходимо проинсталлировать JDK от Sun. Скачать ее можно вот здесь.
- Также давайте проинсталлируем Standalone OC4J. Можно взять тот, который идет в поставке JDeveloper, но я сейчас буду говорить об обычном OC4J, который можно скачать здесь.
- Распаковать OC4J на сервере.
- После инсталляции нужно будет прописать переменную JAVA_HOME, указывающую на папку, куда был проинсталлирован JDK. В моем случае это папка /u01/app/oracle/product/11.1.0/db_1/jdk1.6.0_11, т.е. команда
export JAVA_HOME=/u01/app/oracle/product/11.1.0/db_1/jdk1.6.0_11 Также нужно подредактировать файл $OC4J_HOME/bin/oc4j. В этом файле нужно прописать переменную ORACLE_HOME, чтобы она указывала на папку $OC4J_HOME. Я сделал вот так (у меня глобальная переменная ORACLE_HOME указывает на /u01/app/oc4j): ######################################################### ########## START CONFIGURATION SECTION ################## ######################################################### ORACLE_HOME=/u01/app/oc4j J2EE_HOME=$ORACLE_HOME/j2ee/home
- Создадим таблицы для нашего приложения:
Создадим пользователя scott: create user scott identified by tiger;
grant connect,resource to scott;
Наше приложение будет демонстрировать применение сервлетов для загрузки и выгрузки мультимедийных данных в и из базы данных. Пользователи получают доступ к фотоальбому для просмотра содержимого фотоальбома, включая предпосмотровые (thumbnail) версии полноразмерных изображений. Доступна также возможность загрузки фотографий в альбом. Наше приложение будет использовать таблицу photos и последовательность (sequence) photos_sequence. Создадим их CREATE TABLE photos( id NUMBER PRIMARY KEY,
description VARCHAR2(40) NOT NULL,
location VARCHAR2(40),
image ORDSYS.ORDIMAGE,
thumb ORDSYS.ORDIMAGE ) tablespace USERS
--
-- store full-size images and thumbnail images as SecureFile LOBs
--
LOB(image.source.localdata) STORE AS SECUREFILE
LOB(thumb.source.localdata) STORE AS SECUREFILE;
CREATE SEQUENCE photos_sequence;
Типы данных для столбцов image и thumb определены как Oracle Multimedia image объекты. Они буду содержать соответственно полноразмерную и уменьшенную версии изображения.
- В поставке Examples у нас уже есть написанное приложение для Oracle Multimedia и оно находится в папке $ORACLE_HOME/ord/http/demo/servlet. В этой папке есть файл README.TXT. В нем описано как проинсталлировать это приложение.
- Отредактируйте файл $ORACLE_HOME/ord/http/demo/servlet/PhotoAlbumServlet.java, введя корректную информацию для подключения к базе:
private final static String JDBC_CONNECT_STRING =
"jdbc:oracle:thin:@localhost:1521:orcl"; // JDBC Thin driver
private final static String JDBC_USER_NAME = "scott";
private final static String JDBC_PASSWORD = "tiger";
- Скомпилируйте файл PhotoAlbumServlet.java и полученный PhotoAlbumServlet.class
/u01/app/oracle/product/11.1.0/db_1/jdk1.6.0_11/bin/javac -cp $ORACLE_HOME/ord/jlib/ordhttp.jar:$ORACLE_HOME/ord/jlib/ordim.jar: $ORACLE_HOME/jdbc/lib/ojdbc6.jar:$ORACLE_HOME/sqlj/lib/runtime12.jar: $ORACLE_HOME/oc4j/j2ee/home/lib/servlet.jar PhotoAlbumServlet.java
- Cкопируйте полученный файл в папку $OC4J_HOME/j2ee/home/default-web-app/WEB-INF/classes
- Cкопируйте также уже заранее скомпилированный класс файл PhotoAlbumRequest.class в папку $OC4J_HOME/j2ee/home/default-web-app/WEB-INF/classes
- Скопируйте из папки $ORACLE_HOME/ord/jlib в $OC4J_HOME/j2ee/home/lib/ 2 файла: ordim.jar и ordhttp.jar.
- В файл $OC4J_HOME/j2ee/home/config/application.xml добавьте строки для ссылки на библиотеки
<library path="../../home/lib/ordim.jar" /> <library path="../../home/lib/ordhttp.jar" />
- В файле $OC4J_HOME/j2ee/home/default-web-app/WEB-INF/web.xml необходимо прописать mapping для сервлета:
<servlet>
<servlet-name>PhotoAlbumServlet</servlet-name>
<servlet-class>PhotoAlbumServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PhotoAlbumServlet</servlet-name>
<url-pattern>/PhotoAlbumServlet</url-pattern>
</servlet-mapping>
- Пользователем root разрешите запуск oc4j:
chmod a+x $OC4J_HOME/bin/oc4j
- Запустите OC4J
$OC4J_HOME/bin/oc4j -start
- Зайдите через Internet Explorer в альбом
http://server:8888/PhotoAlbumServlet
|
|