|
Программирование >> Oracle
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
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |