JP6260339B2 - 情報処理装置,データ変換プログラム,及びデータ変換方法 - Google Patents

情報処理装置,データ変換プログラム,及びデータ変換方法 Download PDF

Info

Publication number
JP6260339B2
JP6260339B2 JP2014032652A JP2014032652A JP6260339B2 JP 6260339 B2 JP6260339 B2 JP 6260339B2 JP 2014032652 A JP2014032652 A JP 2014032652A JP 2014032652 A JP2014032652 A JP 2014032652A JP 6260339 B2 JP6260339 B2 JP 6260339B2
Authority
JP
Japan
Prior art keywords
key
data
unit
tables
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2014032652A
Other languages
English (en)
Other versions
JP2015158767A (ja
Inventor
達夫 熊野
達夫 熊野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014032652A priority Critical patent/JP6260339B2/ja
Priority to US14/601,275 priority patent/US10268644B2/en
Publication of JP2015158767A publication Critical patent/JP2015158767A/ja
Application granted granted Critical
Publication of JP6260339B2 publication Critical patent/JP6260339B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/282Hierarchical databases, e.g. IMS, LDAP data stores or Lotus Notes

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、情報処理装置,データ変換プログラム,及びデータ変換方法に関する。
図23は情報処理システム100の構成例を示す図であり、図24は図23に示すアプリサーバ120の機能構成例を示す図である。図23に示すように、情報処理システム100は、複数のアプリケーションサーバ(以下、単にアプリサーバという)120,複数のデータベース(database;DB)サーバ140,並びにアプリサーバ120及びDBサーバ140間を接続するネットワークスイッチ130をそなえる。
情報処理システム100では、図24に示すように、アプリサーバ120が、データベース接続部122によりDBサーバ140が管理するDB141へアクセスを行なうことで、所定のアプリケーション121を実行する。アプリサーバ120がアクセス、すなわちデータの入出力等の操作を行なうDB141としては、データ及び複数のデータ間の関連を1以上の表(テーブル)形式で表現する関係データベース(Relational DB;RDB)が用いられることが多い。RDBは、その普及率の高さから、管理システム(RDB Management System;RDBMS)の提供者(ベンダ)や使用者等による機能改善及びバグフィックスの動きが活発であり、性能が良く安定性が高いDBであるといえる。
ところで、アプリケーション121は、入れ子構造を含むツリー(木)構造のデータモデル(データ形式)を使用することが多い。なお、データモデルとは、アプリケーション121がDB141へアクセスするためのデータ形式であり、アプリケーション121がDB141へのアクセスにおいてデータをどのような形で扱うかを定めるものである。表形式のデータを扱うRDBでツリー構造のデータモデルを実現する場合、アプリケーション121の開発者は、複数の表が複雑に関連したデータモデルを設計することになる。しかし、複数の表を複雑に連携させる場合、アプリケーション121の設計の段階で、開発者は、ツリーを認識し難くなり、アプリケーション121の設計や更新等を容易に行なうことができない場合がある。
一方で、入れ子構造を含むツリー構造のデータモデルを扱うことが容易なドキュメントDB(Document DB;DDB)も知られている。DDBは、アプリケーション121側に特化したDBであり、開発者等にツリー構造をそのまま扱うように見せ、データモデルを直感的に設計させることが可能である。
なお、関連技術として、電子取引伝票の変換装置が、EDI(Electronic Data Interchange)伝票データをRDB形式に変換する変換規則を用いて、EDI伝票データをRDB化された取引データに変換する技術が知られている(例えば、特許文献1参照)。
また、他の関連技術として、ODB(Object DB)のモデルとRDBのモデルとを作成し、ODBの組をRDBに変換する技術も知られている(例えば、特許文献2参照)。
特開平9−319811号公報 特表平11−504451号公報
DDBは、RDBと比べて製品の歴史が浅いため、導入実績が少なく、バグフィックス等も活発には行なわれていない。従って、DDBはRDBよりも性能や安定性が優れているとは言い難い。このため、DBサーバ140がDDBを用いる場合、RDBを用いる場合よりもアプリサーバ120には高い性能が要求されることになる。また、アプリケーション121がデータの誤りや喪失を許容しない又は許容量が小さい場合には、DDBの導入は困難となる。
一方、RDBで入れ子構造を含むツリー構造(以下、単にツリー構造という)を表現しようとする場合、以下の(a)又は(b)の手法が考えられる。
(a)ツリー構造のデータ形式を単一の表形式に変換する。
(b)ツリー構造のデータ形式を複数の表形式に変換する。
上記(a)の手法において、ツリー構造のデータを単一の表形式データに変換してRDBに格納しようとすると、入れ子構造のためにデータ内容に重複が生じて、RDBのデータサイズが大きくなってしまう。
また、上記(b)の手法において、ツリー構造のデータを単純に複数の表形式データに変換すると、テーブル数が多くなるため、アプリサーバ120による参照の際に多数のテーブルを参照することになり、結果として多数のメモリを消費してしまう。
このように、アプリケーション121の設計や更新等に適したDDBをDB141に採用する場合、RDBを扱うDB141と比較して、システムの性能低下や導入/運用コストの増加が生じ得るという課題がある。
なお、上述したEDI伝票データをRDB化された取引データに変換する技術は、特定の形式のデータをRDB形式のデータに変換するものであり、入れ子や階層の構造が多様なツリー構造のデータを適応的にRDB形式のデータに変換することは困難である。
1つの側面では、本発明は、情報処理装置において、入れ子構造を含むツリー構造のデータを、性能の低下又はコストの増加を抑止して、容易に扱うことを目的とする。
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の1つとして位置付けることができる。
本件の情報処理装置は、第1のデータ形式で入力された入れ子構造を含む階層構造のデータを、複数のテーブルにより前記データを表す第2のデータ形式に変換して、格納部へ格納する変換部をそなえる。また、前記変換部は、前記入力されたデータの情報要素ごとに、当該情報要素の属する階層及び当該情報要素の要素名を表すテーブル名を設定した第1テーブルを生成し、前記データの入れ子構造に応じて、前記複数の第1テーブルの各々を対応する他の第1テーブルと関係付ける第1生成部をそなえる。さらに、前記変換部は、複数の前記第1テーブルの各々のテーブル名に基づき、前記複数の第1テーブルの中から、前記階層構造における情報要素の属する階層及び当該情報要素の種類がそれぞれ所定の関係にある第1テーブルを検出し、当該検出した第1テーブル同士を統合して第2テーブルを生成する第2生成部さらにそなえる。
一実施形態によれば、情報処理装置において、入れ子構造を含むツリー構造のデータを、性能の低下又はコストの増加を抑止して、容易に扱うことができる。
一実施形態に係る情報処理システムの構成例を示す図である。 図1に示すアプリサーバ及びDBサーバのハードウェア構成例を示す図である。 図2に示すハードウェアの接続例を示す図である。 図1に示すデータベースサーバの機能構成例を示す図である。 図1に示すアプリサーバの機能構成例を示す図である。 図5に示すデータモデル変換エンジンの詳細な構成例を示す図である。 DDBにおけるドキュメントをJSON形式で表記した例を示す図である。 図7に示すドキュメントをグラフ形式で表記した例を示す図である。 図7に示すドキュメントをグラフ形式で表記した例を示す図である。 図6に示す生成部が生成する第1テーブルの一例を示す図である。 図6に示す生成部が生成する第1テーブルの一例を示す図である。 図6に示す統合部が生成する第2テーブルの一例を示す図である。 図6に示す統合部が生成する第2テーブルの一例を示す図である。 図6に示す更新部により更新される第2テーブルの一例を示す図である。 図14に示す第2テーブルの更新後の一例を示す図である。 図14に示す第2テーブルの更新後の一例を示す図である。 データモデル変換エンジンによる全体の処理の一例を説明するフローチャートである。 生成部による処理の一例を説明するフローチャートである。 統合部による処理の一例を説明するフローチャートである。 更新部による処理の一例を説明するフローチャートである。 読出制御部による処理の一例を説明するフローチャートである。 読出制御部による処理の一例を説明するフローチャートである。 情報処理システムの構成例を示す図である。 図23に示すアプリサーバの機能構成例を示す図である。
以下、図面を参照して実施の形態を説明する。
〔1〕一実施形態
〔1−1〕情報処理システムの説明
図1は一実施形態に係る情報処理システム1の構成例を示す図である。図1に示すように、情報処理システム1は、複数のアプリケーションサーバ(以下、単にアプリサーバという)2,ネットワークスイッチ3,及び複数のデータベース(DB)サーバ4をそなえる。
なお、図1において、情報処理システム1は、アプリサーバ2及びDBサーバ4をそれぞれ複数そなえるものとしたが、これに限定されるものではなく、それぞれを1つそなえるものとしてもよい。この場合、ネットワークスイッチ3を省略してもよい。また、図1において、全てのアプリサーバ2及びDBサーバ4が同一ネットワークに属しているものとしたが、これに限定されるものではなく、ネットワークに階層構造を持たせてもよい。
ネットワークスイッチ3は、アプリサーバ2及びDBサーバ4間を相互に通信可能に接続する装置である。ネットワークスイッチ3としては、例えばL3(Layer 3)スイッチやスイッチングハブ等が挙げられる。
アプリサーバ2は、ネットワークスイッチ3を介してDBサーバ4へアクセスを行なうことで、データベース(DB)41を使用する所定のアプリケーションを実行する。
DBサーバ4は、アプリサーバ2が使用するDB41を管理(格納)するサーバである。DB41としては、例えば性能が良く安定性が高いRDBが挙げられる。
アプリサーバ2及びDBサーバ4としては、例えばPC(Personal Computer)やサーバ等の情報処理装置が挙げられる。
〔1−2〕アプリサーバ及びDBサーバのハードウェア構成例
ここで、図2及び図3を参照して、一実施形態に係るアプリサーバ2及びDBサーバ4のハードウェア構成例について説明する。図2は図1に示すアプリサーバ2及びDBサーバ4のハードウェア構成例を示す図であり、図3は図2に示すハードウェアの接続例を示す図である。
アプリサーバ2及びDBサーバ4としての情報処理装置は、それぞれ、図2に示すように、CPU(Central Processing Unit)51,メモリ52,記憶部53,インタフェース部54,入出力部55,記録媒体56,及び読取部57をそなえることができる。なお、図1に示す複数のアプリサーバ2及びDBサーバ4は、いずれも同様のハードウェアをそなえることができるため、以下、代表して、1つのアプリサーバ2又は1つのDBサーバ4がそなえるハードウェアについて説明する。
CPU51は、図2における対応する各ブロック52〜57と接続され、種々の制御や演算を行なう演算処理装置(プロセッサ)である。CPU51は、メモリ52,記憶部53、記録媒体56や58、又は図示しないROM(Read Only Memory)等に格納されたプログラムを実行することにより、アプリサーバ2又はDBサーバ4における種々の機能を実現することができる。
メモリ52は、種々のデータやプログラムを格納する記憶装置である。CPU51は、プログラムを実行する際に、メモリ52にデータやプログラムを格納し展開する。なお、メモリ52としては、例えばRAM(Random Access Memory)等の揮発性メモリが挙げられる。
記憶部53は、種々のデータやプログラム等を格納するハードウェアである。記憶部53としては、例えばHDD(Hard Disk Drive)等の磁気ディスク装置,SSD(Solid State Drive)等の半導体ドライブ装置,フラッシュメモリ等の不揮発性メモリ等の各種デバイスが挙げられる。なお、記憶部53として複数のデバイスが用いられてもよく、これらのデバイスでRAID(Redundant Arrays of Inexpensive Disks)が構成されてもよい。
インタフェース部54は、有線又は無線による、ネットワーク(図示省略)や他のサーバ2又は4との間の接続及び通信の制御等を行なうものである。インタフェース部54は、図3に示すネットワークインタフェース54aを含んでもよい。インタフェース部54としては、例えば、LAN(Local Area Network),ファイバチャネル(Fibre Channel;FC),インフィニバンド(InfiniBand)等に準拠したアダプタが挙げられる。
入出力部55は、マウスやキーボード等の入力装置及びディスプレイやプリンタ等の出力装置の少なくとも一方を含むことができる。例えば、入出力部55は、アプリサーバ2又はDBサーバ4の使用者又は管理者等による種々の作業に用いられる。
記録媒体56は、例えばフラッシュメモリやROM等の記憶装置であり、種々のデータやプログラムを記録することができる。読取部57は、コンピュータ読取可能な記録媒体58に記録されたデータやプログラムを読み出す装置である。記録媒体56及び58の少なくとも一方には、本実施形態に係るアプリサーバ2又はDBサーバ4の各種機能の全部もしくは一部を実現するデータ変換プログラムが格納されてもよい。例えば、CPU51は、記録媒体56から読み出したプログラム、又は、読取部57を介して記録媒体58から読み出したプログラムを、メモリ52等の記憶装置に展開して実行することができる。これにより、コンピュータ(CPU51,情報処理装置,各種端末を含む)は、上述したアプリサーバ2又はDBサーバ4の機能を実現することができる。
なお、記録媒体58としては、例えばフレキシブルディスク、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク等の光ディスクや、USB(Universal Serial Bus)メモリやSDカード等のフラッシュメモリが挙げられる。なお、CDとしては、CD−ROM、CD−R(CD-Recordable)、CD−RW(CD-Rewritable)等が挙げられる。また、DVDとしては、DVD−ROM、DVD−RAM、DVD−R、DVD−RW、DVD+R、DVD+RW等が挙げられる。
なお、上述した各ブロック51〜57間はバスで相互に通信可能に接続される。例えばCPU51と記憶部53との間は、ディスクインタフェース59(図3参照)を介して接続される。また、アプリサーバ2又はDBサーバ4の上述したハードウェア構成は例示である。従って、アプリサーバ2又はDBサーバ4内でのハードウェアの増減(例えば任意のブロックの追加や省略),分割,任意の組み合わせでの統合,バスの追加又は省略等は適宜行なわれてもよい。また、アプリサーバ2のハードウェアとDBサーバ4のハードウェアとを統合してもよい。さらに、アプリサーバ2間,DBサーバ4間,又はアプリサーバ2とDBサーバ4との間で、異なるハードウェア構成が採用されてもよい。
〔1−3〕DBサーバの説明
次に、DBサーバ4について説明する。図4は図1に示すDBサーバ4の機能構成例を示す図である。図4に示すように、DBサーバ4は、機能ブロックとして、上記DB41のほかに、管理部42をそなえる。
DB41は、アプリケーション21が利用するデータベースであり、種々のデータを格納する格納部の一例である。DB41としては、上述のように、例えば性能が良く安定性が高いRDBが挙げられる。図4に示すように、DB41は、1以上の第1テーブル412及び1以上の第2テーブル414を格納する。なお、第1テーブル412は、後述するデータモデル変換エンジン23によるデータモデルの変換の過程で生成されるテーブルである。従って、DB41は、データモデルの変換後には、少なくとも第2テーブル414を格納していればよく、第1テーブル412を格納していなくてよい。このため、図4では、第1テーブル412のブロックを破線で示している。第1テーブル412及び第2テーブル414の詳細は後述する。
管理部42は、DB41に対するアプリサーバ2からのアクセスの管理を行なうものである。アクセスの管理には、アプリサーバ2からの要求に応じた、DB41への第1テーブル412又は第2テーブル414の生成,更新,削除,又は参照等の各種処理が含まれてもよい。
なお、DBサーバ4におけるDB41は、例えば上述したメモリ52及び記憶部53の少なくとも一方により実現され、管理部42の機能は、例えば上述したCPU51がメモリ52に展開したプログラムを実行することにより実現される。
〔1−4〕アプリサーバの説明
次に、アプリサーバ2について説明する。図5は図1に示すアプリサーバ2の機能構成例を示す図である。図5に示すように、アプリサーバ2は、機能ブロックとして、アプリケーション21,DB接続部22,及びデータモデル変換エンジン23をそなえる。なお、アプリケーション21,DB接続部22,及びデータモデル変換エンジン23の各機能は、例えば上述したCPU51がメモリ52に展開したプログラムを実行することにより実現される。
アプリケーション21は、入れ子構造を含むツリー(階層)構造のデータモデル(データ形式,第1のデータ形式)を使用してDB41(図4参照)へアクセスし、所定の機能を実現するソフトウェアである。アプリケーション21は、例えばMongoDB等のDDBを用いることができる。
例えば、アプリケーション21は、提供するサービスにおいてDB41へアクセスを行なうと判断すると、データモデル変換エンジン23へ、DB41との間の種々のアクセス要求を発行する。アクセス要求としては、例えばDB41へのドキュメント(オブジェクト)の格納/更新要求(書込要求),DB41からのドキュメントの参照要求(読出要求)等が挙げられる。そして、アプリケーション21は、データモデル変換エンジン23からの格納/更新要求又は参照要求に対する応答を用いて、サービスの提供を行なう。
DB接続部22は、DBサーバ4に対するアクセスを行なう。具体的には、DB接続部22は、データモデル変換エンジン23に、DBサーバ4が管理するRDBのデータモデル(表形式,第2のデータ形式)でのAPI(Application Programming Interface)を提供する。そして、DB接続部22は、データモデル変換エンジン23による格納/更新要求又は参照要求に応じた種々のアクセスをDBサーバ4に対して行なう。
データモデル変換エンジン(変換部)23は、アプリケーション21とDB接続部22との間に設けられ、アプリケーション21が扱うDDBのデータモデルとDBサーバ4が扱うRDBのデータモデルとを相互に変換する。例えば、データモデル変換エンジン23は、第1のデータ形式で入力された入れ子構造を含む階層構造のデータを、複数のテーブルにより当該データを表す第2のデータ形式に変換して、DB41へ格納することができる。
〔1−5〕データモデル変換エンジンの説明
以下、データモデル変換エンジン23について、詳細に説明する。図6は図5に示すデータモデル変換エンジン23の詳細な構成例を示す図である。図6に示すように、データモデル変換エンジン23は、機能ブロックとして、アプリケーション側通信部210,データベース(DB)側通信部220,書込制御部230,及び読出制御部240をそなえる。
アプリケーション側通信部210は、アプリケーション21との通信を制御するものである。
例えば、アプリケーション側通信部210は、アプリケーション21に対してDBサーバ4が管理するDB41であるRDBとは異なるDB(例えばDDB)のデータモデルでのAPIを提供する。なお、アプリケーション側通信部210は、当該APIを介して、アプリケーション21から、上述した格納/更新要求又は参照要求等のアクセス要求を受け取る。
具体的には、アプリケーション側通信部210は、アプリケーション21からAPIが呼び出されると、当該APIが格納/更新要求に係るものであるのか、参照要求に係るものであるのかを判定する。そして、アプリケーション側通信部210は、判定の結果、呼び出されたAPIが格納/更新要求に係るものである場合には当該格納/更新要求を書込制御部230へ出力する一方、参照要求に係るものである場合には当該参照要求を読出制御部240へ出力する。
また、アプリケーション側通信部210は、書込制御部230によるDB41へのドキュメント(オブジェクト)の格納/更新結果に応じて、格納/更新要求に対する応答をアプリケーション21へ出力する。さらに、アプリケーション側通信部210は、読出制御部240によるDB41からのオブジェクトの参照結果に応じて、参照要求に対する応答を、DB41から取得した参照データ(戻り値)とともにアプリケーション21へ出力する。
ここで、アプリケーション側通信部210がアプリケーション21に提供するAPIとしては、Java(登録商標)等のオブジェクト指向言語でのオブジェクト(配列が含まれてもよい)を受け渡しするものが好ましいが、これに限定されるものではない。例えば、アプリケーション側通信部210は、アプリケーション21に、オブジェクトの構造を文字列に変換する形式であるJSON形式(JavaScript Object Notation)の文字列を受け渡しするAPIを提供することができる。
このように、アプリケーション21に提供されるAPIとしては、情報を失うことなく通信路に乗せることができ、入れ子構造を含むツリー構造のように構造化された形式を表すことができれば、どのようなAPIが用いられてもよい。他の例として、アプリケーション21にBSON(Binary JSON;転送効率の良いバイナリ型JSON)形式等のバイナリデータを受け渡しするAPIが提供されてもよい。
以下、説明の簡略化のために、アプリケーション側通信部210は、アプリケーション21にJSON形式の文字列を受け渡しするAPIを提供するものとする。
図7はDDBにおけるドキュメントをJSON形式で表記した例を示す図であり、図8及び図9は、それぞれ図7に示すドキュメントをグラフ形式で表記した例を示す図である。なお、以下の説明において、ドキュメント(オブジェクト),配列を、それぞれマップ,リストと表記する場合がある。
図7では、“document-id: 20”及び“document-id: 30”の2つのドキュメントに、それぞれ構造化されたデータが格納される例を示している。図7に示すJSON形式,並びに図8に示す“document-id: 20”のグラフ表記及び図9に示す“document-id: 30”のグラフ表記において、“{}”は子要素(下位の要素)を持つマップを表し、“[]”は子要素を持つリストを表す。マップは、図8及び図9に示すように、子要素と繋がるグラフの辺に文字列を持ち、この文字列がキー(情報要素)である。また、図8及び図9に示すように、各ツリーの頂点は、マップ,リスト,又はそれ以外の文字列を持つ。マップ及びリスト以外の文字列は、値を表す。
例えば、図8に示す“document:20”の最上位の頂点(マップ)の子要素は、“url”をキーとする値“ggg”,“title”をキーとする値“google”,“tags”をキーとする(子要素を持つ)リスト,及び“bookmarks”をキーとする(子要素を持つ)リストである。なお、リストの子要素はキーを持たない。例えば、上記“tags”をキーとするリストの子要素は、値“goo”及び“gle”である。また、上記“bookmarks”をキーとするリストの子要素は、多段の入れ子構造を形成するマップ(キー“user”,キー“comment”,及び子要素にマップを持つリスト、を子要素とするマップ)である。
図7〜図9に示すように、JSON形式のAPIが提供される場合、アプリケーション21は、入れ子構造を含むツリー構造のドキュメント(オブジェクト)をJSON形式の文字列に正確に変換することができる。従って、アプリケーション21は、自身のプログラムで処理されるオブジェクトが持つ情報を失うことなくJSON形式に変換することができるとともに、JSON形式で表現された文字列から情報を失うことなく自身のプログラムで処理されるオブジェクトに変換することができる。なお、JSON形式でなくBSON形式のAPIが提供される場合も同様である。
DB側通信部220は、DB41側、すなわちDB接続部22との通信を制御するものであり、上述のようにDB接続部22が提供するAPIを利用してDBサーバ4との通信を行なう。
具体的には、DB側通信部220は、書込制御部230からの要求に応じて、DB41へのテーブルの格納/更新要求をDB接続部22へ出力する。また、DB側通信部220は、読出制御部240からの要求に応じて、DB41からのテーブルの参照要求をDB接続部22へ出力する。
書込制御部230は、アプリケーション側通信部210から入力される格納/更新要求に応じて、当該格納/更新要求に係るドキュメントを表形式に変換し、DB41へ格納するためにDB側通信部220へ出力する。また、書込制御部230は、格納/更新結果をアプリケーション側通信部210へ出力する。
読出制御部240は、アプリケーション側通信部210から入力される参照要求に応じて、当該参照要求に係るドキュメントに相当するデータを、DB側通信部220によるアクセスを通じてDB41内の第2テーブル414から取得し、ドキュメントを生成する。そして、読出制御部240は、生成したドキュメントを参照要求の戻り値として、参照結果をアプリケーション側通信部210へ出力する。
なお、データモデル変換エンジン23は、アプリケーション21により、APIが呼び出されたタイミング、すなわちアクセス要求が発行されたタイミングで動作する。
以下、書込制御部230及び読出制御部240の詳細な動作について説明する。
〔1−6〕書込制御部の説明
図6に示すように、書込制御部230は、格納/更新要求に係るオブジェクト又はオブジェクト内のデータに応じた処理を行なうために、生成部232,統合部234,及び更新部236をそなえる。
ここで、書込制御部230は、格納/更新要求を入力されると、DB側通信部220を介して、DB41に、入力されたドキュメントに係る第2テーブル414が生成されているか否かを判定する。書込制御部230は、DB41に第2テーブル414が生成されていない場合に生成部232及び統合部234の処理を実行する一方、第2テーブル414が生成されている場合に更新部236の処理を実行する。以下、上記判定結果に応じた生成部232,統合部234,及び更新部236の処理について説明する。
〔1−6−1〕DBに第2テーブルが生成されていない場合
はじめに、DB41に第2テーブル414が生成されていない場合に実行される、生成部232及び統合部234について説明する。
〔1−6−1−1〕生成部の説明
生成部232は、入力された格納/更新要求に係るオブジェクトに対して内部的にデータモデルの変換を行ない、1以上の第1テーブル412を生成する。具体的には、生成部232は、入力されたJSON形式のツリー構造のオブジェクトを、以下の第1条件に従って、キーごとに、DBサーバ4が管理するRDBのデータモデル、つまり表形式に変換する。そして、生成部232は、変換したテーブルを、DB側通信部220を介してDBサーバ4へ出力し、1以上の第1テーブル412として格納する。
より具体的に、生成部232は、入力されたドキュメントについて、例えば文字列の記述順(ツリーの頂点から子要素に向かって順)にキーを探索し、キーごとに、以下の(i)〜(iv)により定義される第1条件に従って、親要素(上位の要素)名と値とを含むテーブルを生成する。なお、生成部232は、生成した第1テーブル412のテーブル名に、ツリーの頂点から当該テーブルのキーまでの階層を表す文字列、例えば最上位から当該キーまでを“.”で結合した文字列を設定する。
(i)キーが値を直接持つ場合:生成部232は、“(UNIQUE属性を持つ)parent”,“value”の2つの列を持つテーブルを生成する。
(ii)キーが、値を直接持つリストを持つ場合:生成部232は、“parent”,“value”の2つの列を持つテーブルを生成する。
(iii)キーがマップを持つ場合:生成部232は、当該キーについてはテーブルを生成しない。なお、テーブルが生成されない当該キーは、当該キーの下位のマップにおける値を持つキーについて生成部232がテーブルを生成する際に、当該テーブルのテーブル名(階層を表す文字列)に含まれることになる。
(iv)キーが、マップを持つリストを持つ場合:生成部232は、“parent”,“(UNIQUE属性及びAUTO_INCREMENT属性を持つ)id”の2つの列を持つテーブルを生成する。例えば生成部232は、重複しない昇順の“id”を生成する。
ここで、生成部232による上記(i)〜(iv)の第1条件の具体的な判定手法の一例を、図7に示すようなJSON形式のドキュメントを例に挙げて説明する。
はじめに、生成部232は、変換対象のドキュメント(マップ)のIDを取得する。例えば生成部232は、ドキュメントの先頭から最初のマップの開始までの文字列(情報)“document-id: xx {”(“xx”は任意の文字列を抽出し、“parent=xx”をメモリ52等に記憶する。
次いで、生成部232は、直前に抽出した位置から、キーと当該キーの構造とを識別するのに用いる所定の情報を検出するまで、所定の文字列(情報)を抽出する。なお、所定の情報としては、例えば“,”(カンマ),“{”(マップの開始),“document-id:”
(次のドキュメントの開始),ドキュメント(データ)内の最後の“}”等が挙げられる。そして、生成部232は、抽出した文字列に係るキーが上記(i)〜(iv)のいずれに該当するかを以下のように判定する。
(A)抽出した文字列の末尾が“,”又はドキュメント(データ)内の最後の“}”である場合。
(A−1)(A)において、抽出した文字列中に“[”(リストの開始)が含まれる場合:生成部232は、キーは「値を直接持つリストを持つキー」(上記(ii)に対応)であると判断する。
(A−2)(A−1)に該当しない場合において、1つ前に抽出した文字列中のキーについて「値を直接持つリストを持つ」と判断した場合。
(A−2−1)(A−2)において、1つ前に抽出した文字列でリストが閉じられている場合:生成部232は、キーは「値を直接持つキー」(上記(i)に対応)であると判断する。
(A−2−2)(A−2−1)に該当しない場合:生成部232は、キーは「値を直接持つリストを持つキー」(上記(ii)に対応)であると判断する。
(A−3)(A−2)に該当しない場合:生成部232は、キーは「値を直接持つキー」(上記(i)に対応)であると判断する。
(B)抽出した文字列の末尾が“{”である場合。
(B−1)(B)において、抽出した文字列中に“[”(リストの開始)が含まれる場合:生成部232は、キーは「マップを持つリストを持つキー」(上記(iv)に対応)であると判断する。
(B−2)(B−1)に該当しない場合において、1つ前に抽出した文字列中のキーについて「値を直接持つリストを持つ」と判断した場合。
(B−2−1)(B−2)において、1つ前に抽出した文字列でリストが閉じられている場合:生成部232は、キーは「マップを持つキー」(上記(iii)に対応)であると判断する。
(B−2−2)(B−2−1)に該当しない場合:生成部232は、キーは「マップを持つリストを持つキー」(上記(iv)に対応)であると判断する。
なお、上記(i)〜(iv)において、生成部232は、生成するテーブルの“parent”に、キーが最上位の場合には“document-id”の値“xx”を設定し、キーが最上位ではない場合には上位のキーに対応するテーブルにおける“id”を設定する。また、生成部232は、生成するテーブルの“value”には当該キーの値を格納する。
以上のように、生成部232は、入力されるドキュメントに含まれる複数のキーについて、それぞれ対応するテーブル412a〜412i(第1テーブル412)を生成/更新し、DB側通信部220を介してDB41に格納/更新する。このとき、生成部232は、複数の第1テーブル412の各々におけるキーの種類に応じた列に、他の第1テーブル412の参照情報を設定することで、複数の第1テーブル412の各々を対応する他の第1テーブル412と関係付けることができる。
〔1−6−1−2〕統合部の説明
統合部234は、生成部232によるDB41への複数の第1テーブル412の生成/更新が完了すると、統合可能なテーブル412a〜412iを1以上の第2テーブル414として統合する。具体的には、統合部234は、複数の第1テーブル412のうちの以下の第2条件を満たす第1テーブル412のグループを第2テーブル414として統合する。
例えば、統合部234は、複数の第1テーブル412のうちの2以上の第1テーブル412が以下の(I)及び(II)の双方を満たす場合に、当該2以上の第1テーブル412が第2条件を満たすと判断する。そして、統合部234は、当該2以上の第1テーブル412を1つの第2テーブル414にまとめる。
(I)各第1テーブル412の属する階層が所定の関係にあること。具体的には、2以上の第1テーブル412が同一階層にあると見做せること。より具体的に、2以上の第1テーブル412が以下の(I−1)又は(I−2)を満たすこと。
(I−1)いずれも「値を直接持つキー」に基づき生成されたテーブルである場合:それぞれ同一のマップに属する別のキーに基づき生成されたテーブルであること。
(I−2)それぞれ「値を直接持つキー」及び「マップを持つリストを持つキー」に基づき生成されたテーブルである場合:当該「値を直接持つキー」が当該「マップを持つリストを持つキー」のリストに含まれること。
(II)2以上の第1テーブル412の構造が所定の関係にあること。具体的には、2以上の第1テーブル412が同じ構造であると見做せること。より具体的に、2以上の第1テーブル412が以下の(II−1)〜(II−3)のいずれかを満たすこと。
(II−1)いずれも「値を直接持つキー」に基づき生成されたテーブルであること。
(II−2)いずれも「マップを持つリストを持つキー」に基づき生成されたテーブルであること。
(II−3)それぞれ「値を直接持つキー」及び「マップを持つリストを持つキー」に基づき生成されたテーブルであること。
なお、統合部234は、第2テーブル414のテーブル名に、第2条件を満たすと判断した2以上の第1テーブル412の各階層を表す文字列、例えば各第1テーブル412のテーブル名で共通な部分と共通ではない部分とを“_”で結合した文字列を設定する。また、統合部234は、第2テーブル414には、各第1テーブル412における“parent”,“id”の列名を、それぞれ“_parent”,“_id”に変更して設定する。これは、キーとの名前の重複を避けるためである。さらに、統合部234は、第2テーブル414には、各第1テーブル412における“value”の列名を、キーの名前に変更して設定する。
また、統合部234は、統合可能な2以上の第1テーブル412のグループのうち、いずれかの第1テーブル412を元にして、第2テーブル414を生成してもよい。この場合、統合部234は、当該第1テーブル412のテーブル名や列名を変更するとともに、当該第1テーブル412に当該グループの他の第1テーブル412の内容を追加すればよい。或いは、統合部234は、当該グループの第1テーブル412の内容を統合した第2テーブル414を新たに生成してもよい。いずれの場合においても、統合部234は、DB41の記憶領域の確保のため、第2テーブル414に内容が含まれることになった第1テーブル412を削除することが好ましい。
さらに、統合部234は、第2条件を満たさないと判断した第1テーブル412については統合を行なわないが、当該第1テーブル412についても列名の変更を行なう。以下の説明では、便宜上、統合を行なわずに列名の変更のみを行なった第1テーブル412についても、第2テーブル414と表記する。
以上のように、統合部234は、複数の第1テーブル412のうちの第2条件を満たす第1テーブル412のグループについて、DBサーバ4が扱うRDBに適した第2テーブル414として統合する。
上述した統合部234によれば、複数の第1テーブル412のうち、階層構造におけるキーの属する階層及び当該キーの種類がそれぞれ所定の関係にある第1テーブル412同士を統合することができる。これにより、統合部234は、統合する第1テーブル412を、所定の関係(第2条件)に基づいて容易に特定することができる。
また、統合部234によれば、複数の第1テーブル412の各々のテーブル名に基づき、キーの属する階層が互いに所定の関係にある第1テーブル412を検出することができる。さらに、統合部234は、複数の第1テーブル412の各々における、キーの種類に応じた列に基づき、キーの種類が互いに所定の関係にある第1テーブル412を検出することができる。このように、統合部234は、統合の処理において、他の情報を参照せずに、第1テーブル412に関する情報に基づき、第1テーブル412の統合の有無や統合先の第1テーブル412を判定できる。
従って、統合部234によれば、データモデル変換エンジン23による変換速度を向上できるため、情報処理システム1によるDB41へのアクセス性能を向上させることができる。
〔1−6−1−3〕生成部及び統合部の処理の具体例
次に、上述した生成部232及び統合部234の処理を、図10〜図13を参照しながら具体例を挙げて説明する。図10及び図11は、それぞれ図6に示す生成部232が生成する第1テーブル412の一例を示す図であり、図12及び図13は、それぞれ図6に示す統合部234が生成する第2テーブル414の一例を示す図である。
なお、図10及び図11では、生成部232による変換対象のドキュメント(マップ)が、図7に示す“document-id: 20”及び“document-id: 30”の2つのドキュメントであるものとする。また、図12及び図13では、統合部234が、図10及び図11に示すテーブル412a〜412iに基づいて、第2テーブル414を生成するものとする。さらに、図10及び図11の各テーブル412a〜412iにおいて、テーブル名,列(カラム)名,及び各レコードに付された“T”で始まる符号は、生成部232による第1テーブル412の生成又はレコードの追加の処理順序を示す。なお、この処理順序は、入力されたドキュメントの文字列の順序に対応するものであるが、当該処理順序はこれに限定されるものではない。
まず、生成部232の処理について説明する。
はじめに、生成部232は、変換対象のドキュメント(マップ)のIDとして、“document-id: 20 {”を抽出し、“parent=20”をメモリ52等に記憶する(処理T1,図示省略)。
次いで、生成部232は、“url: “ggg”,”を抽出し、上記(A−3)の論理で、キー“url”は「値を直接持つキー」であると判断する。そして、生成部232は、第1条件のうちの上記(i)に基づき、“(UNIQUE属性を持つ)parent”,“value”の2つの列を持つ“url”という名前のテーブル412aを生成する。また、生成部232は、テーブル412aのうち、“parent”にはキーが最上位であるため処理T1で記憶した“20”を、“value”にキーの値“ggg”を格納する(処理T2)。
また、生成部232は、“title: “google”,”について、処理T2と同様に、キー“title”は「値を直接持つキー」であると判断する。そして、生成部232は、“(UNIQUE属性を持つ)parent”,“value”の2つの列を持つ“title”という名前のテーブル412bを生成する。また、生成部232は、テーブル412bのうち、“parent”にはキーが最上位であるため処理T1で記憶した“document-id”の“20”を、“value”にキーの値“google”を格納する(処理T3)。
次に、生成部232は、“tags: [“goo”,”を抽出し、上記(A−1)の論理で、キー“tags”は「値を直接持つリストを持つキー」であると判断する。そして、生成部232は、第1条件のうちの上記(ii)に基づき、UNIQUE属性を持たない“parent”,“value”の2つの列を持つ“tags”という名前のテーブル412cを生成する。また、生成部232は、テーブル412cのうち、“parent”にはキーが最上位であるため処理T1で記憶した“20”を、“value”にキーの値“goo”を格納する(処理T4)。
また、生成部232は、““gle”],”を抽出し、上記(A−2−2)の論理で、キーは「値を直接持つリストを持つキー」であると判断する。なお、““gle”],”のキーは、処理T4で抽出したキー“tags”である。そして、生成部232は、処理T4で生成した“tags”という名前のテーブル412cのうち、“parent”にはキーが最上位であるため処理T1で記憶した“20”を、“value”にキーの値“gle”を格納する(処理T5)。
次いで、生成部232は、“bookmarks: [{”を抽出し、上記(B−1)の論理で、キー“bookmarks”は「マップを持つリストを持つキー」であると判断する。そして、生成部232は、第1条件のうちの上記(iv)に基づき、“parent”,“(UNIQUE属性及びAUTO_INCREMENT属性を持つ)id”の2つの列を持つ“bookmarks”という名前のテーブル412dを生成する。また、生成部232は、テーブル412dのうち、“parent”にはキーが最上位であるため処理T1で記憶した“20”を、“id”に自動生成された“0”を格納する(処理T6)。
また、生成部232は、“user: “userA”,”について、処理T3と同様に、キー“user”は「値を直接持つキー」であると判断する。そして、生成部232は、“(UNIQUE属性を持つ)parent”,“value”の2つの列を持つ“bookmarks.user”という名前のテーブル412eを生成する。また、生成部232は、テーブル412eのうち、“parent”には、キーが最上位ではないため、キー“user”の親要素に対応するテーブル412dで生成された“id”の“0”を、“value”にはキー“user”の値“userA”を格納する(処理T7)。
さらに、生成部232は、“comment: “search engine”,”について、処理T7と同様に、キー“comment”は「値を直接持つキー」であると判断する。そして、生成部232は、“(UNIQUE属性を持つ)parent”,“value”の2つの列を持つ“bookmarks.comment”という名前のテーブル412fを生成する。また、生成部232は、テーブル412fのうち、“parent”には、キーが最上位ではないため、キー“comment”の親要素に対応するテーブル412dで生成された“id”の“0”を、“value”にはキー“comment”の値“search engine”を格納する(処理T8)。
次に、生成部232は、“tags: [{”について、処理T6と同様に、キー“tags”は「マップを持つリストを持つキー」であると判断する。そして、生成部232は、“parent”,“(UNIQUE属性及びAUTO_INCREMENT属性を持つ)id”の2つの列を持つ“bookmarks.tags”という名前のテーブル412gを生成する。また、生成部232は、テーブル412gのうち、“parent”には、キーが最上位ではないため、キー“tags”の親要素に対応するテーブル412dで生成された“id”の“0”を、“id”に自動生成された“0”を格納する(処理T9)。
さらに、生成部232は、“tag: “search”,”について、処理T8と同様に、キー“tag”は「値を直接持つキー」であると判断する。そして、生成部232は、“(UNIQUE属性を持つ)parent”,“value”の2つの列を持つ“bookmarks.tags.tag”という名前のテーブル412hを生成する。また、生成部232は、テーブル412hのうち、“parent”には、キーが最上位ではないため、キー“tag”の親要素に対応するテーブル412gで生成された“id”の“0”を、“value”にはキー“tag”の値“search”を格納する(処理T10)。
次いで、生成部232は、“chars: [“s”,”について、処理T4と同様に、キー“chars”は「値を直接持つリストを持つキー」であると判断する。そして、生成部232は、UNIQUE属性を持たない“parent”,“value”の2つの列を持つ“bookmarks.tags.chars”という名前のテーブル412iを生成する。また、生成部232は、テーブル412iのうち、“parent”には、キーが最上位ではないため、キー“chars”の親要素に対応するテーブル412gで生成された“id”の“0”を、“value”にはキー“chars”の値“s”を格納する(処理T11)。
処理T12〜T44においても、生成部232は、既に生成されているテーブル412a〜412iに対して、上述した処理と同様に、レコードを追加してテーブル412a〜412iを更新する。
なお、テーブル412e,412f,又は412iにレコードを追加する際には、その都度、親要素に対応するテーブル412d又は412hにレコードを追加して“id”を自動生成させる。そして、テーブル412e,412f,又は412iに追加するレコードの“parent”に、親要素に対応するテーブル412d又は412hで自動生成された“id”を追加すればよい。
また、生成部232は、処理T29において、ドキュメント(データ)“document-id: 20”内の最後の“}”を検出すると、入力された格納/更新要求に他のドキュメントが含まれているか否かを判断する。他のドキュメント(例えば“document-id: 30”)がある場合、生成部232は、処理T1と同様に、“parent=30”をメモリ52等に記憶する(処理T30,図示省略)。そして、生成部232は、“document-id: 30”内の処理である処理T31〜T44において、キーが最上位であるテーブル412a〜412cにレコードを追加する際には、“parent”に処理T30で記憶した“30”を格納する。
次に、統合部234の処理について説明する。
統合部234は、生成部232が生成したテーブル412a〜412iから、2つのテーブルを順に抽出して第2条件を満たすか否かを判断し、第2条件を満たす組(グループ)を、図12及び図13に示すような第2テーブル414として統合する。
例えば、統合部234は、図10のテーブル412a及び412bが、いずれもトップレベルにあり、「直接値を持つキー」に基づくテーブルであるため(上記(I−1)及び(II−1)参照)、第2条件を満たすと判断する。そして、統合部234は、テーブル412a及び412bを1つの第2テーブル414にまとめる(図12のテーブル414a参照)。このとき、統合部234は、テーブル412a及び412bのテーブル名に共通部分がないため、テーブル414aのテーブル名には、テーブル412a及び412bのテーブル名を“_”で結合した文字列を設定する。また、統合部234は、テーブル414aの列名として、テーブル412a及び412bの列名“parent”を“_parent”に、テーブル412aの列名“value”を“url”に、テーブル412bの列名“value”を“title”にそれぞれ変更した文字列を設定する。
また、統合部234は、図10のテーブル412cには同一階層であって同じ構造の第1テーブル412がないため、第2条件を満たさないと判断し、テーブル412cの統合を行なわない。このとき、統合部234は、テーブル名を変更せずにテーブル412cを第2テーブル414とする(図12のテーブル414b参照)。また、統合部234は、テーブル414bの列名として、テーブル412cの列名“parent”を“_parent”に、テーブル412cの列名“value”を“tags”にそれぞれ変更する。
さらに、統合部234は、図10のテーブル412d及び412eがそれぞれ「マップを持つリストを持つキー」,「直接値を持つキー」に基づくテーブルであり、一方のキーが他方のキーに含まれると判断する(上記(I−2)及び(II−3)参照)。同様に、統合部234は、図10のテーブル412d及び412fについてもテーブル412d及び412eと同様の判断をする。なお、この場合、テーブル412e及び412fは、同一階層にあり、いずれも「マップを持つリストを持つキー」である(上記(I−1)及び(II−2)参照)。このように、統合部234は、図10のテーブル412d,412e,及び412fが第2条件を満たすと判断し、テーブル412d〜412fを1つの第2テーブル414にまとめる(図12のテーブル414c参照)。
このとき、統合部234は、テーブル412d〜412fのテーブル名のうち“bookmarks”が共通のため、テーブル414cのテーブル名には、“bookmarks”と“.user”及び“.comment”をそれぞれ“_”で結合した“bookmarks_.user_.comment”を設定する。また、統合部234は、テーブル414cの列名として、テーブル412d〜412fの列名“parent”を“_parent”に、テーブル412dの列名“id”を“_id”にそれぞれ変更した文字列を設定する。さらに、統合部234は、テーブル414cの列名として、テーブル412eの列名“value”を“user”に、テーブル412fの列名“value”を“comment”にそれぞれ変更した文字列を設定する。
なお、統合部234は、図11のテーブル412g及び412hについても、テーブル412d及び412eと同様の判断により、第2テーブル414にまとめる(図12のテーブル414d参照)。
また、統合部234は、図11のテーブル412iについては、テーブル412cと同様の判断により、統合を行なわず、列名の変更を行ない、テーブル412iを第2テーブル414とする(図13のテーブル414e参照)。
以上のように、生成部232及び統合部234の処理によって、入力されたDDBに係るデータが、RDBのデータモデルに変換される。
〔1−6−2〕DBに第2テーブルが生成されている場合
次に、DB41に第2テーブル414が格納されている状態で実行される、更新部236について説明する。
〔1−6−2−1〕更新部の説明
更新部236は、データモデル変換後の第2テーブル414に対して、入力されたドキュメントの書込を行なう。具体的には、更新部236は、入力されたドキュメントについて、例えば文字列の記述順(ツリーの頂点から子要素に向かって順)にキーを探索し、キーごとに、対応する第2テーブル414を更新する。
より具体的に、更新部236は、全ての第2テーブル414を列挙し、探索したキーを含む第2テーブル414、すなわちテーブル名を“_”の箇所で分割したときに、探索したキーの名前と完全一致するものがある第2テーブル414を特定する。
そして、更新部236は、探索したキーを含む(特定した)更新対象の第2テーブル414に対して、以下の(1)〜(4)により定義される第3条件に従って更新を行なう。
(1)探索したキーが値を直接持つ場合:更新部236は、更新対象の第2テーブル414における“_parent”列が探索したキーの“parent”と一致する行(レコード)において、キー名の列に当該キーの値を書き込む。なお、当該行がなければ、更新部236は、新たに当該行を作成(追加)して上記値を書き込む。
(2)探索したキーが、値を直接持つリストを持つ場合:更新部236は、更新対象の第2テーブル414において、“_parent”列に探索したキーの“parent”を、キー名の列に当該キーの値を持つ行を作成(追加)する。
(3)探索したキーがマップを持つ場合:更新部236は、当該キーについては第2テーブル414の更新を行なわないテーブルを生成しない。
(4)探索したキーが、マップを持つリストを持つ場合:更新部236は、更新対象の第2テーブル414の“_parent”列が探索したキーの“parent”と一致する行において、キー名の列に当該キーの値を書き込む。なお、当該行がなければ、更新部236は、新たに当該行を作成(追加)して上記値を書き込む。
なお、更新部236は、生成部232による上記(A)及び(B)の判定と同様の手法により、探索したキーが上記(1)〜(4)のいずれに該当するかを判定することができる。
以上のように、更新部236は、入力されるオブジェクトに含まれる複数のキーについてそれぞれ対応する第2テーブル414を特定し、特定した第2テーブル414を第3条件に従って対応するキーにより更新する。
上述した更新部236によれば、対応する第2テーブル414が存在する状態で第1のデータ形式で入力された入れ子構造を含む階層構造の更新データから、更新データのキーごとに当該キーの値を抽出することができる。そして、更新部236によれば、抽出したキーの値に基づいて、対応する第2テーブル414を更新することができる。このように、予め第2テーブル414がDB41に格納されている場合には、更新部236により、第1のデータ形式で入力されたドキュメント(更新データ)を、第2のデータ形式で表された第2テーブル414へ直接書き込むことができる。従って、更新部236によれば、データモデル変換エンジン23による変換速度を向上できるため、情報処理システム1によるDB41へのアクセス性能を向上させることができる。
〔1−6−2−2〕更新部の処理の具体例
次に、上述した更新部236の処理を、図14〜図16を参照しながら具体例を挙げて説明する。図14は図6に示す更新部236により更新される第2テーブル414の一例を示す図であり、図15及び図16は、それぞれ図14に示す第2テーブル414の更新後の一例を示す図である。なお、前提として、図14では、生成部232及び統合部234により、図7に示す“document-id: 20”のドキュメントのみが第2テーブル414に変換されているものとする。また、図15及び図16では、格納/更新要求により図7に示す“document-id: 30”のドキュメントが新たに書込制御部230に入力され、更新部236が図14に示す第2テーブル414へ当該ドキュメントを追加する様子を示す。さらに、図15及び図16の各テーブル414a〜414e内に付された“T”で始まる符号は、更新部236による処理順序を示す。なお、この処理順序は、入力されたドキュメントの文字列の順序に対応するものであるが、当該処理順序はこれに限定されるものではない。
はじめに、更新部236は、更新対象(書込対象)のドキュメント(マップ)のIDとして、図7に示す“document-id: 30 {”を抽出し、“parent=30”をメモリ52等に記憶する(処理T51,図示省略)。
次いで、更新部236は、更新対象のドキュメントから“url: “yyy”,”を抽出し、第2テーブル414から、キー“url”をテーブル名“url_title”に含むテーブル414aを特定する(図14参照)。また、更新部236は、生成部232と同様の手法によりキー“url”は「値を直接持つキー」であると判断する。そして、更新部236は、第3条件のうちの上記(1)に基づき、テーブル414aにおいて、“_parent”列に“30”、“url”列に“yyy”を持つ行を追加する(図15の処理T52)。
また、更新部236は、“title: “yahoo”,”について、キー“title”は、テーブル414aに含まれる(図14参照)、「値を直接持つキー」であると判断する。そして、更新部236は、テーブル414aの“_parent”列が“30”の行における、“title”列に“yahoo”を格納する(図15の処理T53)。
次に、更新部236は、“tags: [“yah”],”を抽出し、第2テーブル414から、キー“tags”をテーブル名“tags”に含むテーブル414bを特定する(図14参照)。また、更新部236は、キー“tags”は「値を直接持つリストを持つキー」であると判断する。そして、更新部236は、第3条件のうちの上記(2)に基づき、テーブル414bにおいて、“_parent”列に“30”、“tags”列に“yah”を持つ行を追加する(図15の処理T54)。
次いで、更新部236は、“bookmarks: [{”を抽出し、第2テーブル414から、キー“bookmarks”をテーブル名“bookmarks_.user_.comment”に含むテーブル414cを特定する(図14参照)。また、更新部236は、キー“bookmarks”は「マップを持つリストを持つキー」であると判断する。そして、更新部236は、第3条件のうちの上記(4)に基づき、テーブル414cにおいて、“_parent”列に“30”を持つ行を追加する(図15の処理T55)。このとき、“_id”列には自動生成された“2”が格納される。
また、更新部236は、“user: “userA”,”について、キー“user”は、テーブル414cに含まれる(図14参照)、「値を直接持つキー」であると判断する。そして、更新部236は、テーブル414cの“_id”列が“2”の行における、“user”列に“userA”を格納する(図15の処理T56)。同様に、更新部236は、“comment: “yahoooooo”,”について、テーブル414cの“_id”列が“2”の行における、“comment”列に“yahoooooo”を格納する(図15の処理T57)。
次に、更新部236は、“tags: [{”について、第2テーブル414から、キー“tags”をテーブル名“bokmarks.tags_.tag”に含むテーブル414dを特定する(図14参照)。また、更新部236は、キー“tags”は「マップを持つリストを持つキー」であると判断する。そして、更新部236は、テーブル414dにおいて、“_parent”列に“2”を持つ行を追加する(図15の処理T58)。このとき、“_id”列には自動生成された“4”が格納される。
また、更新部236は、“tag: “yah”,”について、キー“tag”は、テーブル414dに含まれる(図14参照)、「値を直接持つキー」であると判断する。そして、更新部236は、テーブル414dの“_id”列が“4”の行における、“tag”列に“yah”を格納する(図15の処理T59)。
次いで、更新部236は、“chars: [“y”,”について、第2テーブル414から、キー“chars”をテーブル名“bookmarks.tags.chars”に含むテーブル414eを特定する(図14参照)。また、更新部236は、キー“chars”は「値を直接持つリストを持つキー」であると判断する。そして、更新部236は、テーブル414eにおいて、“_parent”列に“4”、“chars”列に“y”を持つ行を追加する(図16の処理T60)。
処理T61〜T65においても、更新部236は、上述した処理と同様に、既に生成されているテーブル414a〜414eを更新する。
また、更新部236は、処理T65において、ドキュメント(データ)“document-id: 30”内の最後の“}”を検出すると、入力された格納/更新要求に、更新対象の他のドキュメントが含まれているか否かを判断する。更新対象の他のドキュメントがある場合、更新部236は、処理T51と同様に、“document-id”の値“xx”を“parent”としてメモリ52等に記憶すればよい。
〔1−7〕読出制御部の説明
読出制御部(読出部)240は、入力される参照要求に応じて、当該参照要求で指定された条件を満たすデータを第2テーブル414から取得し、取得したデータをJSON形式のドキュメント(マップ)に変換して、アプリケーション側通信部210へ出力する。
例えば、読出制御部240は、参照要求により指定される読出条件に合致するデータを、書込制御部230によって変換された第2テーブル414から取得し、(元の)ドキュメントを構築する。なお、読出条件としては、読出対象の“document-id: xx”,又は1以上の特定の第2テーブル414及び値等が挙げられる。
具体的には、読出制御部240は、参照要求を入力されると、戻り値のドキュメント(マップ)を“{}”で初期化する。また、読出制御部240は、参照要求で指定された読出条件を満たす読出対象の第2テーブル414のうち、読出条件の値と一致する読出対象の行について以下の処理を実行する。なお、読出条件として“document-id xx”のみが指定されたとき、読み出す第2テーブル414や値は指定されなくてよい。この場合、読出制御部240は、トップレベルの第2テーブル414のうち、“xx”と一致する行について、以下の処理を実行する。
・“_parent”列にUNIQUE属性がある場合:読出制御部240は、“_parent”列以外の各列について、各列名を“key”とし、当該“key”列における読出対象の行の値を“value”として、“key: value”の要素を戻り値のマップに追加する。なお、当該“key”は、「値を直接持つキー」となる。
・“_parent”列にUNIQUE属性がなく、且つ“_id”列がない場合:読出制御部240は、“_parent”列以外の各列について、各列名を“key”とし、当該“key”列における読出対象の行の値を“value”として、“key: [value]”の要素を戻り値のマップに追加する。なお、当該“key”は、「値を直接持つリストを持つキー」となる。また、当該“key”列における読出対象の行が複数ある場合、“key: [value]”のリスト“[]”には、複数の値“value”が“,”(カンマ)区切りで設定される。
・“_parent”列にUNIQUE属性がなく、且つ“_id”列がある場合:読出対象の第2テーブル414のテーブル名の共通部分のうち、“.”で区切った最後の部分(直近の親要素のキーの名前)を“table”とする。そして、読出制御部240は、“table: [{}]”の要素を戻り値のマップに追加する。なお、当該“table”は、「マップを持つリストを持つキー」となる。以下、テーブル名の共通部分のうち、“.”で区切った最後の部分を、共通部分(最後の部分)と表記する場合がある。
ここで、第2テーブル414のテーブル名の共通部分(最後の部分)とは、テーブル名で最初に現れる“_”と、当該“_”の直前にある“.”との間の文字列とすることができる。但し、テーブル名において“_”より前に“.”がない場合、共通部分(最後の部分)は、テーブル名の先頭とテーブル名で最初に現れる“_”との間の文字列とすることができる。また、テーブル名に“_”がない場合、共通部分(最後の部分)は、テーブル名の末尾から先頭に向かって最初に現れる“.”(“.”がない場合はテーブル名の先頭)と末尾との間の文字列とすることができる。例えば、テーブル名“bookmarks_.user_.comment”では“bookmarks”が共通部分(最後の部分)になり、テーブル名“bookmarks.tags_.tag”では“tags”が共通部分(最後の部分)になる。なお、テーブル名の共通部分は、テーブル名のうち、上述した共通部分(最後の部分)の末尾と、テーブル名の先頭との間の文字列である。
また、読出制御部240は、“_parent”列及び“_id”列以外にも列がある場合には、“_parent”列及び“_id”列以外の各列について、各列名を“key”とし、当該“key”列における読出対象の行の値を“value”とする。そして、読出制御部240は、“key: value”の要素を、戻り値のマップにおける“table: [{}]”の要素のマップに追加する。
さらに、読出制御部240は、参照要求で指定された“document-id”の値“xx”と一致する行における“_id”列のリスト“[]”を取得するため、以下の読出条件で自分自身の呼出(再帰呼出)を行なうことができる。そして、読出制御部240は、再帰呼出における戻り値についても、呼出元で処理された“table: [{key: value}]”のマップ“{}”に追加する。再帰呼出での読出条件の第2テーブル414としては、読出対象の第2テーブル414のテーブル名の共通部分と“key”とを“.”で結合したテーブル名で始まる全ての第2テーブル414のうち、呼出元における読出対象の第2テーブル414とは異なる第2テーブル414となる。また、再帰呼出での読出条件の値としては、呼出元での読出対象の行の“_id”列の値となる。
読出制御部240は、再帰呼出での処理においても、上述した手法により要素を取得し、取得した要素を戻り値(この場合、呼出元へ返す戻り値)のマップに追加する。例えば、読出制御部240は、再帰呼出において、呼出元より指定された条件を満たす第2テーブル414の“_parent”列の値が、呼出元より指定された値と一致する行における、各列名を“key”とし、当該“key”列の値を“value”とする。そして、読出制御部240は、“key: value”等の要素を、呼出元への戻り値のマップに追加する。
このように、読出制御部240は、第2テーブル414から、入れ子構造を含むツリー構造のドキュメントを読み出すことができる。なお、読出制御部240は、再帰呼出の処理において、さらに再帰呼出を行なうことが行なうこともできる。この場合、第2テーブル414から読み出されるドキュメントは、多重の入れ子構造を含むツリー構造となる。
また、読出制御部240は、全ての読出対象の第2テーブル414について上記処理を行なうと、生成された戻り値のマップを、参照要求への応答とともにアプリケーション側通信部210へ出力する。
以上のように、読出制御部240は、入力される参照要求により指定されるオブジェクトのデータを1以上の第2テーブル414から取得し、取得したデータをドキュメントの形式に変換して、アプリケーション21へ応答する。
上述した読出制御部240によれば、第2テーブル414から、入力された読出要求で指定される読出条件に応じた情報を取得し、第2テーブル414から取得した情報に基づいて、読出要求に対する入れ子構造を含む階層構造の読出データを生成できる。すなわち、読出制御部240により、第2のデータ形式で表された第2テーブル414から、第1のデータ形式のドキュメント(読出データ)を直接抽出し生成することができる。従って、読出制御部240によれば、データモデル変換エンジン23による変換速度を向上できるため、情報処理システム1によるDB41へのアクセス性能を向上させることができる。
〔1−8〕動作例
次に、上述のごとく構成された一実施形態に係る情報処理システム1(データモデル変換エンジン23)の動作例を、図17〜図22を参照して説明する。図17はデータモデル変換エンジン23による全体の処理の一例を説明するフローチャートであり、図18〜図20は、それぞれ生成部232,統合部234,及び更新部236による処理の一例を説明するフローチャートである。図21及び図22は、それぞれ読出制御部240による処理の一例を説明するフローチャートである。
〔1−8−1〕データモデル変換エンジンの動作例
はじめに、図17を参照して、データモデル変換エンジン23による全体の処理を説明する。なお、図17のフローチャートに示す全体の処理は、アプリケーション21からアプリケーション21を介して格納/更新要求又は参照要求等の各種要求が入力される都度、実行される。
図17に示すように、アプリケーション側通信部210により、アプリケーション21から入力されたコマンドが格納/更新要求であるか否かが判定される(ステップS1)。入力されたコマンドが格納/更新要求である場合(ステップS1のYesルート)、アプリケーション側通信部210により、格納/更新要求が書込制御部230へ通知される。書込制御部230では、格納/更新要求に係るドキュメント(書込データ)がDB41内で変換された第2テーブル414に対するものか、例えば対応する第2テーブル414がDB41内に存在するか否かが判定される(ステップS2)。
ドキュメントが、変換された第2テーブル414に対するものではない場合(ステップS2のNoルート)、生成部232の処理が実行される。すなわち、生成部232により、後述するステップS11〜S29の処理が実行され、ドキュメントが変換され、第1テーブル412としてDB41へ格納される(ステップS3)。また、書込制御部230により、生成した第1テーブル412を統合するか、つまり第1テーブル412へ統合部234による変換を適用するか否かが判定される(ステップS4)。
例えば、ドキュメントが入れ子構造ではないツリー構造である場合のように第1テーブル412を統合しなくてもよい場合(ステップS4のNoルート)、処理が終了する。一方、ドキュメントが入れ子構造を含むツリー構造である場合等のように第1テーブル412を統合する場合(ステップS4のYesルート)、統合部234の処理が実行される。すなわち、統合部234により、後述するステップS31〜S40の処理が実行され、第1テーブル412が第2テーブル414へ変換され(第1テーブル412が統合され)(ステップS5)、処理が終了する。
一方、ステップS2において、ドキュメントが、変換された第2テーブル414に対するものである場合(ステップS2のYesルート)、更新部236の処理が実行される。すなわち、更新部236により、後述するステップS41〜S57の処理が実行され、ドキュメントが第2テーブル414へ格納され(ステップS6)、処理が終了する。
また、ステップS1において、入力されたコマンドが格納/更新要求ではない、例えば参照要求である場合(ステップS1のNoルート)、アプリケーション側通信部210により、参照要求が読出制御部240へ通知される。読出制御部240では、後述するステップS61〜S83の処理が実行され、参照要求に係るドキュメント(読出データ)が第2テーブル414から読み出される(ステップS7)。また、読み出されたドキュメントがアプリケーション側通信部210を介してアプリケーション21へ出力され、処理が終了する。
〔1−8−2〕生成部の動作例
次に、図18を参照して、生成部232による処理を説明する。
図18に示すように、生成部232により、格納/更新要求に係るドキュメントが1つ選択され、“document-id”の値“xx”がメモリ52等に記憶される(ステップS11)。また、生成部232により、選択したドキュメントから所定の文字列が1つ抽出される(ステップS12)。そして、生成部232により、抽出した文字列に係るキーが値を直接持つか否かが判定される(ステップS13)。
キーが値を直接持つキーである場合(ステップS13のYesルート)、生成部232により、キーに対応する第1テーブル412がDB41にあるか否かが判定される(ステップS14)。例えば、生成部232は、最上位から当該キーまでを“.”で結合した、キーの階層を表す名前の第1テーブル412がDB41にあるか否かを判定する。キーに対応する第1テーブル412がない場合(ステップS14のNoルート)、生成部232により、“(UNIQUE属性を持つ)parent”及び“value”の列を持つ第1テーブル412がDB41に生成される(ステップS15)。なお、当該テーブル名には、最上位から当該キーまでを“.”で結合した、キーの階層を表す文字列が設定される。
ステップS15の処理が実行された場合、又はキーに対応する第1テーブル412がある場合(ステップS14のYesルート)、生成部232により、当該第1テーブル412へ、キーの親要素名“parent”及び値“value”が格納される(ステップS16)。なお、トップレベルのキーの親要素名は、メモリ52に格納された“document-id”の値“xx”となる。
次いで、生成部232により、選択したドキュメントから全ての文字列を抽出したか、例えばドキュメント(マップ)の終了“}”を検出したか否かが判定される(ステップS17)。選択したドキュメントから全ての文字列を抽出していない場合(ステップS17のNoルート)、処理がステップS12に移行し、生成部232により次の文字列がドキュメントから抽出される。
一方、選択したドキュメントから全ての文字列を抽出した場合(ステップS17のYesルート)、生成部232により、入力された格納/更新要求に係る全てのドキュメントを選択したか否かが判定される(ステップS18)。全てのドキュメントを選択していない場合(ステップS18のNoルート)、処理がステップS11に移行し、生成部232により次のドキュメントが選択され、“document-id”の値“xx”が記憶される。一方、全てのドキュメントが選択された場合(ステップS18のYesルート)、生成部232により、格納/更新要求に係る処理が正常終了したと判定され(ステップS19)、処理が終了する。なお、書込制御部230は、アプリケーション側通信部210を介して格納/更新要求の処理結果(正常終了)をアプリケーション21へ通知する。
ステップS13において、キーが値を直接持つキーではない場合(ステップS13のNoルート)には、生成部232により、抽出した文字列に係るキーが値を直接持つリストを持つか否かが判定される(ステップS20)。
キーが値を直接持つリストを持つキーである場合(ステップS20のYesルート)、生成部232により、キーに対応する第1テーブル412がDB41にあるか否かが判定される(ステップS21)。キーに対応する第1テーブル412がない場合(ステップS21のNoルート)、生成部232により、“parent”及び“value”の列を持つ第1テーブル412がDB41に生成される(ステップS22)。
ステップS22の処理が実行された場合、又はキーに対応する第1テーブル412がある場合(ステップS21のYesルート)、生成部232により、当該第1テーブル412へ、キーの親要素名“parent”及び値“value”が格納される(ステップS23)。そして、処理がステップS17に移行する。
ステップS20において、キーが値を直接持つリストを持つキーではない場合(ステップS20のNoルート)には、生成部232により、抽出した文字列に係るキーがマップを持つか否かが判定される(ステップS24)。キーがマップを持つキーである場合(ステップS24のYesルート)、処理がステップS17に移行する。一方、キーがマップを持つキーではない場合(ステップS24のNoルート)、生成部232により、抽出した文字列に係るキーがマップを持つリストを持つか否かが判定される(ステップS25)。
キーがマップを持つリストを持つキーである場合(ステップS25のYesルート)、生成部232により、キーに対応する第1テーブル412がDB41にあるか否かが判定される(ステップS26)。キーに対応する第1テーブル412がない場合(ステップS26のNoルート)、生成部232により、第1テーブル412がDB41に生成される(ステップS27)。ここで生成される第1テーブル412は、“parent”及び“(UNIQUE属性及びAUTO_INCREMENT属性を持つ)id”の列を持つ。
ステップS27の処理が実行された場合、又はキーに対応する第1テーブル412がある場合(ステップS26のYesルート)、生成部232により、当該第1テーブル412へ、キーの親要素名“parent”及び“id”が格納される(ステップS28)。なお、“id”は、昇順で自動生成される、他の“id”と重複しない値である。ステップS28の処理が終了すると、処理がステップS17に移行する。
一方、ステップS25において、キーがマップを持つリストを持つキーではない場合(ステップS25のNoルート)には、ドキュメントがJSON形式等のDDBに対応するデータ形式ではない可能性がある。従って、生成部232により、格納/更新要求に係る処理に異常が発生したと判定され(ステップS29)、処理が終了する。なお、書込制御部230は、アプリケーション側通信部210を介して格納/更新要求の処理結果(異常終了)をアプリケーション21へ通知する。
以上により、生成部232による処理が終了する。なお、ステップS13,S20,S24,及びS25における判定の実行順序は、上述したものに限定されるものではなく、実行順序を変更してもよい。
〔1−8−3〕統合部の動作例
次に、図19を参照して、統合部234による処理を説明する。
図19に示すように、統合部234により、第1テーブル412を順に比較するため、変数i=1及びj=2が定義され(ステップS31)、第1テーブルi,jがそれぞれ特定される(ステップS32)。なお、第1テーブルi,jは、それぞれ、第1テーブル412を生成順やID順等の任意の順序でソートしたときのi番目,j番目の第1テーブル412を示すものとする。
次いで、統合部234により、第1テーブルi,jが同一階層にあると見做せるか否かが判定される(ステップS33)。第1テーブルi,jが同一階層にあると見做せる場合(ステップS33のYesルート)、統合部234により、第1テーブルi,jが同じ構造であると見做せるか否かが判定される(ステップS34)。第1テーブルi,jが同じ構造である場合(ステップS34のYesルート)、統合部234により、第1テーブルi,jを統合すると判定され(ステップS35)、処理がステップS36に移行する。なお、ステップS35において、統合部234は、i,jの値をメモリ52等に格納することができる。一方、第1テーブルi,jが同一階層にない又は同じ構造ではない場合(ステップS33のNoルート又はステップS34のNoルート)にも、処理がステップS36に移行する。
ステップS36では、統合部234により、j=nであるか否かが判定される。なお、nは第1テーブル412の総数である。j=nではない場合(ステップS36のNoルート)、統合部234により、jに1が加算され(ステップS37)、処理がステップS32に移行する。一方、j=nである場合(ステップS36のYesルート)、統合部234により、i=n−1であるか否かが判定される(ステップS38)。i=n−1ではない場合(ステップS38のNoルート)、iに1が加算される。また、統合部234により、jには、1が加算された上記iにさらに1を加算した値が設定され(ステップS39)、処理がステップS32に移行する。なお、j=i+1としたのは、jをiよりも常に大きな値にすることで、i及びjの値が入れ替わって第1テーブル412の重複した比較が行なわれないようにするためである。
i=n−1である場合(ステップS38のYesルート)、統合部234により、メモリ52等に記憶されたi,jの1以上の組が参照され、ステップS35で統合すると判定した第1テーブル412の組が統合されて(ステップS40)、処理が終了する。
以上により、統合部234による処理が終了する。
このように、統合部234は、i,jを変化させて、全てのパターンについて第1テーブルi,jを比較する。そして、統合部234は、統合可能な全ての第1テーブルi,jの組を統合する。なお、統合部234がi,jを変化させる手法は、上述したものに限定されず、種々の手法を用いることができる。つまり、統合部234は、iとjとが同一とならず、且つi及びjの値が入れ替わらないように(重複した比較を行なわないように)i,jを変化させて、i,jの組について全てのパターンを得ることができればよい。
〔1−8−4〕更新部の動作例
次に、図20を参照して、更新部236による処理を説明する。
図20に示すように、更新部236により、格納/更新要求に係るドキュメントが1つ選択され、“document-id”の値“xx”がメモリ52等に記憶される(ステップS41)。また、更新部236により、選択したドキュメントから所定の文字列が1つ抽出される(ステップS42)。そして、更新部236により、抽出した文字列に係るキーが値を直接持つか否かが判定される(ステップS43)。
キーが値を直接持つキーである場合(ステップS43のYesルート)、更新部236により、キーに対応する第2テーブル414に値を格納可能な行があるか否かが判定される(ステップS44)。値を格納可能な行がない場合(ステップS44のNoルート)、更新部236により、抽出した文字列に係るキーの親要素名を“_parent”列に設定した行が、キーに対応する第2テーブル414に追加される(ステップS45)。なお、キーに対応する第2テーブル414とは、最上位からキーまでを“.”で結合したテーブル名の第2テーブル414である。
ステップS45の処理が実行された場合、又はキーに対応する第2テーブル414に値を格納可能な行がある場合(ステップS44のYesルート)、更新部236により、当該第2テーブル414のキー名の列に値“value”が格納される(ステップS46)。
次いで、更新部236により、生成部232と同様に、選択したドキュメントから全ての文字列を抽出したか否かが判定される(ステップS47)。選択したドキュメントから全ての文字列を抽出していない場合(ステップS47のNoルート)、処理がステップS42に移行し、更新部236により次の文字列がドキュメントから抽出される。
一方、選択したドキュメントから全ての文字列を抽出した場合(ステップS47のYesルート)、更新部236により、生成部232と同様に、入力された格納/更新要求に係る全てのドキュメントを選択したか否かが判定される(ステップS48)。全てのドキュメントを選択していない場合(ステップS48のNoルート)、処理がステップS41に移行し、更新部236により次のドキュメントが選択され、“document-id”の値“xx”が記憶される。一方、全てのドキュメントが選択された場合(ステップS48のYesルート)、更新部236により、格納/更新要求に係る処理が正常終了したと判定され(ステップS49)、処理が終了する。なお、書込制御部230は、アプリケーション側通信部210を介して格納/更新要求の処理結果(正常終了)をアプリケーション21へ通知する。
ステップS43において、キーが値を直接持つキーではない場合(ステップS43のNoルート)には、更新部236により、抽出した文字列に係るキーが値を直接持つリストを持つか否かが判定される(ステップS50)。
キーが値を直接持つリストを持つキーである場合(ステップS50のYesルート)、更新部236により、“_parent”列にはキーの親要素名を、キー名の列には値“value”を設定した行がキーに対応する第2テーブル414に追加される(ステップS51)。そして、処理がステップS47に移行する。
ステップS50において、キーが値を直接持つリストを持つキーではない場合(ステップS50のNoルート)には、更新部236により、抽出した文字列に係るキーがマップを持つか否かが判定される(ステップS52)。キーがマップを持つキーである場合(ステップS52のYesルート)、処理がステップS47に移行する。一方、キーがマップを持つキーではない場合(ステップS52のNoルート)、更新部236により、抽出した文字列に係るキーがマップを持つリストを持つか否かが判定される(ステップS53)。
キーがマップを持つリストを持つキーである場合(ステップS53のYesルート)、更新部236により、キーに対応する第2テーブル414に値を格納可能な行があるか否かが判定される(ステップS54)。値を格納可能な行がない場合(ステップS54のNoルート)、更新部236により、抽出した文字列に係るキーの親要素名を“_parent”列に設定した行が、キーに対応する第2テーブル414に追加される(ステップS55)。
ステップS55の処理が実行された場合、又はキーに対応する第2テーブル414に値を格納可能な行がある場合(ステップS54のYesルート)、更新部236により、当該第2テーブル414のキー名の列に値“id”が格納される(ステップS56)。なお、“id”は、昇順で自動生成される、他の“id”と重複しない値である。ステップS56の処理が終了すると、処理がステップS47に移行する。
一方、ステップS53において、キーがマップを持つリストを持つキーではない場合(ステップS53のNoルート)には、更新部236により、格納/更新要求に係る処理に異常が発生したと判定され(ステップS57)、処理が終了する。なお、書込制御部230は、アプリケーション側通信部210を介して格納/更新要求の処理結果(異常終了)をアプリケーション21へ通知する。
以上により、更新部236による処理が終了する。なお、ステップS43,S50,S52,及びS53における判定の実行順序は、上述したものに限定されるものではなく、実行順序を変更してもよい。
〔1−8−5〕読出制御部の動作例
次に、図21及び図22を参照して、読出制御部240による処理を説明する。
図21に示すように、読出制御部240により、戻り値のマップが“{}”で初期化され(ステップS61)、参照要求で指定される読出条件に係る第2テーブル414が1つ特定される(ステップS62)。また、読出制御部240により、“_parent”列の値が読出条件の値と一致する第2テーブル414の行が特定される(ステップS63)。以下、特定された第2テーブル414を第2テーブルxと表記し、特定された行を行yと表記する。
なお、第2テーブルxは、例えば読出条件で特定の第2テーブル414が指定されずに、“document-id: xx”が指定された場合、トップレベルの第2テーブル414になる。図12の例では、第2テーブルxは、UNIQUE属性を持つ“_parent”列を含むテーブル414aになる。また、第2テーブルxは、例えば読出条件が1以上の第2テーブル414である場合、当該第2テーブル414のうちのいずれかになる。
また、特定される行yは、例えば読出条件で値が指定されない場合、“_parent”列の値が“document-id”の値“xx”と一致する第2テーブルxの行になる。図12の例では、“document-id: 20”の場合、行yは、第2テーブルxにおける“_parent”列が“20”の行になる。また、行yは、例えば読出条件の値が“_id”の値“y”等である場合、“_parent”列の値が“y”と一致する全ての行のうちのいずれかになる。
次いで、読出制御部240により、第2テーブルxの“_parent”列にUNIQUE属性があるか否かが判定される(ステップS64)。“_parent”列にUNIQUE属性がある場合(ステップS64のYesルート)、読出制御部240により、第2テーブルxの“_parent”列以外の列が1つ特定される(ステップS65)。以下、特定された列を列zと表記する。
そして、読出制御部240により、第2テーブルxの列zにおける行yの値を“value”,列zの名前を“key”として、要素“key: value”が戻り値のマップに追加される(ステップS66)。また、読出制御部240により、他の未処理の列zが第2テーブルxに存在するか否かが判定される(ステップS67)。他の未処理の列zが存在する場合(ステップS67のYesルート)、処理がステップS65に移行する。一方、他の未処理の列zが存在しない場合(ステップS67のNoルート)、処理がステップS68に移行する。
ステップS68では、読出制御部240により、“_parent”列の値が読出条件の値と一致する他の行yが第2テーブルxに存在するか否かが判定される。他の行yが第2テーブルxに存在する場合(ステップS68のYesルート)、処理がステップS63に移行し、他の行yについて、上述した処理が行なわれる。一方、他の行yが第2テーブルxに存在しない場合(ステップS68のNoルート)、読出制御部240により、読出条件を満たす他の第2テーブルxが存在するか否かが判定される(ステップS69)。
読出条件を満たす他の第2テーブルxが存在する場合(ステップS69のYesルート)、処理がステップS62に移行し、他の第2テーブルxについて、上述した処理が行なわれる。一方、読出条件を満たす他の第2テーブルxが存在しない場合(ステップS69のNoルート)、読出制御部240により、参照要求に係る処理が正常終了したと判定される。そして、読出制御部240により、戻り値のマップがアプリケーション側通信部210を介して参照要求の処理結果をとともにアプリケーション21へ通知され(ステップS70)、処理が終了する。
ステップS64において、“_parent”列にUNIQUE属性がない場合(ステップS64のNoルート)には、読出制御部240により、第2テーブルxに“_id”列が存在するか否かが判定される(ステップS71)。第2テーブルxに“_id”列が存在しない場合(ステップS71のNoルート)、読出制御部240により、第2テーブルxの“_parent”列以外の列zが1つ特定される(ステップS72)。
そして、読出制御部240により、第2テーブルxの列zにおける行yの値を“value”,列zの名前を“key”として、戻り値のマップに要素“key: [value]”が存在するか否かが判定される(ステップS73)。戻り値のマップに要素“key: [value]”が存在しない場合(ステップS73のNoルート)、読出制御部240により、戻り値のマップに要素“key: [value]”が追加される(ステップS74)。
ステップS74の処理が実行された場合、又は戻り値のマップに要素“key: [value]”が存在する場合(ステップS73のYesルート)、読出制御部240により、戻り値のマップの要素“key: [value]”に、行yの値“value”が追加される(ステップS75)。また、読出制御部240により、他の未処理の列zが第2テーブルxに存在するか否かが判定される(ステップS76)。他の未処理の列zが存在する場合(ステップS76のYesルート)、処理がステップS72に移行する。一方、他の未処理の列zが存在しない場合(ステップS76のNoルート)、処理がステップS68に移行する。
ステップS71において、第2テーブルxに“_id”列が存在する場合(ステップS71のYesルート)には、処理が図22に示すステップS77に移行する。図22に示すように、ステップS77では、読出制御部240により、第2テーブルxの名前の共通部分のうち、“.”で区切った最後の文字列(共通部分(最後の部分)の文字列)を“table”として、要素“table: [{}]”が戻り値のマップに追加される。
次いで、読出制御部240により、第2テーブルxに“_parent”列及び“_id”列以外の列が存在するか否かが判定される(ステップS78)。第2テーブルxに“_parent”列及び“_id”列以外の列が存在する場合(ステップS78のYesルート)、読出制御部240により、第2テーブルxの“_parent”列及び“_id”列以外の列zが1つ特定される(ステップS79)。
そして、読出制御部240により、第2テーブルxの列zにおける行yの値を“value”,列zの名前を“key”として、戻り値のマップの要素“table: [{}]”のマップ内に要素“key: value”が追加される(ステップS80)。また、読出制御部240により、他の未処理の列zが第2テーブルxに存在するか否かが判定される(ステップS81)。他の未処理の列zが存在する場合(ステップS81のYesルート)、処理がステップS79に移行する。
一方、他の未処理の列zが存在しない場合(ステップS81のNoルート)、又はステップS78において、第2テーブルxに“_parent”列及び“_id”列以外の列が存在しない場合(ステップS78のNoルート)、処理がステップS82に移行する。
ステップS82では、読出制御部240により、以下の第2テーブルw及び値を指定する読出条件で再帰読出が行なわれる。例えば、第2テーブルwは、第2テーブルxの名前の共通部分と“key”とを“.”で結合した名前で始まる全ての第2テーブル414のうち、第2テーブルxとは異なる第2テーブル414であるものとする。また、値は、第2テーブルwの“_parent”列の値が第2テーブルxの行yに設定された“_id”列の値であるものとする。
ステップS82において、再帰読出が完了し戻り値のマップが得られると、読出制御部240により、再帰読出からの戻り値が、再帰読出の読出元の戻り値のマップにおける要素“table: [{}]”のマップ内に格納される(ステップS83)。そして、処理がステップS68に移行する。
以上により、読出制御部240による処理が終了する。
〔1−9〕まとめ
上述のように、一実施形態に係る情報処理システム1によれば、生成部232により、入力された入れ子構造を含む階層構造のデータのキーごとに、当該キーの値を含む第1テーブル412が生成される。また、生成部232により、当該データの入れ子構造に応じて、複数の第1テーブル412の各々が対応する他の第1テーブル412と関係付けられる。そして、統合部234により、複数の第1テーブル412における所定の条件を満たす第1テーブル412同士が統合されて第2テーブル414が生成される。
これにより、アプリケーション21の開発者等は、複雑な構造のデータをそのまま扱うようにアプリケーション21の設計や更新を行なえるDDBを採用しながら、DBとして性能が良く安定性が高いRDBを利用する(高速なDBを利用する)ことができる。さらに、開発者等は、アプリケーション21及びDBサーバ4で使用するデータモデルを柔軟に決定することができ、情報処理システム1の開発コストを軽減することができる。
例えば、データモデル変換エンジン23によれば、キーごとに生成された第1テーブル412の少なくとも一部が、統合部234により1以上の第2テーブル414として統合される。従って、入れ子構造を含むツリー構造のデータを単一の表形式データとしてRDBに格納する(上記(a)参照)場合と比べて、DB41内のRDBのデータサイズを小さくすることができる。また、入れ子構造を含むツリー構造のデータを単純に複数の表形式データとしてRDBに格納する(上記(a)参照)場合と比べて、テーブル数を少なくすることができるため、参照されるテーブル数を少なくでき、結果としてメモリ消費量を低減できる。
また、データモデル変換エンジン23によれば、入れ子や階層の構造が多様なツリー構造のデータを、適応的に表形式のデータに変換することができ、利便性が高い。
さらに、データモデル変換エンジン23によれば、アプリケーション21に提供するAPIとして、オブジェクト指向言語よりも制約の大きいJSON形式又はBSON形式の文字列を受け渡しするAPIを用いることができる。このように、オブジェクト指向言語でのオブジェクトを受け渡しするAPIに代えて、オブジェクトの構造を文字列に変換する形式の文字列を受け渡しするAPIを用いることにより、データモデル変換エンジン23の設計及び実装を単純化することができる。従って、データモデル変換エンジン23の開発コストを低減させることができる。
また、図5に示すように、第1のデータ形式を扱うアプリケーション21と第2のデータ形式を扱うDB接続部22との間に、データモデル変換エンジン23を設けることができる。これにより、情報処理システム1は、RDBを扱うDB接続部22の機能やDBサーバ4に実質的な変更を加えずに、DDBを扱うアプリケーション21を実行することができる。従って、情報処理システム1の設計の自由度を向上させることができるとともに、情報処理システム1の導入/運用コストを低減させることができる。
〔2〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、係る特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
例えば、一実施形態において、データモデル変換エンジン23は、アプリサーバ2において、アプリケーション21とDB接続部22との間にそなえられるものとして説明したが、これに限定されるものではない。データモデル変換エンジン23は、例えばDBサーバ4にそなえられてもよいし、アプリサーバ2とDBサーバ4との間にそなえられてもよい。データモデル変換エンジン23がDBサーバ4にそなえられる場合、アプリケーション21及びDB接続部22は、いずれもDDBのデータモデル等の第1のデータ形式によりDBサーバ4へアクセスすることができる。データモデル変換エンジン23は、DBサーバ4に入ってきた各種要求について、DB41との間ではRDBのデータモデル(第2のデータ形式)を用いてアクセスすることができる。
〔3〕付記
以上の実施形態に関し、更に以下の付記を開示する。
(付記1)
第1のデータ形式で入力された入れ子構造を含む階層構造のデータを、複数のテーブルで前記データを表す第2のデータ形式に変換して、格納部へ格納する変換部をそなえ、
前記変換部は、
前記入力されたデータの情報要素ごとに、当該情報要素の値を含む第1テーブルを生成し、前記データの入れ子構造に応じて、前記複数の第1テーブルの各々を対応する他の第1テーブルと関係付ける第1生成部と、
複数の前記第1テーブルにおける所定の条件を満たす第1テーブル同士を統合して第2テーブルを生成する第2生成部と、
をそなえることを特徴とする、情報処理装置。
(付記2)
前記第2生成部は、前記複数の第1テーブルのうち、前記階層構造における情報要素の属する階層及び当該情報要素の種類がそれぞれ所定の関係にある第1テーブル同士を統合する、
ことを特徴とする、付記1記載の情報処理装置。
(付記3)
前記第1生成部は、生成する前記第テーブルに、前記情報要素の属する階層及び当該情報要素の要素名を表すテーブル名を設定し、
前記第2生成部は、前記複数の第1テーブルの各々のテーブル名に基づき、前記情報要素の属する階層が互いに所定の関係にある第1テーブルを検出する、
ことを特徴とする、付記2記載の情報処理装置。
(付記4)
前記第1生成部は、生成する前記第1テーブルに、前記情報要素の種類に応じた列を設定し、
前記第2生成部は、前記複数の第1テーブルの各々の前記列に基づき、前記情報要素の種類が互いに所定の関係にある第1テーブルを検出する、
ことを特徴とする、付記2又は付記3記載の情報処理装置。
(付記5)
前記変換部は、
前記第2テーブルから、入力された読出要求で指定される読出条件に応じた情報を取得し、前記第2テーブルから取得した情報に基づいて、前記読出要求に対する入れ子構造を含む階層構造の読出データを生成する読出部、
をさらにそなえることを特徴とする、付記1〜4のいずれか1項記載の情報処理装置。
(付記6)
前記変換部は、
対応する第2テーブルが存在する状態で前記第1のデータ形式で入力された入れ子構造を含む階層構造の更新データから、前記更新データの情報要素ごとに当該情報要素の値を抽出し、抽出した情報要素の値に基づいて、対応する第2テーブルを更新する更新部、
をさらにそなえることを特徴とする、付記1〜5のいずれか1項記載の情報処理装置。
(付記7)
入力された要求に応じた処理を格納部に対して行なうコンピュータに、
第1のデータ形式で入力された入れ子構造を含む階層構造のデータを、複数のテーブルで前記データを表す第2のデータ形式に変換して、前記格納部へ格納し、
前記変換において、
前記入力されたデータの情報要素ごとに、当該情報要素の値を含む第1テーブルを生成し、前記データの入れ子構造に応じて、前記複数の第1テーブルの各々を対応する他の第1テーブルと関係付け、
複数の前記第1テーブルにおける所定の条件を満たす第1テーブル同士を統合して第2テーブルを生成する、
処理を実行させることを特徴とする、データ変換プログラム。
(付記8)
前記第2テーブルの生成において、
前記複数の第1テーブルのうち、前記階層構造における情報要素の属する階層及び当該情報要素の種類がそれぞれ所定の関係にある第1テーブル同士を統合する、
ことを特徴とする、付記7記載のデータ変換プログラム。
(付記9)
前記第1テーブルの生成において、
生成する前記第テーブルに、前記情報要素の属する階層及び当該情報要素の要素名を表すテーブル名を設定し、
前記第2テーブルの生成において、
前記複数の第1テーブルの各々のテーブル名に基づき、前記情報要素の属する階層が互いに所定の関係にある第1テーブルを検出する、
ことを特徴とする、付記8記載のデータ変換プログラム。
(付記10)
前記第1テーブルの生成において、
生成する前記第1テーブルに、前記情報要素の種類に応じた列を設定し、
前記第2テーブルの生成において、
前記複数の第1テーブルの各々の前記列に基づき、前記情報要素の種類が互いに所定の関係にある第1テーブルを検出する、
ことを特徴とする、付記8又は付記9記載のデータ変換プログラム。
(付記11)
前記コンピュータに、
前記第2テーブルから、入力された読出要求で指定される読出条件に応じた情報を取得し、
前記第2テーブルから取得した情報に基づいて、前記読出要求に対する入れ子構造を含む階層構造の読出データを生成する、
処理をさらに実行させることを特徴とする、付記7〜10のいずれか1項記載のデータ変換プログラム。
(付記12)
前記コンピュータに、
対応する第2テーブルが存在する状態で前記第1のデータ形式で入力された入れ子構造を含む階層構造の更新データから、前記更新データの情報要素ごとに当該情報要素の値を抽出し、
抽出した情報要素の値に基づいて、対応する第2テーブルを更新する、
処理をさらに実行させることを特徴とする、付記7〜11のいずれか1項記載のデータ変換プログラム。
(付記13)
第1のデータ形式で入力された入れ子構造を含む階層構造のデータを、複数のテーブルで前記データを表す第2のデータ形式に変換して、前記格納部へ格納し、
前記変換において、
前記入力されたデータの情報要素ごとに、当該情報要素の値を含む第1テーブルを生成し、前記データの入れ子構造に応じて、前記複数の第1テーブルの各々を対応する他の第1テーブルと関係付け、
複数の前記第1テーブルにおける所定の条件を満たす第1テーブル同士を統合して第2テーブルを生成する、
ことを特徴とする、データ変換方法。
(付記14)
前記第2テーブルの生成において、
前記複数の第1テーブルのうち、前記階層構造における情報要素の属する階層及び当該情報要素の種類がそれぞれ所定の関係にある第1テーブル同士を統合する、
ことを特徴とする、付記13記載のデータ変換方法。
(付記15)
前記第1テーブルの生成において、
生成する前記第テーブルに、前記情報要素の属する階層及び当該情報要素の要素名を表すテーブル名を設定し、
前記第2テーブルの生成において、
前記複数の第1テーブルの各々のテーブル名に基づき、前記情報要素の属する階層が互いに所定の関係にある第1テーブルを検出する、
ことを特徴とする、付記14記載のデータ変換方法。
(付記16)
前記第1テーブルの生成において、
生成する前記第1テーブルに、前記情報要素の種類に応じた列を設定し、
前記第2テーブルの生成において、
前記複数の第1テーブルの各々の前記列に基づき、前記情報要素の種類が互いに所定の関係にある第1テーブルを検出する、
ことを特徴とする、付記14又は付記15記載のデータ変換方法。
(付記17)
前記第2テーブルから、入力された読出要求で指定される読出条件に応じた情報を取得し、
前記第2テーブルから取得した情報に基づいて、前記読出要求に対する入れ子構造を含む階層構造の読出データを生成する、
ことを特徴とする、付記13〜16のいずれか1項記載のデータ変換方法。
(付記18)
対応する第2テーブルが存在する状態で前記第1のデータ形式で入力された入れ子構造を含む階層構造の更新データから、前記更新データの情報要素ごとに当該情報要素の値を抽出し、
抽出した情報要素の値に基づいて、対応する第2テーブルを更新する、
ことを特徴とする、付記13〜17のいずれか1項記載のデータ変換方法。
1,100 情報処理システム
140 データベースサーバ
141 データベース
2,120 アプリサーバ(情報処理装置)
21,121 アプリケーション
22,122 データベース接続部
23 データモデル変換エンジン(変換部)
210 アプリケーション側通信部
220 データベース側通信部
230 書込制御部
232 生成部(第1生成部)
234 統合部(第2生成部)
236 更新部
240 読出制御部
3,130 ネットワークスイッチ
4 データベースサーバ(情報処理装置)
41 データベース(格納部)
412 第1テーブル
412a〜412i,414a〜414e テーブル
414 第2テーブル
42 管理部
51 CPU
52 メモリ
53 記憶部
54 インタフェース部
54a ネットワークインタフェース
55 入出力部
56,58 記録媒体
57 読取部

Claims (6)

  1. 第1のデータ形式で入力された入れ子構造を含む階層構造のデータを、複数のテーブルで前記データを表す第2のデータ形式に変換して、格納部へ格納する変換部をそなえ、
    前記変換部は、
    前記入力されたデータの情報要素ごとに、当該情報要素の属する階層及び当該情報要素の要素名を表すテーブル名を設定した第1テーブルを生成し、前記データの入れ子構造に応じて、前記複数の第1テーブルの各々を対応する他の第1テーブルと関係付ける第1生成部と、
    複数の前記第1テーブルの各々のテーブル名に基づき、前記複数の第1テーブルの中から、前記階層構造における情報要素の属する階層及び当該情報要素の種類がそれぞれ所定の関係にある第1テーブルを検出し、当該検出した第1テーブル同士を統合して第2テーブルを生成する第2生成部と、
    をそなえることを特徴とする、情報処理装置
  2. 前記第1生成部は、生成する前記第1テーブルに、前記情報要素の種類に応じた列を設定し、
    前記第2生成部は、前記複数の第1テーブルの各々の前記列に基づき、前記情報要素の種類が互いに所定の関係にある第1テーブルを検出する、
    ことを特徴とする、請求項記載の情報処理装置。
  3. 前記変換部は、
    前記第2テーブルから、入力された読出要求で指定される読出条件に応じた情報を取得し、前記第2テーブルから取得した情報に基づいて、前記読出要求に対する入れ子構造を含む階層構造の読出データを生成する読出部、
    をさらにそなえることを特徴とする、請求項1又は2記載の情報処理装置。
  4. 前記変換部は、
    対応する第2テーブルが存在する状態で前記第1のデータ形式で入力された入れ子構造を含む階層構造の更新データから、前記更新データの情報要素ごとに当該情報要素の値を抽出し、抽出した情報要素の値に基づいて、対応する第2テーブルを更新する更新部、
    をさらにそなえることを特徴とする、請求項1〜のいずれか1項記載の情報処理装置。
  5. 入力された要求に応じた処理を格納部に対して行なうコンピュータに、
    第1のデータ形式で入力された入れ子構造を含む階層構造のデータを、複数のテーブルで前記データを表す第2のデータ形式に変換して、前記格納部へ格納し、
    前記変換において、
    前記入力されたデータの情報要素ごとに、当該情報要素の属する階層及び当該情報要素の要素名を表すテーブル名を設定した第1テーブルを生成し、前記データの入れ子構造に応じて、前記複数の第1テーブルの各々を対応する他の第1テーブルと関係付け、
    複数の前記第1テーブルの各々のテーブル名に基づき、前記複数の第1テーブルの中から、前記階層構造における情報要素の属する階層及び当該情報要素の種類がそれぞれ所定の関係にある第1テーブルを検出し、当該検出した第1テーブル同士を統合して第2テーブルを生成する、
    処理を実行させることを特徴とする、データ変換プログラム。
  6. 入力された要求に応じた処理を格納部に対して行なうデータ変換方法であって、
    第1のデータ形式で入力された入れ子構造を含む階層構造のデータを、複数のテーブルで前記データを表す第2のデータ形式に変換して、前記格納部へ格納し、
    前記変換において、
    前記入力されたデータの情報要素ごとに、当該情報要素の属する階層及び当該情報要素の要素名を表すテーブル名を設定した第1テーブルを生成し、前記データの入れ子構造に応じて、前記複数の第1テーブルの各々を対応する他の第1テーブルと関係付け、
    複数の前記第1テーブルの各々のテーブル名に基づき、前記複数の第1テーブルの中から、前記階層構造における情報要素の属する階層及び当該情報要素の種類がそれぞれ所定の関係にある第1テーブルを検出し、当該検出した第1テーブル同士を統合して第2テーブルを生成する、
    ことを特徴とする、データ変換方法。
JP2014032652A 2014-02-24 2014-02-24 情報処理装置,データ変換プログラム,及びデータ変換方法 Active JP6260339B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014032652A JP6260339B2 (ja) 2014-02-24 2014-02-24 情報処理装置,データ変換プログラム,及びデータ変換方法
US14/601,275 US10268644B2 (en) 2014-02-24 2015-01-21 Information processing apparatus, computer-readable recording medium having stored therein data conversion program, and data conversion method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014032652A JP6260339B2 (ja) 2014-02-24 2014-02-24 情報処理装置,データ変換プログラム,及びデータ変換方法

Publications (2)

Publication Number Publication Date
JP2015158767A JP2015158767A (ja) 2015-09-03
JP6260339B2 true JP6260339B2 (ja) 2018-01-17

Family

ID=53882412

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014032652A Active JP6260339B2 (ja) 2014-02-24 2014-02-24 情報処理装置,データ変換プログラム,及びデータ変換方法

Country Status (2)

Country Link
US (1) US10268644B2 (ja)
JP (1) JP6260339B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7189180B2 (ja) 2019-07-10 2022-12-13 フラウンホファー ゲセルシャフト ツール フェールデルンク ダー アンゲヴァンテン フォルシュンク エー.ファオ. 逆向き磁化磁気構造体を生成する方法

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10963963B2 (en) * 2016-03-28 2021-03-30 Investcloud Inc Rule based hierarchical configuration
CN111078680B (zh) * 2018-10-18 2023-09-26 杭州海康威视数字技术股份有限公司 表格信息处理方法、装置、电子设备及可读存储介质

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11504451A (ja) 1995-04-24 1999-04-20 アスペクト・ディベロップメント・インコーポレイテッド データベース構造に適したオブジェクトのモデリング、リレーショナルデータベース構造への翻訳、それらへの流動的なサーチ
JPH09319811A (ja) 1996-05-30 1997-12-12 Toshiba Corp 電子取引伝票の変換装置
US20020116371A1 (en) * 1999-12-06 2002-08-22 David Dodds System and method for the storage, indexing and retrieval of XML documents using relation databases
JP3719125B2 (ja) * 2000-10-11 2005-11-24 日本電気株式会社 データ格納装置及び方法
JP4152107B2 (ja) * 2002-01-16 2008-09-17 富士通株式会社 データベース更新情報の反映システムおよびそのためのプログラム
JP4207438B2 (ja) * 2002-03-06 2009-01-14 日本電気株式会社 Xml文書格納/検索装置及びそれに用いるxml文書格納/検索方法並びにそのプログラム
JP4272076B2 (ja) * 2004-01-19 2009-06-03 日本電信電話株式会社 情報処理装置および情報処理プログラム
JP4822889B2 (ja) * 2006-03-20 2011-11-24 富士通株式会社 データベース統合参照プログラム、データベース統合参照方法及びデータベース統合参照装置
JP5028894B2 (ja) * 2006-07-18 2012-09-19 富士通株式会社 データベースを構成する複数のテーブルを結合する結合処理をコンピュータに行わせるためのコンピュータ実行可能なプログラム
US8484626B2 (en) * 2007-09-28 2013-07-09 Verizon Patent And Licensing Inc. Generic XML screen scraping
US8078638B2 (en) * 2008-07-09 2011-12-13 Yahoo! Inc. Operations of multi-level nested data structure

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7189180B2 (ja) 2019-07-10 2022-12-13 フラウンホファー ゲセルシャフト ツール フェールデルンク ダー アンゲヴァンテン フォルシュンク エー.ファオ. 逆向き磁化磁気構造体を生成する方法

Also Published As

Publication number Publication date
US20150242453A1 (en) 2015-08-27
US10268644B2 (en) 2019-04-23
JP2015158767A (ja) 2015-09-03

Similar Documents

Publication Publication Date Title
JP5492187B2 (ja) 編集距離および文書情報を使用する検索結果順位付け
Tiwari Professional nosql
US9760347B2 (en) Method and system to identify GUI objects for non-markup-language-presented applications
CN104573124B (zh) 一种基于并行化关联规则算法的教育云应用统计方法
JP5710851B2 (ja) 影響分析のためのシステムおよび方法
JP4365162B2 (ja) 構造化文書のデータを検索する装置および方法
US7730099B2 (en) Storage and retrieval of richly typed hierarchical network models
JP2005285127A5 (ja)
CN102893281A (zh) 信息搜索设备、信息搜索方法、计算机程序和数据结构
US20100223231A1 (en) Merging Records From Different Databases
JP2004246879A (ja) フローデータ生成方法およびフローデータ生成装置
JP6260339B2 (ja) 情報処理装置,データ変換プログラム,及びデータ変換方法
JP2004030221A (ja) 変更対象テーブル自動検出方法
US10437872B2 (en) Computer implemented and computer controlled method, computer program product and platform for arranging data for processing and storage at a data storage engine
WO2017198087A1 (en) Feature-set augmentation using knowledge engine
JPWO2013111287A1 (ja) Sparqlクエリ最適化方法
JP2006338303A (ja) 表記変換装置、整合性チェック装置、及びプログラム
JP5069525B2 (ja) データ処理システム
JP2004287835A (ja) オブジェクト表作成方法及びオブジェクト推薦方法及びオブジェクト表作成プログラム及びオブジェクト推薦方法
JP5063447B2 (ja) コンテンツ管理装置及び方法及びプログラム
JP2007310842A (ja) データ処理システム
KR20220099745A (ko) 지리공간 블록체인 데이터 검색을 위한 공간 분할 기반의 트리 인덱싱 및 질의어 처리 방법 및 장치
JPH10240741A (ja) 木構造型データの管理方法
JP2009104276A (ja) データ管理装置
JP5248762B2 (ja) 設計データ依存関係管理装置、設計データ依存関係管理方法及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161102

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170822

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170905

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171102

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20171114

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171127

R150 Certificate of patent or registration of utility model

Ref document number: 6260339

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150