Программирование >>  Oracle 

1 ... 279 280 281 [ 282 ] 283 284 285 ... 469


interMedia 1259

Как работает компонент interMedia Text

В этом разделе описано, как реализован компонент interMedia Text и что дает его использование.

Как уже упоминалось, компонент interMedia Text создан с использованием стандартного механизма расширения Oracle. С помощью соответствующих средств команда разработчиков компонента interMedia Text смогла добавить в СУБД Oracle специфический тип индекса для текста. Внимательней присмотревшись к используемым объектам базы данных, можно приподнять занавес и получить представление о том, как реализован этот компонент. Объекты базы данных, составляющие компонент interMedia Text, всегда принадлежат пользователю CTXSYS:

SQL> connect ctxsys/ctxsys Connected.

SQL> select indextype name, implementation name 2 from user indextypes;

INDEXTYPE NAME IMPLEMENTATION NAME

CONTEXT TEXTINDEXMETHODS

CTXCAT CATINDEXMETHODS

Как видите, в схеме, которой принадлежит компонент interMedia Text, имеется два типа индексов. Один из индексов, CONTEXT, знаком большинству пользователей компонента interMedia Text. Второй индекс, ГХСАТ, - это индекс для каталога, обеспечивающий подмножество возможностей, доступных при использовании индекса CONTEXT. Индекс для каталога, появившийся в версии Oracle 8.1.7, идеально подходит для текстовых данных, представляющих собой небольшие фрагменты текста.

SCJ> select libraryname, filespec, dynamic fm userlibraries;

LIBRARY NAME FILE SPEC D

DR$LIB N

DRSLIBX O:\Oracle\Ora81\Bin\oractxx8.dll Y

Как видите, с компонентом interMedia Text связаны две библиотеки. DRSLIB не является динамически компонуемой и представляет собой библиотеку проверенного кода в самой СУБД Oracle. DRSLIBX - это разделяемая, динамически компонуемая библиотека, зависящая от соответствующей операционной системы. Поскольку этот запрос был выполнен к базе данных, работающей в среде Windows, имя файла, содержащего эту разделяемую библиотеку, отражает особенности Windows. Если выполнить такой же запрос в среде UNIX, результат будет другим. Эти библиотеки специально предназначены для компонента interMedia Text. Они содержат набор методов, позволяющих ядру СУБД Oracle обрабатывать соответствующие индексы interMedia Text.

SQL> select operator name, number of binds from user operators;

0PERATOR NAME NUMBER OF BINDS

CATSEARCH 2



1260

Глава 17

CONJNS SCORE

В рамках механизма расширения можно также создавать уникальные объекты ба: данных - операторы. Оператор используется индексом; с кажжд1м оператором ассоциируется ряд связываний (bindings). Во многом аналогично языку PL/SQL, где можно определять функции с одинаковыми именами, но с различными типами параметров (сигнатурой), механизм расширения позволяет определить оператор, соответствующий различным пользовательским методам, в зависимости от сигнатуры использования.

SQL> select distinct method name, type name from user method params order by 2 type name;

METHOD NAME

TYPE NAME

ODCIGETINTERFACES

ODCIINDEXALTER

ODCIINDEXCREATE

ODCIINDEXDELETE

ODCIINDEXDROP

ODCIINDEXGETMETADATA

ODCIINDEXINSERT

ODCIINDEXTRUNCATE

ODCIINDEXUPDATE

ODCIINDEXUTILCLEANUP

ODCIINDEXOTILGETTABLENAMES

RANK

ODCIGETINTERFACES

ODCIINDEXALTER

ODCIINDEXCREATE

ODCIINDEXDROP

ODCIINDEXGETMETADATA

ODCIINDEXTRUNCATE

ODCIINDEXUTILCLEANUP

ODCIINDEXUTILGETTABLENAMES

ODCIGETINTERFACES

21 rows selected.

CATINDEXMETHODS CATINDEXMETHODS CATINDEXMETHODS CATINDEXMETHODS CATINDEXMETHODS

CATINDEXMETHODS CATINDEXMETHODS CATINDEXMETHODS CATINDEXMETHODS CATINDEXMETHODS CATINDEXMETHODS

CTX FEEDBACK ITEM TYPE

TEXTINDEXMETHODS TEXTINDEXMETHODS TEXTINDEXMETHODS TEXTINDEXMETHODS TEXTINDEXMETHODS TEXTINDEXMETHODS TEXTINDEXMETHODS TEXTINDEXMETHODS TEXTOPTSTATS

После просмотра этих результатов становится понятным, как разработчик мсж использовать механизм расширения в базе данных Oracle. С каждым типом ассоциированы наборы поименованных методов, которые механизм расширения различает по уникальным именам. Например, методы, связанные с поддержкой индекса -ODCIIndexInsert, ODCIIndexUpdate и ODCIIndexDelete, вызываются СУБД Oracle создании, изменении или удалении данных, связанных с индексом. Таким образом, при необходимости вставки новой строки в индекс interMedia Text ядро Oracle вызывает метод, ассоциированный с ODCIIndexInsert. Это специально созданная подпрограмма, выполняющая необходимые операции с индексом interMedia Text, а затем уведомляющая СУБД Oracle о завершении обработки.

Ознакомившись с основами реализации компонента interMedia Text, давайте рассмотрим некоторые из объектов базы данных, связываемые с этим специализированным индексом interMedia Text при его создании в базе данных.



interMedia

1261

SQI> select tablename

2 from usertables

3 where tablename like %MEXT%;

TOBLE NAME

MYTEXT

SQL> create index mytext idx

2 on mytext(thetext)

3 indextype is ctxsys.context

Index created.

SQL> select table name

2 from usertables

3 where tablename like %MEXT%;

TAB NAME

DRSMYTEXTIDXSI DRSMYTEXTIDXSK DRSMYTEXTIDXSN DRSMYTEXTIDXSR

Мы начали сеанс SQL*Plus с запроса к представлению USER TABLES, выбирающего все имена таблиц, содержащие подстроку MYTEXT. После создания таблицы MYTEXT и индекса interMedia Text по столбцу этой таблицы оказывается, что имя пяти таблиц, включая исходную, содержит эту подстроку.

Таким образом, при создании индекса interMedia Text автоматически создается еще чет1ре таблицы. Имена этих таблиц всегда будут иметь префикс DRS, за которым следует имя созданного индекса и один из суффиксов - $I, $К, $N или $R. Соответствующие таблицы всегда создаются в той же схеме, что и индекс interMedia Text. Давайте подробнее рассмотрим их структуру.

SQL> desc dr$mytext idx$i;

Name Null? Type

TOKEN TEXT NOT NULL VARCHAR2(64)

TOKEN TYPE NOT NULL NUMBER(3)

TOKEN FIRST NOT NULL NUMBER (10)

TOKEN ST NOT NULL NUMBER(10)

TOKEN COUNT NOT NULL NUMBER(10) TOKEN INFO BLOB

SQL> desc dr$mytext idx$k;

Name Null? Type

DOCID NUMBER(38)

TEXTKEY NOT NULL ROWID



1 ... 279 280 281 [ 282 ] 283 284 285 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика