· ihre datenbank besser in wert setzen nutzung von oracle text, multimedia, xml db und timesten...

Post on 30-May-2019

216 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

<Insert Picture Here>

Ihre Datenbank besser in Wert setzenNutzung von Oracle Text, Multimedia, XML DB und TimesTen

Karin Patenge | Oracle Deutschland B.V. & Co. KG | karin.patenge@oracle.com

DOAG Regionalgruppentreffen Berlin-Brandenburg | 7. September 2011 | Potsdam

<Insert Picture Here>

Agenda

• Motivation

• Volltextsuche und mehr mit Oracle Text

• Real-time Verarbeitung mit Oracle TimesTen

• Objektrelationales Know How in der Datenbank

• Multimediale Inhalte

• XML

• F & A

• Weiterführende Informationen

Motivation

• Strukturierte Daten organisiert in Relationen

(Tabellen)

• Immer größerer Anteil an semi- und unstrukturierten

Daten komplexe Informationen

• Optimieren der Datenorganisation

<Insert Picture Here>

Volltextsuche und mehr mit

Oracle Text

Oracle TEXTWarum macht Oracle das?

Strukturierte Daten Textdokumente andere Daten

Viele Datenhaltungs-Systeme

Große Aufwände zur Integration

Interaktion sehr langsam

Einstieg in Oracle TEXTIn Datenbank integrierte Volltextrecherche

• Linguistische Suchen, Mustersuchen, Suchen mit Booleschen Operatoren, Abschnittssuchen bei XML und HTML-Formaten, ...

• Abfrage mit SQL

• CONTAINS-Funktion

• Kombinierbar mit relationalen Abfragen

• Relevanz-Ranking anhand Wort-Häufigkeiten (inverse Häufigkeit)

• SCORE()-Funktion

• Ergebnis-Aufbereitung

• Highlighting

• "Keyword-in-Context„ (Suchstring wird im Result in Tags eingeschlossen)

select score(1), dokument

from dokument_tab

where CONTAINS(dokument, 'Software AND Oracle')>0

/

Oracle TEXTEine Beispielapplikation: Trefferliste

Oracle TEXTIndizierung

• Unterstützung aller gängigen Datentypen• XMLTYPE, VARCHAR2, CLOB, BLOB, Database Filesystem,

SecureFile (encrypt, compress ...)

• Filter bei Binärdaten möglich

• Auch mehrere Indizes pro Tabelle

SQL> create index idx_textindex

2 on dokument_tab (dokument)

3 indextype is CTXSYS.CONTEXT

4 /

Index created.HINTERGRUND:

• Extensible Indexing Framework

• Spatial, TEXT, Expression Filter• Eigene Indizes möglich

Oracle TEXTAbfragemöglichkeiten

• Exakte Wort/Phrasensuche... where contains(text,'Hund')>0

• Logische Kombinationen... where contains(text,'Hund AND Katze')>0

• Wildcard-Suche ... where contains(text,'Hu%d AND Kat_e')>0

• Namenssuche... where contains(text,'NDATA(name, Hunt)')>0

• Fuzzy matching ... where contains(text,'?Hunt')>0

• Multilinguale Stammsuche... where contains(text,'$läuft' )>0

Oracle TEXTWeitere Abfragemöglichkeiten

• NEAR-Operator... where contains(text,'near(Hund, Katze), 4')>0

• Suche in Sektionen, Sätzen und Paragraphen (XML)... where contains(text,'Hund WITHIN TITEL')>0

Score-bezogene Funktionen... where contains(text,'Hund MINUS Katze')>0

... where contains(text,'Hund OR Katze*3‚)>0

• Score-bezogene Operationen auf Ergebnislisten... where contains(text,'Hund’ )>10

• ISO 2788 konformer Thesaurus... where contains(text,'SYN(Hund,[thes]‘)>0

• Soundex... where contains(text,'!Smythe')>0

Oracle Text Name Search Feature

• Namenssuche

• mit Rücksicht auf verschiedene Schreibweisen

• in unterschiedlichen Kulturen

• Anwendung eines Regelwerks

• Basis ist Oracle TEXT

• Volltextindex nötig – User Data Store für relationale Daten

• SQL-Funktion CONTAINS mit NDATA-Operator

SQL> select * from names

where contains(name, 'NDATA(name,Patenga)') > 0

ID NAME

---------- ----------------------------------------

4 Karin Patenge

Unscharfe NamenssucheOracle 11.2.0.2

Progressive Relaxation

• Was ist das?• Erweiterung der Textquery ...

• ... schrittweise ...

• ... bis die gewünschte Trefferzahl erreicht ist.

SQL> select score(1), title from test_table

where contains (

dokument,

'<query>

<textquery>

<progression>

<seq>Hund and Katze</seq>

<seq>Hund or Katze</seq>

<seq>Hund? or Katze?</seq>

:

Oracle TEXTDatenquellen und Datastores

• DIRECT_DATASTORE

• MULTI_COLUMN_DATASTORE

• DETAIL_DATASTORE

• FILE_DATASTORE

• URL_DATASTORE

• NESTED_DATASTORE

• USER_DATASTORE

GrundlagenAufbau eines TEXT Index

• DR$[Indexname]$I

• Token-Tabelle: Enthält alle Tokens mit (binären)

Informationen über die Dokumente, in denen sie vorkommen.

• DR$[Indexname]$R

• Mapping-Tabelle DOCID ROWID

• DR$[Indexname]$K

• Mapping-Tabelle ROWID DOCID

• DR$[Indexname]$N

• Negativliste: Enthält alle gelöschten DOCID's

Aufbau eines Oracle TEXT-IndexToken-Tabelle ($I)

• Tabellenaufbau

Name Null? Type

----------------- -------- ------------

TOKEN_TEXT NOT NULL VARCHAR2(64)

TOKEN_TYPE NOT NULL NUMBER(3)

TOKEN_FIRST NOT NULL NUMBER(10)

TOKEN_LAST NOT NULL NUMBER(10)

TOKEN_COUNT NOT NULL NUMBER(10)

TOKEN_INFO BLOB

Oracle TEXTVerhalten bei DML

• Besonderheit ...

• Idealfall: In-Place-Pflege in der Token-Tabelle

• Aber: Zu teuer!

• Daher:

• INSERT: PENDING-Tabelle

• DELETE: Negativliste

• UPDATE: DELETE und INSERT

• Zusätzliche Aufgaben:

• Index-Synchronisierung

• Index-Optimierungen

Oracle TEXT MonitoringAllgemeines

• Optimizer-Statistiken sammeln (empfohlen)• DBMS_STATS.GATHER_..._STATS

• PL/SQL Paket CTX_REPORT• DESCRIBE_INDEX

• INDEX_SIZE

• INDEX_STATS

• Ausgabeformate• Plain TEXT

• XML

ACHTUNG:

• Vollständiger Index-Scan

• Lange Laufzeit bei großen Indizes

<Insert Picture Here>

Real-Time Verarbeitung mit

Oracle TimesTen

Was ist TimesTen?

• TimesTen In-Memory Database

und In-Memory Database Cache

• Speicherresidente relationale Datenbank

• Mehrbenutzer- und Multi-Threading-Unterstützung

• Optimiertes Speicherlayout und -algorithmen

• Transaktional (ACID)

• Synchrone oder asynchrone Festplattenprotokollierung

• Zugriffschnittstellen SQL und PL/SQL

• JDBC, ODBC, ADO.NET, OCI, Pro*C/C++

• Datentypen kompatibel mit Oracle DB

• Anwendungsfälle

• Echt-Zeit-Antwortzeiten und hohe Arbeitslasten

http://www.youtube.com/watch?v=MoifpZh-lIw

In-Memory Database Architecture

TimesTen und IMDB Features und Use

Cases

• TimesTen API Support

• Access Control

• Database Connectivity

• Durability

• Query Optimization

• Concurrency

• Automatic Data Aging

• Globalization Support

• Administration / Utilities

• Replication

• IMDB Cache

• TimesTen als

• Primary Database für

Echtzeitanwendungen

• Data Utility für performanzkritische Teile

einer Anwendung

• Für integrierte Datenhaltung aus

Anwendungssicht („Central data

repository“)

• IMDB Cache genutzt als

• Real-Time Manager für

„Zusammenspiel“ mit Oracle DB

• Read-Only Cache

• Updatable Cache

• Distributed Cache

TimesTen In-Memory DatenbankPersistenz und Echtzeitreplikation

• Transaktionen persistieren

• Asynchron und synchron

• Hohe Performanz

• Bei gesicherten Latenzzeiten

• Unterschiedliche Topologien

• Active /Standby

• Active/Active für

Lastverteilung

• Optional Read-Only

subscribers

• Online Upgrades möglich

• Keine Downtimes

In-Memory Database Cache

• Cache Group

• Beschreibt wie Daten aus der

Oracle DB im Cache abgelegt

werden

• Alle / Subsets von Zeilen und

Spalten

• Cache Tables

• Reguläre DB Tabellen in TimesTen

• Joins/Search, insert/update/delete

CREATE CACHE GROUP

FROM OWNER.TAB1 (COL1, COL3),

OWNER.TAB2 (COL2, COL4)

...

WHERE

Vergleich RDBMS und TimesTen

Antwortzeiten

Oracle TimesTen In-Memory DB 11g Intel Xeon 5670, 2 CPUs, 6 cores per CPU Solaris 10

Satz lesen Satz ändern

Mik

rose

kun

de

n

Durchschnittliche Antwortzeiten mit TimesTen

Antwortzeiten im Vergleich

TimesTen aus Sicht der

Anwendungsentwicklung

Schritt für Schritt Vorgehen

1. Installation der TimesTen Software auf App Server

2. Skript ausführen zum Anlegen des TimesTen Schemas

in der Oracle DB

3. Definition und Anlegen der TimeTen Cache Datenbank

4. Anlegen des gleichen Oracle Nutzers in TeminTen

5. Definition und Anlegen von Cache Groups

6. Pre-Load der Cache Tables

7. Kopieren der PL/SQL Packages und Subprograms

nach TimesTen

8. Überprüfen und ggf. Anpassen des Anwendungscodes

für Kommunikation mit TimesTenhttp://download.oracle.com/otn_hosted_doc/timesten/1121/quickstart/index.html

TimesTen nutzen mit SQL Developer

LizenzsichtEin Blick auf die Oracle Preisliste

• Standalone Variante

(für Anwendungen mit „Embedded Database“)

• TimesTen In-Memory Database

• Option zur Oracle Datenbank

• In-Memory Database Cache (IMDB)

• Replikation mit der Oracle Datenbank

• Kostet das Gleiche

• NUP oder CPU Metrik

<Insert Picture Here>

Objekt-relationales Know How

in der Oracle Datenbank

DatenorganisationNicht-relationale Daten in der Oracle DB

• Objekt-“Know How“ in der Datenbank

Art der Daten Oracle-Datentyp

XML-Dokumente XMLTYPE

Räumliche (Geo-)Daten SDO_GEOMETRY, SDO_GEORASTER

Texte ORDDOC, CLOB

Bilder ORDIMAGE, ORDDOC, BLOB

Audio ORDAUDIO, ORDDOC

Video ORDVIDEO, ORDDOC

Medizinische Bilder ORDDICOM

URL UriType (HTTPUriType)

Objekte, eigene Definitionen Objekttypen

Daher...

• Einführung mit Oracle DB Version 8 (1997) von

objekt-relationalen Datentypen

• XML Unterstützung beginnend mit Oracle DB 9i

(2001)

• Modellierung komplexer Informationen der realen

Welt

• Konzepte aus Objektorientierung in die DB „übersetzt“

• Typen

• Instanzen

• Vererbung

• Methoden ...

Oracle Domain IndexDefinition

• Applikationsspezifische Indizes

• Grundlage ist das Extensible Indexing Framework

• Enthält Operatoren, die den Indextyp unterstützen

Art der Daten Index

Index für räumliche Daten MDSYS.SPATIAL_INDEX

Index für Image Signatures ORDSYS.ORDIMAGEINDEX

Index für Texte CTXSYS.CONTEXT

XML Index XDB.INDEX

AnwendungenEine Auswahl

Volltextrecherche, Klassifizierung und Clustering,

Kataloganfragen, Räumliche Suchen,

Geokodierung, Anfragen im RDF Modell, XML

Anfragen mit SQL, Metadatenextraktion von

Bildern, „Thumbnail“-Generierung, RSS Feeds

auslesen mit Uritypes, XQuery-Anwendungen,

relationale Daten als XML ausgeben, relationale

Sichten auf XML Daten

Integration

• SQL-Beispiel

<Insert Picture Here>

Oracle Multimedia

im Überblick

Oracle MultimediaBilder, Audio, Video ...

• Erweitert Oracle DB um Management von Medien-Daten

• Seit 14 Jahren Feature der DB

• „Media-Know How" in der Datenbank• z.B. Einfache Bildbearbeitung

• Skalieren, Drehen, Spiegeln, Aufhellen,Abdunkeln, Kontraste, Watermarking

• Metadatenextraktion

• Erzeugen von Vorschaubildern (Thumbnails)

• SQL und Java-API

• Spezialfall: Multimedia DICOM• Umgang mit Medizinischen Bildern

und deren Metadaten

• Anonymisieren, Konvertieren, ...

Der Datentyp ORDIMAGE

• Unterstützung für gängige Bildformate und mehr

• JPEG, GIF, TIFF, PNG, BMP, ...

SQL> desc ordimage

Name Null? Type

--------------------- -------- ----------------

SOURCE ORDSYS.ORDSOURCE

HEIGHT NUMBER(38)

WIDTH NUMBER(38)

CONTENTLENGTH NUMBER(38)

FILEFORMAT VARCHAR2(4000)

CONTENTFORMAT VARCHAR2(4000)

COMPRESSIONFORMAT VARCHAR2(4000)

MIMETYPE VARCHAR2(4000)

OperationenBeispiel Thumbnail berechnen

• Befehl "maxScale"

declare

v_new_image blob;

begin

dbms_lob.createtemporary(v_new_image, true, dbms_lob.call);

ordimage.processcopy(

imageblob => get_image_blob(), -- Ausgansbild holen

command => 'maxscale 75 75', -- "maxScale" Operator

dest => v_new_image -- Ergebnis in BLOB schreiben

);

do_something_with_blob(v_new_image);

dbms_lob.freetemporary(v_new_image);

end;

OperationenBeispiel Metadaten extrahieren

• Funktion GETMETADATA

• Rückgabe als XMLTYPE

• Beispiel: Minimal-MetadatenSQL> select column_value

2 from table(ordimage.getmetadata(get_image_blob(), 'ALL'));

COLUMN_VALUE

--------------------------------------------------------------------------------

<ordImageAttributes xmlns="http://xmlns.oracle.com/ord/meta/ordimage" xmlns:xsi=

"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.ora

cle.com/ord/meta/ordimage http://xmlns.oracle.com/ord/meta/ordimage">

<height>800</height>

<width>600</width>

<contentLength>80533</contentLength>

<fileFormat>JFIF</fileFormat>

<contentFormat>24BITRGB</contentFormat>

<compressionFormat>JPEG</compressionFormat>

<mimeType>image/jpeg</mimeType>

</ordImageAttributes>

BeispielBildarchiv mit Application Express (APEX)

Der Datentyp ORDAUDIO

• ... Audio-relavante Attribute: encoding, samplingRate,

numberOfChannels, sampleSize, compressionType,

audioDuration

• Methoden / Operatoren

• z.B. get-/set-Funktionen bzw. –Prozeduren, import, export,

processAudioCommand, ...

SQL> desc ordaudio

Name Null? Type

--------------------- -------- ----------------

SOURCE ORDSYS.ORDSOURCE

DESCRIPTION VARCHAR2(4000)

FORMAT VARCHAR2(31)

MIMETYPE VARCHAR2(4000)

COMMENTS CLOB

...

Der Datentyp ORDVIDEO

• ... Video-relavante Attribute: weight, height, frameRate,

frameResolution, videoDuration, numberOfFrames,

compressionType, numberOfColors, bitRate

• Methoden / Operatoren

• z.B. Import, Export, getcontentLength, processVideoCommands,

get-/set-Funktionen bzw. -Prozeduren

SQL> desc ordvideo

Name Null? Type

--------------------- -------- ----------------

SOURCE ORDSYS.ORDSOURCE

DESCRIPTION VARCHAR2(4000)

FORMAT VARCHAR2(31)

MIMETYPE VARCHAR2(4000)

COMMENTS CLOB

...

<Insert Picture Here>

XML in der Datenbank

Oracle XML DBKurzprofil

• XML und SQL in einer Datenbank• Nahtlose Integration

• Standardkonform (W3C, SQL:2003...)• XML/SQL

• XQuery, XPath

• XML Schema, DOM, Namespaces, XSLT, DOM, WebDAV

• 1. DB-seitige Implementierung der XQuery Spezifikation (seit 10g R2)

• Verfügbar ab Oracle 9i Release 2

• Alle Datenbankeditionen

• Keine zusätzliche Installation erforderlich

Transformationen

Recherchen Relationale Sichten

XML- Sichten

SQL

FTP

HTTP / WebDAV

SQL*Net

XPath

XQuery

Oracle XML DB

Oracle XML DBKurzprofil

XML Views und das XML DB RepositoryAbrufen der Inhalte per HTTP oder FTP

• Virtuelle Dateien: Inhalte kommen aus View

XML DB: Zugriffe

ftp> open 192.168.2.140 2100

Connected to 192.168.2.140.

220- kpatenge-linux-140

Unauthorised use of this FTP server is prohibited and may be subject to

civil and criminal prosecution.

220 kpatenge-linux-140 FTP Server (Oracle XML DB/Oracle Database) ready.

ftp> user xmldemo xmldemo

331 pass required for XMLDEMO

230 XMLDEMO logged in

ftp> dir

200 PORT Command successful

150 ASCII Data Connection

drw-r--r-- 2 SYS oracle 0 AUG 09 15:48 home

drw-r--r-- 2 SYS oracle 0 AUG 10 11:14 i

drw-r--r-- 2 SYS oracle 0 AUG 30 17:57 public

drw-r--r-- 2 SYS oracle 0 AUG 09 15:48 sys

226 ASCII Transfer Complete

ftp: 238 bytes received in 0,03Seconds 7,93Kbytes/sec.

ftp>

SQL> select extract(object_value, '/nachricht/aktie').getstringval()

2 from "nachricht429_TAB" e;

XML_TITEL

-----------------------------------------------------------------------

<aktie xmlns="http://www.oracle.com/aktie/nachrichten.xsd" wkn="871460„

name="Oracle" reuters="ORCL" branche="Software"/>

<aktie xmlns="http://www.oracle.com/aktie/nachrichten.xsd" wkn="871460„

name="Oracle" reuters="ORCL" branche="Software"/>

<aktie xmlns="http://www.oracle.com/aktie/nachrichten.xsd" wkn="840400„

name="Allianz" reuters="ALV" branche="Versicherungen"/>

:

SQL>

XML DB Repository im SQL DeveloperSQL Developer

Datentyp XMLTYPE

• Verwendbar wie jeder andere Datentyp

• als Tabellenspalte

• in PL/SQL Logik

• XML-Know How in der Datenbank

• EXTRACT, EXTRACTVALUE *

• XSLTRANSFORM

• UPDATEXML

• APPENDCHILDXML

• SCHEMAVALIDATE

• ...

* Seit 11.2 „deprecated“. Funktionieren immer noch. Empfehlung ist die Verwendung der neuen Syntax XMLQUERY und XMLTABLE.

XML nativ speichern: Oracle XML DB Speicherungsformen

Verwendung XMLTYPE am Beispiel

-- Tabellen anlegen

create table xml_tab (doc xmltype)

xmltype column doc

store as [clob | object relational | binary];

-- Beispiel Objekt-relational Speicherung

create table order_tab (

id number(10),

order_doc xmltype)

xmltype column order_doc store as object relational

xmlschema „http://xmldb.oracle.com/purchaseOrder“

element „purchaseOrder“

Oracle XML DB: TextbasiertEin Blick hinter die Kulisse

SQL> select object_value from xml_text where rownum=1;

OBJECT_VALUE------------------------------------------------------------<PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http:/localhost:9021

1 Zeile wurde ausgewählt.

SQL> select e.xmldata from xml_text e where rownum=1;

XMLDATA------------------------------------------------------------<PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http:/localhost:9021

Oracle XML DB: ObjektrelationalEin Blick hinter die Kulisse

SQL> select object_value from xml_or where rownum=1;

OBJECT_VALUE------------------------------------------------------------<PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http:/localhost:9021

1 Zeile wurde ausgewählt.

SQL> select e.xmldata from xml_or e where rownum=1;

XMLDATA(SYS_XDBPD$, Reference, ACTIONS(SYS_XDBPD$, ACTION(SY------------------------------------------------------------XDBPO_TYPE(XDB$RAW_LIST_T('23FF01020084000088010035687474703A2F6C6F63616C686F73743A393032312F7075626C69632F584D4C44454D4F2F70757263686173654F726465722E787364000102030405060708'), 'ADAMS-20011127121044463PST', XDBPO_ACTIONS_TYPE(XDB$RAW_LIST_T('1301000000'), ...

Oracle XML DB: Binary XMLEin Blick hinter die Kulisse

SQL> select object_value from xml_binary where rownum=1;

OBJECT_VALUE------------------------------------------------------------<PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http:/localhost:9021

1 Zeile wurde ausgewählt.

SQL> select e.xmldata from xml_binary e where rownum=1;

XMLDATA------------------------------------------------------------9F01039E000000B203000000030001787369C85DA1DD0001C0340015687474703A2F6C6F63616C686F73743A393032312F7075626C69632F584D4C44454D4F2F70757263686173654F726465722E787364C01956E14144414D532D3230303131313237313231303434343633505354C83A7CC81AAAC004033F53434F....

Zugriffsoptionen

Daten-/ Dokumentzugriffe

Query-basiert Path-basiert

Verfügbare Sprachen /

XML Type APIs

• JDBC

• PL/SQL

• C

Objektrelational

SQL Repository

Verfügbare Sprachen / XML

Type APIs

• SQL (RESOURCE_VIEW

bzw. PATH_VIEW)

• FTP

• HTTP/WebDav

Speicherungsformen und Platzverbrauch

• 680 XML-Dokumente – Größe: ~ 10KB

TNAME MB

------------------------------ --------

PO_TAB_OR 4,4

PO_TAB_BIN_BASICFILE 2,2

PO_TAB_BIN_SECUREFILE 2,2

PO_TAB_BIN_SECUERFILE_COMPRESS 0,8

PO_TAB_CL_BASICFILE 5,9

PO_TAB_CL_SECUREFILE 7,4

PO_TAB_CL_SECUERFILE_COMPRESS 1,0

Binary XML

XML als CLOB

Objektrelational

Speicherungsformen und Platzbedarf

0

10

20

30

40

50

60

Platzbedarf 1 gr. Dokument Platzbedarf 680 kl. Dokumente

CLOB

OR

BINARY

Performance: 680 kleine DokumenteAntwortzeiten

0

1

2

3

4

5

6

7

8

9

XML speichern ganze Dokumente

lesen

einzelne

Dokumentknoten

Relationale View Update

Einzelknoten

CLOB

OR

BINARY

0

50

100

150

200

250

XML speichern ganze Dokumente

lesen

einzelne

Dokumentknoten

Relationale View Update

Einzelknoten

CLOB

OR

BINARY

E

R

R

O

R

Performance: 1 gr. Dkument (~55 MB)Antwortzeiten

XML erzeugen/abfragen in der Datenbank

• Verfügbare SQL/XML-Funktionen

9iR2 11gR2

APPENDCHILDXML

DELETEXML

DEPTH

EXTRACT

EXTRACTVALUE

INSERTCHILDXML

INSERTXMLBEFORE PATH

SYS _DBURIGEN

SYS_XMLAGG

SYS_XMLGEN

UPDATEXML

XMLAGG

XMLCAST

XMLXDATA

XMLCOLATTRVAL

XMLCOMMENT

XMLCONCAT

XMLDIFF

XMLELEMENT

XMLFOREST

XMLPARSE

XMLPATCH

XMLPI

XMLQUERY

XMLROOT

XMLSEQUENCE

XMLSERIALIZE

XMLTABLE

XMLTRANSFORM

Zugriff mit SQL

• EXTRACT, EXTRACTVALUE bzw.

XMLTABLE, XMLQUERY

-- Syntax seit Oracle 9i

select

id, extractvalue(xml, '/emps/@cnt') emp_cnt

from xmltest;

-- Optimierte Syntax seit Oracle 11.2

select

t.id, x.emp_cnt

from

xmltest t,

xmltable(

'for $i in /emps return $i'

passing xml

columns "EMP_CNT" number path '/emps/@cnt' ) x;

Zugriff mit SQLUmgang mit Hierarchien

• XMLSEQUENCE bzw. XMLTABLE

-- Syntax seit Oracle 9i

select

id,

extractvalue(xml, '/emps/@cnt') emp_cnt,

extractvalue(value(e), '/emp/@ename') ename,

extractvalue(value(e), '/emp/@sal') sal

from xmltest,

table(xmlsequence(extract(xml, '/emps/emp'))) e;

-- Standardisierte Syntax

select

t.id, x.emp_cnt, e.ename, e.sal

from

xmltest t,

xmltable( -- FLOWR

'for $i in /emps

return $i'

passing xml

columns "EMP_CNT" number path '/emps/@cnt' ) x,

xmltable(

'for $i in /emps/emp return $i'

passing xml

columns "ENAME" varchar2(20) path '/emp/@ename',

"SAL" number path '/emp/@sal' ) e;

Zugriff mit SQLBearbeiten von XML-Dokumenten

• DML-Kommandos für XML

• updateXML()

• insertChildXML()

• appendChildXML()

• insertXMLbefore()

• deleteXML()

• Piecewise Updates = Performance!

• Bei objektrelationaler Speicherung

XML Schema in der Datenbank

• "Registrierung"

• PL/SQL Paket (DBMS_XMLSCHEMA)

• Oracle Enterprise Manager

• Nachbildung der XML-Strukturen

• Oracle Objekttypen

• XML-Speicherung als "Objekt"

XML Indizieren:Möglichkeiten bis Oracle10g

• B-Tree Index (Nur objektrelationale Speicherung)

• Indizierung einzelner Knoten oder Attribute

• Verhalten wie "normale" B-Tree Indizes; sehr performant

• Function Based Index (Alle Speicherungsformen)

• Indizierung von 1:n-Beziehungen nicht möglich

• Oracle TEXT-Index (Alle Speicherungsformen)

• Volltextrecherche, aber keine Bereichssuche

• Für "einfaches" Indizieren eines Knotens zu aufwändig

• Für Experten: CTXXPATH-Index

• Sollte nicht mehr genutzt werden

AnfrageoptimierungQuery Rewrite

SELECT

extractvalue(...),

...

FROM PURCHASEORDER_TAB

Objektrelational gespeicherte

XML-Dokumente

SELECT

SYS_NC000015$,

...

FROM PURCHASEORDER_TAB

Query Rewrite

PurchaseOrder

LineItem

User

PurchaseOrder

1

* LineItem

User

PurchaseOrder

1

* LineItem

User

PurchaseOrder

1

* LineItem

User

PurchaseOrder

1

* LineItem

User

Ausführung ohne Query-RewriteDOM Parsing

XML-Dokument

DOM-Baum

wkn

SELECT

extractvalue(...),

...

FROM PURCHASEORDER_TAB

SpeicherungsformenEntscheidungsbaum

1. Zugriffe Nur auf ganze Dokumente

2. XML Schema ...

Auf einzelne Dokumentknoten

<document id="2"><element date="2007-0

<action><member name="Ora

:

Textbasierte

Speicherung

Nicht vorhanden

3. Flexibilität ...

Vorhanden

110100100100111000100100101010111010001110111001000111100001111100010011110100001000111100011100011111001

Binary XML

XML Schemawird sich

häufig ändern

XML Schemawird stabil sein

Objektrelational

„Daumenregel“Daten- oder Dokumentzentrische Sicht

Dokumentzentrisch

Datenzentrisch

SpeicherungsformenZusammenfassung

• Drei Fragen führen zur richtigen Speicherungsform

• Zugriffe auf ganze Dokumente oder auf Dokumentteile?

• Liegt ein XML Schema vor oder nicht?

• Wird sich das XML Schema ändern oder stabil bleiben?

• Richtige Speicherungsform ist entscheidend!

• Performance-Unterschied: Faktoren

• Durch Tuning (Index, I/O) nicht einzuholen

<Insert Picture Here>

Weiterführende

Informationen

Workshops, Webcasts und Links

• Oracle TimesTen Hands-on Workshop im Dez/Jan

2011/12 in Potsdam

• Oracle Text und Oracle XML DB Hands-On Workshop im

Dez/Jan 2011/12

• Vertiefende Webcast und weitere Workshops zu

Einzelthemen auf Anfrage bei karin.patenge@oracle.com

• Dokumentation

http://otn.oracle.com

• Technische Foren

http://forums.oracle.com

• Diverse Blogs, u.a. von Carsten Czarski

top related