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"       "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"
                                                       }
                                                 }
                                             }
Collections
●
    MongoDB では collection は RDB のテーブルみたいなもの
●
    collection を事前に作成する必要はない(自動で行われ
    る)
●
    MongoDB 側で collection 内のデータは同じ型である必要
    はない(ユーザが決める)
●
    例えば税務システムには法人の申告データは複数の年度の
    データを同じコレクションに保存出来る
XPath と Dot Notation
●
    Xpath
      /data/client[clientId = “15138”]/clientCode
●
    Dot Notation
      db.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
          Individual Data 1     Individual Data 2     Individual Data 3


                              Internal Common Data

                              XML Data   Other Data



                                  BSON/JSON
Tips( 3 )
●
    XML データは基本2種類ある
    ●
      スキーマが定義されているもの: モデルクラスをライブ
      ラリなどで生成する
    ●
      スキーマが定義されていないもの: オブジェクト =>
      XML => JSON/BSON ( XStream など)
コグラフ株式会社は、
利用者の側に立ったソフトウェアサービスのご提供を通じて
    世界中の人々や社会の発展に貢献します

                ご連絡先
          TEL: 03-5340-7450
        E-Mail: a@cograph.com

Mongo db + xsd:xml(20130219)

  • 1.
    MongoDB + XSD/XML Michael Nguyen (マイケル・ヌエン) コグラフ株式会社
  • 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 と DotNotation ● 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 など)
  • 13.
    コグラフ株式会社は、 利用者の側に立ったソフトウェアサービスのご提供を通じて 世界中の人々や社会の発展に貢献します ご連絡先 TEL: 03-5340-7450 E-Mail: a@cograph.com