· Ihre Datenbank besser in Wert setzen Nutzung von Oracle Text, Multimedia, XML DB und TimesTen...
Transcript of · Ihre Datenbank besser in Wert setzen Nutzung von Oracle Text, Multimedia, XML DB und TimesTen...
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 | [email protected]
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 [email protected]
• Dokumentation
http://otn.oracle.com
• Technische Foren
http://forums.oracle.com
• Diverse Blogs, u.a. von Carsten Czarski