(57)【要約】【課題】リレーショナルデータベースにおける木構造の再構成時において、更新ロックによるサービス応答不可時間を低減するとともに、データ検索読み出し性能を低下させずに保持する。【解決手段】木構造データ処理システム１０００の木構造データ処理装置１０は、入れ子集合データテーブルを参照して検索処理する要求処理スレッドを立ち上げて実行するともに、ナイーブツリーデータテーブルのデータ更新をする要求処理スレッド１５０を立ち上げて実行する処理スレッド設定部と、ナイーブツリーデータテーブルと入れ子集合データテーブルとの間の同期処理の開始を示す同期待ち指示情報を受信した場合に、各要求処理スレッド１５０の状態を同期待ちに切り替える同期状態管理部とを備える。同期装置は、更新要求により更新されたナイーブツリーデータテーブルのデータを、入れ子集合データテーブルのデータに変換して同期させる同期処理部を備える。【選択図】図２
2020173741.tif 000002
【特許請求の範囲】
【請求項１】
リレーショナルデータベースにおける木構造データをデータテーブルに格納するＤＢサーバと、前記木構造データの更新および検索処理を制御する木構造データ処理装置と、前記ＤＢサーバに格納されたデータテーブル同士を同期させる同期装置と、を備える木構造データ処理システムであって、
前記ＤＢサーバは、１つのサービスについてのデータテーブルとして、前記木構造データをナイーブツリー方式でモデル化したデータテーブルを示すナイーブツリーデータテーブルと、前記木構造データを入れ子集合方式でモデル化したデータテーブルを示す入れ子集合データテーブルとを、対応付けて格納する記憶部を備え、
前記木構造データ処理装置は、
前記木構造データの更新要求および検索要求を受け付ける要求受付部と、
前記検索要求を受け付けた場合に、前記入れ子集合データテーブルを参照して検索処理する要求処理スレッドを立ち上げて実行するともに、前記更新要求を受け付けた場合に、前記ナイーブツリーデータテーブルのデータ更新をする要求処理スレッドを立ち上げて実行する処理スレッド設定部と、
前記ナイーブツリーデータテーブルと前記入れ子集合データテーブルとの間の同期処理の開始を示す同期待ち指示情報を受信した場合に、各前記要求処理スレッドの状態を同期待ちに切り替える同期状態管理部と、を備え、
前記同期装置は、
前記ＤＢサーバから、前記ナイーブツリーデータテーブルの更新完了の情報を受信した場合に、前記同期待ち指示情報を前記木構造データ処理装置に送信する同期待ち指示部と、
前記更新要求により更新された前記ナイーブツリーデータテーブルのデータを、前記入れ子集合データテーブルのデータに変換して同期させる同期処理部と、を備え、
前記木構造データ処理装置は、
各前記要求処理スレッドの状態が同期待ちである場合において、前記要求受付部が前記木構造データの検索要求を受け付けたときに、前記処理スレッド設定部が、前記入れ子集合データテーブルに代えて、前記ナイーブツリーデータテーブルを参照して検索処理を実行すること
を特徴とする木構造データ処理システム。
【請求項２】
リレーショナルデータベースにおける木構造データをデータテーブルに格納するＤＢサーバと、前記木構造データの更新および検索処理を制御する木構造データ処理装置と、前記ＤＢサーバに格納されたデータテーブル同士を同期させる同期装置と、を備える木構造データ処理システムの木構造データ処理方法であって、
前記ＤＢサーバは、１つのサービスについてのデータテーブルとして、前記木構造データをナイーブツリー方式でモデル化したデータテーブルを示すナイーブツリーデータテーブルと、前記木構造データを入れ子集合方式でモデル化したデータテーブルを示す入れ子集合データテーブルとを、対応付けて格納しており、
前記木構造データ処理装置は、
前記木構造データの更新要求および検索要求を受け付けるステップと、
前記検索要求を受け付けた場合に、前記入れ子集合データテーブルを参照して検索処理する要求処理スレッドを立ち上げて実行するともに、前記更新要求を受け付けた場合に、前記ナイーブツリーデータテーブルのデータ更新をする要求処理スレッドを立ち上げて実行するステップと、
前記ナイーブツリーデータテーブルと前記入れ子集合データテーブルとの間の同期処理の開始を示す同期待ち指示情報を受信した場合に、各前記要求処理スレッドの状態を同期待ちに切り替えるステップと、を実行し、
前記同期装置は、
前記ＤＢサーバから、前記ナイーブツリーデータテーブルの更新完了の情報を受信した場合に、前記同期待ち指示情報を前記木構造データ処理装置に送信するステップと、
前記更新要求により更新された前記ナイーブツリーデータテーブルのデータを、前記入れ子集合データテーブルのデータに変換して同期させるステップと、を実行し、
前記木構造データ処理装置は、
各前記要求処理スレッドの状態が同期待ちである場合において、前記木構造データの検索要求を受け付けたときに、前記入れ子集合データテーブルに代えて、前記ナイーブツリーデータテーブルを参照して検索処理を行うステップを実行すること
を特徴とする木構造データ処理方法。
【請求項３】
リレーショナルデータベースにおける木構造データをデータテーブルに格納するＤＢサーバと、前記ＤＢサーバに格納されたデータテーブル同士を同期させる同期装置と、に通信接続され、前記木構造データの更新および検索処理を制御する木構造データ処理装置であって、
前記ＤＢサーバは、１つのサービスについてのデータテーブルとして、前記木構造データをナイーブツリー方式でモデル化したデータテーブルを示すナイーブツリーデータテーブルと、前記木構造データを入れ子集合方式でモデル化したデータテーブルを示す入れ子集合データテーブルとを、対応付けて格納しており、
前記木構造データ処理装置は、
前記木構造データの更新要求および検索要求を受け付ける要求受付部と、
前記検索要求を受け付けた場合に、前記入れ子集合データテーブルを参照して検索処理する要求処理スレッドを立ち上げて実行するともに、前記更新要求を受け付けた場合に、前記ナイーブツリーデータテーブルのデータ更新をする要求処理スレッドを立ち上げて実行する処理スレッド設定部と、
前記ナイーブツリーデータテーブルと前記入れ子集合データテーブルとの間の同期処理の開始を示す同期待ち指示情報を前記同期装置から受信した場合に、各前記要求処理スレッドの状態を同期待ちに切り替える同期状態管理部と、を備え、
前記木構造データ処理装置は、
各前記要求処理スレッドの状態が同期待ちである場合において、前記要求受付部が前記木構造データの検索要求を受け付けたときに、前記処理スレッド設定部が、前記入れ子集合データテーブルに代えて、前記ナイーブツリーデータテーブルを参照して検索処理を実行すること
を特徴とする木構造データ処理装置。
【請求項４】
コンピュータを、請求項３に記載の木構造データ処理装置として機能させるための木構造データ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、木構造のデータをリレーショナルデータベースに格納する木構造データ処理システム、木構造データ処理方法、木構造データ処理装置および木構造データ処理プログラムに関する。
【背景技術】
【０００２】
階層を持ったデータ構造の一つとして、木構造が知られている。例えば、図１０に示すような会社の組織構造や、作業の進捗管理システムにおけるチケット（実施すべき作業の内容や優先度等を記録するもの）の親子関係、ＳＮＳにおける受信コメントに対する返信コメント、物理的なリソースの容量管理（コンピュータホスト―ＣＰＵソケット―ＣＰＵ，メモリ等の構造）など、様々なデータが木構造で構成される。
【０００３】
この木構造のデータを、リレーショナルデータベース（以下、単に「データベース」と称する。）にモデル化する手法として、「ナイーブツリー方式」と「入れ子集合方式」とが知られている（非特許文献１参照）。
【０００４】
ナイーブツリー方式について、図１１の符号１００に示す木構造のデータがある場合として説明する。
符号１００に示す木構造では、ある階層に属する一つのデータから、下位の階層に位置するデータが枝分かれした状態で配置される。この木構造の要素部分を節（以下、「ノード」と称する。）といい、各データが配置される。この木構造では、ノードＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆそれぞれに対応付けられたデータが配置される。ここで各ノードのＩＤをそれぞれ「Ａ」「Ｂ」「Ｃ」「Ｄ」「Ｅ」「Ｆ」とする。
ナイーブツリー方式は、符号１００に示す木構造のデータをデータベースに格納する際、符号３１０に示すように、各ノードのＩＤに対応し階層構造を示す情報として、直近の上位の階層に位置する（親の）ノードのＩＤをポインタとして格納する単純なモデルである。なお、符号３１０の例で示すデータテーブルを、「ナイーブツリー方式のデータテーブル」または「ナイーブツリーデータテーブル」と称する。
例えば、ノードのＩＤ「Ｂ」（以下、単にノード「Ｂ」と称する。他のノードも同様。）に対応する親ＩＤ（Parent_ID）としてノード「Ａ」が格納される。また、ノード「Ｄ」に対応する親ＩＤ（Parent_ID）としてノード「Ｂ」が格納される。
【０００５】
このナイーブツリー方式を、木構造のデータベースのモデルとして採用する際の課題は、ツリー全体のデータ検索時に、手続き方の呼び出しとなり、データベースに対して複数のクエリが発生するため、性能が低下しやすいことにある。
例えば、図１１の符号１００で示した木構造のデータの場合に、ツリー構造内の全てのデータを取り出すのに、下記に示すような複数回の再帰的な探索か再帰的なテーブル結合が必要となる。
【０００６】
SELECT  id  WHERE  parent_id = A ;   -- BとCを返す
SELECT  id  WHERE  parent_id = B ;   -- DとEを返す
SELECT  id  WHERE  parent_id = C ;   -- Fを返す
SELECT  id  WHERE  parent_id = D ;   -- 何も返さない
SELECT  id  WHERE  parent_id = E ;   -- 何も返さない
SELECT  id  WHERE  parent_id = F ;   -- 何も返さない
【０００７】
一方、入れ子集合方式では、木構造を入れ子構造として捉え直した上で、ルートノード（最上位のノード）から順に下位のノードを巡って一筆書きし、またルートノードに戻ってくるルートを探索する。このときに、各ノードに入るときと出るときに連番を左端（left）と右端（right）として割り振っていく。
例えば、図１２の符号１０１に示した木構造のデータの場合に、ルートノードであるノード「Ａ」から下位のノードを巡ってまたノード「Ａ」に戻ってくるルートを探索し、各ノードの左端（left）と右端（right）に番号を割り振っていく。
そして、図１２の符号３２０に示すように、ノード「Ａ」の左端（left）を「１」、右端（right）を「１２」、ノード「Ｂ」の左端（left）を「２」、右端（right）を「７」等というように設定する。なお、符号３２０の例で示すデータテーブルを、「入れ子集合方式のデータテーブル」または「入れ子集合データテーブル」と称する。
【０００８】
この入れ子集合方式を、木構造のデータベースのモデルとして採用する際の課題は、ツリー構造の変更時に、更新すべきカラムが多く、更新中の競合ロックにより性能が低下しやすいことである。
例えば、図１３の符号１０３に示す木構造を符号１０４に示す木構造に変更する場合を考える。このとき、ナイーブツリー方式でデータベースに格納されたデータ（符号３１０のナイーブツリーデータテーブル）では、変更後において、符号３１１のナイーブツリーデータテーブルの破線で示すように、ノード「Ｂ」のみの情報（親ＩＤ）を「Ａ」→「Ｃ」に変更するだけでよい。
これに対し、入れ子集合方式では、変更前のデータ（符号３２０の入れ子集合データテーブル）を、符号３２１の入れ子集合データテーブルに示すように、ノード「Ｂ」「Ｃ」「Ｄ」「Ｅ」の左端（left）と右端（right）の情報を変更する必要がある。よって、更新すべきデータが多くなってしまう。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】ジョーセルコ著，「プログラマのためのＳＱＬグラフ原論」，翔泳社、2016年8月，p.13-15,26,27,61-63,98-101,114-116
【発明の概要】
【発明が解決しようとする課題】
【００１０】
このナイーブツリー方式と入れ子集合方式のデータベースのモデルを比較すると、ナイーブツリー方式は、木構造を再構成するデータの更新書き込み（木構造の再構成）について処理性能が優れているものの、データの検索読み出しの処理性能は劣っている。一方、入れ子集合方式は、検索読み出し性能は優れているものの、更新書き込み（木構造の再構成）の性能は劣っている。
【００１１】
本発明は、このような事情に鑑みなされたものであり、リレーショナルデータベースにおける木構造の再構成時において、更新ロックによるサービス応答不可時間を低減するとともに、データ検索読み出し性能を低下させずに保持する、木構造データ処理システム、木構造データ処理方法、木構造データ処理装置および木構造データ処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述の目的を達成するため、請求項１に記載の発明は、リレーショナルデータベースにおける木構造データをデータテーブルに格納するＤＢサーバと、前記木構造データの更新および検索処理を制御する木構造データ処理装置と、前記ＤＢサーバに格納されたデータテーブル同士を同期させる同期装置と、を備える木構造データ処理システムであって、前記ＤＢサーバは、１つのサービスについてのデータテーブルとして、前記木構造データをナイーブツリー方式でモデル化したデータテーブルを示すナイーブツリーデータテーブルと、前記木構造データを入れ子集合方式でモデル化したデータテーブルを示す入れ子集合データテーブルとを、対応付けて格納する記憶部を備え、前記木構造データ処理装置が、前記木構造データの更新要求および検索要求を受け付ける要求受付部と、前記検索要求を受け付けた場合に、前記入れ子集合データテーブルを参照して検索処理する要求処理スレッドを立ち上げて実行するともに、前記更新要求を受け付けた場合に、前記ナイーブツリーデータテーブルのデータ更新をする要求処理スレッドを立ち上げて実行する処理スレッド設定部と、前記ナイーブツリーデータテーブルと前記入れ子集合データテーブルとの間の同期処理の開始を示す同期待ち指示情報を受信した場合に、各前記要求処理スレッドの状態を同期待ちに切り替える同期状態管理部と、を備え、前記同期装置が、前記ＤＢサーバから、前記ナイーブツリーデータテーブルの更新完了の情報を受信した場合に、前記同期待ち指示情報を前記木構造データ処理装置に送信する同期待ち指示部と、前記更新要求により更新された前記ナイーブツリーデータテーブルのデータを、前記入れ子集合データテーブルのデータに変換して同期させる同期処理部と、を備え、前記木構造データ処理装置が、各前記要求処理スレッドの状態が同期待ちである場合において、前記要求受付部が前記木構造データの検索要求を受け付けたときに、前記処理スレッド設定部が、前記入れ子集合データテーブルに代えて、前記ナイーブツリーデータテーブルを参照して検索処理を実行することを特徴とする木構造データ処理システムとした。
【００１３】
また、請求項２に記載の発明は、リレーショナルデータベースにおける木構造データをデータテーブルに格納するＤＢサーバと、前記木構造データの更新および検索処理を制御する木構造データ処理装置と、前記ＤＢサーバに格納されたデータテーブル同士を同期させる同期装置と、を備える木構造データ処理システムの木構造データ処理方法であって、前記ＤＢサーバは、１つのサービスについてのデータテーブルとして、前記木構造データをナイーブツリー方式でモデル化したデータテーブルを示すナイーブツリーデータテーブルと、前記木構造データを入れ子集合方式でモデル化したデータテーブルを示す入れ子集合データテーブルとを、対応付けて格納しており、前記木構造データ処理装置が、前記木構造データの更新要求および検索要求を受け付けるステップと、前記検索要求を受け付けた場合に、前記入れ子集合データテーブルを参照して検索処理する要求処理スレッドを立ち上げて実行するともに、前記更新要求を受け付けた場合に、前記ナイーブツリーデータテーブルのデータ更新をする要求処理スレッドを立ち上げて実行するステップと、前記ナイーブツリーデータテーブルと前記入れ子集合データテーブルとの間の同期処理の開始を示す同期待ち指示情報を受信した場合に、各前記要求処理スレッドの状態を同期待ちに切り替えるステップと、を実行し、前記同期装置が、前記ＤＢサーバから、前記ナイーブツリーデータテーブルの更新完了の情報を受信した場合に、前記同期待ち指示情報を前記木構造データ処理装置に送信するステップと、前記更新要求により更新された前記ナイーブツリーデータテーブルのデータを、前記入れ子集合データテーブルのデータに変換して同期させるステップと、を実行し、前記木構造データ処理装置が、各前記要求処理スレッドの状態が同期待ちである場合において、前記木構造データの検索要求を受け付けたときに、前記入れ子集合データテーブルに代えて、前記ナイーブツリーデータテーブルを参照して検索処理を行うステップを実行することを特徴とする木構造データ処理方法とした。
【００１４】
また、請求項３に記載の発明は、リレーショナルデータベースにおける木構造データをデータテーブルに格納するＤＢサーバと、前記ＤＢサーバに格納されたデータテーブル同士を同期させる同期装置と、に通信接続され、前記木構造データの更新および検索処理を制御する木構造データ処理装置であって、前記ＤＢサーバは、１つのサービスについてのデータテーブルとして、前記木構造データをナイーブツリー方式でモデル化したデータテーブルを示すナイーブツリーデータテーブルと、前記木構造データを入れ子集合方式でモデル化したデータテーブルを示す入れ子集合データテーブルとを、対応付けて格納しており、前記木構造データ処理装置が、前記木構造データの更新要求および検索要求を受け付ける要求受付部と、前記検索要求を受け付けた場合に、前記入れ子集合データテーブルを参照して検索処理する要求処理スレッドを立ち上げて実行するともに、前記更新要求を受け付けた場合に、前記ナイーブツリーデータテーブルのデータ更新をする要求処理スレッドを立ち上げて実行する処理スレッド設定部と、前記ナイーブツリーデータテーブルと前記入れ子集合データテーブルとの間の同期処理の開始を示す同期待ち指示情報を前記同期装置から受信した場合に、各前記要求処理スレッドの状態を同期待ちに切り替える同期状態管理部と、を備え、前記木構造データ処理装置が、各前記要求処理スレッドの状態が同期待ちである場合において、前記要求受付部が前記木構造データの検索要求を受け付けたときに、前記処理スレッド設定部が、前記入れ子集合データテーブルに代えて、前記ナイーブツリーデータテーブルを参照して検索処理を実行することを特徴とする木構造データ処理装置とした。
【００１５】
また、請求項４に記載の発明は、コンピュータを、請求項３に記載の木構造データ処理装置として機能させるための木構造データ処理プログラムとした。
【００１６】
このようにすることで、木構造データ処理システムの木構造データ処理装置は、データの検索要求を受信した場合には、検索処理の性能が優れた入れ子集合データテーブルにより検索処理を実行する。また、木構造データ処理装置は、データの更新要求（更新書き込み（木構造の再構成））を受信した場合には、更新処理の性能が優れたナイーブツリーデータテーブルにおいてデータ更新を実行した上で、同期装置により、ナイーブツリーデータテーブルと入れ子集合データテーブルを同期させることができる。さらに、木構造データ処理装置は、入れ子集合データテーブルが同期処理中であり各要求処理スレッドが同期待ちである場合において、検索要求を受け付けたときには、入れ子集合データテーブルに代えて、ナイーブツリーデータテーブルを参照して検索処理を実行することができる。
よって、木構造の再構成時（更新要求時）において、更新ロックによるサービス応答時間を低減できるとともに、データ検索読み出し機能を低下させずに保持することができる。
【発明の効果】
【００１７】
本発明によれば、リレーショナルデータベースにおける木構造の再構成時において、更新ロックによるサービス応答不可時間を低減するとともに、データ検索読み出し性能を低下させずに保持する、木構造データ処理システム、木構造データ処理方法、木構造データ処理装置および木構造データ処理プログラムを提供することができる。
【図面の簡単な説明】
【００１８】
【図１】本実施形態に係る木構造データ処理システムの全体構成を示す図である。
【図２】本実施形態に係る木構造データ処理システムの処理の概要を説明するための図である。
【図３】本実施形態に係る木構造データ処理装置の構成例を示す機能ブロック図である。
【図４】本実施形態に係る同期装置の構成例を示す機能ブロック図である。
【図５】本実施形態に係る木構造データ処理システムによる通常時の読み出し要求の処理を説明する図である。
【図６】本実施形態に係る木構造データ処理システムによるデータ更新処理を説明する図である。
【図７】本実施形態に係る木構造データ処理システムによる同期待ち切替時の読み出し要求の処理を説明する図である。
【図８】本実施形態に係る木構造データ処理システムによる同期完了時の処理を説明する図である。
【図９】本実施形態に係る木構造データ処理システムによるデータ同期中のデータ更新処理を説明する図である。
【図１０】木構造のデータ例（会社の組織構造）を示す図である。
【図１１】ナイーブツリーデータテーブルを説明するための図である。
【図１２】入れ子集合データテーブルを説明するための図である。
【図１３】ナイーブツリーデータテーブルと入れ子集合データテーブルを用いた場合の課題を説明するための図である。
【発明を実施するための形態】
【００１９】
次に、本発明を実施するための形態（以下、「本実施形態」という。）について説明する。まず、本実施形態に係る木構造データ処理システム等の概要を説明する。
図１は、本実施形態に係る木構造データ処理システム１０００の全体構成を示す図である。
図１に示すように、木構造データ処理システム１０００は、サービスサーバ５０に通信接続される木構造データ処理装置１０と、同期装置２０と、ＤＢサーバ３０とを備える。
【００２０】
ＤＢサーバ３０には、１つのサービスに対して、ナイーブツリー方式のデータテーブル（ナイーブツリーデータテーブル３１０）と、入れ子集合方式のデータテーブル（入れ子集合データテーブル３２０）とが格納される。そして、同期装置２０が、このナイーブツリーデータテーブル３１０と入れ子集合データテーブル３２０とを同期させる。
【００２１】
図２は、本実施形態に係る木構造データ処理システム１０００の処理の概要を説明するための図である。
図２においては、処理内容を分かりやすく説明するため、筐体としてのＤＢサーバ３０（図１参照）の記載を省略し、このＤＢサーバ３０に格納されているナイーブツリーデータテーブル３１０および入れ子集合データテーブル３２０を抽出して記載している（以下の図においても同様）。
【００２２】
木構造データ処理装置１０は、サービスサーバ５０からデータの検索読み出し要求を受信すると、その読み出し要求を処理するためのスレッド（以下、「要求処理スレッド１５０」と称する。）を立ち上げる。そして、木構造データ処理装置１０は、入れ子集合データテーブル３２０に読み出し要求（read要求）を送信して（符号Ｐ１）、応答（read結果）を受信する（符号Ｐ２）ことによりデータを読み出す。
また、木構造データ処理装置１０は、サービスサーバ５０からデータの更新要求を受信すると、その更新要求を処理するためのスレッド（要求処理スレッド１５０）を立ち上げる。そして、木構造データ処理装置１０は、その更新要求に基づき、同期装置２０を介してナイーブツリーデータテーブル３１０を更新（update）する（符号Ｐ３）。そして、ナイーブツリーデータテーブル３１０の更新が終わった後に、バックグラウンドで、同期装置２０がナイーブツリーデータテーブル３１０を読み込み（read）（符号Ｐ４）、入れ子集合データテーブル３２０の情報に変換し同期（sync）させる（符号Ｐ５）。
【００２３】
このように、木構造データ処理装置１０は、データの検索読み出し要求を受信した場合には、読み出し処理の性能が優れた入れ子集合データテーブル３２０にアクセスする。また、木構造データ処理装置１０は、データの更新要求（更新書き込み（木構造の再構成））を受信した場合には、更新処理の性能が優れたナイーブツリーデータテーブル３１０にアクセスする。よって、木構造データ処理システム１０００によれば、木構造の再構成時（更新要求時）において、更新ロックによるサービス応答時間を低減できるとともに、データ検索読み出し機能を低下させずに保持することができる。
以下、木構造データ処理システム１０００を構成する各装置について、詳細に説明する。
【００２４】
≪木構造データ処理装置≫
木構造データ処理装置１０は、サービスサーバ５０からのクエリを受け付ける。ここでは、あるサービスに対応するデータテーブルに対して、読み出し要求と更新要求のクエリを受信するものとする。木構造データ処理装置１０は、クエリを受信するとスレッド（要求処理スレッド１５０）をたて、その要求処理スレッド１５０を同期装置２０に登録する。そして、木構造データ処理装置１０は、クエリの内容に基づき、ＤＢサーバ３０（図１）に記憶された、ナイーブツリーデータテーブル３１０、入れ子集合データテーブル３２０のどちらかを要求先として決定し、要求処理スレッド１５０毎に処理を実行する。
【００２５】
木構造データ処理装置１０は、通常時において読み出し要求を受信した場合、入れ子集合データテーブル３２０にその読み出し要求を送信する。一方、木構造データ処理装置１０は、更新要求を受信した場合は、ナイーブツリーデータテーブル３１０に同期装置２０を介してその更新要求を送信する。ただし、木構造データ処理装置１０は、入れ子集合データテーブル３２０が同期処理中（後記する「同期待ち切替時」）である場合には、読み出し要求を受信したときにナイーブツリーデータテーブル３１０に読み出し要求を送信する制御を行う。これにより、木構造データ処理装置１０は、競合ロックによりサービス無応答時間が発生する時間を低減しつつ、通常時においては、高い検索性能を得ることができる。
【００２６】
図３は、本実施形態に係る木構造データ処理装置１０の構成例を示す機能ブロック図である。
この木構造データ処理装置１０は、図３に示すように、制御部１１、入出力部１２および記憶部１３を備えるコンピュータ等により実現される。
入出力部１２は、情報の送受信を行うための通信インタフェース、および、キーボード等の入力装置や、モニタ等の出力装置との間で情報の送受信を行うための入出力インタフェースからなる。
記憶部１３は、フラッシュメモリやハードディスク、ＲＡＭ（Random Access Memory）等により構成される。また、この記憶部１３には、制御部１１の各機能を実行させるためのプログラム（木構造データ処理プログラム）や、制御部１１の処理に必要な情報が一時的に記憶される。
【００２７】
制御部１１は、図３に示すように、要求受付部１１１、処理スレッド設定部１１２、同期状態管理部１１３、要求応答部１１４を含んで構成される。
この制御部１１は、例えば、記憶部１３に記憶されたプログラムを不図示のＣＰＵ（Central Processing Unit）が、ＲＡＭに展開し実行することにより実現される。
【００２８】
要求受付部１１１は、サービスサーバ５０からのクエリを受け付ける。ここで、要求受付部１１１が受け付けるクエリは、読み出し要求や更新要求について指示する抽象的な要求で示される情報である。
要求受付部１１１は、受け付けた抽象的な読み出し要求や抽象的な更新要求を示すクエリを、処理スレッド設定部１１２に出力する。
なお、この抽象的な読み出し要求や抽象的な更新要求は、サービスサーバ５０と木構造データ処理装置１０との間で、予め規定しておいた情報（プロトコル）を利用できるように設定しておく。
【００２９】
処理スレッド設定部１１２は、クエリを取得するとスレッド（要求処理スレッド１５０）を立ち上げる。そして、処理スレッド設定部１１２は、立ち上げた要求処理スレッド１５０の識別士の情報（識別情報）を、同期装置２０に送信することにより登録させる。
また、処理スレッド設定部１１２は、取得したクエリの内容が読み出し要求であるのか、更新要求であるのか等の要求内容を判定する。
【００３０】
そして、処理スレッド設定部１１２は、そのクエリが更新要求である場合には、ナイーブツリー用のＳＱＬ（Structured Query Language）に変換し、立ち上げた要求処理スレッド１５０の処理として、同期装置２０にその更新要求を送信することにより、ナイーブツリーデータテーブル３１０を更新させる。
【００３１】
なお、例えば、図２に示したナイーブツリーデータテーブル３１０において、ノード「Ｂ」の親ＩＤ（Parent_ID）を「Ｃ」に変更する場合には、抽象的な更新要求を、以下に示すようなＳＱＬ文に変換する。
- UPDATE <NAIVE_TABLE> SET parent_id=C WHERE id=B
【００３２】
また、処理スレッド設定部１１２は、取得したクエリの内容が読み出し要求である場合で通常時（入れ子集合データテーブル３２０が同期処理中でない）においては、（抽象的な）読み出し要求を入れ子集合用の再帰ＳＱＬに変換し、入れ子集合データテーブル３２０に読み出し要求（read）を送信する。
【００３３】
なお、例えば、図２に示した入れ子集合データテーブル３２０において、ノードＡより下位のノードをすべて検索する場合には、抽象的な読み出し要求を、以下に示すような再帰ＳＱＬに変換する。
- SELECT naive.id FROM <NESTED_SET_TABLE>  AS naive WHERE A.left <= naive.left AND naive.right <= A.right
【００３４】
一方、処理スレッド設定部１１２は、取得したクエリの内容が読み出し要求である場合で入れ子集合データテーブル３２０の同期待ち時においては、（抽象的な）読み出し要求をナイーブツリー用の再帰ＳＱＬに変換し、ナイーブツリーデータテーブル３１０に読み出し要求（read）を送信する。
【００３５】
なお、例えば、図２に示したナイーブツリーデータテーブル３１０において、ノードＡより下位のノードをすべて検索する場合には、抽象的な読み出し要求を、以下に示すような再帰ＳＱＬに変換する。
- WITH RECURSIVE sub_tree(id, parend_id) AS
(
SELECT naive.id AS id, naive.parent_id AS parent_id FROM <NAIVE_TABLE> AS naive WHERE naive.id = A UNION ALL
SELECT naive_alias.id AS naive_alias _id, naive_alias.parent_id AS naive_alias _parent_id
FROM <NAIVE_TABLE> AS naive_alias, sub_tree AS subtree_alias WHERE naive_alias.parent_id = subtree_alias.id
)
SELECT sub_tree.id FROM sub_tree
【００３６】
また、処理スレッド設定部１１２は、入れ子集合データテーブル３２０が同期処理中か否かを、同期状態管理部１１３の設定（「同期待ち」の指示）により把握することができる。
なお、処理スレッド設定部１１２は、各要求処理スレッド１５０の処理が終了した場合に、終了した要求処理スレッド１５０の識別子を、同期装置２０に送信することにより、登録した識別士を削除させる。
【００３７】
同期状態管理部１１３は、同期装置２０から、入れ子集合データテーブル３２０の同期開始時において現在実行中の各要求処理スレッド１５０に対する同期待ち指示情報を受信することにより、すべての要求処理スレッド１５０の状態を「通常」（同期待ちしていない状態）から「同期待ち」に切り替える。
また、同期状態管理部１１３は、同期装置２０から、現在実行中の各要求処理スレッド１５０に対する、入れ子集合データテーブル３２０の同期完了を示す同期完了通知を受信することにより、すべての要求処理スレッド１５０の状態を「同期待ち」から「通常」（同期待ちしていない状態）に切り替える。
【００３８】
要求応答部１１４は、各要求処理スレッド１５０により処理された読み出し要求や更新要求の結果情報を、サービスサーバ５０に送信する。
【００３９】
≪同期装置≫
同期装置２０は、木構造データ処理装置１０の指示に基づき、ナイーブツリーデータテーブル３１０に更新要求を実行させる。また、同期装置２０は、更新したナイーブツリーデータテーブル３１０と、入れ子集合データテーブル３２０とを同期させる同期処理を実行する。
【００４０】
図４は、本実施形態に係る同期装置２０の構成例を示す機能ブロック図である。
この同期装置２０は、図４に示すように、制御部２１、入出力部２２および記憶部２３を備えるコンピュータ等により実現される。
入出力部２２は、情報の送受信を行うための通信インタフェース、および、キーボード等の入力装置や、モニタ等の出力装置との間で情報の送受信を行うための入出力インタフェースからなる。
記憶部２３は、フラッシュメモリやハードディスク、ＲＡＭ等により構成される。また、この記憶部２３には、制御部２１の各機能を実行させるためのプログラムや、制御部２１の処理に必要な情報として、例えば、スレッド（要求処理スレッド１５０）の識別情報などが一時的に記憶される。
【００４１】
制御部２１は、図４に示すように、スレッド登録部２１１、データ更新指示部２１２、同期待ち指示部２１３、同期処理部２１４、同期完了通知部２１５を含んで構成される。
この制御部２１は、例えば、記憶部２３に記憶されたプログラムを不図示のＣＰＵが、ＲＡＭに展開し実行することにより実現される。
【００４２】
スレッド登録部２１１は、木構造データ処理装置１０から要求処理スレッド１５０の識別情報（識別士）を取得し記憶部２３に記憶する。これにより、スレッド登録部２１１は、現在処理中のスレッド（要求処理スレッド１５０）を登録しておく。
また、スレッド登録部２１１は、処理が終了した要求処理スレッド１５０の識別情報（識別子）を、同期装置２０から受信した場合には、登録した要求処理スレッド１５０の識別情報を削除する。
【００４３】
データ更新指示部２１２は、木構造データ処理装置１０からナイーブツリーデータテーブル３１０の更新要求（ナイーブツリー用のＳＱＬ）を受信すると、その更新要求（update）をＤＢサーバ３０（図１）に送信することにより、ナイーブツリーデータテーブル３１０を更新させる。
【００４４】
同期待ち指示部２１３は、ＤＢサーバ３０（図１）からナイーブツリーデータテーブル３１０の更新完了（update完了）の情報を受信する。そして、同期待ち指示部２１３は、この更新完了の受信を契機として、記憶部２３に登録しておいた各要求処理スレッド１５０の識別情報（識別子）を参照し、その各要求処理スレッド１５０に対する同期待ち指示情報を生成して、木構造データ処理装置１０に送信する。
【００４５】
同期処理部２１４は、同期待ち指示部２１３が、木構造データ処理装置１０に対して、同期待ち指示情報を送信したことを契機として、ナイーブツリーデータテーブル３１０の情報を読み込み、入れ子集合データテーブル３２０との間で同期処理を実行する。このナイーブツリーデータテーブル３１０から入れ子集合データテーブル３２０への変換は、例えば、非特許文献１に記載のスタックアルゴリズムにより実現することができる。
【００４６】
同期完了通知部２１５は、同期処理部２１４によるナイーブツリーデータテーブル３１０と入れ子集合データテーブル３２０との間の同期処理が完了すると、木構造データ処理装置１０に対して、同期完了通知を送信する。
【００４７】
≪ＤＢサーバ≫
ＤＢサーバ３０は、１つのサービスに対応付けて、ナイーブツリーデータテーブル３１０と入れ子集合データテーブル３２０とを格納するサーバである。
このＤＢサーバ３０は、図１に示すように、制御部３１と入出力部３２と記憶部３３とを備えるコンピュータ等により実現される。
入出力部３２は、情報の送受信を行うための通信インタフェース、および、キーボード等の入力装置や、モニタ等の出力装置との間で情報の送受信を行うための入出力インタフェースからなる。
記憶部３３は、フラッシュメモリやハードディスク、ＲＡＭ等により構成される。また、この記憶部３３には、１つのサービスに対応付けられた、ナイーブツリーデータテーブル３１０および入れ子集合データテーブル３２０が格納される。なお、記憶部３３には、複数のサービスそれぞれに対応付けられた、ナイーブツリーデータテーブル３１０および入れ子集合データテーブル３２０の組が複数格納されていてもよい。
【００４８】
制御部３１は、ＤＢ３０の処理全般を司り、ナイーブツリーデータテーブル３１０に対する更新要求や読み出し要求を受け付けて実行したり、入れ子集合データテーブル３２０に対する読み出し要求や同期処理の制御を受け付けて実行したりする。また、制御部３１は、各要求等の処置が完了すると応答情報として完了情報を出力する。
【００４９】
＜処理の流れ＞
次に、木構造データ処理システム１０００が実行する処理の流れについて、図５〜図９を参照して説明する。
【００５０】
≪通常時の読み出し処理≫
まず、通常時（入れ子集合データテーブル３２０が同期処理中でない）において行われる、読み出し要求の処理を説明する。
図５は、本実施形態に係る木構造データ処理システム１０００による通常時の読み出し要求の処理を説明する図である。通常時において、木構造データ処理システム１０００では、読み出し要求に対する処理を、入れ子集合データテーブル３２０を参照して行う。
【００５１】
まず、木構造データ処理装置１０の要求受付部１１１は、サービスサーバ５０からクエリとして（抽象的な）読み出し要求を受け付ける（ステップＳ１０）。そして、要求受付部１１１は、その受け付けたクエリ（読み出し要求）を、処理スレッド設定部１１２に出力する。
【００５２】
続いて、木構造データ処理装置１０の処理スレッド設定部１１２は、クエリを取得すると要求処理スレッド１５０を立ち上げる。そして、処理スレッド設定部１１２は、立ち上げた要求処理スレッド１５０の識別情報（識別子）を、同期装置２０に送信する（ステップＳ１１）。
同期装置２０のスレッド登録部２１１は、スレッド（要求処理スレッド１５０）の識別情報を受信すると、記憶部２３に記憶することにより登録する（ステップＳ１２）。
【００５３】
次に木構造データ処理装置１０の処理スレッド設定部１１２は、取得したクエリの内容が読み出し要求であるのか、更新要求であるのか等の要求内容を判定する。そして、処理スレッド設定部１１２は、そのクエリが読み出し要求であると判定した場合であり、同期状態管理部１１３が同期待ち指示情報を受信していない、つまり、入れ子集合データテーブル３２０が同期処理中でないときに、立ち上げた要求処理スレッド１５０のトランザクションにおいて、（抽象的な）読み出し要求を入れ子集合用の再帰ＳＱＬに変換し、入れ子集合データテーブル３２０に読み出し要求（read要求）を送信する（ステップＳ１３）。そして、ＤＢサーバ３０から、応答（read結果）を受信し（ステップＳ１４）、木構造データ処理装置１０の要求応答部１１４が、その応答（read結果）をサービスサーバ５０に送信する。
【００５４】
このように、木構造データ処理システム１０００では、通常時において、サービスサーバ５０から、データの読み出し要求を受信した場合には、入れ子集合データテーブル３２０からデータを読み出し、サービスサーバ５０に返信することができる。よって、ナイーブツリーデータテーブル３１０からデータを読み出す場合に比べ、処理負荷を減らすことが可能となる。
【００５５】
なお、木構造データ処理装置１０が実行する、クエリを受信し要求処理スレッド１５０を立ち上げた際に行われる、要求処理スレッド１５０の識別情報の送信（ステップＳ１１）と、同期装置２０における登録（ステップＳ１２）は、読み出し要求を示すクエリの場合に限られず、更新要求を示すクエリの場合等にも同様に行われる。つまり、要求処理スレッド１５０が立ち上げられた際に、その内容にかかわらず行われる処理である。以下に示す図６〜図９の説明においては、この要求処理スレッド１５０の識別情報の登録処理についての図示を省略するが、ステップＳ１１およびＳ１２の処理が同様に実行されているものとする。
【００５６】
≪データ更新処理≫
次に、木構造データ処理システム１０００が実行するデータ更新処理について説明する。
図６は、本実施形態に係る木構造データ処理システム１０００によるデータ更新処理を説明する図である。木構造データ処理システム１０００では、データの更新要求（更新書き込み（木構造の再構成））の処理を、まず、ナイーブツリーデータテーブル３１０において実行し、その後、入れ子集合データテーブル３２０との間で同期処理を実行する。
【００５７】
まず、木構造データ処理装置１０の要求受付部１１１は、サービスサーバ５０からクエリとして（抽象的な）更新要求を受け付ける（ステップＳ２０）。そして、要求受付部１１１は、その受け付けたクエリ（更新要求）を、処理スレッド設定部１１２に出力する。
【００５８】
続いて、木構造データ処理装置１０の処理スレッド設定部１１２は、クエリを取得すると要求処理スレッド１５０を立ち上げ、その要求処理スレッド１５０の識別情報（識別士）を同期装置２０に送信することにより登録させる（図示省略）。
【００５９】
次に木構造データ処理装置１０の処理スレッド設定部１１２は、取得したクエリの内容が読み出し要求であるのか、更新要求であるのか等の要求内容を判定する。そして、処理スレッド設定部１１２は、そのクエリが更新要求であると判定した場合に、立ち上げた要求処理スレッド１５０のトランザクションにおいて、（抽象的な）更新要求をナイーブツリー用のＳＱＬに変換し、同期装置２０に更新要求（update要求）を送信する（ステップＳ２１）。
同期装置２０のデータ更新指示部２１２は、木構造データ処理装置１０から更新要求（update要求）を受信すると、ＤＢサーバ３０（図１）に対して更新指示（update更新）を送信することにより、データを更新させる（ステップＳ２２）。
【００６０】
次に、同期装置２０の同期待ち指示部２１３は、ＤＢサーバ３０（図１）からナイーブツリーデータテーブル３１０の更新完了（update完了）の情報を受信する（ステップＳ２３）。そして、同期待ち指示部２１３は、この更新完了の受信を契機として、記憶部２３に登録しておいた各要求処理スレッド１５０の識別情報（識別子）を参照し、その各要求処理スレッド１５０に対する同期待ち指示情報を生成して、木構造データ処理装置１０に送信する（ステップＳ２４）。
【００６１】
木構造データ処理装置１０の同期状態管理部１１３は、各要求処理スレッド１５０に対する同期待ち指示情報を受信すると、すべての要求処理スレッド１５０の状態を「通常」（同期待ちしていない状態）から「同期待ち」に切り替える（ステップＳ２５）。
【００６２】
次に、同期装置２０の同期処理部２１４は、バックグラウンドでナイーブツリーデータテーブル３１０を読み込み、入れ子集合データテーブル３２０の情報に変換し同期（sync）させる（ステップＳ２６）。
【００６３】
このように、木構造データ処理システム１０００では、サービスサーバ５０からデータの更新要求を受信した場合には、まずナイーブツリーデータテーブル３１０を更新し、その後、バックグラウンドで入れ子集合データテーブル３２０を同期させることができる。よって、木構造を再構成するデータの更新書き込み（木構造の再構成）について、入れ子集合よりも処理負荷の少ない、ナイーブツリーデータテーブル３１０を優先して処理させることができる。
【００６４】
≪データ同期中の読み出し処理≫
次に、入れ子集合データテーブル３２０が同期処理中（「同期待ち」切替時）において行われる、読み出し要求の処理について説明する。
図７は、本実施形態に係る木構造データ処理システム１０００による「同期待ち」切替時の読み出し要求の処理を説明する図である。図７においては、図６のステップＳ２５において、各要求処理スレッド１５０の状態が「通常時」から「同期待ち」に切り替わっている状態、つまり、同期装置２０による入れ子集合データテーブル３２０への同期処理が実行中であるとする。
この場合において、木構造データ処理システム１０００では、読み出し要求に対する処理を、入れ子集合データテーブル３２０に代えて、ナイーブツリーデータテーブル３１０を参照して行う。
【００６５】
まず、木構造データ処理装置１０の要求受付部１１１は、サービスサーバ５０からクエリとして（抽象的な）読み出し要求を受け付ける（ステップＳ３０）。そして、要求受付部１１１は、その受け付けたクエリ（読み出し要求）を、処理スレッド設定部１１２に出力する。
【００６６】
続いて、木構造データ処理装置１０の処理スレッド設定部１１２は、クエリを取得すると要求処理スレッド１５０を立ち上げ、その要求処理スレッド１５０の識別情報（識別士）を同期装置２０に送信することにより登録させる（図示省略）。
【００６７】
次に木構造データ処理装置１０の処理スレッド設定部１１２は、取得したクエリの内容が読み出し要求であるのか、更新要求であるのか等の要求内容を判定する。そして、処理スレッド設定部１１２は、そのクエリが読み出し要求であると判定した場合であり、各要求処理スレッド１５０が「同期待ち」の状態であるときには、立ち上げた要求処理スレッド１５０のトランザクションにおいて、（抽象的な）読み出し要求をナイーブツリー用の再帰ＳＱＬに変換し、ナイーブツリーデータテーブル３１０に読み出し要求（read要求）を送信する（ステップＳ３１）。そして、ＤＢサーバ３０（図１）から、応答（read結果）を受信し（ステップＳ３２）、木構造データ処理装置１０の要求応答部１１４が、その応答（read結果）をサービスサーバ５０に送信する。
【００６８】
このように、木構造データ処理システム１０００では、入れ子集合データテーブル３２０の同期待ち時においては、入れ子集合データテーブル３２０の代わりに、ナイーブツリーデータテーブル３１０を参照して、読み出し結果を得ることができる。よって、更新ロックによるサービス応答不可時間を低減することができる。
【００６９】
≪データ同期完了時の処理≫
次に、入れ子集合データテーブル３２０の同期完了時の処理について説明する。
図８は、本実施形態に係る木構造データ処理システム１０００による同期完了時の処理を説明する図である。
【００７０】
同期装置２０は、入れ子集合データテーブル３２０の同期処理が完了すると、ＤＢサーバ３０（図１）から同期完了の結果情報を受信する（ステップＳ４０）。
そして、同期装置２０の同期完了通知部２１５は、この同期完了の結果情報を受信すると、記憶部２３に登録しておいた各要求処理スレッド１５０の識別情報（識別子）を参照し、その各要求処理スレッド１５０に対する同期待ちの解消を示す同期完了通知を生成して、木構造データ処理装置１０に送信する（ステップＳ４１）。
【００７１】
木構造データ処理装置１０の同期状態管理部１１３は、各要求処理スレッド１５０に対して同期完了通知を受信すると、すべての要求処理スレッド１５０の状態を「同期待ち」から「通常」に切り替えることにより、「同期待ち」状態を解消する（ステップＳ４２）。
【００７２】
このように、木構造データ処理システム１０００では、入れ子集合データテーブル３２０の同期処理が完了した場合には、各要求処理スレッド１５０の状態を「同期待ち」から「通常」に切り替えることができる。
【００７３】
≪データ同期中のデータ更新処理≫
次に、木構造データ処理システム１０００がデータ同期中の場合において、同じデータテーブルに対しさらにデータの更新要求（更新書き込み（木構造の再構成））を受け付けたときの処理を説明する。
図９は、本実施形態に係る木構造データ処理システム１０００による、データ同期中におけるデータ更新処理を説明する図である。木構造データ処理システム１０００では、同期装置２０により入れ子集合データテーブル３２０が同期処理中の場合において、さらに、更新要求を受け付けた場合には、同期装置２０が直前の同期処理をキャンセルし、更新された最新のデータで改めて同期処理を行う。
【００７４】
まず、木構造データ処理装置１０の要求受付部１１１は、サービスサーバ５０からクエリとして（抽象的な）更新要求を受け付ける（ステップＳ５０）。そして、要求受付部１１１は、その受け付けたクエリ（更新要求）を、処理スレッド設定部１１２に出力する。
【００７５】
続いて、木構造データ処理装置１０の処理スレッド設定部１１２は、クエリを取得すると要求処理スレッド１５０を立ち上げ、その要求処理スレッド１５０の識別情報（識別士）を同期装置２０に送信することにより登録させる（図示省略）。
【００７６】
次に木構造データ処理装置１０の処理スレッド設定部１１２は、取得したクエリの内容が読み出し要求であるのか、更新要求であるのか等の要求内容を判定する。そして、処理スレッド設定部１１２は、そのクエリが更新要求であると判定した場合に、立ち上げた要求処理スレッド１５０のトランザクションにおいて、（抽象的な）更新要求をナイーブツリー用のＳＱＬに変換し、同期装置２０に更新要求（update要求）を送信する（ステップＳ５１）。
同期装置２０のデータ更新指示部２１２は、木構造データ処理装置１０から更新要求（update要求）を受信すると、ＤＢサーバ３０（図１）に対して更新指示（update更新）を送信することにより（ステップＳ５２）、データを更新させる。
【００７７】
次に、同期装置２０の同期待ち指示部２１３は、ＤＢサーバ３０（図１）からナイーブツリーデータテーブル３１０の更新完了（update完了）の情報を受信する（ステップＳ５３）。
【００７８】
続いて、同期装置２０の同期処理部２１４は、現時点で実行している（直前の）同期処理をキャンセルする（ステップＳ５４）。そして、同期処理部２１４は、改めて最新のナイーブツリーデータテーブル３１０を読み込み、入れ子集合データテーブル３２０の情報に変換し同期（sync）させる（ステップＳ５５）。
【００７９】
このように木構造データ処理システム１０００では、データ同期中の場合において、同じデータテーブルに対しさらにデータの更新要求（更新書き込み（木構造の再構成））を受け付けたときに、直前の同期処理をキャンセルした上で、最新のナイーブツリーデータテーブル３１０のデータに基づき、入れ子集合データテーブル３２０を同期させることが可能となる。
【００８０】
≪トランザクション中の同期待ち処理≫
次に、木構造データ処理システム１０００の木構造データ処理装置１０が立ち上げた、ある要求処理スレッド１５０のトランザクション中に、別の要求処理スレッド１５０のトランザクションに起因する同期待ち切り替え処理が実行された場合について説明する。この場合は、ＤＢサーバ３０（図１）において予め設定されるトランザクションの分離レベルの高低により処理が異なるものとなる。ここでは、例えば、要求処理スレッド１５０のトランザクションにおいて、図５に示すような、入れ子集合データテーブル３２０からの読み出し処理が行われているときに、他のトランザクションの処理により、同期待ち切り替え処理を実行する場合として説明する。
なお、高いトランザクション分離レベルがＤＢサーバ３０において設定されている場合には、そのトランザクション開始時にそのデータテーブル（入れ子集合データテーブル３２０）のスナップショットからデータを繰り返し読み込むため、同期待ち切り替え処理は、そのトランザクションには反映されないものとなる。一方、低いトランザクション分離レベルがＤＢサーバ３０において設定されている場合には、トランザクションの処理中でも同期待ち切り替え処理が直ちに反映される。
【００８１】
具体的には、処理中の要求処理スレッド１５０でトランザクションが既に開始されている場合において、ＤＢサーバ３０に高いトランザクション分離レベルが設定されているときには、トランザクション開始時のスナップショットからデータを継続的に読み込む（REPEATABLE_READ）。そのため、木構造データ処理装置１０が同期待ち切り替え処理を実行した場合においても、入れ子集合データテーブル３２０からの読み出し処理を続け、ナイーブツリーデータテーブル３１０からの読み出し処理に切り替えない。よって、高いトランザクション分離レベルでは、トランザクション中のデータ整合性が保証される。その代わり、現時点でのデータの変更が反映されないため、結果的にトランザクションの処理失敗が起こりやすいものとなる。
【００８２】
これに対し、処理中の要求処理スレッド１５０でトランザクションが既に開始されている場合において、ＤＢサーバ３０に低いトランザクション分離レベルが設定されているときには、トランザクション中であっても、データに反映された変更を直ちに読み込む必要がある。そのため、木構造データ処理装置１０が同期待ち切り替え処理を実行した場合には、入れ子集合データテーブル３２０からの読み出しを中止し、更新されたナイーブツリーデータテーブル３１０からデータを読み出すように直ちに切り替わる。よって、低いトランザクション分離レベルでは、トランザクションのデータの整合性は保証されない。その代わりに、現時点でのデータの変更が反映されるため、結果的にトランザクションの処理が成功しやすいものとなる。
【００８３】
なお、処理中の要求処理スレッド１５０でトランザクションがまだ開始されていない場合には、トランザクション分離レベルに関係なく、ナイーブツリーデータテーブル３１０から読み出し処理を行うようにする。
【００８４】
また、木構造データ処理システム１０００の木構造データ処理装置１０が立ち上げたある要求処理スレッド１５０のトランザクション中に、別の要求処理スレッド１５０のトランザクションに起因して同期待ち処理が解消された場合においては、図７に示すように、読み出し要求に対する処理を、ナイーブツリーデータテーブル３１０を参照して行っていたものを、トランザクションの分離レベルに関係なく、入れ子集合データテーブル３２０から読み出すように切り替える。これは、ナイーブツリーデータテーブル３１０と入れ子集合データテーブル３２０の同期が完了しているためデータの整合性が保証されており、より処理負荷の少ない入れ子集合データテーブル３２０を利用する方が有利なためである。
【００８５】
以上、説明したように、本実施形態に係る木構造データ処理システム１０００、木構造データ処理方法、木構造データ処理装置１０および木構造データ処理プログラムによれば、リレーショナルデータベースにおける木構造の再構成時において、更新ロックによるサービス応答不可時間を低減するとともに、データ検索読み出し性能を低下させずに保持することができる。
【符号の説明】
【００８６】
１０    木構造データ処理装置
１１，２１，３１  制御部
１２，２２，３２  入出力部
１３，２３，３３  記憶部
２０    同期装置
３０    ＤＢサーバ
５０    サービスサーバ
１１１  要求受付部
１１２  処理スレッド設定部
１１３  同期状態管理部
１１４  要求応答部
１５０  要求処理スレッド
２１１  スレッド登録部
２１２  データ更新指示部
２１３  同期待ち指示部
２１４  同期処理部
２１５  同期完了通知部
３１０  ナイーブツリーデータテーブル
３２０  入れ子集合データテーブル
１０００  木構造データ処理システム
【図１】
2020173741.tif 000003
【図２】
2020173741.tif 000004
【図３】
2020173741.tif 000005
【図４】
2020173741.tif 000006
【図５】
2020173741.tif 000007
【図６】
2020173741.tif 000008
【図７】
2020173741.tif 000009
【図８】
2020173741.tif 000010
【図９】
2020173741.tif 000011
【図１０】
2020173741.tif 000012
【図１１】
2020173741.tif 000013
【図１２】
2020173741.tif 000014
【図１３】
2020173741.tif 000015