(57)【要約】  登録要求に係るキー値とＮＩＤとの対応関係に係る分散圧縮復元インデックス（Ｄ−ＣＲＸ）のデータと、分散型データベースを構成するテーブル内のカラム毎に一意の値をとる分散行識別子（ＲＩＤ）とＮＩＤとの対応関係に係る分散圧縮結果セットキャッシュ（Ｄ−ＣＲＳ）のデータを、複数のスレーブノード１５，１７，１９の各々に分散格納する。Ｄ−ＣＲＸのデータを複数のスレーブノード１５，１７，１９の各々に分散格納するに際しては、Ｄ−ＣＲＳのデータによって示されるＮＩＤと同じＮＩＤが割り当てられたＤ−ＣＲＸのデータについて、Ｄ−ＣＲＳのデータの格納先として決定されたスレーブノードと同じスレーブノードを、Ｄ−ＣＲＸのデータの格納先として決定する。
2014030235.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレーブノードを統括管理するマスターノードを備え、キー値を前記複数のスレーブノードに分散格納し、この分散格納されたキー値を用いて、前記マスターノードからの指令に基づくデータ操作を前記複数のスレーブノードが並列に実行する分散型データベースシステムであって、
登録要求に係るキー値およびそのデータ型の情報を受け付ける登録要求受付部と、
前記登録要求受付部で受け付けた登録要求に係るキー値に対し、前記分散型データベースの全体において前記登録要求に係るキー値が有するデータ型の範囲内で一意の値をとるキー値識別子（以下、「ＮＩＤ」という）を割り当てるＮＩＤ割当部と、
前記登録要求に係るキー値と、前記ＮＩＤ割当部で割り当てられたＮＩＤとの対応関係に係る分散共有ＮＩＤ（以下、「ＤＳＮ」という）のデータを生成するＤＳＮ生成部と、
前記ＤＳＮ生成部で生成された前記ＤＳＮのデータの格納先となる一のスレーブノードを、前記複数のスレーブノードのなかから、前記登録要求に係るキー値に基づいて決定するＤＳＮ格納ノード決定部と、
前記登録要求に係るキー値と、前記ＮＩＤ割当部で割り当てられたＮＩＤとの対応関係に係る分散圧縮復元インデックス（以下、「Ｄ−ＣＲＸ」という）のデータを生成するＤ−ＣＲＸ生成部と、
前記Ｄ−ＣＲＸ生成部で生成された前記Ｄ−ＣＲＸのデータの格納先となる一のスレーブノードを、前記複数のスレーブノードのなかから決定するＤ−ＣＲＸ格納ノード決定部と、
前記分散型データベースを構成するテーブル内のカラム毎に一意の値をとる分散行識別子（以下、「ＲＩＤ」という）と、前記ＮＩＤ割当部で割り当てられたＮＩＤとの対応関係に係る分散圧縮結果セットキャッシュ（以下、「Ｄ−ＣＲＳ」という）のデータを生成するＤ−ＣＲＳ生成部と、
前記Ｄ−ＣＲＳ生成部で生成された前記Ｄ−ＣＲＳのデータの格納先となる一のスレーブノードを、前記複数のスレーブノードのなかから、前記ＲＩＤの関数に基づいて決定するＤ−ＣＲＳ格納ノード決定部と、
を更に備え、
前記Ｄ−ＣＲＸ格納ノード決定部は、前記Ｄ−ＣＲＳのデータによって示されるＮＩＤと同じＮＩＤが割り当てられた前記Ｄ−ＣＲＸのデータについて、前記Ｄ−ＣＲＳ格納ノード決定部により前記Ｄ−ＣＲＳのデータの格納先として決定されたスレーブノードと同じスレーブノードを、前記Ｄ−ＣＲＸのデータの格納先として決定するようにしたことを特徴とする分散型データベースシステム。
【請求項２】
請求項１に記載の分散型データベースシステムであって、
前記登録要求に係るキー値に対して割り当てられたＮＩＤと前記ＲＩＤの集合との対応関係に係る分散行識別インデックス（以下、「Ｄ−ＲＩＸ」という）のデータを生成するＤ−ＲＩＸ生成部と、
前記Ｄ−ＲＩＸ生成部で生成された前記Ｄ−ＲＩＸの格納先となる一のスレーブノードを、前記複数のスレーブノードのなかから、前記ＮＩＤの関数に基づいて決定するＤ−ＲＩＸ格納ノード決定部と、
を更に備えたことを特徴とする分散型データベースシステム。
【請求項３】
請求項１に記載の分散型データベースシステムであって、
前記登録要求受付部、前記ＮＩＤ割当部、前記ＤＳＮ生成部および前記ＤＳＮ格納ノード決定部は前記マスターノードに備えられ、
前記マスターノードは、前記ＤＳＮ格納ノード決定部で決定された一のスレーブノード宛に前記ＤＳＮのデータおよび前記登録要求に係るキー値が有するデータ型の情報を送って前記ＤＳＮのデータの登録要求を発行するＤＳＮ登録要求発行部を更に備え、
前記複数のスレーブノードの各々は、
前記ＤＳＮ登録要求発行部による前記ＤＳＮのデータの登録要求に応じて、前記ＤＳＮのデータを、前記登録要求に係るキー値が有するデータ型毎に分けてＤＳＮ格納部に格納させる登録管理を行うＤＳＮ登録管理部と、
前記登録要求に係るキー値が前記ＤＳＮ格納部に既に存在するか否かを判定する既存判定部とを備え、
前記ＤＳＮ登録管理部は、前記既存判定部により前記登録要求に係るキー値が前記ＤＳＮ格納部に既に登録済みと判定された場合、前記登録要求に係るキー値に対して既に割り当てられているＮＩＤが属する前記ＤＳＮの登録内容をそのまま維持する一方、前記既存判定部により前記登録要求に係るキー値が前記ＤＳＮ格納部に未だ存在しないと判定された場合、前記登録要求に係るキー値と今回割り当てられたＮＩＤとの対応関係に係る前記ＤＳＮのデータを前記ＤＳＮ格納部に格納させる登録管理を行う、
ことを特徴とする分散型データベースシステム。
【請求項４】
請求項１に記載の分散型データベースシステムであって、
前記ＤＳＮ生成部および前記ＤＳＮ格納ノード決定部は前記複数のスレーブノードに備えられていることを特徴とする分散型データベースシステム。
【請求項５】
請求項１に記載の分散型データベースシステムであって、
前記ＤＳＮ生成部、前記ＤＳＮ格納ノード決定部、前記Ｄ−ＣＲＸ生成部、前記Ｄ−ＣＲＸ格納ノード決定部、前記Ｄ−ＣＲＳ生成部および前記Ｄ−ＣＲＳ格納ノード決定部は前記マスターノードに備えられ、
前記マスターノードは、
前記ＤＳＮ格納ノード決定部で決定された一のスレーブノード宛に前記ＤＳＮのデータおよび前記登録要求に係るキー値が有するデータ型の情報を送って前記ＤＳＮのデータの登録要求を発行するＤＳＮ登録要求発行部と、
前記Ｄ−ＣＲＸ格納ノード決定部で決定された一のスレーブノード宛に前記Ｄ−ＣＲＸのデータおよび前記登録要求に係るキー値が属するカラムの情報を送って前記Ｄ−ＣＲＸのデータの登録要求を発行するＤ−ＣＲＸ登録要求発行部と、
前記Ｄ−ＣＲＳ格納ノード決定部で決定された一のスレーブノード宛に前記Ｄ−ＣＲＳのデータおよび前記カラムの情報を送って前記Ｄ−ＣＲＳのデータの登録要求を発行するＤ−ＣＲＳ登録要求発行部とを更に備え、
前記複数のスレーブノードの各々は、
前記ＤＳＮ登録要求発行部による前記ＤＳＮのデータの登録要求に応じて、前記ＤＳＮのデータを、前記登録要求に係るキー値が有するデータ型毎に分けてＤＳＮ格納部に格納させる登録管理を行うＤＳＮ登録管理部と、
前記Ｄ−ＣＲＸ登録要求発行部による前記Ｄ−ＣＲＸのデータの登録要求に応じて、前記Ｄ−ＣＲＸのデータを、前記登録要求に係るキー値が属するカラム毎に分けてＤ−ＣＲＸ格納部に格納させる登録管理を行うＤ−ＣＲＸ登録管理部と、
前記Ｄ−ＣＲＳ登録要求発行部による前記Ｄ−ＣＲＳのデータの登録要求に応じて、前記Ｄ−ＣＲＳのデータを、前記カラム毎に分けてＤ−ＣＲＳ格納部に格納させる登録管理を行うＤ−ＣＲＳ登録管理部と、
前記マスターノードからの指令に基づくデータ操作を、前記ＤＳＮ格納部、前記Ｄ−ＣＲＸ格納部および前記Ｄ−ＣＲＳ格納部に格納された情報を用いて並列に実行するデータ操作実行部とを更に備え、
前記マスターノードは、前記複数のスレーブノードのデータ操作実行部で並列に実行された処理結果を統合する処理結果統合部を更に備えた、
ことを特徴とする分散型データベースシステム。
【請求項６】
請求項１に記載の分散型データベースシステムであって、
前記ＤＳＮ生成部、前記ＤＳＮ格納ノード決定部、前記Ｄ−ＣＲＸ生成部、前記Ｄ−ＣＲＸ格納ノード決定部、前記Ｄ−ＣＲＳ生成部および前記Ｄ−ＣＲＳ格納ノード決定部は前記複数のスレーブノードに備えられていることを特徴とする分散型データベースシステム。
【請求項７】
請求項２に記載の分散型データベースシステムであって、
前記ＤＳＮ生成部、前記ＤＳＮ格納ノード決定部、前記Ｄ−ＣＲＸ生成部、前記Ｄ−ＣＲＸ格納ノード決定部、前記Ｄ−ＣＲＳ生成部、前記Ｄ−ＣＲＳ格納ノード決定部、前記Ｄ−ＲＩＸ生成部および前記Ｄ−ＲＩＸ格納ノード決定部は前記マスターノードに備えられ、
前記マスターノードは、
前記ＤＳＮ格納ノード決定部で決定された一のスレーブノード宛に前記ＤＳＮのデータおよび前記登録要求に係るキー値が有するデータ型の情報を送って前記ＤＳＮのデータの登録要求を発行するＤＳＮ登録要求発行部と、
前記Ｄ−ＣＲＸ格納ノード決定部で決定された一のスレーブノード宛に前記Ｄ−ＣＲＸのデータおよび前記登録要求に係るキー値が属するカラムの情報を送って前記Ｄ−ＣＲＸのデータの登録要求を発行するＤ−ＣＲＸ登録要求発行部と、
前記Ｄ−ＣＲＳ格納ノード決定部で決定された一のスレーブノード宛に前記Ｄ−ＣＲＳのデータおよび前記カラムの情報を送って前記Ｄ−ＣＲＳのデータの登録要求を発行するＤ−ＣＲＳ登録要求発行部と、
前記Ｄ−ＲＩＸ格納ノード決定部で決定された一のスレーブノード宛に前記Ｄ−ＲＩＸのデータおよび前記カラムの情報を送って前記Ｄ−ＲＩＸのデータの登録要求を発行するＤ−ＲＩＸ登録要求発行部とを更に備え、
前記複数のスレーブノードの各々は、
前記ＤＳＮ登録要求発行部による前記ＤＳＮのデータの登録要求に応じて、前記ＤＳＮのデータを、前記登録要求に係るキー値が有するデータ型毎に分けてＤＳＮ格納部に格納させる登録管理を行うＤＳＮ登録管理部と、
前記Ｄ−ＣＲＸ登録要求発行部による前記Ｄ−ＣＲＸのデータの登録要求に応じて、前記Ｄ−ＣＲＸのデータを、前記登録要求に係るキー値が属するカラム毎に分けてＤ−ＣＲＸ格納部に格納させる登録管理を行うＤ−ＣＲＸ登録管理部と、
前記Ｄ−ＣＲＳ登録要求発行部による前記Ｄ−ＣＲＳのデータの登録要求に応じて、前記Ｄ−ＣＲＳのデータを、前記カラム毎に分けてＤ−ＣＲＳ格納部に格納させる登録管理を行うＤ−ＣＲＳ登録管理部と、
前記Ｄ−ＲＩＸ登録要求発行部による前記Ｄ−ＲＩＸのデータの登録要求に応じて、前記Ｄ−ＲＩＸのデータを、前記カラム毎に分けてＤ−ＲＩＸ格納部に格納させる登録管理を行うＤ−ＲＩＸ登録管理部と、
前記マスターノードからの指令に基づくデータ操作を、前記ＤＳＮ格納部、前記Ｄ−ＣＲＸ格納部、前記Ｄ−ＣＲＳ格納部および前記Ｄ−ＲＩＸ格納部に格納された情報を用いて並列に実行するデータ操作実行部とを更に備え、
前記マスターノードは、前記複数のスレーブノードのデータ操作実行部で並列に実行された処理結果を統合する処理結果統合部を更に備えた、
ことを特徴とする分散型データベースシステム。
【請求項８】
請求項２に記載の分散型データベースシステムであって、
前記ＤＳＮ生成部、前記ＤＳＮ格納ノード決定部、前記Ｄ−ＣＲＸ生成部、前記Ｄ−ＣＲＸ格納ノード決定部、前記Ｄ−ＣＲＳ生成部、前記Ｄ−ＣＲＳ格納ノード決定部、前記Ｄ−ＲＩＸ生成部および前記Ｄ−ＲＩＸ格納ノード決定部は前記複数のスレーブノードに備えられていることを特徴とする分散型データベースシステム。
【請求項９】
請求項１に記載の分散型データベースシステムであって、
前記ＮＩＤ割当部は、前記登録要求に係るキー値に対し、自然数かつ順序数の値をとるＮＩＤを割り当てる、
ことを特徴とする分散型データベースシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のスレーブノードを統括管理するマスターノードを備え、複数のスレーブノードにキー値を分散格納する構成の分散型データベースシステムに関する。
【背景技術】
【０００２】
データベースとしては、データ処理を行うノードの物理的な配置の観点から、集中型データベースと分散型データベースとが知られている。このうち、データを分散格納する分散型データベースでは、複数のスレーブノードを統括管理するマスターノードを備え、キー値のデータを複数のスレーブノードに分散格納するものが知られている。【０００３】
こうした分散型データベースの一例として、引用文献１には、水平垂直分散を組みあわせてデータを分散格納するデータベース管理装置が開示されている。このデータベース管理装置は、ハッシュ関数演算部および分散関数演算部を有する複数のデータベース装置と、負荷情報収集部およびアクセス権管理部を有する大域サーバとを備える。大域サーバは、負荷情報を統計的にデータ処理することで、最も負荷の低いデータベース装置とそのデータベース装置へのアクセス期間を含むアクセス権を決定する。複数のデータベース装置へのアクセスは、大域サーバが決定するアクセス権に基づいて許可される。【０００４】
【特許文献１】特開２００６−３５０７４１号公報
【発明の開示】
【０００５】
しかしながら、水平垂直分散を組み合わせてキー値を複数のノードに分散格納する特許文献１に係る分散型データベース装置では、同一の値を有するキー値か否かを考慮することなしに、それぞれのキー値は複数のノード間にわたって無作為に分散格納される。こうした無作為な分散格納下においてデータ操作を実行した場合、複数のノードに分散格納された同一の値を有するキー値を相互に参照するために複数のノード間で生じる通信に係る時間遅延がボトルネックとなって、システム全体としての処理能力を効率的に向上させることは難しい。
【０００６】
本発明は、上述した課題を解決するためになされたものであり、分散型データシステム全体としての処理能力を効率的に向上させることができるようにすることを目的とする。
【０００７】
上述した課題を解決するために、本発明では、実値であるキー値と、分散型データベースの全体においてキー値が有するデータ型の範囲内で一意の値をとるキー値識別子（ＮＩＤ）との対応関係に係る分散共有ＮＩＤ（ＤＳＮ）のデータを、複数のスレーブノードの各々に分散格納する。ＤＳＮのデータを複数のスレーブノードの各々に分散格納するに際しては、格納先となる一のスレーブノードを、複数のスレーブノードのなかから、登録要求に係るキー値に基づいて決定する。
【０００８】
また、本発明では、登録要求に係るキー値とＮＩＤとの対応関係に係る分散圧縮復元インデックス（Ｄ−ＣＲＸ）のデータと、分散型データベースを構成するテーブル内のカラム毎に一意の値をとる分散行識別子（ＲＩＤ）とＮＩＤとの対応関係に係る分散圧縮結果セットキャッシュ（Ｄ−ＣＲＳ）のデータを、複数のスレーブノードの各々に分散格納する。Ｄ−ＣＲＸのデータを複数のスレーブノードの各々に分散格納するに際しては、Ｄ−ＣＲＳのデータによって示されるＮＩＤと同じＮＩＤが割り当てられたＤ−ＣＲＸのデータについて、Ｄ−ＣＲＳのデータの格納先として決定されたスレーブノードと同じスレーブノードを、Ｄ−ＣＲＸのデータの格納先として決定する。
【０００９】
上記のように構成した本発明によれば、複数のスレーブノードの各々は、マスターノードからの指令に基づく結合演算などのデータ操作を並列に実行する際、実値であるキー値に代えて、自ノードに分散格納されたＤＳＮを参照して得られるキー値識別子（ＮＩＤ）を用いるように動作する。ここで、キー値識別子（ＮＩＤ）は、分散型データベースの全体においてキー値が有するデータ型の範囲内で一意の値をとる。つまり、同一のキー値であれば同一のキー値識別子（ＮＩＤ）の値をとる。一方、キー値に関する情報としての分散共有ＮＩＤ（ＤＳＮ）のデータの格納先は、そのキー値に基づいて決定される。そうすると、同一のキー値に関する情報は、同一のスレーブノードに集約されることになる。
【００１０】
要するに、本発明では、同一のキー値に関する情報は同一のスレーブノードに集約するように作為的に分散格納される。このため、複数のスレーブノード間にまたがって同一の値を有するキー値が無作為に分散格納される従来例とは対照的に、例えばあるスレーブノードが結合演算などのデータ操作を実行した場合に、同一の値を有するキー値を相互に参照するためのスレーブノード間の通信はまったく生じず、システム全体としての処理のオーバーヘッドが抑制される。
【００１１】
また、本発明によれば、あるスレーブノードが結合演算などのデータ操作を実行した場合に、Ｄ−ＣＲＳのデータによって示されるＮＩＤのデータが自ノードに保持されていれば、Ｄ−ＣＲＸのデータによってそのＮＩＤに対応するものとして示されるキー値のデータも自ノードに保持されていることになるので、キー値のデータを得るためのスレーブノード間の通信が生じにくくなる。従って、システム全体としての処理のオーバーヘッドを抑制することができる。
【００１２】
従って、本発明によれば、分散型データベースシステム全体としての処理能力を効率的に向上させることができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態に係る分散型データベースシステムの概要を示す構成図である。
【図２Ａ】第１〜第３のスレーブノードにおける売上管理表のトランザクションの一例を示す図である。
【図２Ｂ】第１〜第３のスレーブノードにおける売上管理表のトランザクションの一例を示す図である。
【図３Ａ】分散共有ＮＩＤ（ＤＳＮ）の一例を示す図である。
【図３Ｂ】分散圧縮復元インデックス（Ｄ−ＣＲＸ）の一例を示す図である。
【図３Ｃ】分散圧縮結果セットキャッシュ（Ｄ−ＣＲＳ）の一例を示す図である。
【図３Ｄ】分散行識別インデックス（Ｄ−ＲＩＸ）の一例を示す図である。
【図４】マスターノードと第１のスレーブノードの内部構成を示す機能ブロック図である。
【図５Ａ】ＤＳＮのデータの登録要求が生じた場合のマスターノードとスレーブノードとの協調動作を示すフロー図である。
【図５Ｂ】Ｄ−ＲＩＸのデータの登録要求が生じた場合のマスターノードとスレーブノードとの協調動作を示すフロー図である。
【図５Ｃ】Ｄ−ＣＲＳのデータの登録要求が生じた場合のマスターノードとスレーブノードとの協調動作を示すフロー図である。
【図５Ｄ】Ｄ−ＣＲＸのデータの登録要求が生じた場合のマスターノードとスレーブノードとの協調動作を示すフロー図である。
【図６】本実施形態に係る分散型データベースシステムで実行される分散クエリー処理の流れを示す工程図である。
【図７】複数のローカルノードに分散格納される地域別顧客数（内部表）を示す図である。
【図８】図７に示す内部表のＤ−ＲＩＸの一例を示す図である。
【図９】外部表ＲＩＤと内部表ＲＩＤとの対応関係を示すＲＩＤ対照表を示す図である。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施形態に係る分散型データベースシステムについて、図面を参照して詳細に説明する。【００１５】
（本発明の実施形態に係る分散型データベースシステムの概要）
まず、本発明の実施形態に係る分散型データベースシステムの概要について説明する。図１は、本発明の実施形態に係る分散型データベースシステムの概要を示す構成図である。本実施形態に係る分散型リレーショナルデータベース（以下では、原則として、“リレーショナルデータベース”を“ＲＤＢ”と省略し、“データベース”を“ＤＢ”と省略する。）のシステム１１は、ひとつのマスターノード１３と、第１〜第３のスレーブノード１５，１７，１９との間を、第１通信網２１を介して接続して構成されている。マスターノード１３は、複数のスレーブノード１５，１７，１９を統括管理する。なお、ノード１３，１５，１７，１９とは、情報処理機能を有するコンピューターである。【００１６】
分散型ＲＤＢシステム１１外の構成要素として、マスターノード１３には、第２通信網２３を介して、複数のクライアント端末２５ａ，２５ｂ，２５ｃが接続されている。マスターノード１３は、複数のクライアント端末２５ａ，２５ｂ，２５ｃのうちいずれか一つより発行されたキー値登録要求、または、表結合操作などのデータ操作要求を受付けると、その要求に従う処理を第１〜第３のスレーブノード１５，１７，１９と連携して実行し、得られた処理結果を応答として要求のあったクライアント端末に返す。【００１７】
マスターノード１３は、マスターデータを記憶するマスターデータ記憶部１３ａを有する。マスターデータは、ＤＢメタデータおよびＤＢ管理データを含んで構成される。ＤＢメタデータは、複数のスレーブノード１５，１７，１９がどこに何台設置されているのかに関する物理構成表や、テーブル属性の構成表などを含む。ＤＢ管理データは、後述する最新共有ＮＩＤなどの共有管理データを含む。ここで、本発明の主要な特徴として、マスターノード１３は、本来の管理対象であるキー値を含む、キー値を特定するためのキー値に関する情報を、第１〜第３のスレーブノード１５，１７，１９に分散格納するための管理を行うのみで、キー値またはキー値に関する情報を、マスターノード１３それ自体またはマスターデータ記憶部１３ａのいずれも保持していない。【００１８】
第１〜第３のスレーブノード１５，１７，１９の各々は、第１〜第３のローカルデータを記憶する第１〜第３のローカルデータ記憶部１５ａ，１７ａ，１９ａをそれぞれ有する。なお、第１〜第３のスレーブノード１５，１７，１９および第１〜第３のローカルデータ記憶部１５ａ，１７ａ，１９ａの構成は横並びに等しい。そこで、説明の重複を避けるため、以下では、第１のスレーブノード１５、第１のローカルデータおよび第１のローカルデータ記憶部１５ａについて代表的に説明することで、その他の第２，第３のスレーブノード１７，１９、第２，第３のローカルデータおよび第２，第３のローカルデータ記憶部１７ａ，１９ａについての説明に代えることとする。第１〜第３のローカルデータ記憶部１５ａ，１７ａ，１９ａのそれぞれは、ＤＳＮ格納部、Ｄ−ＣＲＸ格納部、Ｄ−ＣＲＳ格納部およびＤ−ＲＩＸ格納部に相当する。【００１９】
第１のローカルデータは、４種類のインデックスデータを含んで構成される。すなわち、第１の分散共有ＮＩＤ（以下、「ＤＳＮ」という）、第１の分散圧縮復元インデックス（以下、「Ｄ−ＣＲＸ」という）、第１の分散圧縮結果セットキャッシュ（以下、「Ｄ−ＣＲＳ」という）および第１の分散行識別インデックス（以下、「Ｄ−ＲＩＸ」という）がそれである。これらについて、詳しくは後述する。【００２０】
（複数のスレーブノードにおける売上管理表のトランザクションの一例）
本発明の実施形態に係る分散型ＲＤＢシステム１１で生成される、複数のスレーブノード１５，１７，１９における売上管理表のトランザクションの一例について説明する。図２Ａ，図２Ｂは、複数のスレーブノード１５，１７，１９における売上管理表のトランザクションの一例を示すテーブルである。【００２１】
図２Ａ，図２Ｂに示すような、タプル（行）とカラム（列）を二次元に配置したテーブルデータが入力されると、分散型ＲＤＢシステム１１は、分散リレーショナル・データ・モデルの４種類のインデックスデータを作成する。図２Ａ，図２Ｂに示す入力行番号は、入力行を一意に識別するための標識であり、１番から昇順に連番で割り振られるものとする。この入力行番号は、マスターノード１３により付される標識であり、実際の入力データには付与されていない。【００２２】
図２Ａ，図２Ｂに示すテーブルの第１行目にはカラムの項目名が、同テーブルの第２行目にはデータ型の種別（例えば、文字列型か、数値型か、日付型か等）がそれぞれ記入してある。図２Ａ，図２Ｂに示すテーブルでは、それぞれのタプルに入力行番号として１〜１５が割り振られている。なお、図２Ａ，図２Ｂに示すテーブルでは、特許請求の範囲に記載の“分散型データベースを構成するテーブル内のカラム毎に一意の値をとる分散行識別子（以下、「ＲＩＤ」という）”は、入力行番号と等しい値になっている。【００２３】
図２Ａ，図２Ｂに示すテーブルにおいて、それぞれのタプルの下段の欄には、各タプルの属性値が記入してある。ただし、各タプルの属性値は、説明の便宜上記入したものであり、実際の入力データには含まれていない。この属性値としては、例えば、キー値を入力としてＤＳＮのデータを参照することにより払い出されたキー値識別子（以下、「ＮＩＤ」という）、コンシステント・ハッシュ法によって決定されたＤＳＮのデータの格納先ノード番号（以下、「ＤＳＮ−ＣＮＮ」という）、後述する方法によって決定されたＤ−ＣＲＸのデータの格納先ノード番号（以下、「Ｄ−ＣＲＸ−ＣＮＮ」という）がある。なお、ＮＩＤ、ＤＳＮ、ＤＳＮ−ＣＮＮおよびＤ−ＣＲＸ−ＣＮＮについて、詳しくは後述する。【００２４】
図２Ａ，図２Ｂに示すテーブルにおいて、格納先ノードの数は、第１〜第３のスレーブノード１５，１７，１９の数に対応して３分散とした。第１〜第３のスレーブノード１５，１７，１９には、それぞれにＣＮＮの識別子としてａ〜ｃを付した。つまり、第１のスレーブノード１５がＣＮＮ＝ａの格納先ノードに相当し、第２のスレーブノード１７がＣＮＮ＝ｂの格納先ノードに相当し、第３のスレーブノード１９がＣＮＮ＝ｃの格納先ノードに相当するものとして、以降の説明を進める。なお、以下の説明において、中括弧｛｝により要素を囲んだ記号｛ｉ，ｊ，ｋ｝は、ｉ，ｊ，ｋを要素とする集合を示す。【００２５】
管理対象となる値の集合（以下、「値集合」という）の元をキー値と呼ぶ。ＮＩＤとは、キー値を一意に識別するための標識である。このＮＩＤは、分散型データベースの全体において登録要求に係るキー値が有するデータ型の範囲内で一意の値をとるように、それぞれのキー値に対して割り当てられる。【００２６】
要するに、同一の値を有するキー値には、同一のＮＩＤが割り当てられる。このことを、図２Ａ，図２Ｂに示すテーブルにおいて検証してみる。図２Ａのうち入力行番号が“１”であるタプルでは、カラムの地域名として記入されたキー値である“北海道東北”に対し、ＮＩＤとして“２”が割り当てられている。また、図２Ａのうち入力行番号が“５”であるタプルでは、カラムの地域名として記入されたキー値である“北海道東北”に対し、入力行番号が“１”であるタプルの例と同様に、ＮＩＤとして“２”が割り当てられている。なお、図２Ａ，図２Ｂに示すテーブルにおいて、後に同じ値が現れるキー値と、先に同じ値が現れるキー値と、これらに相当しないキー値とを一見して識別できるように、上記の前二者の記入枠に対し、相互に異なる網掛け修飾を付与してある。【００２７】
ＮＩＤは、自然数の値をとるのが好ましい。キー値に代えてＮＩＤを用いて表結合操作などのデータ操作を行う際に、その演算に係る処理負荷を低く抑え、演算処理の高速化を図れるからである。その理由の詳細については後述する。また、ＮＩＤは、順序数の値をとるのが好ましい。最新共有ＮＩＤの値をインクリメントするといったきわめて簡素な手順で、登録要求に係るキー値に対してユニークなＮＩＤの払い出しを行うことができるからである。なお、図２Ａ，図２Ｂに示すテーブルでは、ＮＩＤ＝０は無効値、ＮＩＤ＝１はＮＵＬＬ値、ＮＩＤ＝２以上が有効値と定義してある。【００２８】
キー値に関する情報（ＤＳＮ、Ｄ−ＣＲＸ、Ｄ−ＣＲＳ、Ｄ−ＲＩＸ）を複数のスレーブノード１５，１７，１９に分散するための分散方式としては、例えば公知のコンシステント・ハッシュ法を採用することができる。ただし、スレーブノード（格納先ノード）の増減が生じた際に、キー値に関する情報を充分に小さいコストで再分散可能な方式であれば、コンシステント・ハッシュ法に限定されない。【００２９】
（ＤＳＮの一例）
次に、本発明の実施形態に係る分散型ＲＤＢシステム１１で生成されるＤＳＮの一例について説明する。図３Ａは、ＤＳＮの一例を示すインデックスデータである。ＤＳＮとは、キー値を分散キーとして用いたコンシステント・ハッシュ法によって、ＮＩＤを複数のスレーブノード１５，１７，１９に分散格納したインデックスであり、キー値を入力として対応するＮＩＤを得る際に参照される。【００３０】
詳しく述べると、ＤＳＮは、登録要求に係るキー値と、そのキー値に割り当てられたＮＩＤとの対応関係に係るインデックスである。このＤＳＮは、登録要求に係るキー値が有するデータ型毎に分けて格納される。ＤＳＮのインデックスによれば、キー値を入力として対応するＮＩＤを得ることができる。【００３１】
ＤＳＮは、図３Ａに示すように、次の規則に従って生成される。
（１）分散型データベース全体の範囲内において、同一のデータ型の同一のキー値の集合に対して共通のＮＩＤを与える。
（２）キー値を分散キーとして用いたコンシステント・ハッシュ法によって、キー値とＮＩＤの対を複数のスレーブノード１５，１７，１９（ＤＳＮ−ＣＮＮの値がａ〜ｃ）に分散格納する。
（３）ＤＳＮの管理単位は、分散型データベースである。【００３２】
（Ｄ−ＣＲＸの一例）
次に、本発明の実施形態に係る分散型ＲＤＢシステム１１で生成されるＤ−ＣＲＸの一例について説明する。図３Ｂは、地域名、価格、および受注日の３つのカラムを抜粋した場合のＤ−ＣＲＸの一例を示す。Ｄ−ＣＲＸとは、複数のスレーブノード１５，１７，１９にＮＩＤを分散格納したインデックスであり、キー値の検索時に対応するＮＩＤを調べる際、または、ＮＩＤをキー値へ逆変換する際に用いられる。【００３３】
詳しく述べると、Ｄ−ＣＲＸは、登録要求に係るキー値と、そのキー値に割り当てられたＮＩＤとの１対１の対応関係に係るインデックスである。このＤ−ＣＲＸは、登録要求に係るキー値が属するカラム毎に分けて格納される。Ｄ−ＣＲＸのインデックスによれば、ＮＩＤを入力として対応するキー値を得ること、および、キー値を入力として対応するＮＩＤを得ることができる。ＤＳＮとＤ−ＣＲＸとの相違点は、ＤＳＮではキー値をＮＩＤに一方向に変換するのに対し、Ｄ−ＣＲＸではキー値とＮＩＤとを双方向に変換する点である。また、Ｄ−ＣＲＸのインデックスによれば、キー値の値範囲（始値と終値）を入力として対応するＮＩＤ集合を得ることができる（値範囲検索）。この値範囲検索については後述する。【００３４】
Ｄ−ＣＲＸは、図３Ｂに示すように、次の規則に従って生成される。
（１）分散型データベース内における同一テーブルの同一カラムを管理単位として、キー値とＮＩＤとの１対１の対応関係を与える。
（２）Ｄ−ＣＲＳのデータによって示されるＮＩＤと同じＮＩＤが割り当てられたＤ−ＣＲＸのデータの格納先が、Ｄ−ＣＲＳのデータの格納先として決定されたスレーブノードと同じスレーブノードとなるように、ＮＩＤとキー値との対（１対１対応）を複数のスレーブノード１５，１７，１９（格納先ノード；Ｄ−ＣＲＸ−ＣＮＮの値がａ〜ｃ）に分散格納する。
（３）Ｄ−ＣＲＸの管理単位は、カラムである。【００３５】
（Ｄ−ＣＲＳの一例）
次に、本発明の実施形態に係る分散型ＲＤＢシステム１１で生成されるＤ−ＣＲＳの一例について説明する。図３Ｃは、地域名、価格、および受注日の３つのカラムを抜粋した場合のＤ−ＣＲＳの一例を示す。Ｄ−ＣＲＳとは、ＲＩＤの関数（ＲＩＤそれ自体を含む）を分散キーとして用いたコンシステント・ハッシュ法によって、複数のスレーブノード１５，１７，１９にＮＩＤを分散格納したインデックスであり、検索結果としてのＲＩＤ集合を作成する際、または、結合結果としてのタプルを作成する際に用いられる。【００３６】
詳しく述べると、Ｄ−ＣＲＳは、分散型データベースを構成するテーブル内のカラム毎に一意の値をとるＲＩＤとＮＩＤとの対応関係に係るインデックスである。このＤ−ＣＲＳは、登録要求に係るキー値が属するカラム毎に分けて格納される。Ｄ−ＣＲＳでは、ＲＩＤとＮＩＤとの対応関係が１対１で記述されており、同一のカラム内においてＮＩＤの重複した出現を許すデータ構造となっている。Ｄ−ＣＲＳによれば、ＲＩＤを入力として対応するＮＩＤを得ることができる。また、ＮＩＤ集合（｛ＮＩＤ｝と表記する）を入力として対応するＲＩＤ集合（｛ＲＩＤ｝と表記する）を得ることができる。つまり、検索対象となるＮＩＤと、カラムに属する全てのＮＩＤとを逐一照合してゆくフルスキャンを、ＮＩＤ集合の元の数だけ繰り返し行うことにより、ＮＩＤ集合に対応するＲＩＤ集合を得ることができる。【００３７】
Ｄ−ＣＲＳは、図３Ｃに示すように、次の規則に従って生成される。
（１）分散型データベース内における同一のカラム単位にＲＩＤに対応するＮＩＤを格納する。これを列単位ＮＩＤ配列と呼ぶ。
（２）Ｄ−ＣＲＳ−ＣＮＮの決定に使用するブロック番号（Ｄ−ＣＲＳ−ＢＮ）は、ＲＩＤをブロック化係数（Ｄ−ＣＲＳ-ＢＦ）で割った商である。上記式より、Ｄ−ＣＲＳ−ＢＮはＲＩＤの関数であるといえる。
（３）Ｄ−ＣＲＳ−ＢＮの決定に使用するＤ−ＣＲＳ−ＢＦは定数であり、任意の正の整数（本例では“７”）の値をとる。このため、Ｄ−ＣＲＳ−ＢＮは正の整数の値をとる。
（４）Ｄ−ＣＲＳ−ＢＮ（ＲＩＤの関数）を分散キーとするコンシステント・ハッシュ法によって、列単位ＮＩＤ配列を複数のスレーブノード１５，１７，１９（Ｄ−ＣＲＳのデータの格納先ノード；Ｄ−ＣＲＳ−ＣＮＮの値がａ〜ｃ）に分散格納する。
（５）Ｄ−ＣＲＳの管理単位は、カラムである。【００３８】
（Ｄ−ＲＩＸの一例）
次に、本発明の実施形態に係る分散型ＲＤＢシステム１１で生成されるＲＩＸの一例について説明する。図３Ｄは、地域名、価格、および受注日の３つのカラムを抜粋した場合のＤ−ＲＩＸの一例を示す。Ｄ−ＲＩＸとは、ＮＩＤの関数（ＮＩＤそれ自体を含む）を分散キーとして用いたコンシスタント・ハッシュ法によって、複数のスレーブノード１５，１７，１９にＮＩＤを分散格納したインデックスであり、表結合操作でのキー値の検索時に対応するＲＩＤを調べる際に用いられる。【００３９】
詳しく述べると、Ｄ−ＲＩＸは、ＮＩＤとＲＩＤ集合との１対Ｎの対応関係に係るインデックスである。このＤ−ＲＩＸは、登録要求に係るキー値が属するカラム毎に分けて格納される。Ｄ−ＣＲＳとＤ−ＲＩＸとの相違点は、Ｄ−ＣＲＳでは同一のカラム内においてＮＩＤの重複した出現が起こり得るのに対し、Ｄ−ＲＩＸでは同一のカラム内においてＮＩＤの重複した出現が起こり得ない点である。この相違点は、Ｄ−ＣＲＳではＲＩＤを分散キーとして用いるのに対し、Ｄ−ＲＩＸではＮＩＤを分散キーとして用いることに由来して生じている。Ｄ−ＲＩＸのインデックスによれば、ＮＩＤを入力として対応するＲＩＤ集合を得ること、およびＮＩＤ集合を入力として対応するＲＩＤ集合を得ることができる。また、Ｄ−ＲＩＸを用いて表結合操作などのデータ操作を行うことにより、複数のスレーブノード１５，１７，１９（格納先ノード；ＤＳＮ−ＣＮＮの値がａ〜ｃ）間でのデータの移動を抑止すること、並びに、表結合操作での検索時のフルスキャンを抑止することができる。その理由については後述する。【００４０】
Ｄ−ＲＩＸは、図３Ｄに示すように、次の規則に従って生成される。
（１）分散型データベース内における同一テーブルの同一カラムを管理単位として、ＮＩＤとＲＩＤ集合の対応関係を与える。
（２）ＤＳＮ−ＣＮＮの決定に使用するブロック番号（Ｄ−ＲＩＸ−ＢＮ）は、ＮＩＤをブロック化係数（Ｄ−ＲＩＸ-ＢＦ）で割った商である。上記式より、Ｄ−ＲＩＸ−ＢＮはＮＩＤの関数であるといえる。
（３）Ｄ−ＲＩＸ−ＢＮの決定に使用するＤ−ＲＩＸ−ＢＦは定数であり、任意の正の整数（本例では“７”）の値をとる。このため、Ｄ−ＲＩＸ−ＢＮは正の整数の値をとる。
（４）Ｄ−ＲＩＸ−ＢＮ（ＮＩＤの関数）を分散キーとするコンシステント・ハッシュ法によって、ＮＩＤとＲＩＤ集合の対（１対Ｎ対応）を複数のスレーブノード１５，１７，１９（格納先ノード；ＤＳＮ−ＣＮＮの値がａ〜ｃ）に分散格納する。
（５）Ｄ−ＲＩＸの管理単位は、カラムである。【００４１】
（マスターノードと第１のスレーブノードの内部構成）
次に、本実施形態に係る分散型ＲＤＢシステム１１において重要な役割を果たすマスターノード１３と第１のスレーブノード１５の内部構成について説明する。図４は、マスターノード１３と第１のスレーブノード１５の内部構成を示す機能ブロック図である。【００４２】
はじめに、マスターノード１３の内部構成について説明する。マスターノード１３は、マスター受付部３１、ＮＩＤ割当部３３、インデックス生成部３５、ノード決定部３７、要求発行部４１と処理結果統合部４３とを有する分散統括管理部３９、および、更新管理部４５を備えて構成される。【００４３】
登録要求受付部に相当するマスター受付部３１は、登録要求に係るキー値およびそのデータ型の情報を受け付ける。キー値登録要求は、実際には、複数のカラム毎にそれぞれのキー値およびそのデータ型の情報が関連付られたタプル単位でマスター受付部３１に入力されるのが一般的である。ただし、キー値登録要求は、複数のタプルの組からなるテーブルデータの形態で入力される場合もある。いずれの場合でも、タプル単位の入力データを受け付けたマスター受付部３１は、タプルに含まれる複数のカラムのうちいずれか一つのカラムに関連付けられたキー値（以下、「処理対象キー値」と呼ぶ場合がある。）およびそのデータ型の情報を最小単位として逐次処理を進める。このため、本実施形態では、最小単位である一組の処理対象キー値およびそのデータ型の情報をマスター受付部３１が受け付けたものとして説明を進めるものとする。【００４４】
タプル単位の入力データを受け付けたマスター受付部３１は、そのタプルに属する全てのキー値に対し、テーブル内のカラム毎に一意の値をとる共通のＲＩＤを付与する。ＲＩＤとしては、ＮＩＤと同様に、自然数かつ順序数の値を採るのが好ましい。ＲＩＤの最新値をインクリメントするといったきわめて簡素な手順で、テーブル内のカラム毎にユニークなＲＩＤの付与を行うことができるからである。【００４５】
マスター受付部３１は、複数のクライアント端末２５ａ，２５ｂ，２５ｃのうちいずれか一つより発行されたキー値登録要求（そのデータ型の情報を含む）、または、表結合操作などのデータ操作要求を受付ける。また、マスター受付部３１は、いずれかのスレーブノードから送信されてくる後述の既存確認結果を受付ける。マスター受付部３１は、キー値登録要求が生じた場合、その要求をＮＩＤ割当部３３へ渡す一方、データ操作要求が生じた場合、その要求をノード決定部３７へ渡す。【００４６】
ＮＩＤ割当部３３は、キー値登録要求が生じた場合、マスターデータ記憶部１３ａに記憶されたＤＢ管理データのうち最新共有ＮＩＤを参照して、登録要求に係るキー値に対してユニークなＮＩＤを割当てる。また、ＮＩＤ割当部３３は、マスター受付部３１が既存確認結果（登録要求に係るキー値がその格納先ノードに既に存在するか否かを示す情報）を受け付けた場合、その既存確認結果に基づいて、最新共有ＮＩＤを更新すべか否かに係る最新共有ＮＩＤ更新制御信号を生成し、これを更新管理部４５に送る。【００４７】
インデックス生成部３５は、ＮＩＤ割当部３３により登録要求に係るキー値に対してＮＩＤが割り当てられた場合、登録要求に係るキー値、そのキー値が有するデータ型、そのキー値に割り当てられたＮＩＤ、およびマスターノード１３により付与されたＲＩＤに基づいて、ＤＳＮ、Ｄ−ＣＲＸ、Ｄ−ＣＲＳ、および、Ｄ−ＲＩＸのデータをそれぞれ生成する。ここで、ＤＳＮのデータとは、ＤＳＮの構成要素となる少なくとも最小単位のデータ（ひとつのキー値とひとつのＮＩＤとの対データ）を意味する。同様に、Ｄ−ＣＲＸのデータとは、Ｄ−ＣＲＸの構成要素となる少なくとも最小単位のデータ（ひとつのキー値とひとつのＮＩＤとの対データ）を意味し、Ｄ−ＣＲＳのデータとは、Ｄ−ＣＲＳの構成要素となる少なくとも最小単位のデータ（ひとつのＲＩＤとひとつのＮＩＤとの対データ）を意味し、Ｄ−ＲＩＸのデータとは、Ｄ−ＲＩＸの構成要素となる少なくとも最小単位のデータ（ひとつのＮＩＤと一群のＲＩＤ集合との対データ）を意味する。こうして生成された４種類のインデックスデータは、例えば、次述するノード決定の際や、表結合操作等のデータ操作要求が生じた際などに参照される。インデックス生成部３５は、ＤＳＮ生成部、Ｄ−ＣＲＸ生成部、Ｄ−ＣＲＳ生成部およびＤ−ＲＩＸ生成部に相当する。【００４８】
ノード決定部３７は、キー値登録要求が生じた場合、インデックス生成部３５で生成されたＤＳＮ、Ｄ−ＣＲＸ、Ｄ−ＣＲＳおよびＤ−ＲＩＸのデータの分散格納先となるスレーブノードを決定する。このとき、ＤＳＮ、Ｄ−ＣＲＳおよびＤ−ＲＩＸのデータについては、キー値、ＮＩＤの関数またはＲＩＤの関数のうちいずれか一つを分散キーとするコンシステント・ハッシュ法によって決定する。また、Ｄ−ＣＲＸのデータについては、Ｄ−ＣＲＳのデータによって示されるＮＩＤと同じＮＩＤが割り当てられたＤ−ＣＲＸのデータの格納先が、Ｄ−ＣＲＳのデータの格納先として決定されたスレーブノードと同じスレーブノードとなるように、分散格納先を決定する。ノード決定部３７は、ＤＳＮ格納ノード決定部、Ｄ−ＣＲＸ格納ノード決定部、Ｄ−ＣＲＳ格納ノード決定部およびＤ−ＲＩＸ格納ノード決定部に相当する。【００４９】
ノード決定部３７は、表結合操作などのデータ操作要求が生じた場合、マスターノード１３の支配下にある第１〜第３のスレーブノード１５，１７，１９の全てを、データ操作要求を分散処理するノードとして決定する。これを受けて第１〜第３のスレーブノード１５，１７，１９では、与えられたデータ操作要求を並列に実行する。第１〜第３のスレーブノード１５，１７，１９がデータ操作要求を分散処理する手順について、詳しくは後述する。【００５０】
分散統括管理部３９に属する要求発行部４１は、キー値登録要求が生じた場合、マスターノード１３の支配下にある第１〜第３のスレーブノード１５，１７，１９のうち、ノード決定部３７で決定されたスレーブノードに対し、ＤＳＮ、Ｄ−ＣＲＸ、Ｄ−ＣＲＳおよびＤ−ＲＩＸのデータをそれぞれ送ってデータ登録要求を発行する。また、要求発行部４１は、データ操作要求が生じた場合、第１〜第３のスレーブノード１５，１７，１９のうち、ノード決定部３７で決定されたノードに対し、処理要求を発行する。要求発行部４１は、ＤＳＮ登録要求発行部、Ｄ−ＣＲＸ登録要求発行部、Ｄ−ＣＲＳ登録要求発行部およびＤ−ＲＩＸ登録要求発行部に相当する。【００５１】
分散統括管理部３９に属する処理結果統合部４３は、第１〜第３のスレーブノード１５，１７，１９のそれぞれで分散処理されたデータ操作結果を受けて、これらの処理結果を統合する。【００５２】
更新管理部４５は、ＮＩＤ割当部３３から送信されてきた最新共有ＮＩＤ更新制御信号に従って、ＤＢ管理データのうち最新共有ＮＩＤの更新を制御する。具体的には、更新管理部４５は、登録要求に係るキー値がその格納先ノードのＤＳＮ格納部に未だ存在しない旨の既存確認結果を受けた場合に、最新共有ＮＩＤを次共有ＮＩＤに更新するように制御を行う。【００５３】
次に、第１のスレーブノード１５の内部構成について説明する。第１のスレーブノード１５は、第１の受付部５１、既存判定部５３、登録管理部５５、第１の分散処理部５７および第１の応答部５９を備えて構成される。【００５４】
第１の受付部５１は、マスターノード１３の要求発行部４１から送られてきたＤＳＮ、Ｄ−ＣＲＸ、Ｄ−ＣＲＳおよびＤ−ＲＩＸのデータ（以下、「インデックスデータ」という）の登録要求、または、表結合操作などのデータ操作要求を受付ける。第１の受付部５１は、インデックスデータの登録要求が生じた場合、その要求を既存判定部５３へ渡す一方、データ操作要求が生じた場合、その要求を第１の分散処理部５７へ渡す。【００５５】
既存判定部５３は、インデックスデータの登録要求が生じた場合、第１のローカルデータ記憶部１５ａの第１のＤＳＮを参照して、登録要求に係るＤＳＮのデータに含まれる処理対象キー値と同じ値のデータが第１のＤＳＮに既に存在するか否かを確認し、その既存確認結果を第１の応答部５９に送る。また、既存判定部５３は、既存確認結果に基づいて、登録要求に係るＤＳＮのデータに含まれる処理対象キー値と、そのキー値に対してユニークなＮＩＤとの組み合わせに係るＤＳＮのデータの登録指令を登録管理部５５に送る。【００５６】
登録管理部５５は、既存判定部５３から送られてきた登録指令に従って、登録要求に係るＤＳＮのデータを第１のローカルデータ記憶部１５ａ（ＤＳＮ格納部に相当）に追加格納させる登録管理を行う。また、登録管理部５５は、マスターノード１３から送られてきた登録指令に従って、登録要求に係るＤ−ＣＲＸ、Ｄ−ＣＲＳおよびＤ−ＲＩＸのデータを第１のローカルデータ記憶部１５ａ（Ｄ−ＣＲＸ格納部、Ｄ−ＣＲＳ格納部およびＤ−ＲＩＸ格納部に相当）に格納させる登録管理を行う。これにより、登録要求に係る全てのインデックスデータの登録が完了する。登録管理部５５は、ＤＳＮ登録管理部、Ｄ−ＣＲＸ登録管理部、Ｄ−ＣＲＳ登録管理部およびＤ−ＲＩＸ登録管理部に相当する。【００５７】
データ操作実行部に相当する第１の分散処理部５７は、自ノードに関連するデータ操作要求が生じた場合、第１のローカルデータ記憶部１５ａに格納された第１のＤＳＮ、第１のＤ−ＣＲＸ、第１のＤ−ＣＲＳ、第１のＤ−ＲＩＸを適宜参照して、要求に係る分散処理を他ノードに対し並列に実行する。第１の分散処理部５７は、得られた分散処理結果を第１の応答部５９へ渡す。【００５８】
第１の応答部５９は、既存判定部５３から送られてきた既存確認結果を、マスターノード１３のマスター受付部３１へ応答する。マスターノード１３では、前述したように、マスター受付部３１は、受け付けた既存確認結果をＮＩＤ割当部３３に渡す。ＮＩＤ割当部３３は、その既存確認結果に基づいて最新共有ＮＩＤ更新制御信号を生成し、これを更新管理部４５に送る。更新管理部４５は、ＮＩＤ割当部３３から送信されてきた最新共有ＮＩＤ更新制御信号に従って、ＤＢ管理データのうち最新共有ＮＩＤの更新を制御する。また、第１の応答部５９は、第１の分散処理部５７から送られてきた分散処理結果を、マスターノード１３の処理結果統合部４３へ応答する。【００５９】
（キー値登録要求が生じた場合のマスターノード１３とスレーブノード１５，１７，１９との協調動作）
次に、キー値登録要求が生じた場合のマスターノード１３とスレーブノード１５，１７，１９との協調動作について説明する。まず、ＤＳＮのデータの登録要求が生じた場合のマスターノード１３とスレーブノード１５，１７，１９との協調動作について、図５Ａを参照して説明する。【００６０】
図５Ａは、キー値登録要求に基づくＤＳＮのデータの登録要求が生じた場合のマスターノード１３とスレーブノード１５，１７，１９との協調動作を示すフロー図である。なお、キー値登録要求は、前述したとおり、タプル単位でマスター受付部３１に入力されるのが一般的であるが、タプル単位の入力データを受け付けたマスター受付部３１は、タプルに含まれる複数のカラムのうちいずれか一つのカラムに関連付けられたキー値およびそのデータ型の情報を単位として処理を進めるものとする。【００６１】
ステップＳ１１において、マスターノード１３のマスター受付部３１は、複数のクライアント端末２５ａ，２５ｂ，２５ｃのうちいずれか一つより発行されたキー値登録要求を受付けて、その要求をＮＩＤ割当部３３へ渡す。【００６２】
ステップＳ１２において、キー値登録要求を受け付けたＮＩＤ割当部３３は、マスターデータ記憶部１３ａに記憶されたＤＢ管理データのうち最新共有ＮＩＤを参照して、登録要求に係るキー値に対してふさわしい次共有ＮＩＤ（例えば、次共有ＮＩＤは最新共有ＮＩＤの値を“１”だけインクリメントした値である）を割当てる。ＮＩＤ割当部３３で登録要求に係るキー値に対して割り当てられた次共有ＮＩＤの情報はインデックス生成部３５へと送られる。【００６３】
ステップＳ１３において、マスターノード１３のインデックス生成部３５は、登録要求に係るキー値と、そのキー値が有するデータ型と、そのキー値に対してＮＩＤ割当部３３で割り当てられた次共有ＮＩＤとに基づいて、ＤＳＮのデータを生成する。【００６４】
ステップＳ１４において、マスターノード１３のノード決定部３７は、インデックス生成部３５で生成されたＤＳＮのデータの分散格納先となるスレーブノードを、キー値を分散キーとするコンシステント・ハッシュ法によって決定し、その決定内容を分散統括管理部３９へ送る。ここでは、ＣＮＮ＝ｘ（ただし、ｘはａ〜ｃのいずれか）の値をもつノードが、ＤＳＮの分散格納先となるスレーブノードとして決定されたとする。また、ＣＮＮ＝ｘの値をもつノードは、第１のスレーブノード１５であるとして以降の説明を進める。【００６５】
ステップＳ１５において、マスターノード１３の分散統括管理部３９に属する要求発行部４１は、マスターノード１３の支配下にある第１〜第３のスレーブノード１５，１７，１９のうち、ノード決定部３７で決定されたＣＮＮ＝ｘの値をもつ第１のスレーブノード１５に対し、ステップＳ１３で生成したＤＳＮのデータを送ってデータ登録要求を発行する。【００６６】
ここで、マスターノード１３での処理の流れの説明が途中であるが、マスターノード１３と第１のスレーブノード１５との間の協調動作を円滑に説明する便宜上、以下では、ＣＮＮ＝ｘの値をもつ第１のスレーブノード１５での処理内容について説明する。ステップＳ２１において、ＣＮＮ＝ｘの値をもつ第１のスレーブノード１５の第１の受付部５１は、マスターノード１３の要求発行部４１から送られてきたＤＳＮのデータ登録要求を受付けて、その要求を既存判定部５３に渡す。【００６７】
ステップＳ２２において、ＣＮＮ＝ｘの値をもつ第１のスレーブノード１５の既存判定部５３は、第１のローカルデータ記憶部１５ａの第１のＤＳＮを参照して、登録要求に係るＤＳＮのデータに含まれる処理対象キー値と同じ値のデータが第１のＤＳＮに既に存在するか否かを確認し、この既存確認結果に基づいて、ステップＳ２３において、登録要求に係る処理対象キー値が既に登録済みか否かに係る既存判定を行う。そして、既存判定部５３は、既存判定結果に基づいて、登録要求に係る処理対象キー値と、そのキー値に対してユニークなＮＩＤとの組み合わせに係るＤＳＮのデータの登録指令を登録管理部５５に対して行う。【００６８】
ステップＳ２３の既存判定の結果、登録要求に係る処理対象キー値が既に登録済みであると判定された場合、ステップＳ２４において、登録管理部５５は、既存判定部５３から送られてきた登録指令に従わずに、登録要求に係る処理対象キー値と登録済みのＮＩＤとの対応関係に係るＤＳＮのデータをそのまま維持する。これにより、同一のキー値に対するユニークなＮＩＤの割り当てを担保する。この場合、登録管理部５５は、ＤＳＮのデータの登録要求をキャンセルする。登録要求に係る処理対象キー値と登録済みのＮＩＤとの対応関係に係るＤＳＮのデータは既に登録済みであり、ＤＳＮのデータを追加登録する必要もないからである。【００６９】
一方、ステップＳ２３の既存判定の結果、登録要求に係る処理対象キー値が未登録の値であると判定された場合、ステップＳ２５において、登録管理部５５は、既存判定部５３から送られてきた登録指令に従って、登録要求に係る処理対象キー値にふさわしいものとして次共有ＮＩＤが割り当てられたＤＳＮのデータを第１のローカルデータ記憶部１５ａに追加格納する。ここで、次共有ＮＩＤが割り当てられたＤＳＮのデータを追加格納するとは、既に蓄積されているＤＳＮのデータを書き換えることなく、次共有ＮＩＤが割り当てられたＤＳＮのデータを追加するように格納することをいう。【００７０】
ステップＳ２６において、第１のスレーブノード１５の第１の応答部５９は、ステップＳ２４またはＳ２５の処理後に、登録要求に係る処理対象キー値に対して現実に割り当てられたＮＩＤを、既存確認結果と共にマスターノード１３のマスター受付部３１へ返し、一連の処理の流れを終了させる。【００７１】
ここで、マスターノード１３での処理の流れの説明に戻る。ステップＳ１６において、マスターノード１３のマスター受付部３１は、第１のスレーブノード１５から送信されてきた既存確認結果、および登録要求に係る処理対象キー値に対して現実に割り当てられたＮＩＤを受付けて、その結果をＮＩＤ割当部３３へ渡す。ステップＳ１７において、ＮＩＤ割当部３３は、登録要求に係る処理対象キー値が既に登録済みか否かに係る既存判定を行う。【００７２】
ステップＳ１７の既存判定の結果、登録要求に係る処理対象キー値が既に登録済みであると判定された場合、ステップＳ１８において、登録要求に係る処理対象キー値がその格納先である第１のスレーブノード１５に既に存在する旨の既存確認結果を受けたＮＩＤ割当部３３は、最新共有ＮＩＤの更新を禁止する制御信号を生成し、これを更新管理部４５に送る。更新管理部４５は、ＮＩＤ割当部３３から送信されてきた最新共有ＮＩＤ更新制御信号に従って、最新共有ＮＩＤの更新を禁止する。これにより、ステップＳ１２で登録要求に係る処理対象キー値に対して割り当てられた次共有ＮＩＤはキャンセルされ、最新共有ＮＩＤの値は更新されることなくそのまま維持される。【００７３】
一方、ステップＳ１７の既存判定の結果、登録要求に係るキー値が未登録の値であると判定された場合、ステップＳ１９において、登録要求に係る処理対象キー値がその格納先である第１のスレーブノード１５にまだ存在しない旨の既存確認結果を受けたＮＩＤ割当部３３は、最新共有ＮＩＤを更新させる制御信号を生成し、これを更新管理部４５に送る。更新管理部４５は、ＮＩＤ割当部３３から送信されてきた最新共有ＮＩＤ更新制御信号に従って、最新共有ＮＩＤの値を、ステップＳ１２で登録要求に係るキー値に対して割り当てられた次共有ＮＩＤの値に更新する。この更新後に、ＮＩＤ割当部３３は、処理の流れを図５ＢのステップＳ３１へと進ませる。【００７４】
次に、ＤＳＮのデータ登録が完了した後に、Ｄ−ＲＩＸのデータ登録要求が生じた場合のマスターノード１３とスレーブノード１５，１７，１９との協調動作について、図５Ｂを参照して説明する。図５Ｂは、キー値登録要求に基づくＤ−ＲＩＸのデータ登録要求が生じた場合のマスターノード１３とスレーブノード１５，１７，１９との協調動作を示すフロー図である。【００７５】
ステップＳ３１において、マスターノード１３のＮＩＤ割当部３３は、登録要求に係る処理対象キー値に対して現実に割り当てられたＮＩＤを参照して、そのＮＩＤの関数であるブロック番号（Ｄ−ＲＩＸ−ＢＮ）を演算する。具体的には、「Ｄ−ＲＩＸ−ＢＮは、ＮＩＤをＤ−ＲＩＸ−ＢＦで割った商」を演算により求める。【００７６】
ステップＳ３２において、マスターノード１３のインデックス生成部３５は、登録要求に係る処理対象キー値に対して現実に割り当てられたＮＩＤと、そのＮＩＤに対応するＲＩＤ集合と、登録要求に係る処理対象キー値が属するカラム名とに基づいて、Ｄ−ＲＩＸのデータを生成する。【００７７】
ステップＳ３３において、マスターノード１３のノード決定部３７は、インデックス生成部３５で生成されたＤ−ＲＩＸのデータの分散格納先となるスレーブノードを、ステップＳ３１で求めたＮＩＤの関数であるブロック番号（Ｄ−ＲＩＸ−ＢＮ）を分散キーとするコンシステント・ハッシュ法によって決定し、その決定内容を分散統括管理部３９へ送る。ここでは、ＣＮＮ＝ｙ（ただし、ｙはａ〜ｃのいずれか）の値をもつノードが、Ｄ−ＲＩＸのデータの分散格納先となるスレーブノードとして決定されたとする。また、ＣＮＮ＝ｙの値をもつノードは、第１のスレーブノード１５であるとして以降の説明を進める。【００７８】
ステップＳ３４において、マスターノード１３の分散統括管理部３９に属する要求発行部４１は、マスターノード１３の支配下にある第１〜第３のスレーブノード１５，１７，１９のうち、ノード決定部３７で決定されたＣＮＮ＝ｙの値をもつ第１のスレーブノード１５に対し、ステップＳ３２で生成したＤ−ＲＩＸのデータを送ってデータ登録要求を発行する。このデータ登録要求の発行後に、マスターノード１３の分散統括管理部３９は、処理の流れを図５ＣのステップＳ５１へと進ませる。【００７９】
ここで、マスターノード１３での処理の流れの説明が途中であるが、マスターノード１３と第１のスレーブノード１５との間の協調動作を円滑に説明する便宜上、以下では、ＣＮＮ＝ｙの値をもつ第１のスレーブノード１５での処理内容について説明する。ステップＳ４１において、ＣＮＮ＝ｙの値をもつ第１のスレーブノード１５の第１の受付部５１は、マスターノード１３の要求発行部４１から送られてきたＤ−ＲＩＸのデータの登録要求を受付けて、その要求を既存判定部５３を介して登録管理部５５に渡す。【００８０】
ステップＳ４２において、ＣＮＮ＝ｙの値をもつ第１のスレーブノード１５の登録管理部５５は、マスターノード１３の要求発行部４１から送られてきた登録要求に応じて、Ｄ−ＲＩＸのデータをカラム毎に分けて第１のローカルデータ記憶部１５ａにそれぞれ格納させる。ステップＳ４２においてＤ−ＲＩＸのデータの格納後に、第１のスレーブノード１５の登録管理部５５は、一連の処理の流れを終了させる。【００８１】
次に、Ｄ−ＲＩＸのデータ登録が完了した後に、Ｄ−ＣＲＳのデータ登録要求が生じた場合のマスターノード１３とスレーブノード１５，１７，１９との協調動作について、図５Ｃを参照して説明する。図５Ｃは、キー値登録要求に基づくＤ−ＣＲＳのデータ登録要求が生じた場合のマスターノード１３とスレーブノード１５，１７，１９との協調動作を示すフロー図である。【００８２】
ステップＳ５１において、マスターノード１３のＮＩＤ割当部３３は、登録要求に係る処理対象キー値に対して現実に割り当てられたＮＩＤに対応するＲＩＤを参照して、そのＲＩＤの関数であるブロック番号（Ｄ−ＣＲＳ−ＢＮ）を演算する。具体的には、「Ｄ−ＣＲＳ−ＢＮは、ＲＩＤをＤ−ＣＲＳ−ＢＦで割った商」を演算により求める。【００８３】
ステップＳ５２において、マスターノード１３のインデックス生成部３５は、登録要求に係る処理対象キー値に対して現実に割り当てられたＮＩＤと、登録要求に係る処理対象キー値が属するＲＩＤと、登録要求に係る処理対象キー値が属するカラム名とに基づいて、Ｄ−ＣＲＳのデータを生成する。【００８４】
ステップＳ５３において、マスターノード１３のノード決定部３７は、インデックス生成部３５で生成されたＤ−ＣＲＳのデータの分散格納先となるスレーブノードを、ステップＳ５１で求めたＲＩＤの関数であるブロック番号（Ｄ−ＣＲＳ−ＢＮ）を分散キーとするコンシステント・ハッシュ法によって決定し、その決定内容を分散統括管理部３９へ送る。ここでは、ＣＮＮ＝ｚ（ただし、ｚはａ〜ｃのいずれか）の値をもつノードが、Ｄ−ＣＲＳの分散格納先となるスレーブノードとして決定されたとする。また、ＣＮＮ＝ｚの値をもつノードは、第１のスレーブノード１５であるとして以降の説明を進める。【００８５】
ステップＳ５４において、マスターノード１３の分散統括管理部３９に属する要求発行部４１は、マスターノード１３の支配下にある第１〜第３のスレーブノード１５，１７，１９のうち、ノード決定部３７で決定されたＣＮＮ＝ｚの値をもつ第１のスレーブノード１５に対し、ステップＳ５２で生成したＤ−ＣＲＳのデータを送ってデータ登録要求を発行する。このデータ登録要求の発行後に、マスターノード１３の分散統括管理部３９は、処理の流れを図５ＤのステップＳ７１へと進ませる。【００８６】
ここで、マスターノード１３での処理の流れの説明が途中であるが、マスターノード１３と第１のスレーブノード１５との間の協調動作を円滑に説明する便宜上、以下では、ＣＮＮ＝ｚの値をもつ第１のスレーブノード１５での処理内容について説明する。ステップＳ６１において、ＣＮＮ＝ｚの値をもつ第１のスレーブノード１５の第１の受付部５１は、マスターノード１３の要求発行部４１から送られてきたＤ−ＣＲＳのデータの登録要求を受付けて、その要求を既存判定部５３を介して登録管理部５５に渡す。【００８７】
ステップＳ６２において、ＣＮＮ＝ｚの値をもつ第１のスレーブノード１５の登録管理部５５は、マスターノード１３の要求発行部４１から送られてきた登録要求に応じて、Ｄ−ＣＲＳのデータをカラム毎に分けて第１のローカルデータ記憶部１５ａに格納させる。ステップＳ６２のＤ−ＣＲＳのデータの格納後に、第１のスレーブノード１５の登録管理部５５は、一連の処理の流れを終了させる。【００８８】
次に、Ｄ−ＣＲＳのデータ登録が完了した後に、Ｄ−ＣＲＸのデータ登録要求が生じた場合のマスターノード１３とスレーブノード１５，１７，１９との協調動作について、図５Ｄを参照して説明する。図５Ｄは、キー値登録要求に基づくＤ−ＣＲＸのデータ登録要求が生じた場合のマスターノード１３とスレーブノード１５，１７，１９との協調動作を示すフロー図である。【００８９】
ステップＳ７１において、マスターノード１３のインデックス生成部３５は、登録要求に係る処理対象キー値と、そのキー値に対して現実に割り当てられたＮＩＤと、登録要求に係る処理対象キー値が属するカラム名とに基づいて、Ｄ−ＣＲＸのデータを生成する。【００９０】
ステップＳ７２において、マスターノード１３のノード決定部３７は、図５Ｃのフローチャートにより決定されたＤ−ＣＲＳのデータを参照して、当該Ｄ−ＣＲＳのデータによって示されるＮＩＤと同じＮＩＤが割り当てられたＤ−ＣＲＸのデータの格納先が、Ｄ−ＣＲＳのデータの格納先として決定されたスレーブノードと同じスレーブノードとなるように、インデックス生成部３５で生成されたＤ−ＣＲＸのデータの分散格納先となるスレーブノードを決定し、その決定内容を分散統括管理部３９へ送る。【００９１】
つまり、ノード決定部３７は、Ｄ−ＣＲＳのデータによって示されるＮＩＤと同じＮＩＤが割り当てられたＤ−ＣＲＸのデータについて、Ｄ−ＣＲＳのブロック番号Ｄ−ＣＲＳ−ＢＮと同じブロック番号を格納先として決定する。ここでは、ＣＮＮ＝ｚ（ただし、ｚはａ〜ｃのいずれか）の値をもつノードが、Ｄ−ＣＲＸのデータの分散格納先となるスレーブノードとして決定されたとする。また、ＣＮＮ＝ｚの値をもつノードは、第１のスレーブノード１５であるとして以降の説明を進める。【００９２】
ステップＳ７３において、マスターノード１３の分散統括管理部３９に属する要求発行部４１は、マスターノード１３の支配下にある第１〜第３のスレーブノード１５，１７，１９のうち、ノード決定部３７で決定されたＣＮＮ＝ｚの値をもつ第１のスレーブノード１５に対し、ステップＳ７１で生成したＤ−ＣＲＸのデータを送ってデータ登録要求を発行する。このデータ登録要求の発行後に、マスターノード１３の分散統括管理部３９は、一連の処理の流れを終了させる。【００９３】
次に、ステップＳ８１において、ＣＮＮ＝ｚの値をもつ第１のスレーブノード１５の第１の受付部５１は、マスターノード１３の要求発行部４１から送られてきたＤ−ＣＲＸのデータの登録要求を受付けて、その要求を既存判定部５３を介して登録管理部５５に渡す。【００９４】
ステップＳ８２において、ＣＮＮ＝ｚの値をもつ第１のスレーブノード１５の登録管理部５５は、マスターノード１３の要求発行部４１から送られてきた登録要求に応じて、Ｄ−ＣＲＸのデータをカラム毎に分けて第１のローカルデータ記憶部１５ａにそれぞれ格納させる。ステップＳ８２においてＤ−ＣＲＸのデータの格納後に、第１のスレーブノード１５の登録管理部５５は、一連の処理の流れを終了させる。【００９５】
上述のようにして登録された４種類のインデックスデータは、膨大な量のデータからなる分散型ＲＤＢを対象として、第１〜第３のスレーブノード１５，１７，１９が表結合操作などの処理を並列に分散して実行する際に、その威力を発揮する。特に、本実施形態に係る分散型ＲＤＢシステム１１は、例えばＷＷＷ（World Wide Web）経由で分散型ＲＤＢサービスを提供するに際し、急激な需要増大への柔軟な対応を狙ってシステム内のノードの台数を増設し、増設後の複数の各ノードに分散格納されたデータに対して表結合操作などのデータ操作を実行した場合であっても、増設前後でのシステム全体としての処理能力を線形に向上させ得る線形スケールアウト性を実現することができる。以下では、４種類のインデックスデータを導入することによって、どのようにしてシステム全体としての処理能力を効率的に向上させ、また、線形スケールアウト性を実現することができるのかについて、分散クエリー処理を例示して説明する。【００９６】
図６は、分散クエリー処理の流れを示す工程図である。図６に示す分散クエリー処理は、ステップＳ９１の分散検索処理と、ステップＳ９２の分散表結合処理と、ステップＳ９３の集計用としての分散結果タプル作成処理となどから構成される。【００９７】
ステップＳ９１の分散検索処理と、ステップＳ９２の分散表結合処理と、ステップＳ９３の集計用としての分散結果タプル作成処理とは、第１〜第３のスレーブノード１５，１７，１９で並列に実行可能である。上流側フェーズの結果を用いて処理を実行するステップＳ９２の工程では、上流側工程（ステップＳ９１）の処理が全てのノードで完了するまでその処理を実行することができない。【００９８】
ここで、分散クエリー処理の流れを説明するに先立って、説明に用いることばの意味を定義しておく。
検索式は、検索項と、論理演算子と、演算の優先順位を制御する括弧とからなる。これらの任意の組合せによって検索式が構成される。
検索項は、左辺項と、比較演算子と、右辺項とからなる。左辺項は、列名もしくはリテラル（実値）からなる。右辺項は、列名もしくはリテラル（実値）からなる。比較演算子は、等しい「＝」、等しくない「≠」、大なり「＞」、大なりイコール「≧」、小なり「＜」、小なりイコール「≦」からなる。【００９９】
論理演算子は、ＡＮＤ「＆」、ＯＲ「｜」、ＮＯＴ「¬」からなる。ＡＮＤは積演算、ＯＲは和演算、ＮＯＴは否定演算を行う。括弧は、開き括弧「（」および閉じ括弧「）」からなる。【０１００】
検索では、全スレーブノードにおいてキー値それ自体を検索キーとするＤ−ＣＲＸの検索を行った後、この検索により抽出されたＮＩＤ集合を検索キーとするＤ−ＣＲＳの検索を行い、検索結果としてのＲＩＤ集合を取得する。範囲検索（例えば、数値型のデータを対象として、始値と終値による指定範囲に属するキー値を抽出する検索）では、全スレーブノードにおいてキー値の指定範囲を与えてＤ−ＣＲＸの検索を行った後、この検索により抽出されたＮＩＤ集合を検索キーとするＤ−ＣＲＳの検索を行い、検索結果としてのＲＩＤ集合を取得する。部分一致検索（例えば、文字列型のデータを対象として、指定文字列を少なくとも一部に有するキー値を抽出する検索）では、全スレーブノードにおいてキー値の指定文字列を与えてＤ−ＣＲＸの検索を行った後、この検索により抽出されたＮＩＤ集合を検索キーとするＤ−ＣＲＳの検索を行い、検索結果としてのＲＩＤ集合を取得する。【０１０１】
表結合とは、外部表と内部表との表結合操作を意味する。外部表は、表結合の基準となる表である。内部表は、外部表に対する表結合の相手となる表である。外部表と内部表は、結合カラムの値によって結合される。結合カラムとは、外部表と内部表とに共通して存在するカラムであって、そのカラムを介して外部表と内部表との結合を行わせる役割をもつカラムである。外部表の結合カラムを外部表外部キーカラム、内部表の結合カラムを内部表主キーカラムと呼ぶ。表結合操作を繰り返すことによって、複数の表を結合することができる。【０１０２】
次に、図６に示すステップＳ９１の分散検索処理の内容について、図２Ａ，図２Ｂを参照しながら、具体例をあげて説明する。単一項での完全一致検索の実施例１として、“地域名”が“関東”であるキー値をＲＩＤ集合として抽出する例を挙げる。この実施例１では、まず、マスターノード１３からの検索要求を受けた第１〜第３のスレーブノード１５，１７，１９の分散処理部は、検索式から検索項を抽出し、検索項集合｛地域名＝“関東”｝を求める。そして、カラム名が“地域名”のＤ−ＣＲＸ（ＣＮＮ＝ａ〜ｃ）を対象として、検索項集合の元｛地域名＝“関東”｝を用いて第１〜第３のスレーブノード１５，１７，１９の分散処理部で一斉に検索を実行する。この検索により、元｛地域名＝“関東”｝からＮＩＤ集合＝｛６｝を得る。【０１０３】
ここで、Ｄ−ＣＲＸ（ＣＮＮ＝ａ〜ｃ）を対象とする一斉検索では、フルスキャン照合を要することなく、検索条件に合致したキー値がヒットした時点において検索をやめることができる。Ｄ−ＣＲＸは、あるカラム内でのキー値の重複を許さないデータ構造を採用しているからである。従って、Ｄ−ＣＲＸのデータ構造によれば、検索時間の短縮化に寄与することができる（以下、同様）。【０１０４】
次に、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、カラム名が“地域名”のＤ−ＣＲＳ（ＣＮＮ＝ａ〜ｃ）を対象として、元単位にＮＩＤ集合＝｛６｝でフルスキャン照合することにより、そのＮＩＤ集合の値に合致したＲＩＤ集合を求める。この処理を第１〜第３のスレーブノード１５，１７，１９の分散処理部で一斉に行うことにより、ＲＩＤ集合＝｛２，３，７，９｝を取得する。ＲＩＤ集合＝｛２，３，７，９｝が求める答えとなる。【０１０５】
ここで、Ｄ−ＣＲＳを対象とするＮＩＤ集合の値検索は、フルスキャン照合を要するにも関わらず、比較的短時間で完遂することができる。これは、前段のＤ−ＣＲＸを用いた検索により、実値であるキー値をＮＩＤ（例えば自然数）に代替し、代替したＮＩＤの値を用いてフルスキャン照合を行っているからである。第１〜第３のスレーブノード１５，１７，１９の分散処理部では、ＮＩＤは固定幅のバイナリー整数値で表現されるため、実値であるキー値に比べて検索や参照において格段に効率が良い。従って、Ｄ−ＣＲＸおよびＤ−ＣＲＳの組み合わせに係るデータ検索によれば、検索時間の短縮化に寄与することができる（以下、同様）。【０１０６】
複数項（単一項の組み合わせ）での完全一致検索としては、例えば、“地域名”が“関東”であるキー値、または、“地域名”が“関西”であるキー値をＲＩＤ集合として抽出する実施例２を挙げる。この実施例２では、各単一項での検索条件をそれぞれ用いて、実施例１の手順により単一項での完全一致検索を各々実行し、得られたＲＩＤ集合同士の論理和（ＯＲ）演算を行うことにより、目的とするＲＩＤ集合を得ることができる。【０１０７】
単一項での範囲検索の実施例３として、“価格”が５０００００以上かつ８０００００以下であるＲＩＤ集合を抽出する例を挙げる。この実施例３では、まず、マスターノード１３からの検索要求を受けた第１〜第３のスレーブノード１５，１７，１９の分散処理部は、検索式から検索項を抽出し、検索項集合｛［価格≧５０００００，価格≦８０００００］｝を求める。そして、カラム名が“価格”のＤ−ＣＲＸ（ＣＮＮ＝ａ〜ｃ）を対象として、検索項集合の元｛［価格≧５０００００，価格≦８０００００］｝を用いて第１〜第３のスレーブノード１５，１７，１９の分散処理部で一斉に検索を実行する。この検索により、第１の元｛［価格≧５０００００］｝からＮＩＤ集合＝｛５，８，１１，１４，２２，３０｝を得る。第２の元｛［価格≦８０００００］｝からＮＩＤ集合＝｛２，８，１１，１７，２２，３０｝を得る。次に、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、第１および第２の元毎のＮＩＤ集合を検索式に当てはめてＮＩＤ集合同士の論理積（ＡＮＤ）演算を求め、検索結果としてのＮＩＤ集合＝｛８，１１，２２，３０｝を求める。そして、カラム名が“価格”のＤ−ＣＲＳ（ＣＮＮ＝ａ〜ｃ）を対象として、元単位にＮＩＤ集合＝｛８，１１，２２，３０｝でフルスキャン照合することにより、そのＮＩＤ集合の値に合致したＲＩＤ集合を求める。【０１０８】
単一項での部分一致検索の実施例４として、「“地域名”＝ＬＩＫＥ”％関％“」（ＳＱＬ表記法に従うと、ＬＩＫＥは曖昧検索指示のキーワード、％はワイルドカード記号を表わす。この例の場合、“地域名”が”関“の文字列を含むキー値を検索する。）の検索条件に合致するキー値をＲＩＤ集合として抽出する例を挙げる。この実施例４では、まず、マスターノード１３からの検索要求を受けた第１〜第３のスレーブノード１５，１７，１９の分散処理部は、検索式から検索項を抽出し、検索項集合｛“地域名”＝ＬＩＫＥ”％関％“｝を求める。そして、カラム名が“地域名”のＤ−ＣＲＸ（ＣＮＮ＝ａ〜ｃ）を対象として、検索項集合の元｛“地域名”＝ＬＩＫＥ”％関％“｝を用いて第１〜第３のスレーブノード１５，１７，１９の分散処理部で一斉に検索を実行する。この検索により、元｛“地域名”＝ＬＩＫＥ”％関％“｝からＮＩＤ集合＝｛６，３３｝を得る。【０１０９】
次に、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、カラム名が“地域名”のＤ−ＣＲＳ（ＣＮＮ＝ａ〜ｃ）を対象として、元単位にＮＩＤ集合＝｛６，３３｝でフルスキャン照合することにより、そのＮＩＤ集合の値に合致したＲＩＤ集合を求める。この処理を第１〜第３のスレーブノード１５，１７，１９の分散処理部で一斉に行うことにより、ＲＩＤ集合＝｛２，３，７，９，１２，１５｝を取得する。このＲＩＤ集合＝｛２，３，７，９，１２，１５｝が求める答えとなる。【０１１０】
複数項（単一項の組み合わせ）での部分一致検索としては、例えば、“地域名”が”関“の文字列を含むキー値、または、“地域名”が”東“の文字列を含むキー値をＲＩＤ集合として抽出する実施例５を挙げる。この実施例５では、各単一項での検索条件をそれぞれ用いて、実施例４の手順により単一項での部分一致検索を各々実行し、得られたＲＩＤ集合同士の論理和（ＯＲ）演算を行うことにより、検索結果としてのＲＩＤ集合を得ることができる。【０１１１】
次に、図６に示すステップＳ９２の分散表結合処理の手順について、図２Ａ，図２Ｂ、図７および図８を参照しながら、具体例をあげて説明する。図７は、複数のスレーブノード１５，１７，１９に分散格納される地域別顧客数の内部表を示す図である。図８は、図７に示す内部表のＤ−ＲＩＸの一例を示す図である。実施例６では、第１〜第３のスレーブノード１５，１７，１９の分散処理部において、結合カラムのＤ−ＲＩＸを参照して外部表と内部表との結合結果を求める。実施例６において、複数のスレーブノード１５，１７，１９に分散格納された売上管理表（トランザクション）を示す図２Ａ，図２Ｂは、外部表として位置づけられる。複数のスレーブノード１５，１７，１９に分散格納された地域別顧客数を示す図７は、内部表として位置づけられる。実施例６において、結合カラムは“地域名”である。【０１１２】
この実施例６では、まず、マスターノード１３からの表結合操作要求を受けた第１〜第３のスレーブノード１５，１７，１９の分散処理部は、外部表のＤ−ＲＩＸ（以下、「ＯＴＦＫ−Ｄ−ＲＩＸ」と省略する）から、外部表外部キーカラムのＮＩＤ（以下、「ＯＴＦＫ−ＮＩＤ」と省略する）集合をそれぞれ取得する。具体的には、例えば第１のスレーブノード（ＣＮＮ＝ａ）１５では、図３Ｄに示す“地域名”のカラムからＯＴＦＫ−ＮＩＤ集合｛２，６，２５｝を取得する。【０１１３】
次に、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、ＯＴＦＫ−ＮＩＤ集合の元（ＮＩＤ）を検索条件として用いて、内部表主キーカラムのＤ−ＲＩＸ（以下、「ＩＴＰＫ−Ｄ−ＲＩＸ」と省略する）をそれぞれ検索する。具体的には、例えば第１のスレーブノード（ＣＮＮ＝ａ）１５では、ＯＴＦＫ−ＮＩＤ集合の元｛２，６，２５｝を検索条件として用いて、図８に示す“地域名”のカラムから、ＯＴＦＫ−ＮＩＤ集合の元｛２，６，２５｝に合致する内部表主キーカラムのＮＩＤ（以下、「ＩＴＰＫ−ＮＩＤ」と省略する）集合を検索する。この検索により、ＩＴＰＫ−ＮＩＤ集合｛２，６，２５｝が得られる。【０１１４】
ＩＴＰＫ−ＮＩＤ集合の検索が成功した場合、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、ＯＴＦＫ−Ｄ−ＲＩＸの目標カラム（外部表外部キーカラム）から、ＯＴＦＫ−ＮＩＤ集合に対応する外部表ＲＩＤ（以下「ＯＴＲＩＤ」と省略する）集合をそれぞれ取得する。具体的には、例えば第１のスレーブノード（ＣＮＮ＝ａ）１５では、図３Ｄに示す“地域名”のカラムから、ＯＴＦＫ−ＮＩＤ集合｛２，６，２５｝に対応するＯＴＲＩＤ集合｛１，２，３，５，７，８，９，１０，１４｝を取得する。【０１１５】
次に、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、ＩＴＰＫ−Ｄ−ＲＩＸの目標カラム（内部表主キーカラム）から、ＩＴＰＫ−ＮＩＤ集合に対応する内部表ＲＩＤ（以下「ＩＴＲＩＤ」と省略する）集合をそれぞれ取得する。具体的には、例えば第１のスレーブノード（ＣＮＮ＝ａ）１５では、図８に示す“地域名”のカラムから、ＩＴＰＫ−ＮＩＤ集合｛２，６，２５｝に対応するＩＴＲＩＤ集合｛１，２，７｝を取得する。【０１１６】
そして、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、外部表ＲＩＤに対応する内部表ＲＩＤの対照表（以下、「ＲＥＦ−ＯＴＲＩＤ−ＩＴＲＩＤ」と省略する）をそれぞれ作成する。ＲＥＦ−ＯＴＲＩＤ−ＩＴＲＩＤは、相互に共通のＯＴＦＫ−ＮＩＤおよびＩＴＰＫ−ＮＩＤを間にはさんで、外部表ＲＩＤとこれに対応する内部表ＲＩＤとを結びつける役割を果たす。これにより、図９に示すようなＲＩＤ対照表が得られる。【０１１７】
結合条件が複数ある場合には、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、複数の結合条件のそれぞれ毎に、実施例６の手順に従ってＲＥＦ−ＯＴＲＩＤ−ＩＴＲＩＤをそれぞれ作成し、得られたＲＥＦ−ＯＴＲＩＤ−ＩＴＲＩＤ同士に論理演算を施すことにより、結合結果としてのＲＥＦ−ＯＴＲＩＤ−ＩＴＲＩＤ（ＲＩＤ対照表）を、複数のスレーブノード１５，１７，１９のそれぞれ毎に得ることができる。【０１１８】
実施例６に係る結合結果としてのＲＩＤ対照表は、複数のスレーブノード１５，１７，１９のそれぞれ毎に分散格納されたＲＥＦ−ＯＴＲＩＤ−ＩＴＲＩＤによって表現される。この結合結果としてのＲＩＤ対照表のデータ構造は、ＲＤＢにおけるデータの格納効率および処理効率に多大な影響を与える。巨大になりがちな結合表を実値ベースで作成することなしに、結合表と同等の機能を果たすことができるからである。第１〜第３のスレーブノード１５，１７，１９の分散処理部では、外部表を基準としてＲＥＦ−ＯＴＲＩＤ−ＩＴＲＩＤを順に辿ることによって、外部表における目標カラム（外部表外部キーカラム）のＲＩＤをポインタとして用いて、内部表における目標カラム（内部表主キーカラム）のＲＩＤを効率的に参照することができる。目標カラム（外部表外部キーカラムまたは内部表主キーカラム）に属する実表（外部表または内部表）のＲＩＤが得られれば、そのＲＩＤをポインタとしてＤ−ＣＲＳを参照することにより、対応するＮＩＤを取得することができる。ＮＩＤが得られれば、そのＮＩＤをポインタとしてＤ−ＣＲＸを参照することにより、対応するキー値を取得することができる。【０１１９】
検索結果のデータ構造は、外部表のＲＩＤ集合として表現される。これに対し、結合結果のデータ構造は、外部表を基準としたＲＥＦ−ＯＴＲＩＤ−ＩＴＲＩＤ（ＲＩＤ対照表）の連鎖として表現される。これらの共通点は、両者共に外部表のＲＩＤ集合を持つことである。従って、検索結果と結合結果とのそれぞれの外部表のＲＩＤ集合同士で論理演算を行わせることにより、検索結果と結合結果との組み合わせに係る論理演算を効率的に実現することができる。【０１２０】
実施例６によれば、表結合操作のための複雑な演算を、簡素な集合演算に置き換えることができる。そのため、演算処理時間の大幅の短縮を実現することができる。また、実施例６によれば、表結合操作を行う際に、外部表の結合カラムと、内部表の結合カラムとの間でのキー値の突き合わせを不要とすることができる。これは、ＤＳＮの採用によって同一のキー値に対して同一のＮＩＤを割り当てることが担保されていること、並びに、共通のＮＩＤを間にはさんで外部表ＲＩＤとこれに対応する内部表ＲＩＤとを結びつけるＲＩＤ対照表が存在すること等に基づく。【０１２１】
また、実施例６では、同一のキー値に関する情報（ＮＩＤ）は同一のスレーブノードに集約するように作為的に分散格納される。このため、複数のスレーブノード間にまたがって同一の値を有するキー値が無作為に分散格納される従来例とは対照的に、例えばあるスレーブノードが結合演算などのデータ操作を実行した場合に、同一の値を有するキー値を相互に参照するためのスレーブノード間の通信はまったく生じない。従って、実施例６によれば、システム全体としての処理のオーバーヘッドを抑制することができるため、分散型ＲＤＢシステム１１全体としての処理能力を効率的に向上させることができる。【０１２２】
要するに、実施例６によれば、例えばＷＷＷ（World Wide Web）経由で分散型ＲＤＢサービスを提供するに際し、急激な需要増大への柔軟な対応を狙ってシステム内のスレーブノードの台数を増設し、増設後の複数の各スレーブノードに分散格納されたデータに対して表結合操作などのデータ操作を実行した場合であっても、増設前後でのシステム全体としての処理能力を線形に向上させ得る線形スケールアウト性を実現することができる。【０１２３】
次に、図６に示すステップＳ９３の集計用としての分散結果タプル作成処理の概要について、表結合操作がない場合とある場合とに分けて説明する。ステップＳ９３の処理は、第１〜第３のスレーブノード１５，１７，１９のそれぞれにおいて並列に実行される。表結合操作がない場合の集計用としての分散結果タプル作成処理において、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、それぞれの検索結果としてのＲＩＤ集合から、そのＲＩＤ集合の元となるＲＩＤをそれぞれ取得する。【０１２４】
次に、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、取得したＲＩＤに基づいて、取得したＲＩＤに対応するＮＩＤのデータをどのノードが保持しているのかを特定する。具体的には、第１〜第３のスレーブノード１５，１７，１９の分散処理部が以下の計算を行うことにより、データの格納先ノード番号Ｄ−ＣＲＳ−ＣＮＮを特定する。すなわち、分散処理部は、ＲＩＤに基づいて、Ｄ−ＣＲＳのブロック番号Ｄ−ＣＲＳ−ＢＮを決定する。そして、当該決定したＤ−ＣＲＳ−ＢＮを用いてコンシステント・ハッシュ法によるハッシュ演算を行うことにより、Ｄ−ＣＲＳ−ＣＮＮを決定する。ここで、自ノード以外のノードが、取得したＲＩＤに対応するＮＩＤのデータを保持している場合、自ノードは、そのデータを自ノード以外のノードから取得する。次いで、自ノードは、取得したＲＩＤをポインタとして用いて、タプルを構成する目標カラムのＤ−ＣＲＳを参照してＮＩＤを取得する。【０１２５】
次に、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、上記のように決定したＤ−ＣＲＳ−ＣＮＮに基づいて、取得したＮＩＤに対応するキー値のデータをどのノードが保持しているのかを特定する。具体的には、第１〜第３のスレーブノード１５，１７，１９の分散処理部が以下の計算を行うことにより、データの格納先ノード番号Ｄ−ＣＲＸ−ＣＮＮを特定する。すなわち、分散処理部は、Ｄ−ＣＲＳ−ＣＮＮによって示されるＮＩＤと同じＮＩＤが割り当てられたＤ−ＣＲＸのデータの格納先がＤ−ＣＲＳ−ＣＮＮと同じとなるように、Ｄ−ＣＲＸ−ＣＮＮを決定する。ここで、自ノード以外のノードが、取得したＮＩＤに対応するキー値のデータを保持している場合、自ノードは、そのデータを自ノード以外のノードから取得する。次いで、自ノードは、取得したＮＩＤをポインタとして用いて、タプルを構成する目標カラムのＤ−ＣＲＸを参照して実値であるキー値を取得する。【０１２６】
次に、表結合操作がある場合の集計用としての分散結果タプル作成処理において、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、それぞれの検索結果としてのＲＩＤ集合から、外部表のＲＩＤをそれぞれ取得する。【０１２７】
次に、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、取得した外部表のＲＩＤに基づいて、取得した外部表のＲＩＤに対応するＮＩＤのデータをどのノードが保持しているのかを特定する。具体的には、第１〜第３のスレーブノード１５，１７，１９の分散処理部が以下の計算を行うことにより、データの格納先ノード番号Ｄ−ＣＲＳ−ＣＮＮを特定する。すなわち、分散処理部は、外部表のＲＩＤに基づいて、Ｄ−ＣＲＳのブロック番号Ｄ−ＣＲＳ−ＢＮを決定する。そして、当該決定したＤ−ＣＲＳ−ＢＮを用いてコンシステント・ハッシュ法によるハッシュ演算を行うことにより、Ｄ−ＣＲＳ−ＣＮＮを決定する。ここで、自ノード以外のノードが、取得した外部表のＲＩＤに対応するＮＩＤのデータを保持している場合、自ノードは、そのデータを自ノード以外のノードから取得する。次いで、自ノードは、取得した外部表のＲＩＤをポインタとして用い、ＲＥＦ−ＯＴＲＩＤ−ＩＴＲＩＤの連鎖を参照して、タプルを構成する目標カラムのＲＥＦ−ＯＴＲＩＤ−ＩＴＲＩＤから目標となる内部表のＲＩＤを取得する。【０１２８】
次に、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、取得した内部表のＲＩＤに基づいて、取得した内部表のＲＩＤに対応するＮＩＤのデータをどのノードが保持しているのかを特定する。具体的には、第１〜第３のスレーブノード１５，１７，１９の分散処理部が以下の計算を行うことにより、データの格納先ノード番号Ｄ−ＣＲＳ−ＣＮＮを特定する。すなわち、分散処理部は、内部表のＲＩＤに基づいて、Ｄ−ＣＲＳのブロック番号Ｄ−ＣＲＳ−ＢＮを決定する。そして、当該決定したＤ−ＣＲＳ−ＢＮを用いてコンシステント・ハッシュ法によるハッシュ演算を行うことにより、Ｄ−ＣＲＳ−ＣＮＮを決定する。ここで、自ノード以外のノードが、取得した内部表のＲＩＤに対応するＮＩＤのデータを保持している場合、自ノードは、そのデータを自ノード以外のノードから取得する。次いで、自ノードは、取得した内部表のＲＩＤをポインタとして用いて、タプルを構成する目標カラムのＤ−ＣＲＳを参照してＮＩＤを取得する。【０１２９】
次に、第１〜第３のスレーブノード１５，１７，１９の分散処理部は、上記のように決定したＤ−ＣＲＳ−ＣＮＮに基づいて、取得したＮＩＤに対応するキー値のデータをどのノードが保持しているのかを特定する。具体的には、第１〜第３のスレーブノード１５，１７，１９の分散処理部が以下の計算を行うことにより、データの格納先ノード番号Ｄ−ＣＲＸ−ＣＮＮを特定する。すなわち、分散処理部は、Ｄ−ＣＲＳ−ＣＮＮによって示されるＮＩＤと同じＮＩＤが割り当てられたＤ−ＣＲＸのデータの格納先がＤ−ＣＲＳ−ＣＮＮと同じとなるように、Ｄ−ＣＲＸ−ＣＮＮを決定する。ここで、自ノード以外のノードが、取得したＮＩＤに対応するキー値のデータを保持している場合、自ノードは、そのデータを自ノード以外のノードから取得する。次いで、自ノードは、取得したＮＩＤをポインタとして用いて、タプルを構成する目標カラムのＤ−ＣＲＸを参照して実値であるキー値を取得する。【０１３０】
なお、本実施形態では、第１〜第３のスレーブノード１５，１７，１９の分散処理部が自身でコンシステント・ハッシュ法によるハッシュ演算を行うことにより、Ｄ−ＣＲＳ−ＣＮＮを決定する例について説明したが、本発明はこれに限定されない。例えば、Ｄ−ＣＲＳ−ＣＮＮをマスターノード１３がマスターデータ１３ａとして保持し、第１〜第３のスレーブノード１５，１７，１９の分散処理部がマスターノード１３に問い合わせるようにしてもよい。ただし、マスターノード１３に問い合わせるよりも、各スレーブノードが自身で演算する方が効率的で好ましい。【０１３１】
以上説明したように、マスターノード１３のインデックス生成部３５は、第１〜第３のスレーブノード１５，１７，１９に分散して格納させるためのインデックスデータ（ＤＳＮ、Ｄ−ＣＲＸ、Ｄ−ＣＲＳ、Ｄ−ＲＩＸ）をそれぞれ作成した後、作成したインデックスデータを、ノード決定部３７による決定ノードに一括送信し、それぞれの決定ノード上でインデックスデータを一括処理する。【０１３２】
コンシステント・ハッシュ法によりインデックスデータの格納先ノードを決定するに際しては、ＤＳＮではキー値、Ｄ−ＲＩＸではＮＩＤの関数、Ｄ−ＣＲＳではＲＩＤの関数を分散キーとしてそれぞれ用いる。これにより、例えばあるスレーブノードが結合演算などのデータ操作を実行した場合に、同一の値を有するキー値を相互に参照するためのスレーブノード間の通信はまったく生じないため、インデックスデータの処理の効率化を実現することができる。【０１３３】
また、本実施形態では、Ｄ−ＣＲＳのデータによって示されるＮＩＤと同じＮＩＤが割り当てられたＤ−ＣＲＸのデータの格納先が、Ｄ−ＣＲＳのデータの格納先として決定されたスレーブノードと同じスレーブノードとなるように、Ｄ−ＣＲＸのデータの分散格納先を特定している。これにより、あるスレーブノードが結合演算などのデータ操作を実行した場合に、Ｄ−ＣＲＳのデータによって示されるＮＩＤのデータが自ノードに保持されていれば、Ｄ−ＣＲＸのデータによってそのＮＩＤに対応するものとして示されるキー値のデータも自ノードに保持されていることになるので、キー値のデータを得るためのスレーブノード間の通信が生じにくくなる。従って、システム全体としての処理のオーバーヘッドを抑制することができるため、分散型ＲＤＢシステム１１全体としての処理能力を効率的に向上させることができる。【０１３４】
また、ＤＳＮによってＮＩＤとキー値とは１対１で対応するように規制されるため、意味のある値としてキー値が必要になる以前の処理では、キー値に代えてＮＩＤ（自然数かつ順序数の値をとる）を用いるのが好ましい。これにより、全ての演算を数値演算に還元することができる。計算機内においてＮＩＤは固定幅のバイナリー整数値で表現されるため、実値であるキー値に比べて検索や参照の場面で効率が良い。従って、演算処理時間の短縮化に貢献することができる。【０１３５】
以上説明した実施形態は、本発明の具現化の例を示したものである。従って、これらによって本発明の技術的範囲が限定的に解釈されることがあってはならない。本発明はその要旨またはその主要な特徴から逸脱することなく、様々な形態で実施することができるからである。【０１３６】
例えば、本実施形態において、複数のスレーブノードとして第１〜第３のスレーブノード１５，１７，１９を例示して説明したが、本発明はこの例に限定されない。スレーブノードの数は、処理対象となるデータ量の増減にあわせて、適宜の数に調整すればよい。【０１３７】
また、本実施形態において、マスターノードとしてひとつのマスターノード１３を例示して説明したが、本発明はこの例に限定されない。負荷分散や耐障害性の向上を図る目的で、マスターノードの複製を設けてもよい。複製を設けてもよいのは、スレーブノードについても同様である。【０１３８】
また、本実施形態において、Ｄ−ＲＩＸのインデックスデータを、ＤＳＮ、Ｄ−ＣＲＸ、Ｄ−ＣＲＳと横並びで説明したが、本発明において、Ｄ−ＲＩＸは必須のデータ構造でない。Ｄ−ＲＩＸは、表結合操作時における処理の効率化を実現することができるものの、これがなくてもＤ−ＣＲＳを参照したフルスキャン照合によって、その機能を代替することができるからである。【０１３９】
また、上記実施形態では、インデックス生成部３５、ノード決定部３７および更新管理部４５をマスターノード１３に設ける例について説明したが、本発明はこれに限定されない。例えば、これらの各機能構成をスレーブノード１５，１７，１９に設けてもよい。大量のデータを登録する際は、複数のスレーブノード１５，１７，１９でインデックス生成部３５、ノード決定部３７および更新管理部４５に関する処理を並列に実行することにより、処理の効率を上げることができる。
【産業上の利用可能性】
【０１４０】
本発明は、複数のスレーブノードとマスターノードとを備えた分散型データベースシステムに利用可能である。
【図１】
2014030235.tif 000003
【図２Ａ】
2014030235.tif 000004
【図２Ｂ】
2014030235.tif 000005
【図３Ａ】
2014030235.tif 000006
【図３Ｂ】
2014030235.tif 000007
【図３Ｃ】
2014030235.tif 000008
【図３Ｄ】
2014030235.tif 000009
【図４】
2014030235.tif 000010
【図５Ａ】
2014030235.tif 000011
【図５Ｂ】
2014030235.tif 000012
【図５Ｃ】
2014030235.tif 000013
【図５Ｄ】
2014030235.tif 000014
【図６】
2014030235.tif 000015
【図７】
2014030235.tif 000016
【図８】
2014030235.tif 000017
【図９】
2014030235.tif 000018
【国際調査報告】
2014030235.tif 000019
2014030235.tif 000020