Relational-Style XML Query @ SIGMOD-J 2008 Dec.

21,364 views

Published on

Relational-Style XML Query(フラットなSQLを用いて、複雑な木構造を持ったXMLを検索する方法)ACM SIGMOD日本支部大会での発表スライド

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
21,364
On SlideShare
0
From Embeds
0
Number of Embeds
1,819
Actions
Shares
0
Downloads
58
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Relational-Style XML Query @ SIGMOD-J 2008 Dec.

  1. 1. 斉藤 太郎 (Taro L. Saito) 東京大学 2008年12月20日 ACM SIGMOD 日本支部第40回大会 http://www.xerial.org/
  2. 2. さあ みんなで SAX, DOM, XMLのプロジェクト XPATH, XQUERY, DTD, XML 我が社にとってXMLは重 を始めることにした SCHEMA, RELAX NG 要だ。今までのテーブル を勉強するんだ! と違って、まったく新し いデータ構造だからな  はっきり言って、たいへんです。 › XMLを使うのにこんなに学ぶことがあるなんて 2
  3. 3.  XMLのいいところ › テキスト(簡単に扱える) › XMLの方が直観的なデータ構造に近い <Company value=“1”> <Emp value=“e1”> <Office>NY</Office> </Emp> <Emp value=“e2”> Co <Office>NY</Office> </Emp> Company Employee Office </Company> 1 e1 NY Emp Emp 1 e2 NY e1 e2 Relational Data Office Office (テーブルデータ) NY NY XML Data 3
  4. 4.  XMLに変換されたテーブルデータを取り出したい  例題:テーブルの一行 (Co, Emp, Office) をXML から取り出す › 例えば、XPath(経路を指定して検索する方法)では /Co/Emp/Office と書く Co Co Emp Office 1 e1 NY 1 e2 NY Emp Emp e1 e2 Relational Data Office Office NY NY XML Data 4
  5. 5.  テーブルからXMLへの変換の仕方は、一通 りではない Co Co Emp Office 1 e1 NY Emp Emp 1 e2 NY e1 e2 Relational Data Co Office Office NY NY Office NY Office NY Co Emp Emp Emp Emp e1 e2 e1 e2 5
  6. 6.  XML構造全体を把握していないと、構造のゆら ぎのため、正しい経路を指定できない › データベース設計者と利用者の意思疎通が必要 不可欠 Co Co Office NY Emp Emp Office NY e1 e2 Co Emp Emp Emp Emp Office Office e1 e2 e1 e2 NY NY /Office[Co]/Emp /Co/Office/Emp /Co/Emp[Office] [X] : 枝分かれ 6
  7. 7.  鍵となる考え方 › Relation(行データ)は、XML Co Emp Office に埋め込まれているだけ 1 e1 NY 1 e2 NY Relational Data Co Co Emp Emp Office NY e1 e2 Office NY Office Office Co Emp Emp NY NY e1 e2 Emp Emp e1 e2 7
  8. 8. XPathは要らないんじゃない? 8
  9. 9.  XMLからrelation(テーブル)を取り出す手法 › 検索にはSQL文を使う  SELECT Co, Emp, Office from (XML Data) Co Co Office Emp Emp Office SQL over NY Input XML Data e1 e2 NY XML! Co Emp Emp Office Office Emp Emp e1 e2 NY NY e1 e2 Co Emp Office 1 e1 NY Result 1 e2 NY  設計者がどんなXML構造を使っていて も、SQL文は影響を受けない 9
  10. 10.  SQL文 SELECT A, B, C をXMLの構造を検索する問い 合わせに変換する › (A, B, C)のXML表現では、様々な構造のゆらぎが生じ得る A B B A C B C ….. A C B C A B C A  一般に、N個のノードには NN-1 種類の構造のゆ らぎがある 10
  11. 11.  (A, B, C) が amoeba (アメーバ)構造  A, B, Cのうち、どれか一つが他の親ノー ド(祖先も含む)になっている A B B A C B C ….. A C B C A B C A  Amoeba joinは、すべてのamoeba構造を XMLから取り出す操作. 11
  12. 12.  Amoebaではあるが、relation(行データ)にはな らない構造がある › なぜ、下図のamoebaがrelationにならないのか?  それは、XMLの構造の中に、functional dependencies (FD) が暗黙に想定されているから 1 company Company M office Office Office 1 N employee Emp Emp Emp Emp ER-diagram (Data Model) 12
  13. 13.  FD: X -> Y (ノードXからユニークな(たった1つの)ノードY が見つけられる) › employee-> office (各employee は特定のofficeに所属している) › office -> company (各office は、ある会社に属している)  Relation in XML では、個々のFDが、それぞれamoeba構造 をとる必要がある 1 company Company M amoebaに office Office Office なっていない! 1 N employee Emp Emp Emp Emp ER-diagram (Data Model) 13
  14. 14.  company に、M 個所のoffice、またそれぞれのoffice にN人のemployeeがいるとすると…  (company, office, employee) の組み合わせの数: › M = 100, N = 5 のとき 100 x (100 x 5) = 50,000  一方、正しい組み合わせの数は M * N = 500 1 company Company M office Office Office Office 1 N Emp Emp Emp Emp employee Emp Emp Emp Emp Emp 14
  15. 15.  FD: Emp -> Office, Office -> Company  ボトムアップにamoebaを組み立てていく 1. Amoeba Join (Employee, Office) 2. Amoeba Join (Office, Company) 1 company Company M office Office Office Office 1 N Emp Emp Emp Emp employee Emp Emp Emp Emp Emp  FDを考慮すると、関係のない構造をはじくことができる 15
  16. 16.  FDを考慮したamoeba join › データサイズに比例した性能 16
  17. 17.  SQLからXMLクエリへ自動変換 › SELECT Co, Office, Emp  FD: Emp -> Office, Office -> Co Co Office Office Co Emp Office Emp ….. Co Emp Office Emp Co Office Emp Co  XMLクエリは、Relation(テーブル構造)とFD から自動的に定まる 17
  18. 18.  1対多 (one-to-many) と1対1 (one-to-one) › 例:FD、 Emp -> Office は、以下のような関係に対応:  個々のemployeeは、あるofficeに属している  逆に考えて、officeには、複数の employeeがいる (1対多)  1対1、1対多の関係(FD)を見つけるには、 › XMLデータ中から親子関係にある組の出現頻度を数える › あるいは、ERダイアグラム・UML(データモデル)から直接抽出 Company company 1 M Office office Office 1 N Emp Emp Emp Emp employee 18
  19. 19.  「XMLは木構造」という発想から抜け出す › XML := Relation + Annotation  ステップ › 1. XMLデータからRelation(行データ)を見つける › 2. 1対多のFDを見つける › 3. SQLで問い合わせ文を書く company  SELECT Co, Emp, Office c1 annotation employee absent  備考: e1  アノテーションをクエリに含め ることもできる employee office NY e2  一部はXMLのまま、その他は relationという構成も可能 office NY 19
  20. 20.  Relation in XML › AmoebaとFDで、構造が決まる  Relational-Style XML Query › SQLを用いて、XMLからrelationを取り出せる › 構造のゆらぎに強い  XMLデータの組み方に自由度が生まれる  Good-bye XPath!! › 目的のXML構造は、パスで指定せずとも、テー ブルスキーマとFDから自動的に決まる 20
  21. 21.  技術的な詳細は論文の方に › Relational-Style XML Query. Taro L. Saito, Shinichi Morishita. SIGMOD 2008.  RDBMSと同じ枠組みで実装できる › 問い合わせ代数・クエリの最適化など  データベースの統合にも活用できる  XMLデータのスキーマ変更が容易に › RDBMSのスキーマ拡張とほぼ同じ  Relationalデータに、XMLを使った annotationを付加しやすくなる  …などなど 21
  22. 22.  実は「SQLでいける」  よくよく見ると、XMLの中にテーブル構造(relational data)が埋め込まれている場合がほとんど XMLのプロジェクト 我が社にとってXMLは Relational Styleで を始めることにした 重要だ。でも、XMLと 考えれば怖くない!! いってもほとんど テーブルデータなんだ  XML技術の深みにはまる前に… Think in Relational Style!!! 22
  23. 23. 23
  24. 24.  OR (Object-Relational) マッピング › Object-XMLマッピングのサブセット › プログラム言語のクラス定義から、スキーマ定義を抽出  Javaなどのリフレクション機能を用いると全自動 › オブジェクトデータをXMLや、RDBに出力  AmoebaとFDさえ満たしていれば、どのようなXML構造 で出力してもOK › XML・RDBデータを読み込んで、オブジェクトを生成  SAX, DOMでのプログラミングが一切不要になる  他の木構造データにも使える › JSON, YAMLなども扱える › CSVなどテーブル形式のデータでも構わない 24
  25. 25.  Class定義からrelation & FDを抽出 › Relation: (id, start, end , name) › FD: gene -> id, start, end, name › XML からList<Gene>を取りだす Class Definition (Java) class Gene { <data> private int id; <gene id=“1”> private int start; <start>100</start> private int end; private String name; <end>3000</end> <name>A</name> public Gene(){} </gene> <gene id=“2”> public void setId(int id) { this.id = id; } <start>3500</start> public void setName(String name) <end>7000</end> { this.name = name; } </gene> // followed by other setters </data> …. } 25
  26. 26.  Xerial (エクセリアル) Project › XML DBMSの実装、OR・OXマッピング関連 のライブラリなど › http://www.xerial.org/  Relational-Style XML Query › 開発版をオープンソースで公開予定  Apache License Version 2.0 › Javaによる実装  MavenのCentral Repository経由で配布さ れます 26

×