The Connection Factory Jeroen van Rotterdam, CTO May 19th, WWW9
Contents - Xhive setup - Xpath - Xpath performance issues within XML collections
Xhive - OO-XML database - Highly scalable - High granularity - W3C DOM L2 compliant - Xpath 1.0 compliant
Architecture
Why XPath Competing solutions: - XML-QL: Where-In constructs - XQL: limited - SQL: no alternative Xpath a complete pattern match language.
Xpath Advantages: - fairly complete - multiple axes - supported by W3C - base for Xpointer, Xlink - base for XML Query WG - user based functions Disadvantages: - document oriented - minor different tree model - no updates
Extending DOM Collection setup: Every document is a Bastard Node
Library Node Advantages - Natural extension of DOM - extendible - closely related to directory structures - searchable with Xpath
Library Node Disadvantages - potential bottleneck
Xpath - Xpath in a large PDOM collection environment: 1. Address memory issues 2. Solve differences in specs 3. Address performance issues
Memory issues - Avoid recursion - make subresults persistent capable
Solve differences Differences in specs are f.i.: - getParent on attributes vs. ownerElement - namespace nodes
Performance Increase Xpath performance: - Query analysis - Avoid reparsing - Lazy evaluation - Index structures - Cache strategy - DTD analysis - Statistical data
Performance 1. Query analysis: a. Can I simplify my query f.i:/child::chapter[5+5]
Performance 1. Query analysis: b. Does your query depends on the context node. Absolute queries are context independent: Give me all chapters where the title is the same as the book title //chapter[title=string(/book/title)] Evaluate string(/book/title) only once.
Performance 2. Storing parsed queries: Compile, optimize queries only once
Performance 3. Lazy evaluation: f.i. operations on Nodesets - booleans (evaluate first node) - strings (first in doc order) - number (string to number) Example: give me all chapters which have paragraphs /chapter[paragraph] Finding 1 paragraph will do
Performance 4. Indexing: - getFirstChildElementByName(String name) - getNextSiblingElementBySameName() - getFirstChildByType( short type ) - getNextSiblingByType( short type )
Performance 5. Caching strategy: top level paging/cluster strategy
Performance 6. Use DTD information: f.i. /child::chapter/child::book[4] Might return null if you have info on the DTDs used.
Performance 7. Gather statistical info: DTDs or Xschema specify structures that may occur, not whats actually in your collection.
Conclusion - DOM within database environments - Xpath on top of a PDOM - Xpath is fairly complete - Focus on performance
WWW9 Beta testers, Developers wanted. Have fun…...