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