8. Design: Width and Height and … 1 3 4 5 2 X Y 6 Z Content Height: minOccurs="0" maxOccurs=“unbounded” Content Width: type="xs:string“, restriction…? Content Distribution: histogram, statistics, skew, cardinality ?
9. XMLType “Under the Hood” DOM Tree Model XQuery SQL/XML XMLType Abstraction Procedural XQuery DB XQuery XVM (use “no query rewrite”) XQuery Rewrite Pushdown SQL Execution XMLIndex Streaming XPath Evaluation RelationalAccess Methods Binary XML Object-Relational Relational Storage Secure Files Source OOW 2010 presentation S317428: Building Really Scalable XML Applications with Oracle XML DB and Oracle Text
17. XMLType In Memory (document) CLOB (document) Object Relational (data) Binary XML (data)
18. XMLType Storage Models CLOB Default until 11.2.0.2.0 Non-Schema Based Binary XML Oracle 11 and Onwards Schema and Non-Schema Based Object Relational (+Hybrid) Nested Tables, Types, Varray’s Schema Based
19. Storage Index Defaults (xmltype) Binary XML / CLOB LOB Index Object Relational DBMS_XMLSCHEMA “OPTIONS” Oracle 10g: Index Organized Tables Oracle 11g: B-Tree Indexes xdb:annotations Storage type xdb:SQLType Storage Typexdb:ColumnProps / xdb:TableProps
20.
21.
22.
23.
24. Function-Based Index Deprecated in 11.2 Object Relational XMLType Storage (can be used, but shouldn’t, on CLOB) Performance wise the lesser option… SQL> CREATE INDEX function_based_index ON xml_data_table (extractValue(OBJECT_VALUE, '/Root/TextID'));
25. BTree / Bitmap Index (O.R.) Structured XML Data Ordered Collection Tables (OCT) ComplexTypes… “dot” notation using the “xmldata” pseudocolumn SQL> CREATE INDEX dot_notation_index ON xml_data_table ("XMLDATA". "TEXTID");
26. Syntax Index Alternatives SQL> CREATE INDEX function_based_again_idx ON xml_data_table (CAST("XMLDATA". "TEXTID“ as VARCHAR2(10))); SQL> CREATE INDEX oracle_11_applicable_only_index ON xml_data_tablexdt (XMLCast(XMLQuery ('$i/Root/TextID' PASSING xdt.OBJECT_VALUE as "i" RETURNING content) as VARCHAR2(10)));
27. Oracle Text Index Unstructured Data in XML CLOB storage XML part in Object Relational XML Secondary index on XMLIndex Can only index XML data TEXT nodes Result Set Interface (new in 11.2.0.2) Specify Query request and hit list requirements in XML SQL> CREATE INDEX oracle_text_index ON xml_data_table (OBJECT_VALUE) INDEXTYPE IS CTXSYS.CONTEXT;
28. Index Methods (11.1) BTree Index BTree I BT bookstore Secondary Oracle Text Index Function based Index (XPath) book whitepaper Unstructured XMLIndex title author author chapter title author id paragraph content content
29. XML Document contains: Semi Structured Data and Structured Data Supports searching and fragment extraction When XPath queried is not known beforehand XMLType CLOB or Binary XML content If you use an XMLIndex and/or combine it with Structured XMLIndex(es) Usage: Unstructured XMLIndex
30. Simple: Unstructured XMLIndex SQL> CREATEINDEXxmlindex_idx ON “XMLTYPE_COLUMN"(xdata) INDEXTYPEISXDB.XMLINDEX; Index created. SQL> CREATEINDEXxmlindex_idx ON “XMLTYPE_TABLE"(object_value) INDEXTYPEISXDB.XMLINDEX; Index created.
31. Creating Unstructured XMLIndex CREATEINDEXXMLIDX ON XMLBINARY_TAB (object_value) INDEXTYPEISXDB.XMLIndex PARAMETERS ('PATHS (INCLUDE (/ROOT/ID /ROOT/INFO/INFO_ID ) NAMESPACEMAPPING(xmlns="http://localhost/xmlschema_bin.xsd") ) PATH TABLE path_table(TABLESPACE XML_DATA) PATH ID INDEX pathid_idx (TABLESPACE XML_INDX) ORDER KEY INDEX orderkey_idx (TABLESPACE XML_INDX) VALUE INDEX value_idx (TABLESPACE XML_INDX) ASYNC (SYNC ALWAYS) STALE (FALSE) ') PARALLEL LOGGING;
43. Index Methods (11.2) BTree Index BTree I BT bookstore Secondary Oracle Text Index Function based Index (XPath) book whitepaper Structured XMLIndex Unstructured XMLIndex title author author chapter title author id paragraph content content Highly Structured Islands of Data
44. With highly Structured Data Likely candidates: ComplexTypes Structured Islands of Data Can be nested, but officially only one level XMLTABLE “virtual” nested column hint Will create (multiple) “Content Tables” Multiple XPath defined same columns with different purpose They deliver relational performance…! Usage: Structured XMLIndex
45. Simple: Structured XMLIndex “XMLTABLE” Driven Syntax SQL> CREATE INDEX xmlindex_sxi on xml_data_table (xmlcol) indextype is xdb.xmlindex parameters ('GROUP employee_info_group XMLTABLEEMP_CONTENT_TABLE ' '/employees/emp' ' COLUMNS empidNUMBER(10) PATH ' 'id' ' '); Be aware ' '
49. NON Unique BTREE IndexYour Columns RID rowid YOUR column X Key RAW Not null RID rowid Key RAW Not null YOUR columns X CONTENT TABLE(s) YOUR columns X RID rowid Key RAW Not null
50. Structured XMLIndex (SXI) Content Table(s) BasedonXMLTABLEsyntax XMLTable construct canbenestedbut: “Only ONE XMLType column allowed” VIRTUAL column CanbemaintainedManually Secondairyindexespossible LOCAL parameter (partitioning) Structured XMLIndex f (x) Content Tables
51. Adding Structured Indexes SQL> ALTER INDEX xmlindex_sxi parameters ('ADD_GROUP GROUP my_new_group XMLTABLE xml_content_tab_new ' '/root/extra' ' COLUMNS extracol VARCHAR2(35) PATH ' 'new_element' ' ');
52. Mixed XMLIndex Options bookstore Secondary (text)Index Unstructured XMLIndex book whitepaper Structured XMLIndex Structured XMLIndex title author author paragraph title author id chapter content content
53. Mixed XMLIndex structures CREATE INDEX xmlindex on TEST_RANGE_XML (doc) indextype is xdb.xmlindex PARAMETERS (' PATH TABLE path_table PATHS (EXCLUDE(/root/ElementInfo)) '); BEGIN DBMS_XMLINDEX.registerParameter ('StructuredXML', 'ADD_GROUP GROUP ElementInfo XMLTABLExml_cnttable_valueinfo ' '/root/ElementInfo' ' COLUMNS ValueInfo VARCHAR2(100) PATH ' 'ValueInfo' '); END; / ALTER INDEX xmlindex PARAMETERS('PARAM StructuredXML');
54. XMLIndex Maintenance ALTER INDEX XMLIndex Parameter Changes DBMS_XMLINDEX.DROPPARAMETER DBMS_XMLINDEX.MODIFYPARAMETER DBMS_XMLINDEX.REGISTERPARAMETER Manual Synchronizing an XMLIndex DBMS_XMLINDEX.SYNCINDEX Pending Tables
56. Syntax Awareness SYNC=ALWAYS Mandatory when Combined XMLIndex SYNC=MANUAL Locking STALE=FALSE | TRUE Hmmm… Empty XMLIndex tables OOPS I got my “XMLTABLE” Syntax etc. “wrong”
57. Notes on XMLIndex (1) Only ONE XMLIndex is allowed in a user schema Add extra XMLIndex structures (structured or unstructured) via ADD_GROUP syntax Only SYNC=ALWAYS is allowed while using mixed XMLIndex structures or add more than one
58. Notes on XMLIndex (2) You need the LOCAL parameter to create local partitioned XMLIndexes An XMLIndex on a HASH partitioned XMLType column or XMLType table, isnot (yet) allowed But you can create an Oracle Text Index on such structures
59. Recap True understanding of Storage and Index options will provide: Optimal performance Out perform XML (Java based) A lot of choice: Problems are Complex Also provides Solutions Good design beforehand is the path to success
60. References (1) Oracle Whitepapers Oracle XML DB : Choosing the Best XMLType Storage Option for Your Use Case (PDF) Oracle XML DB : Best Practices to Get Optimal Performance out of XML Queries (PDF) Blog http://blog.gralike.com (Dedicated XMLDB blog) Semi-Structured XMLIndex section Structured XMLIndex section
61. References (2) Oracle Open World Presentationon XML DB S317428: Building Really Scalable XML Applications with Oracle XML DB and Oracle Text XML DB OTN / FAQ Thread http://forums.oracle.com/forums/forum.jspa?forumID=34 http://forums.oracle.com/forums/thread.jspa?threadID=410714
Editor's Notes
It all comes down to packaging
Definitions of Structured, Semi-Structured and Unstructured data
Emp/Dept tables, Foreign/Primary Keys…Showing here ONLY 1 XML document…
See also OOW 2010, S317428: Building Really Scalable XML Applications with Oracle XML DB and Oracle Text – Nipun Agarwal, Oracle