MongoDB + XSD/XML

910 views

Published on

丸の内MongoDB勉強会 #7 http://atnd.org/events/36467
「2. MongoDBでXMLデータを扱うシステム開発」

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

  • Be the first to like this

No Downloads
Views
Total views
910
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

MongoDB + XSD/XML

  1. 1. MongoDB + XSD/XML Michael Nguyen (マイケル・ヌエン) コグラフ株式会社
  2. 2. 自己紹介 ● カリフォルニア大学アーバイン校で ICS ● 東京工業大学へ留学 ● Google 検索アプライアンスを補完する 自社製品の開発や、ナレッジマネジメ ント製品の開発 ● コグラフ株式会社でグローバル・サー ビス・デベロップメントマネージャー + シニアエンジニア ● 趣味は音楽とお酒(特に日本酒)
  3. 3. 税務システムでの特徴 ● 電子申告は XML で提出 ● XML のスキーマは国税庁から臨時に提供されている ● 平成25年2月8日に公開されているスキーマ( XSD フ ァイル)は合計で 110MB を越えている ● システムは内部でデータを XML で保存しなくても、どこ かのタイミングで XML に変換する必要がある
  4. 4. 何故 MongoDB ● 問題 ● 大量のスキーマで大量の帳票の数 ● 各帳票には大量の項目の数(表示用のコードは1万行を越えている) ● スキーマは年に数回更新される ● 古いデータをそのまま参照する必要がある ● データのモデルを手動で作成するのは体制的にも時間的にも非現実的 ● 候補となる DB の種類 ● RDB => × ● NoSQL => ◯ ● XMLDB => ◯
  5. 5. MongoDB のメリット ● XML のデータをそのまま保持出来る ● XML データを部分的に取得できる( dot notation ) ● スキーマが変わっても DB まわりのコードは一回だけの開 発でほとんどメンテナンスなしで使い続けている ● データのバージョンが違っていても共存は可能 ● データベースの運用での障害なし
  6. 6. BSON と XML ● XML スキーマは国税庁のものを加工したものがベースにな る ● 加工した XML スキーマを XmlBeans のライブラリで Java Bean を生成 (ant のスクリプト ) ● データ保存時は Java Bean => XML => JSON => BSON ● データ取得時は BSON => JSON => XML => Java Bean
  7. 7. XML/JSON の変換 XML JSON <pre:ROOT_ELEMENT xmlns:pre="http://somewhere.com/asdf" attribute1="value" attribute2="value" attribute3="value" ><pre:CHILD_ELEMENT_1 attribute1="value" attribute2="value" attribute3="value" >value</pre:CHILD_ELEMENT ><pre:CHILD_ELEMENT_2 attribute1="value" attribute2="value" attribute3="value" >value</pre:CHILD_ELEMENT ></pre:ROOT_ELEMENT> { "pre:ROOT_ELEMENT" : { "@xmlns:pre" : "http://somewhere.com/asdf", "@attribute1" : "value", "@attribute2" : "value", "@attribute3" : "value", "pre:CHILD_ELEMENT_1" : { "@attribute1" : "value", "@attribute2" : "value", "@attribute3" : "value", "#text" : "value" }, "pre:CHILD_ELEMENT_2" : { "@attribute1" : "value", "@attribute2" : "value", "@attribute3" : "value", "#text" : "value" } } }
  8. 8. Collections ● MongoDB では collection は RDB のテーブルみたいなもの ● collection を事前に作成する必要はない(自動で行われ る) ● MongoDB 側で collection 内のデータは同じ型である必要 はない(ユーザが決める) ● 例えば税務システムには法人の申告データは複数の年度の データを同じコレクションに保存出来る
  9. 9. XPath と Dot Notation ● Xpath /data/client[clientId = “15138”]/clientCode ● Dot Notation db.client.fnd({“data.client.clientId.#text” : “15138”}, {“data.client.clientCode” : 1})
  10. 10. Tips(1) XML のドキュメントと関係しているものをなるべく同じコレクシ ョンに入れるとクエリの数を減らせる( JOIN はない) { “_id” : ObjectId(“511c7e016796c903affd1837”), “XMLDataKey” : “XMLData”, “RelatedDataKey1” : “RelatedData1”, “RelatedDataKey2” : “RelatedData2”, “RelatedDataKey3” : “RelatedData3”, … “Metadata1Key” : “Metadata1”, “Metadata2Key” : “Metadata2”, “Metadata3Key” : “Metadata3”, ... }
  11. 11. Tips (2) BSON/JSON Layer - Internal Common Data Layer – Individual Data Layer BSON/JSON Internal Common Data Individual Data 1 XML Data Other Data Individual Data 2 Individual Data 3
  12. 12. Tips( 3 ) ● XML データは基本2種類ある ● スキーマが定義されているもの: モデルクラスをライブ ラリなどで生成する ● スキーマが定義されていないもの: オブジェクト => XML => JSON/BSON ( XStream など)
  13. 13. コグラフ株式会社は、 利用者の側に立ったソフトウェアサービスのご提供を通じて 世界中の人々や社会の発展に貢献します ご連絡先 TEL: 03-5340-7450 E-Mail: a@cograph.com

×