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