(57)【要約】【課題】トランザクションの同時実行効率を向上させる。【解決手段】実施形態の端末装置は、記憶部と、管理部と、操作記録部と、第１検知部及び第２検知部の少なくともいずれかと、を有する。管理部は、記憶部が記憶するデータエレメント及びデータコンテナに対して個別にデータを操作するトランザクションを実行する処理部の生成及び削除を行う。操作記録部は、処理部によるトランザクションの実行中に操作情報を記録する。第１検知部及び第２検知部は、競合の有無を検知する。また、第１検知部は、処理部によるトランザクションの実行状態時に競合を検知する。また、第２検知部は、処理部によるトランザクションのコミット準備状態時に競合を検知する。また、処理部は、第１検知部及び第２検知部の少なくともいずれかが競合を検知した場合、トランザクションを中止する。【選択図】図１
2014215894.tif 000002
【特許請求の範囲】
【請求項１】
データコンテナを保持するデータエレメントを記憶する記憶部と、
前記記憶部が記憶するデータエレメント及びデータコンテナに対して個別にデータを操作するトランザクションを実行する処理部の生成及び削除を行う管理部と、
前記処理部によるトランザクションの実行中に、操作対象となるデータに対する操作内容、及びトランザクションを識別する識別情報、を含む操作情報を記録する操作記録部と、
データの一貫性を損なう原因となり得る競合の有無を検知する第１検知部及び第２検知部の少なくともいずれかと、
を有し、
前記第１検知部は、
前記処理部によるトランザクションの実行状態時に、データエレメントに対する操作とデータコンテナに対する操作との間の競合を検知し、
前記第２検知部は、
前記処理部によるトランザクションのコミット準備状態時に、前記操作情報に基づいて、データエレメントに対する操作とデータコンテナに対する操作との間の競合を検知し、
前記処理部は、
前記第１検知部及び前記第２検知部の少なくともいずれかが競合を検知した場合、トランザクションを中止する
端末装置。
【請求項２】
前記記憶部が記憶するデータエレメントは、
ノードを示すノードエレメント、又はエッジを示すエッジエレメントとして表現されるグラフエレメントであり、
前記ノードエレメントは、
少なくともノードに接続されているエッジ情報を格納するデータコンテナを有する
請求項１に記載の端末装置。
【請求項３】
前記ノードエレメントは、
外向きエッジを格納するデータコンテナ、及び内向きエッジを格納するデータコンテナの少なくともいずれかを有する
請求項２に記載の端末装置。
【請求項４】
前記ノードエレメント及び前記エッジエレメントは、
それぞれ属性情報を格納するデータコンテナを有し、
前記属性情報は、
属性名及び値によって構成されている
請求項２又は３に記載の端末装置。
【請求項５】
データコンテナを保持するデータエレメントを記憶する記憶部を有する端末装置にデータを記憶させる情報処理方法であって、
前記記憶部が記憶するデータエレメント及びデータコンテナに対して個別にデータを操作するトランザクションを実行する処理部の生成又は削除を行い、アクティブなトランザクションを管理する工程と、
前記処理部によるトランザクションの実行中に、操作対象となるデータに対する操作内容、及びトランザクションを識別する識別情報を含む操作情報を記録する工程と、
データの一貫性を損なう原因となり得る競合の有無を検知する第１検知工程及び第２検知工程の少なくともいずれかと、
前記第１検知工程及び前記第２検知工程の少なくともいずれかで競合を検知した場合、トランザクションを中止する工程と、
を含み、
前記第１検知工程では、
前記処理部によるトランザクションの実行状態時に、データエレメントに対する操作とデータコンテナに対する操作との間の競合を検知し、
前記第２検知工程では、
前記処理部によるトランザクションのコミット準備状態時に、前記操作情報に基づいて、データエレメントに対する操作とデータコンテナに対する操作との間の競合を検知する
情報処理方法。
【請求項６】
データコンテナを保持するデータエレメントを記憶する記憶部を有する端末装置にデータを記憶させる情報処理プログラムであって、
前記記憶部が記憶するデータエレメント及びデータコンテナに対して個別にデータを操作するトランザクションを実行する処理部の生成又は削除を行い、アクティブなトランザクションを管理するステップと、
前記処理部によるトランザクションの実行中に、操作対象となるデータに対する操作内容、及びトランザクションを識別する識別情報を含む操作情報を記録するステップと、
データの一貫性を損なう原因となり得る競合の有無を検知する第１検知ステップ及び第２検知ステップの少なくともいずれかと、
前記第１検知ステップ及び前記第２検知ステップの少なくともいずれかで競合を検知した場合、トランザクションを中止するステップと、
をコンピュータに実行させ、
前記第１検知ステップでは、
前記処理部によるトランザクションの実行状態時に、データエレメントに対する操作とデータコンテナに対する操作との間の競合を検知し、
前記第２検知ステップでは、
前記処理部によるトランザクションのコミット準備状態時に、前記操作情報に基づいて、データエレメントに対する操作とデータコンテナに対する操作との間の競合を検知する
ための情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、端末装置、情報処理方法及び情報処理プログラムに関する。
【背景技術】
【０００２】
従来、関連情報の高速な探索を目的とするデータベースとして、例えばグラフデータベースが知られている。例えば、ソーシャルグラフなどの大規模なデータグラフでは、書込みトランザクションの同時実行効率を向上させることが望まれている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Neo  Technology,  “Neo4j  Reference  Manual  Chapter.12  Transaction  Management”,[online],[平成２５年４月１２日検索]、インターネット＜ＵＲＬ：http://docs.neo4j.org/chunked/stable/transactions.html＞
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の方法では、ソーシャルグラフなど、多数のエッジを持ったノード（ハブノード）が多数存在する場合に、ハブノードへの書込み競合が発生しやすく、書込みトランザクションの同時実行効率を向上させることが困難であるという問題があった。本発明の実施形態が解決しようとする課題は、書込みトランザクションの同時実行効率を向上させることができる端末装置、情報処理方法及び情報処理プログラムを提供することである。
【課題を解決するための手段】
【０００５】
実施形態の端末装置は、記憶部と、管理部と、操作記録部と、第１検知部及び第２検知部の少なくともいずれかと、を有する。記憶部は、データコンテナを保持するデータエレメントを記憶する。管理部は、記憶部が記憶するデータエレメント及びデータコンテナに対して個別にデータを操作するトランザクションを実行する処理部の生成及び削除を行う。操作記録部は、処理部によるトランザクションの実行中に、操作対象となるデータに対する操作内容、及びトランザクションを識別する識別情報、を含む操作情報を記録する。第１検知部及び第２検知部は、データの一貫性を損なう原因となり得る競合の有無を検知する。また、第１検知部は、処理部によるトランザクションの実行状態時に、データエレメントに対する操作とデータコンテナに対する操作との間の競合を検知する。また、第２検知部は、処理部によるトランザクションのコミット準備状態時に、操作情報に基づいて、データエレメントに対する操作とデータコンテナに対する操作との間の競合を検知する。また、処理部は、第１検知部及び第２検知部の少なくともいずれかが競合を検知した場合、トランザクションを中止する。
【図面の簡単な説明】
【０００６】
【図１】実施形態にかかる端末装置の構成を例示するブロック図。
【図２】複数のデータエレメントがそれぞれデータコンテナを有している構成を示す図。
【図３】操作情報の構造、及び操作情報の記録場所を模式的に示す図。
【図４】データの書き込み及び更新のトランザクションが実行された場合の操作情報におけるデータの変遷を例示する図。
【図５】トランザクションの実行状態における端末装置の動作を示すアクティビティ図。
【図６】トランザクションのコミット準備状態における端末装置の動作を示すアクティビティ図。
【図７】実施形態にかかる端末装置が複数のトランザクションを実行する場合の具体例を模式的に示す図。
【図８】図７に示したＴｘ（Ａ）とＴｘ（Ｃ）を実施形態にかかる端末装置が実行した場合（実施例）の動作と、比較例の動作とを示す図。
【図９】図２に示したデータエレメントとデータコンテナをグラフ構造データに適用した場合の構成を例示する図。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかる端末装置について説明する。
【０００８】
（実施形態）
図１は、実施形態にかかる端末装置１の構成を例示するブロック図である。端末装置１は、例えば、汎用のコンピュータなどによって実現される。即ち、端末装置１は、ＣＰＵ、記憶装置及び通信インターフェイスなどを備えたコンピュータとしての機能を有する。また、端末装置１は、サーバ装置として実現されてもよいし、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）、デジタルテレビ、ハードディスクレコーダ、スレートＰＣ又はスマートフォン等のデジタル機器として実現されてもよい。
【０００９】
図１に示すように、端末装置１は、記憶部１０、管理部１２、第１検知部１４、操作記録部１６及び第２検知部１８を有する。記憶部１０は、例えば単一又は複数のＨＤＤ（Hard  Disk  Drive）などによって構成される。また、記憶部１０は、他の不揮発性の補助記憶装置（ＳＳＤ、フラッシュメモリ、ＭＲＡＭ等）であってもよいし、主記憶装置であってもよい。管理部１２、第１検知部１４、操作記録部１６及び第２検知部１８は、ハードウェア回路、又はＣＰＵで実行するソフトウェアのいずれであってもよい。
【００１０】
記憶部１０は、複数のデータエレメントを記憶する。図２は、複数のデータエレメント（エレメント）がそれぞれデータコンテナを有している構成を示す図である。データエレメント３は、それぞれデータコンテナ３０を有する。データコンテナ３０は、複数のデータ３００の追加・更新・削除・取得（検索）を提供するデータ管理機構であり、例えば、B-Tree、Hash、List、SkipList等の様々な実現形態を採り得る。
【００１１】
例えば、データエレメント３は、グラフデータベースのノード又はエッジなどである。データコンテナ３０は、属性（例えば図３におけるｎａｍｅ，ａｇｅなど）を含む。データ３００は、数値や名称などの値である。
【００１２】
管理部（トランザクション管理部）１２（図１）は、後述する処理部（トランザクション処理部）２０の生成及び削除などを行い、処理部２０の管理を行う。管理部１２は、処理部２０を生成する場合に、処理部２０を一意に識別する識別情報（トランザクションＩＤ）を付与する。また、管理部１２は、少なくとも処理部２０が生存する期間中には、付与したトランザクションＩＤと当該処理部２０への参照情報とを対にして保持する。また、管理部１２は、後述する第１検知部１４及び第２検知部１８からのトランザクションＩＤをキーとした問い合わせに対し、該当トランザクションの状態や処理完了時間を返す。
【００１３】
処理部２０は、記憶部１０に格納されているデータエレメント３及びデータコンテナ３０内のデータ３００（以降、「データコンテナ３０内のデータ３００」をコンテナデータ３００と記すことがある）に対する複数の操作（トランザクション）を、一貫性を保って実行する。
【００１４】
トランザクションでは、例えば、数値データＡ＝１００、Ｂ＝１００が記憶部１０に格納されており、「ＡからＢへ１０渡す」という処理を行う場合、Ａ−１０とＢ＋１０の２種類の処理を、両方実行するか（Ａ＝９０、Ｂ＝１１０）、両方実行しないか（Ａ＝１００、Ｂ＝１００）のいずれかであることを保証する。
【００１５】
このために、処理部２０は、実行状態、コミット準備状態、コミット完了状態及びアボート状態の４つのいずれかの状態をとる。
【００１６】
実行状態は、データエレメント３やコンテナデータ３００に対する操作を行っている状態である。処理部２０は、管理部１２によって生成された時点で実行状態にある。実行状態では、一連の操作はコミットされておらず（確定されておらず）、ロールバックされ得る。処理部２０は、実行状態において、実際に操作してよいか否かを、後述する第１検知部１４の検知結果などに応じて判断する。
【００１７】
コミット準備状態は、一連の操作を終え、操作完了時間を取得した状態である。処理部２０は、コミット準備状態において、実際にコミットしてよいか否かを、後述する第２検知部１８の検知結果などに応じて判断する。
【００１８】
コミット完了状態は、コミット可能な場合に、一連の操作を確定した状態である。処理部２０は、コミット完了状態において、後述する操作記録部１６が記録した操作情報４に含まれるトランザクションＩＤを、アトミックに操作完了時間に置き換える。さらに、処理部２０は、一連の操作のログを不揮発な記憶領域に書き込み、コミットデータの永続性を担保する処理を行ってもよい。最後に、処理部２０は、処理を終了する。
【００１９】
アボート状態は、コミットできない場合に、実行した操作をキャンセルした状態である。例えば、処理部２０は、書き込みの競合が起こった場合、及び上位のアプリケーションなどからキャンセルが実行された場合などに、実行した操作をキャンセルする。処理部２０は、アボート状態において、後述する操作記録部１６が記録した操作情報４を全て消去し（ロールバックし）、処理を終了する。また、処理部２０は、４つの状態を示す状態情報を保持する。
【００２０】
第１検知部１４は、実行状態において、データエレメント３に対する操作と、データコンテナ３０内のデータ３００に対する操作との間の競合（競合の有無）を検出する。第１検知部１４が検知する競合は、データの一貫性を損なう原因となり得る競合である。
【００２１】
操作記録部１６は、実行状態において、後述する操作情報４を操作箇所に記録する。また、操作記録部１６は、処理部２０内に操作箇所を示す操作箇所情報を記録する。操作箇所情報は、操作情報４を参照するためのポインタであり、例えば更新前データ（旧データ）へのポインタである。
【００２２】
第２検知部１８は、コミット準備状態において、データエレメント３に対する操作と、データコンテナ３０内のデータ３００に対する操作との間の競合（競合の有無）を検出する。第２検知部１８が検知する競合は、データの一貫性を損なう原因となり得る競合である。
【００２３】
次に、操作記録部１６が記録する操作情報４について詳述する。図３は、操作情報４の構造、及び操作情報４の記録場所を模式的に示す図である。図３に示すように、操作情報４は、第１領域４０、第２領域４２、第３領域４４及び第４領域４６を有する。なお、データ（操作内容：値）は、第３領域４４に書込まれるものとする。また、データが更新される場合は、新たな操作情報４の第３領域４４にデータが書き込まれるものとする（追記型）。追記によって旧データとなった操作情報４は、参照されなくなった段階で、回収・削除してもよい。
【００２４】
第１領域４０は、例えばデータを第３領域４４に書き込むトランザクションの完了時に、操作記録部１６が完了時間（登録時間）を書き込む領域である。ただし、第１領域４０は、トランザクションが実行されて完了するまでの間には、実行されているトランザクションを識別する識別情報（トランザクションＩＤ）が書き込まれる。
【００２５】
第２領域４２は、第３領域４４に書き込まれたデータを更新するトランザクションの完了時に、操作記録部１６が更新時間を書き込む領域である。ただし、第２領域４２は、データを更新するトランザクションが完了するまでは、他の値が書き込まれる。例えば、第３領域４４に書き込まれたデータを更新するトランザクションが実行されていない場合、第２領域４２には、第３領域４４に書き込まれたデータが有効である旨を示す値（例えば”０”）が書き込まれる。また、第３領域４４に書き込まれたデータを更新するトランザクションが実行されて完了するまでの間には、実行されているトランザクションを識別する識別情報（トランザクションＩＤ）が書き込まれる。
【００２６】
第３領域４４は、上述したように、操作されるデータ（値）を操作記録部１６が書き込む領域である。
【００２７】
第４領域４６は、次データ（次に更新されるデータ）へのポインタを操作記録部１６が書き込む領域である。なお、第４領域４６は、次データがない場合には、次データが無いことを示す情報、例えば、”ＮＵＬＬ”が書き込まれるものとする。
【００２８】
操作情報４は、データエレメント３及びデータコンテナ３０、並びに旧データ及び最新データのいずれにおいても同じ構造となっている。図３においては、データエレメント３に対して上位コンテナが設けられている場合が示されている。
【００２９】
例えば、操作記録部１６は、データエレメント３を追加する場合、データエレメント３が属する上位コンテナの新規データエントリポイントの開始時間にトランザクションＩＤを記録し、データに新規データエレメント３を記録する。ここで、操作記録部１６は、第２領域４２には未更新（有効）を示す情報（例えば”０”）を書き込み、第４領域４６には次データがないことを示す情報（例えば”ＮＵＬＬ”）を初期値として書き込む。
【００３０】
また、操作記録部１６は、コンテナデータ３００を追加する場合、コンテナデータ３００が属するデータコンテナ３０の新規データエントリポイントの開始時間にトランザクションＩＤを記録し、データに新規コンテナデータを記録する。ここで、操作記録部１６は、第２領域４２には未更新（有効）を示す情報（例えば”０”）を書き込み、第４領域４６には次データがないことを示す情報（例えば”ＮＵＬＬ”）を初期値として書き込む。
【００３１】
また、操作記録部１６は、データエレメント３を更新する場合、旧（更新対象）データエレメントの第２領域４２にトランザクションＩＤを記録し、旧（更新対象）データエレメントの第４領域４６に更新データエレメントのアドレスを記録する。そして、操作記録部１６は、更新データエレメントの第１領域４０にトランザクションＩＤを記録し、更新データエレメントの第３領域４４に更新データエレメントを記録する。
【００３２】
また、操作記録部１６は、コンテナデータ３００を更新する場合、旧（更新対象）コンテナデータの第２領域４２にトランザクションＩＤを記録し、旧（更新対象）コンテナデータの第４領域４６に更新コンテナデータのアドレスを記録する。そして、操作記録部１６は、更新コンテナデータの第１領域４０にトランザクションＩＤを記録し、更新コンテナデータの第３領域４４に更新コンテナデータを記録する。
【００３３】
また、操作記録部１６は、データエレメント３を削除する場合、旧（削除対象）データエレメントの第２領域４２にトランザクションＩＤを記録する。
【００３４】
また、操作記録部１６は、コンテナデータ３００を削除する場合、旧（更新対象）コンテナデータの第２領域４２にトランザクションＩＤを記録する。
【００３５】
なお、上記のトランザクションＩＤは、コミット完了状態になると、操作完了時間にアトミックに置き換えられる。一方、アボート状態になると、トランザクションＩＤは初期値（“０”等）にアトミックに戻される。ここで、トランザクションＩＤが初期値であるものは、操作情報４ではなく、更新対象となり得る最新データエレメント、又は最新コンテナデータであるとする。また、操作情報４は、追加・更新・削除の操作種別を残す領域を設けられてもよいし、削除フラグを立てる領域が設けられてもよい。
【００３６】
図４は、データの書き込み及び更新のトランザクションが実行された場合の操作情報４におけるデータの変遷を例示する図である。図４において、Ｔｘ（１）は、データの書き込み（生成）を行うトランザクションであり、Ｔｘ（２）は、データの更新を行うトランザクションである。
【００３７】
Ｔｘ（１）が実行されると、第１領域４０にトランザクションＩＤ＝１、第２領域４２にデータの有効を示す値”０”、第３領域４４にデータ（ａｇｅの書き込まれる値２０）、第４領域４６に次データがないことを示す”ＮＵＬＬ”がそれぞれ書き込まれる（状態１：Ｓ１）。つまり、Ｓ１は、Ｔｘ（１）の実行状態を示している。
【００３８】
Ｔｘ（１）のコミット完了時間は、１:００であったとする。Ｔｘ（１）がコミット完了となると、第１領域４０には、Ｔｘ（１）のコミット完了時間（１：００）が書き込まれる（状態２：Ｓ２）。つまり、Ｓ２は、Ｔｘ（１）のコミット完了状態を示している。
【００３９】
Ｔｘ（２）が実行されると、第２領域４２にトランザクションＩＤ＝２が書き込まれ、第４領域４６に次データへのポイントが書き込まれ、新たな操作情報４に対する書込みが行われる。新たな操作情報４は、第１領域４０にトランザクションＩＤ＝２、第２領域４２にデータの有効を示す値”０”、第３領域４４にデータ（ａｇｅの更新される値２１）、第４領域４６に次データがないことを示す”ＮＵＬＬ”がそれぞれ書き込まれる（状態３：Ｓ３）。つまり、Ｓ３は、Ｔｘ（２）の実行状態を示している。
【００４０】
Ｔｘ（２）のコミット完了時間は、２:００であったとする。Ｔｘ（２）がコミット完了となると、第３領域４４にデータ（２０）が書き込まれた操作情報４の第２領域４２に、データ（２０）の更新時間が書き込まれる。また、第３領域４４にデータ（２１）が書き込まれた新たな操作情報４の第１領域４０には、Ｔｘ（２）のコミット完了時間（２：００）が書き込まれる（状態４：Ｓ４）。つまり、Ｓ４は、Ｔｘ（２）のコミット完了状態を示している。
【００４１】
従って、ａｇｅの値２０は、１:００〜２:００まで有効であったこととなる。また、Ｔｘ（２）がアボートとなった場合には、Ｔｘ（２）において行われた処理が取り消される。
【００４２】
次に、端末装置１の動作について説明する。図５は、トランザクションの実行状態における端末装置１の動作を示すアクティビティ図である。まず、処理部２０は、トランザクションの操作開始時間を取得する（Ｓ１００）。
【００４３】
次に、処理部２０は、トランザクションの操作対象を取得する（Ｓ１０２）。ここで、処理部２０は、旧データをスキップし、最新データを取得するために、Ｓ１００の処理で取得した操作開始時間を用いる。
【００４４】
具体的には、処理部２０は、データの操作開始時間が登録時間（図３参照）と更新時間の間であれば、当該トランザクションにおける最新データとみなして取得する。また、処理部２０は、データの操作開始時間が登録時間よりも小さければ（早い時間であれば）、当該トランザクションにとっては未来に生成されたデータとみなし、存在しないものとして扱う。また、処理部２０は、データの操作開始時間が更新時間よりも大きければ（遅い時間であれば）、当該トランザクションにとっては過去に削除されたデータとみなし、存在しないものとして扱う。このとき、処理部２０は、操作情報４の第４領域４６を参照し、次のデータが存在する場合には、次のデータを参照し、同様に、登録時間と更新時間を参照して、当該トランザクションにおける最新データであるか否かの判定を行う。なお、処理部２０は、第２領域４２に他のトランザクションＩＤが含まれている場合には、後述するＳ１１８〜Ｓ１２０と同等の判定処理を行う。すなわち、処理部２０は、該当トランザクションの状態に応じて、データを取得するか否かを判定する。具体的には、アボート状態の場合には、処理部２０は、当該データを最新データとみなして取得する。実行状態の場合には、処理部２０は、データの一貫性を損なう原因となり得る競合が有るとみなしてアボートする。コミット完了状態の場合には、処理部２０は、更新された（削除された）データとみなし、次データのチェックへ移行する。コミット準備状態の場合には、投機的実行を許すか否かによって処理部２０の挙動が変わる。投機的実行を許す場合は、処理部２０は、コミット完了状態の場合と同様、次データのチェックへ移行する。一方、投機的実行を許さない場合には、処理部２０は、競合が有るとみなしてアボートする。
【００４５】
処理部２０は、操作対象がない場合にはコミット準備状態へ遷移させる（Ｓ１０４）。また、処理部２０は、操作対象がある場合には、第１検知部１４に競合の有無を検知させる。
【００４６】
第１検知部１４は、操作対象の種別（データエレメント３、又はデータコンテナ３０内のデータ３００：コンテナデータ３００のいずれか）を判定する（Ｓ１０６）。第１検知部１４は、操作対象がコンテナデータ３００である場合、上位のデータエレメント３の操作情報４の有無を確認する（Ｓ１０８）。また、第１検知部１４は、操作対象がデータエレメント３である場合、下位の（属する）コンテナデータ３００の操作情報４の有無を確認する（Ｓ１１０）。ここでいう操作情報４の有無は、より詳しくは、データの一貫性を損なう原因となり得る競合の可能性のある操作情報４の有無のことである。つまり、第１検知部１４は、当該操作情報４の第２領域４２がトランザクションＩＤを有するか、又は操作開始時間よりも後の操作完了時間を有するかによって判断する。
【００４７】
第１検知部１４は、データエレメント３又はコンテナデータ３００の操作情報４が有る場合、Ｓ１０８又はＳ１１０の処理で確認した操作情報４の第２領域４２がトランザクションＩＤか操作完了時間かを判定する（Ｓ１１２）。また、第１検知部１４は、データエレメント３又はコンテナデータ３００の操作情報４がない場合、操作記録部１６に操作情報４を記録させる通知を行う。
【００４８】
第１検知部１４は、操作情報４の第２領域４２が操作完了時間（すなわち、Ｓ１００で取得した操作開始時間よりも後の操作完了時間）である場合には、他のトランザクションの処理がエレメントの削除であるか否かを判定し（Ｓ１２２）、該当しなければ、操作記録部１６に操作情報４を記録させる通知を行い、該当すれば（エレメントの削除である場合には）、データの一貫性を損なう原因となり得る競合が有ることを検知し、その旨を処理部２０に対して通知する（Ｓ１１４）。処理部２０は、第１検知部１４から競合が有る旨の通知を受けると、トランザクションをアボート状態へ遷移させる（Ｓ１１６）。
【００４９】
また、第１検知部１４は、操作情報４の第２領域４２がトランザクションＩＤである場合には、他のトランザクションの状態を管理部１２に問い合わせることによって確認する（Ｓ１１８）。
【００５０】
第１検知部１４は、他のトランザクションが実行状態である場合にも、データの一貫性を損なう原因となり得る競合が有ることを検知し、その旨を処理部２０に対して通知する（Ｓ１１４）。また、第１検知部１４は、他のトランザクションがコミット準備状態である場合には、投機的実行を許すか否かを判定する（Ｓ１２０）。また、第１検知部１４は、他のトランザクションがアボート状態である場合には、操作記録部１６に操作情報４を記録させる通知を行う。第１検知部１４は、他のトランザクションがコミット完了状態である場合（完了状態に遷移しているが、まだトランザクションＩＤから更新時間への変更が完了していない場合）は、Ｓ１１２において、操作完了時間であった場合と、同様の処理を行う。すなわち、第１検知部１４は、他のトランザクションの処理がエレメントの削除であるか否かを判定し（Ｓ１２２）、該当しなければ、操作記録部１６に操作情報４を記録させる通知を行い、該当すれば（エレメントの削除である場合には）、データの一貫性を損なう原因となり得る競合が有ることを検知し、その旨を処理部２０に対して通知する（Ｓ１１４）。
【００５１】
第１検知部１４は、投機的実行を不許可とする場合にも、データの一貫性を損なう原因となり得る競合が有ることを検知し、その旨を処理部２０に対して通知する（Ｓ１１４）。また、第１検知部１４は、投機的実行を許可する場合には、他のトランザクションの処理がエレメントの削除であるか否かを判定する（Ｓ１２２）。
【００５２】
第１検知部１４は、他のトランザクションの処理がエレメントの削除である場合にも、データの一貫性を損なう原因となり得る競合が有ることを検知し、その旨を処理部２０に対して通知する（Ｓ１１４）。また、第１検知部１４は、他のトランザクションの処理がエレメントの削除でない場合には、操作記録部１６に操作情報４を記録させる通知を行う。
【００５３】
操作記録部１６は、第１検知部１４からの通知に応じて、操作情報４を操作箇所に記録する（Ｓ１２４）。また、操作記録部１６は、操作箇所を処理部２０内に記録し（Ｓ１２６）、処理部２０に新たな操作対象を取得させる（Ｓ１０２）。
【００５４】
なお、操作記録部１６は、具体的には、次のような処理を行う。まず、操作記録部１６が行う操作は、基本的には、”追加”、”更新”又は”削除”のいずれかである。ただし、操作記録部１６は、更新無しの操作を行うものであってもよい。
【００５５】
例えば、記憶部１０が記憶するデータがグラフ構造データである場合、操作記録部１６は、ノード・エッジのレベルでは追加・削除を行い、ノード・エッジに属するコンテナデータ（プロパティ情報やノードが保持するエッジ情報）のレベルでは追加・更新・削除を行う。
【００５６】
また、操作記録部１６は、”追加”の操作として、生成のみを行ってもよいし、生成と追記（append）を行ってもよい。
【００５７】
図６は、トランザクションのコミット準備状態における端末装置１の動作を示すアクティビティ図である。まず、処理部２０は、トランザクションの操作完了時間を取得する（Ｓ２００）。ここで、処理部２０は、トランザクションがコミット準備状態に遷移した時間を操作完了時間とみなす。
【００５８】
次に、処理部２０は、操作記録部１６が記録した操作情報４の場所を示す操作箇所情報を取得する（Ｓ２０２）。
【００５９】
処理部２０は、操作箇所がない場合にはコミット完了状態へ遷移させる（Ｓ２０４）。また、処理部２０は、操作箇所がある場合には、第２検知部１８に競合の有無を検知させる。
【００６０】
第２検知部１８は、操作対象の種別（データエレメント３、又はデータコンテナ３０内のデータ３００：コンテナデータ３００のいずれか）を判定する（Ｓ２０６）。
【００６１】
第２検知部１８は、操作対象がコンテナデータ３００である場合、上位のデータエレメント３の操作情報４の有無を確認する（Ｓ２０８）。また、第２検知部１８は、操作対象がデータエレメント３である場合、下位の（属する）コンテナデータ３００の操作情報４の有無を確認する（Ｓ２１０）。
【００６２】
第２検知部１８は、データエレメント３又はコンテナデータ３００の操作情報４が有る場合、Ｓ２０８又はＳ２１０の処理で確認した操作情報４の第２領域４２がトランザクションＩＤか操作完了時間かを判定する（Ｓ２１２）。また、第２検知部１８は、データエレメント３又はコンテナデータ３００の操作情報４がない場合、処理部２０が新たな操作箇所情報を取得するように通知を行う。
【００６３】
第２検知部１８は、操作情報４の第２領域４２が操作完了時間である場合には、他のトランザクションの処理がエレメントの削除であるか否かを判定し（Ｓ２２８）、該当しなければ、処理部２０が新たな操作箇所情報を取得するように通知を行い、該当すれば（エレメントの削除である場合には）、データの一貫性を損なう原因となり得る競合が有ることを検知し、その旨を処理部２０に対して通知する（Ｓ２１４）。処理部２０は、第２検知部１８から競合が有る旨の通知を受けると、トランザクションをアボート状態へ遷移させる（Ｓ２１６）。
【００６４】
また、第２検知部１８は、操作情報４の第２領域４２がトランザクションＩＤである場合には、他のトランザクションの状態を管理部１２に問い合わせることによって確認する（Ｓ２１８）。
【００６５】
第２検知部１８は、他のトランザクションがコミット準備状態である場合には、投機的実行を許すか否かを判定する（Ｓ２２０）。また、第２検知部１８は、他のトランザクションがアボート状態又は実行状態である場合には、処理部２０が新たな操作箇所情報を取得するように通知を行う。一方、第２検知部１８は、他のトランザクションがコミット完了状態である場合（完了状態に遷移しているが、まだトランザクションＩＤから更新時間への変更が完了していない場合）は、Ｓ２１２において、操作完了時間であった場合と、同様の処理を行う。すなわち、第２検知部１８は、他のトランザクションの処理がエレメントの削除であるか否かを判定し（Ｓ２２８）、該当しなければ、処理部２０が新たな操作箇所情報を取得するように通知を行い、該当すれば（エレメントの削除である場合には）、データの一貫性を損なう原因となり得る競合が有ることを検知し、その旨を処理部２０に対して通知する（Ｓ２１４）。
【００６６】
第２検知部１８は、投機的実行を不許可とする場合にも、データの一貫性を損なう原因となり得る競合が有ることを検知し、その旨を処理部２０に対して通知する（Ｓ２１４）。また、第２検知部１８は、投機的実行を許可する場合には、他のトランザクションの操作完了時間を確認する（Ｓ２２２）。
【００６７】
第２検知部１８は、自トランザクションの完了時間（自完了時間）が他のトランザクションの完了時間（他完了時間）よりも大きい（遅い）場合には、他のトランザクションの処理がエレメントの削除であるか否かを判定する（Ｓ２２４）。また、第２検知部１８は、自完了時間が他完了時間よりも小さい（早い）場合には、処理部２０が新たな操作箇所情報を取得するように通知を行う。また、第２検知部１８は、自完了時間と他完了時間とが同じ場合には、データの一貫性を損なう原因となり得る競合が有ることを検知し、その旨を処理部２０に対して通知する（Ｓ２１４）。ただし、処理部２０は、自完了時間と他完了時間とが同じにならないように構成されていてもよい。
【００６８】
第２検知部１８は、他のトランザクションの処理がエレメントの削除であると判定した場合には、処理部２０がトランザクションをアボート状態へ遷移させるように通知を行う（Ｓ２１６）。また、第２検知部１８は、他のトランザクションの処理がエレメントの削除でないと判定した場合には、処理部２０が他のトランザクションのコミット完了を待機するように通知を行う（Ｓ２２６）。
【００６９】
処理部２０は、アボートの指示を受信した場合には、トランザクションをアボート状態へ遷移させる（Ｓ２１６）。また、処理部２０は、コミット完了の旨を受信した場合には、新たな操作箇所情報を取得する（Ｓ２０２）。
【００７０】
次に、端末装置１が複数のトランザクションを実行する場合の具体例について説明する。図７は、端末装置１が複数のトランザクションを実行する場合の具体例を模式的に示す図である。図７においては、３本のトランザクションＴｘ（Ａ）、Ｔｘ（Ｂ）、Ｔｘ（Ｃ）が以下の処理を行う。
【００７１】
Ｔｘ（Ａ）は、ａｇｅ＝２０を、ａｇｅ＝２１へ更新するトランザクションである。Ｔｘ（Ｂ）は、ｌｏｃａｔｉｏｎ＝Ｏｓａｋａを、ｌｏｃａｔｉｏｎ＝Ｔｏｋｙｏへ変更するトランザクションである。Ｔｘ（Ｃ）は、データコンテナ３０を有するデータエレメント３自体を削除するトランザクションである。
【００７２】
Ｔｘ（Ａ）とＴｘ（Ｂ）とは競合しない。Ｔｘ（Ａ）とＴｘ（Ｃ）、Ｔｘ（Ｂ）とＴｘ（Ｃ）は、それぞれ競合し得る。
【００７３】
ここで、Ｔｘ（Ａ）とＴｘ（Ｃ）に着目する。また、図８は、図７に示したＴｘ（Ａ）とＴｘ（Ｃ）を実施形態にかかる端末装置１が実行した場合（実施例）の動作と、比較例の動作とを示す図である。Ｔｘ（Ａ）の次にＴｘ（Ｃ）が実行される場合は以下のような動作となる。
【００７４】
実施例において、Ｔｘ（Ａ）が実行状態でＴｘ（Ｃ）がデータエレメント３の削除を実行する場合、Ｔｘ（Ｃ）はアボートする。Ｔｘ（Ａ）がコミット準備状態でＴｘ（Ｃ）がデータエレメント３の削除を実行し、かつ、Ｔｘ（Ｃ）が投機的実行を行わない場合、Ｔｘ（Ｃ）はアボートする。
【００７５】
また、Ｔｘ（Ａ）がコミット準備状態でＴｘ（Ｃ）がデータエレメント３の削除を実行し、かつ、Ｔｘ（Ｃ）が投機的実行を行う場合、Ｔｘ（Ｃ）は削除を実行する。Ｔｘ（Ｃ）は、コミット準備状態に遷移すると、Ｔｘ（Ａ）がコミット完了状態に遷移するのを待って、コミット完了状態に遷移する。一方、Ｔｘ（Ａ）がアボートした場合、Ｔｘ（Ｃ）は、これを受けて同様にアボートする。
【００７６】
Ｔｘ（Ａ）がコミット完了状態でＴｘ（Ｃ）がデータエレメント３の削除を実行する場合、Ｔｘ（Ｃ）は削除を実行する。
【００７７】
なお、Ｔｘ（Ｃ）の次にＴｘ（Ａ）が実行される場合、上記の動作は、Ｔｘ（Ａ）とＴｘ（Ｃ）とを入れ替えた（読み替えた）動作となる。
【００７８】
このように、実施形態によれば、データコンテナ３０が同時実行制御可能な条件下では、Ｔｘ（Ａ）とＴｘ（Ｂ）は互いに干渉せず、かつ、Ｔｘ（Ａ）とＴｘ（Ｂ）が属する上位のデータエレメントが変更される場合においても、処理の一貫性は保たれる。
【００７９】
これに対し、比較例では、Ｔｘ（Ｃ）が削除を実行するためには、Ｔｘ（Ａ）のコミット完了まで待つ必要がある。つまり、実施例は、比較例に対して複数のトランザクションを早くコミット完了状態にするアドバンテージがある。
【００８０】
（適用例）
図９は、図２に示したデータエレメントとデータコンテナをグラフ構造データに適用した場合の構成を例示する図である。図９において、データエレメントはノードエレメント（Ｖ１，Ｖ２，Ｖ３，Ｖ４）とエッジエレメント（図示しない属性コンテナを有する）である。例えば、ノードＶ２（Ｖｅｒｔｅｘ３ａ）は、データコンテナが属性コンテナ３０ａ、内向きエッジコンテナ３０ｂ及び外向きエッジコンテナ３０ｃで構成される。属性コンテナ３０ａは、属性名及び値によって構成される属性情報を格納するデータコンテナである。内向きエッジコンテナ３０ｂは、内向きエッジを格納するデータコンテナである。外向きエッジコンテナ３０ｃは、外向きエッジを格納するデータコンテナである。
【００８１】
図９に示したグラフ構造データでは、本実施形態で述べたコンテナデータ粒度での同時実行制御に加えて、、データコンテナ（属性コンテナ３０ａ、内向きエッジコンテナ３０ｂ、外向きエッジコンテナ３０ｃ）の粒度で同時実行制御を行うバリエーションも、一実施形態として想定できる。この場合、具体的には、属性に対する操作と、エッジに対する操作を、それぞれ別のトランザクションが担う場合、互いに干渉せずに同時実行させることが可能となり、実行の並列度を高めることができる。
【００８２】
このように、端末装置１は、同時実行制御の単位をデータコンテナ内のデータに対する個別操作の粒度まで細分化することによって同時実行効率を高めた上で、第１検知部１４及び第２検知部１８の少なくともいずれかが、上位のデータエレメントへの変更操作との競合を検知することができるので、操作の一貫性を担保することができる。
【００８３】
本実施形態の端末装置１で実行される情報処理プログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【００８４】
また、本実施形態の端末装置１で実行される情報処理プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。
【００８５】
また、本発明のいくつかの実施形態を複数の組み合わせによって説明したが、これらの実施形態は例として提示したものであり、発明の範囲を限定することは意図していない。これら新規の実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００８６】
１  端末装置
１０  記憶部
１２  管理部
１４  第１検知部
１６  操作記録部
１８  第２検知部
２０  処理部
３  データエレメント
３０  データコンテナ
３００  データ（コンテナデータ）
４  操作情報
４０  第１領域
４２  第２領域
４４  第３領域
４６  第４領域
【図１】
2014215894.tif 000003
【図２】
2014215894.tif 000004
【図３】
2014215894.tif 000005
【図４】
2014215894.tif 000006
【図５】
2014215894.tif 000007
【図６】
2014215894.tif 000008
【図７】
2014215894.tif 000009
【図８】
2014215894.tif 000010
【図９】
2014215894.tif 000011