(57)【特許請求の範囲】
【請求項１】
フロントデータベースサーバと複数台のデータノードとが相互に接続されて構成される分散メモリデータベースシステムであって、
前記フロントデータベースサーバが、
外部から入力される表データを分割して各々の実際のデータを値ＩＤに置換した複数の値ＩＤ表を生成してこれらを前記各データノードに分散して記憶させるデータ構造変換部と、
外部のクライアントマシンから発行された集合関数を含むクエリーに基づいて前記各データノードに対して前記表データの中の特定の値ＩＤの出現数を問い合わせると共に、これに応じて前記各データノードから返された特定の値ＩＤの出現数、若しくは前記特定の値ＩＤの出現数に当該特定の値ＩＤに対応する実際の値を適用することのうちのいずれか一方によって、前記クエリーに対応する集合関数の値を計算して前記クライアントマシンに返送する問い合わせ処理部と
を有し、
前記データ構造変換部が、前記複数の値ＩＤ表を生成する際に、前記表データの中で集計軸になり得る列としてあらかじめ指定された複数のデータ項目の各々について個別に前記複数の値ＩＤ表を生成することを特徴とする分散メモリデータベースシステム。
【請求項２】
前記フロントデータベースサーバの前記データ構造変換部が、前記複数の値ＩＤ表を生成する際に、前記表データの中で集計軸および集計対象になり得る列としてあらかじめ指定されたデータ項目の各々について実際の値を値ＩＤに置換すると共に、前記値ＩＤと前記実際の値との対応を示す値リストを生成する機能を有し、
前記フロントデータベースサーバが、前記値リストおよび前記値ＩＤ表が前記各データノードの中のいずれに分散されたかをあらかじめ備えられた記憶手段に記憶するデータ配置情報管理部を有することを特徴とする、請求項１に記載の分散メモリデータベースシステム。
【請求項３】
前記フロントデータベースサーバの前記データ構造変換部が、前記複数の値リストを生成する際に、前記実際の値を大小順にソートしてから前記値ＩＤに置換することを特徴とする、請求項２に記載の分散メモリデータベースシステム。
【請求項４】
前記フロントデータベースサーバの前記データ構造変換部が、前記表データの中で集計軸および集計対象のいずれにもなり得ない列としてあらかじめ指定されたデータ項目の各々について、前記集計軸になり得る列についての前記値ＩＤ表のいずれか１種類に付随して記憶させることを特徴とする、請求項２に記載の分散メモリデータベースシステム。
【請求項５】
複数台のデータノードと相互に接続されて分散メモリデータベースシステムを構成するフロントデータベースサーバであって、
外部から入力される表データを分割して各々の実際のデータを値ＩＤに置換した複数の値ＩＤ表を生成してこれらを前記各データノードに分散して記憶させるデータ構造変換部と、
外部のクライアントマシンから発行された集合関数を含むクエリーに基づいて前記各データノードに対して前記表データの中の特定の値ＩＤの出現数を問い合わせると共に、これに応じて前記各データノードから返された特定の値ＩＤの出現数、若しくは前記特定の値ＩＤの出現数に当該特定の値ＩＤに対応する実際の値を適用することのうちのいずれか一方によって、前記クエリーに対応する集合関数の値を計算して前記クライアントマシンに返送する問い合わせ処理部と
を有し、
前記データ構造変換部が、前記複数の値ＩＤ表を生成する際に、前記表データの中で集計軸になり得る列としてあらかじめ指定された複数のデータ項目の各々について個別に前記複数の値ＩＤ表を生成することを特徴とするフロントデータベースサーバ。
【請求項６】
フロントデータベースサーバと複数台のデータノードとが相互に接続されて構成される分散メモリデータベースシステムにあって、
外部からの表データの入力を前記フロントデータベースサーバのデータ構造変換部が受け付け、
入力された前記表データを、集計軸になり得る列としてあらかじめ指定されたデータ項目の各々について前記フロントデータベースサーバのデータ構造変換部が個別に分割して実際のデータを値ＩＤに置換した複数の値ＩＤ表を生成し、
生成された前記複数の値ＩＤ表を前記フロントデータベースサーバのデータ構造変換部が前記各データノードに分散して記憶させ、
外部のクライアントマシンから発行された集合関数を含むクエリーを前記フロントデータベースサーバの問い合わせ処理部が受け付け、
受け付けられた前記クエリーに基づいて前記表データの中の特定の値ＩＤの出現数を前記フロントデータベースサーバの問い合わせ処理部が前記各データノードに問い合わせ、
前記各データノードから返された特定の値ＩＤの出現数、若しくは前記特定の値ＩＤの出現数に当該特定の値ＩＤに対応する実際の値を適用することのうちのいずれか一方によって、前記フロントデータベースサーバの問い合わせ処理部が前記クエリーに対応する集合関数の値を計算して前記クライアントマシンに返送する
ことを特徴とするデータ処理方法。
【請求項７】
フロントデータベースサーバと複数台のデータノードとが相互に接続されて構成される分散メモリデータベースシステムにあって、
前記フロントデータベースサーバが備えるコンピュータに、
外部からの表データの入力を受け付ける手順、
入力された前記表データを、集計軸になり得る列としてあらかじめ指定されたデータ項目の各々について個別に分割して実際のデータを値ＩＤに置換した複数の値ＩＤ表を生成する手順、
生成された前記複数の値ＩＤ表を前記各データノードに分散して記憶させる手順、
外部のクライアントマシンから発行された集合関数を含むクエリーを受け付ける手順、
受け付けられた前記クエリーに基づいて前記表データの中の特定の値ＩＤの出現数を前記各データノードに問い合わせる手順、
および前記各データノードから返された特定の値ＩＤの出現数から、若しくは前記特定の値ＩＤの出現数に当該特定の値ＩＤに対応する実際の値を適用することのうちのいずれか一方によって、前記クエリーに対応する集合関数の値を計算して前記クライアントマシンに返送する手順
を実行させることを特徴とするデータ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は分散メモリデータベースシステム、フロントデータベースサーバ、データ処理方法およびプログラムに関し、特に集合関数に対する処理を迅速に実施することの可能な分散メモリデータベースシステム等に関する。
【背景技術】
【０００２】
ある程度以上の規模のコンピュータ装置を利用したシステム、たとえばウェブサービスや業務システム等では、大量のデータを扱うためにデータベース管理システム（ＤＢＭＳ: DataBase Management System）の利用が不可欠である。また近年は、ネットワークによって接続された多数のコンピュータを連携させて、１つの巨大なコンピュータとして処理を行わせる、いわゆるクラウドコンピューティングの技術が確立されてきている。
【０００３】
ＤＢＭＳの中でも特に、データベースに係る処理をネットワークによって接続された多数のコンピュータに分担させるものを、分散メモリデータベースシステムという。分散メモリデータベースシステムは、大量のデータを一括で処理するバッチ用途や、企業の扱う大量のデータから特定の部署が必要とするものを抽出するデータマートの作成などで、特に処理の高速化の効果が発揮される。
【０００４】
以下、これについて説明する。なお、本明細書では説明を平易なものとするために、ごく少ないデータ個数および項目数について例示するが、実際には膨大な個数および項目数のデータに対して例示したような処理を行うものである。
【０００５】
図１４は、一般的な分散メモリデータベースシステム９０１の構成を示す説明図である。分散メモリデータベースシステム１は、フロントメモリデータベースサーバ９１０（以後フロントＤＢサーバ９１０という）と、複数台のデータノード９２１〜９２３とが内部ネットワーク９３０を介して相互に接続されて構成される。図１では３台のデータノード９２１〜９２３を示しているが、もちろんこの台数は２台以上何台でもよい。また、フロントＤＢサーバ１０は、外部ネットワーク９４０を介して、クライアントマシン９５０と接続されている。
【０００６】
クライアントマシン９５０はフロントＤＢサーバ９１０に対してクエリー（処理要求）を発行するコンピュータである。このクエリーに基づくデータ処理をフロントＤＢサーバ９１０とデータノード９２１〜９２３とが連携して行い、フロントＤＢサーバ９１０はその検索結果をクライアントマシン５０に返す。その際、フロントＤＢサーバ９１０は、クライアントマシン９５０から発行されたクエリーの各データノード９２１〜９２３に向けての分割と、各データノード９２１〜９２３からの結果の集約とを行う。
【０００７】
フロントＤＢサーバ９１０では、問い合わせ処理部９１１、データ配置情報管理部９１２、およびデータ構造変換部９１３が、各々コンピュータプログラムとして後述するそれぞれの機能を実行されるように構成されている。
【０００８】
問い合わせ処理部９１１は、クライアントマシン９５０が発行したクエリーを受け付け、このクエリーで処理対象となるデータ項目の所在をデータ配置情報管理部９１２に対して照会し、この照会に応じてデータ配置情報管理部１１２から得られた回答を元にしてクライアントマシン９５０からのクエリーを各データノード９２１〜９２３ごとに分割して、分割されたクエリーを各データノード９２１〜９２３に送信する。そして、送信した各クエリーに対する各データノード９２１〜９２３からの回答を集約してクライアントマシン９５０に返す。
【０００９】
データ配置情報管理部９１２は、問い合わせ処理部９１１から照会のあったデータ項目のデータが各データノード９２１〜９２３のうちのいずれに存在するかを、問い合わせ処理部９１１に返答する。データ構造変換部９１３は、入力された表構造データを分割して、各データノード９２１〜９２３に記憶させる。
【００１０】
各データノード９２１〜９２３では、問い合わせ処理部９１４がコンピュータプログラムとして、問い合わせ処理部９１１で分割されたクエリーに基づいて検索などの処理を行ってその結果をフロントＤＢサーバ９１０に返す機能を実行されるように構成されている。
【００１１】
図１５は、図１４に示した分散メモリデータベースシステム９０１に対して入力される表データ９６０の一例を示す説明図である。図１５で示した表データ９６０は、日付９６０ａ、店ＩＤ９６０ｂ、売上９６０ｃという３つの項目のデータを持つ。このうちの日付９６０ａは「８月１０日」「８月１１日」の２種類の値が使われている。
【００１２】
データ構造変換部９１３は、このうちの店ＩＤ９１０ｂの値「Ａ１」「Ｄ３」「Ｅ１」を基準として表データ９６０を分割して、店ＩＤ別の表データ９６１〜９６３を生成し、これらを各々各データノード９２１〜９２３に送付して記憶させる。図１６は、図１５に示した表データ９１０をデータ構造変換部９１３が分割して生成した店ＩＤ別の表データ９６１〜９６３を示す説明図である。
【００１３】
図１６に示した店ＩＤ別の表データ９６１〜９６３が各々データノード９２１〜９２３に記憶された状態で、問い合わせ処理部９１１はクライアントマシン９５０が発行したクエリーを受け付ける。たとえば、以下の数１に示すクエリーを受け付けた場合、問い合わせ処理部９１１は各データノード９２１〜９２３に対して、各々が記憶している店ＩＤ別の表データ９６１〜９６３から店ＩＤごとの合計売上額を算出させ、返信されてきた店ＩＤごとの合計売上額をまとめてクライアントマシン９５０に返信する。
【数１】
0005598279.tif 000002
【００１４】
これに関連する技術として、以下の各々がある。その中でも特許文献１には、並列コンピュータの複数の処理モジュールで処理されるデータに共通のグローバル次元値番号を付与することによって、プロセッサ間通信の発生を少なくしてデータのソートや集計などを実現するという情報処理システムが記載されている。特許文献２には、ハッシュ値を利用して1つ以上の列の値が共通する行をグループ化する処理を高速化するというグループ化方法が記載されている。
【００１５】
特許文献３には、複数の分析問題を含むデータをレイヤに分割することによって、複数の計算機でのデータ分析を高速化するというデータ分析システムが記載されている。特許文献４には、複数の装置にデータを分散させて処理する際にシステムの終了処理時間を短縮するというデータベース処理方法が記載されている。
【００１６】
特許文献５には、データにラベルコードを付与して、複数の装置によるデータの加工処理を高速化するというデータ加工システムが記載されている。非特許文献１には、データベースとして多く利用されているオラクル（登録商標）データベースで、完全一致検索を高速化することが可能である「ビットマップインデックス」について記載されている。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】再特ＷＯ２００５／０４１０６７号公報
【特許文献２】特開２０００−１８７６６８号公報
【特許文献３】特開２００６−１０７１２９号公報
【特許文献４】特開２０１０−１３４５８３号公報
【特許文献５】特開平０７−１８２３６８号公報
【非特許文献】
【００１８】
【非特許文献１】Paul Lane、「データ・ウェアハウスでのビットマップ索引の使用」、Oracle Databaseデータ・ウェアハウス・ガイド１１ｇリリース１より、２００７年、日本オラクル株式会社、［平成２２年１１月８日検索］、インターネット＜URL：http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05763-01/indexes.htm＞
【発明の概要】
【発明が解決しようとする課題】
【００１９】
分散メモリデータベースシステムでは特に、処理にかかるコストおよび処理時間を低減するため、ノード間で発生する通信を可能な限り少なくすることが重要である。図１４〜１６に示した分散メモリデータベースシステム９０１の例は、説明を平易なものとするために、ごく少ないデータ個数について例示したものであるが、実際には膨大な量のデータについて処理を行う必要がある。
【００２０】
図１４〜１６に示した分散メモリデータベースシステム９０１では、「店ＩＤ」ごとにデータを分割して各データノード９２１〜９２３に記憶させているので、数１に示したように店ＩＤごとの集計であればデータノード９２１〜９２３の各々の単体のみで合計などの集合関数の計算ができる。従って、問い合わせ処理部９１１での処理は単純に各データノード９２１〜９２３から受信した合計などの数値をまとめるだけでよく、高速に集計処理を行うことができる。
【００２１】
しかしながら、データの分割の基準とした列（この場合は「店ＩＤ」）以外で集計を行おうとすると、各データノード９２１〜９２３相互間、およびそれらとフロントＤＢサーバ９１０との間でデータの交換が必要になる。そのため、集計処理に時間がかかり、またデータの交換に伴う通信コストが発生する。
【００２２】
図１４〜１６に示した分散メモリデータベースシステム９０１の例でいうなら、以下の数２に示すクエリーを受け付けた場合には、データノード９２１〜９２３の各々の単体のみで合計などの集合関数の計算ができないので、全データについて「日付」を基準として再分割を行う（第１の方法）か、もしくは「店ＩＤ」ごとにデータを保持している各データノード９２１〜９２３で「日付」ごとの集計を行い、その結果をフロントＤＢサーバ９１０に送付して「日付」ごとの合計を算出する（第２の方法）かのいずれかの方法で算出することとなる。
【数２】
0005598279.tif 000003
【００２３】
この第１の方法では、一度表データ９６１〜９６３の全てをフロントＤＢサーバ９１０に送付して、元の表データ９６０に戻してから「日付」を基準として再分割を行った表データを改めて各データノード９２１〜９２３に送付する必要がある。例えばｍ台のデータノードがあり、ここに一行あたりｌバイトのデータが１台のノードに１日分ｎ件、ｓ（ｍ，ｎ，ｓ，ｌは各々自然数、簡単のためにｓ＝ｍとする）店舗分のデータが均等に存在するとした場合、この表データを再分割するには、以下の数３に示す通りのデータ容量の通信が発生することとなる。
【数３】
0005598279.tif 000004
【００２４】
また、発生する通信量だけでなく、個々のデータを読み取り、その各々をどのデータノードに移動するかを判定する処理も必要となるので、フロントＤＢサーバ９１０および各データノードで必要な処理量も増大する。
【００２５】
第２の方法では、各データノード９２１〜９２３から「店ＩＤ・日付」ごとに求められた合計データがフロントＤＢサーバ９１０に送信される。このため、フロントＤＢサーバ９１０への通信量が多くなる。また、フロントＤＢサーバ９１０では（数１に示したクエリの場合と違って）単純な差し替えだけでなく、改めて「日付」ごとの合計を求める必要があるので、ここでの処理量も増大する。
【００２６】
この問題に対して、インデックス（索引）を用意して異なる集計軸による集計に対応するという方法が既に知られている。しかしながら、この場合であっても、集計操作のために計算対象のデータを他のコンピュータに対して送信する必要は発生する。このため、発生する通信量を削減する効果は小さい。
【００２７】
また、特許文献１および４〜５には、同一列の中で同一の値にＩＤ（もしくはラベル）を付与して、これに基づいてグループ分け（いわゆるレンジパーティショニング）を行ったデータを各データノードに保存するという技術が記載されている。これを利用すれば、生のデータそのものを通信するよりも、多少の通信量の削減にはなる。しかしながら、フロントＤＢサーバ９１０の側での処理量は軽減されないどころか、ＩＤを実際の値に置換する処理を伴うので、処理量はむしろ増大する。残る特許文献２〜４および非特許文献１にも、この問題点について解決しうる技術は記載されていない。
【００２８】
本発明の目的は、通信量および処理量を削減して、合計などの集合関数に対する処理を高速に行うことを可能とする分散メモリデータベースシステム、フロントデータベースサーバ、データ処理方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００２９】
上記目的を達成するため、本発明に係る分散メモリデータベースシステムは、フロントデータベースサーバと複数台のデータノードとが相互に接続されて構成される分散メモリデータベースシステムであって、フロントデータベースサーバが、外部から入力される表データを分割して各々の実際のデータを値ＩＤに置換した複数の値ＩＤ表を生成してこれらを各データノードに分散して記憶させるデータ構造変換部と、外部のクライアントマシンから発行された集合関数を含むクエリーに基づいて各データノードに対して表データの中の特定の値ＩＤの出現数を問い合わせると共に、これに応じて各データノードから返された特定の値ＩＤの出現数、若しくは特定の値ＩＤの出現数に当該特定の値ＩＤに対応する実際の値を適用することのうちのいずれか一方によって、クエリーに対応する集合関数の値を計算してクライアントマシンに返送する問い合わせ処理部とを有し、データ構造変換部が、複数の値ＩＤ表を生成する際に、表データの中で集計軸になり得る列としてあらかじめ指定された複数のデータ項目の各々について個別に複数の値ＩＤ表を生成することを特徴とする。
【００３０】
上記目的を達成するため、本発明に係るフロントデータベースサーバは、複数台のデータノードと相互に接続されて分散メモリデータベースシステムを構成するフロントデータベースサーバであって、外部から入力される表データを分割して各々の実際のデータを値ＩＤに置換した複数の値ＩＤ表を生成してこれらを各データノードに分散して記憶させるデータ構造変換部と、外部のクライアントマシンから発行された集合関数を含むクエリーに基づいて各データノードに対して表データの中の特定の値ＩＤの出現数を問い合わせると共に、これに応じて各データノードから返された特定の値ＩＤの出現数、若しくは特定の値ＩＤの出現数に当該特定の値ＩＤに対応する実際の値を適用することのうちのいずれか一方によって、クエリーに対応する集合関数の値を計算してクライアントマシンに返送する問い合わせ処理部とを有し、データ構造変換部が、複数の値ＩＤ表を生成する際に、表データの中で集計軸になり得る列としてあらかじめ指定された複数のデータ項目の各々について個別に複数の値ＩＤ表を生成することを特徴とする。
【００３１】
上記目的を達成するため、本発明に係るデータ処理方法は、フロントデータベースサーバと複数台のデータノードとが相互に接続されて構成される分散メモリデータベースシステムにあって、外部からの表データの入力をフロントデータベースサーバのデータ構造変換部が受け付け、入力された表データを、集計軸になり得る列としてあらかじめ指定されたデータ項目の各々についてフロントデータベースサーバのデータ構造変換部が個別に分割して実際のデータを値ＩＤに置換した複数の値ＩＤ表を生成し、生成された複数の値ＩＤ表をフロントデータベースサーバのデータ構造変換部が各データノードに分散して記憶させ、外部のクライアントマシンから発行された集合関数を含むクエリーをフロントデータベースサーバの問い合わせ処理部が受け付け、受け付けられたクエリーに基づいて表データの中の特定の値ＩＤの出現数をフロントデータベースサーバの問い合わせ処理部が各データノードに問い合わせ、各データノードから返された特定の値ＩＤの出現数、若しくは特定の値ＩＤの出現数に当該特定の値ＩＤに対応する実際の値を適用することのうちのいずれか一方によって、フロントデータベースサーバの問い合わせ処理部がクエリーに対応する集合関数の値を計算してクライアントマシンに返送することを特徴とする。
【００３２】
上記目的を達成するため、本発明に係るデータ処理プログラムは、フロントデータベースサーバと複数台のデータノードとが相互に接続されて構成される分散メモリデータベースシステムにあって、フロントデータベースサーバが備えるコンピュータに、外部からの表データの入力を受け付ける手順、入力された表データを、集計軸になり得る列としてあらかじめ指定されたデータ項目の各々について個別に分割して実際のデータを値ＩＤに置換した複数の値ＩＤ表を生成する手順、生成された複数の値ＩＤ表を各データノードに分散して記憶させる手順、外部のクライアントマシンから発行された集合関数を含むクエリーを受け付ける手順、受け付けられたクエリーに基づいて表データの中の特定の値ＩＤの出現数を各データノードに問い合わせる手順、および各データノードから返された特定の値ＩＤの出現数、若しくは特定の値ＩＤの出現数に当該特定の値ＩＤに対応する実際の値を適用することのうちのいずれか一方によって、クエリーに対応する集合関数の値を計算してクライアントマシンに返送する手順を実行させることを特徴とする。
【発明の効果】
【００３３】
本発明は、上述した通り、集計軸になり得る列としてあらかじめ指定されたデータ項目の各々について表データを個別に分割するように構成したので、集計軸になり得るどの列に対しても、他の装置との通信の発生を抑制して、各データノードの内部だけで集合関数に関する処理を行うことが可能となる。これによって、通信量および処理量を削減して、合計などの集合関数に対する処理を高速に行うことを可能であるという優れた特徴を持つ分散メモリデータベースシステム、フロントデータベースサーバ、データ処理方法およびプログラムを提供することが可能となる。
【図面の簡単な説明】
【００３４】
【図１】本発明の第１の実施形態に係る分散メモリデータベースシステムの構成を示す説明図である。
【図２】図１で説明した分散メモリデータベースシステムに対して入力される表データの一例を示す説明図である。
【図３】図２で示した表データからデータ構造変換部が作成する値リストおよび値ＩＤ表を示す説明図である。
【図４】図１に示したデータ構造変換部が、図２に示すデータを図３に示すように分割して各データノードに分配して記憶させる処理を示すフローチャートである。
【図５】図１に示したデータ配置情報の、図２および図３に示した各データに対応する例について示す説明図である。
【図６】数４に示したクエリーに対して、図１で説明した分散メモリデータベースシステムで行われる処理を示すフローチャートである。
【図７】図６のステップＳ４０３（数４）に示す処理で、データノードからフロントＤＢサーバに返却される「値ＩＤ」ごとの出現数の表を示す説明図である。
【図８】図６のステップＳ４０６（数５）に示した処理の結果、クライアントマシンに返却される日付ごとの売上の合計を示す結果データについて示す説明図である。
【図９】図６のステップＳ４０３（数６）に示す処理で、データノードからフロントＤＢサーバに返却される「値ＩＤ」ごとの出現数の表を示す説明図である。
【図１０】図６のステップＳ４０６（数７）に示した処理の結果、クライアントマシンに返却される店ＩＤごとの売上の合計を示す結果データについて示す説明図である。
【図１１】本発明の第２の実施形態に係る分散メモリデータベースシステムの構成を示す説明図である。
【図１２】図１１で説明した分散メモリデータベースシステムに対して入力される表データの一例を示す説明図である。
【図１３】図１２に示した表データからデータ構造変換部が作成する値ＩＤ表の例を示す説明図である。
【図１４】一般的な分散メモリデータベースシステムの構成を示す説明図である。
【図１５】図１４に示した分散メモリデータベースシステムに対して入力される表データの一例を示す説明図である。
【図１６】図１５に示した表データをデータ構造変換部が分割して生成した店ＩＤ別の表データを示す説明図である。
【発明を実施するための形態】
【００３５】
（第１の実施形態）
以下、本発明の第１の実施形態の構成について添付図１〜３に基づいて説明する。
最初に、本実施形態の基本的な内容について説明し、その後でより具体的な内容について説明する。
本実施形態に係る分散メモリデータベースシステム１は、フロントデータベースサーバ（フロントＤＢサーバ１０）と複数台のデータノード２１〜２３とが相互に接続されて構成される分散メモリデータベースシステムである。フロントデータベースサーバ１０は、外部から入力される表データを分割して各々の実際のデータを値ＩＤに置換した複数の値ＩＤ表２２１〜２２２，２３１〜２３３を生成してこれらを各データノードに分散して記憶させるデータ構造変換部１１３と、外部のクライアントマシン５０から発行された集合関数を含むクエリーに基づいて各データノードに表データの中の特定の値ＩＤの出現数を問い合わせると共にこれに応じて各データノードから返された特定の値ＩＤの出現数からクエリーに対応する集合関数の値を計算してクライアントマシンに返送する問い合わせ処理部１１１とを有する。そして、データ構造変換部１１３は、これら複数の値ＩＤ表を生成する際に、表データの中で集計軸になり得る列としてあらかじめ指定されたデータ項目の各々について個別に複数の値ＩＤ表を生成する。
【００３６】
また、フロントデータベースサーバ１０のデータ構造変換部１１３は、複数の値ＩＤ表２２１〜２２２，２３１〜２３３を生成する際に、表データの中で集計軸および集計対象になり得る列としてあらかじめ指定されたデータ項目の各々について実際の値を値ＩＤに置換すると共に、値ＩＤと実際の値との対応を示す値リスト２１１〜２１３を生成する機能を有し、フロントデータベースサーバ１０が、値リストおよび値ＩＤ表が各データノードの中のいずれに分散されたかをあらかじめ備えられた記憶手段に記憶するデータ配置情報管理部１１２を有する。
【００３７】
さらに、フロントデータベースサーバ１０のデータ構造変換部１１３が、値ＩＤ表２２１〜２２２，２３１〜２３３を生成する際、実際の値を大小順にソートしてから値ＩＤに置換する。
【００３８】
以上の構成を備えることにより、分散メモリデータベースシステム１は、通信量および処理量を削減して、合計などの集合関数に対する処理を高速に行うことが可能となる。
以下、これをより詳細に説明する。
【００３９】
図１は、本発明の第１の実施形態に係る分散メモリデータベースシステム１の構成を示す説明図である。分散メモリデータベースシステム１は、フロントデータベースサーバ１０（以後フロントＤＢサーバ１０という）と、複数台のデータノード２１〜２３とが内部ネットワーク３０を介して相互に接続されて構成される。図１では３台のデータノード２１〜２３を示しているが、もちろんこの台数は２台以上何台でもよい。
【００４０】
また、内部ネットワーク３０は、外部ネットワーク４０を介して、外部のコンピュータ装置であるクライアントマシン５０と接続されている。内部ネットワーク３０および外部ネットワーク４０の、ネットワーク方式やプロトコルなどは任意のものを利用できる。フロントＤＢサーバ１０は、内部ネットワーク３０および外部ネットワーク４０を通じて、クライアントマシン５０からの操作を受け付けることができる。
【００４１】
クライアントマシン５０はフロントＤＢサーバ１０に対してクエリー（処理要求）を発行し、このクエリーに基づくデータ処理をフロントＤＢサーバ１０とデータノード２１〜２３とが連携して行い、フロントＤＢサーバ１０はその検索結果をクライアントマシン５０に返す。その際、フロントＤＢサーバ１０は、クライアントマシン５０から発行されたクエリーの各データノード２１〜２３に向けての分割と、各データノード２１〜２３からの結果の集約とを行う。
【００４２】
フロントＤＢサーバ１０は、主演算制御手段１０１、記憶手段１０２、および通信手段１０３を備えるコンピュータ装置である。主演算制御手段１０１はコンピュータプログラムの動作主体となるＣＰＵ（Central Processing Unit）であり、記憶手段１０２は主演算制御手段１０１が作業中のデータを記憶するＲＡＭ（Random Access Memory）などのような主記憶装置である。通信手段１０３は内部ネットワーク３０および外部ネットワーク４０を介して、他のコンピュータとのデータ通信を行う。
【００４３】
主演算制御手段１０１では、問い合わせ処理部１１１、データ配置情報管理部１１２、およびデータ構造変換部１１３が、各々コンピュータプログラムとして後述するそれぞれの機能を実行されるように構成されている。また、記憶手段１０２には、後述するデータ配置情報１２１が記憶されている。
【００４４】
問い合わせ処理部１１１は、クライアントマシン５０が発行したクエリーを受け付け、このクエリーで処理対象となるデータ項目の所在をデータ配置情報管理部１１２に対して照会し、この照会に応じてデータ配置情報管理部１１２から得られた回答を元にしてクライアントマシン５０からのクエリーを各データノード２１〜２３ごとに分割して、分割されたクエリーを各データノード２１〜２３に送信する。そして、送信した各クエリーに対する各データノード２１〜２３からの回答を集約してクライアントマシン５０に返す。
【００４５】
データ配置情報管理部１１２は、問い合わせ処理部１１１から照会のあったデータ項目のデータが各データノード２１〜２３のうちのいずれに存在するかを、データ配置情報１２１を参照して、問い合わせ処理部１１１に返答する。
【００４６】
データ構造変換部１１３は、この後説明するように、表構造データを本システムに入力する際に、後述する本実施形態に独特のデータ構造に変換して分割し、各データノード２１〜２３に記憶させる。
【００４７】
各データノード２１〜２３も、フロントＤＢサーバ１０と同じく一般的なコンピュータ装置としての構成を備えるが、ハードウェアおよびソフトウェアとしては全て同一の構成を有し、ただ各々の記憶している内容が異なっているのみである。従って、図１ではデータノード２１についてのみ詳しい構成を示す。データノード２１は、フロントＤＢサーバ１０と同様に、主演算制御手段２０１、記憶手段２０２、および通信手段２０３を備えるコンピュータ装置である。
【００４８】
主演算制御手段２０１では、問い合わせ処理部２０４が、各々コンピュータプログラムとして後述するそれぞれの機能を実行されるように構成されている。また、記憶手段２０２には、後述する値リスト２１１〜２１３、および値ＩＤ表２２１〜２２２，２３１〜２３３が記憶されている。問い合わせ処理部２０４は、フロントＤＢサーバ１０で分割生成された値リスト２１１〜２１３、および値ＩＤ表２２１〜２２２，２３１〜２３３のうち、自身に割り当てられたものを記憶手段２０２に記憶し、これらの値リストおよび値ＩＤ表に対して検索などの処理を行い、その結果をフロントＤＢサーバ１０に返す。
【００４９】
図２は、図１で説明した分散メモリデータベースシステム１に対して入力される表データ２１０の一例を示す説明図である。このデータ入力はクライアントマシン５０から行われてもよいし、フロントＤＢサーバ１０から直接行われてもよい。データ構造変換部１１３は、この入力された表データ２１０を、以下で説明する形式に変換して、複数のデータノード２１〜２３に分配して記憶させる。
【００５０】
図２で示した表データ２１０は、日付２１０ａ、店ＩＤ２１０ｂ、売上２１０ｃという３つの項目のデータを持つ。このうちの「日付２１０ａ」および「店ＩＤ２１０ｂ」が「集計軸になり得る列（以後基準列という）」、売上２１０ｃが「集計対象になり得る列（以後対象列という）」としてあらかじめ指定されている。なお、表データ２１０の内容は図１５の表データ９１０と同一である。
【００５１】
図３は、図２で示した表データ２１０からデータ構造変換部１１３が作成する値リスト２１１〜２１３、および値ＩＤ表２２１〜２２２，２３１〜２３３を示す説明図である。図２で示した表データ２１０で、基準列として指定された項目のうち、日付２１０ａは「８月１０日」「８月１１日」の２種類、店ＩＤ２１０ｂは「Ａ１」「Ｄ３」「Ｅ１」の３種類の値が使われている。
【００５２】
そこで、データ構造変換部１１３は、各列に存在するユニークな値を小さいものから順に整列して並べ、先頭から順にそれぞれの値を特定する番号（値ＩＤ）を付与し、「日付」値リスト２１１、「店ＩＤ」値リスト２１２、「売上」値リスト２１３という３通りの値リストを作成する。
【００５３】
「日付」値リスト２１１は、「日付」値ＩＤと日付との対応を示す。「日付」値ＩＤ＝「０」の場合には日付＝「８月１０日」、「日付」値ＩＤ＝「１」の場合には日付＝「８月１１日」となる。
【００５４】
「店ＩＤ」値リスト２１２は、「店ＩＤ」値ＩＤと店ＩＤの値との対応を示す。「店ＩＤ」値ＩＤ＝「０」の場合には店ＩＤ＝「Ａ１」、「店ＩＤ」値ＩＤ＝「１」の場合には店ＩＤ＝「Ｄ３」、「店ＩＤ」値ＩＤ＝「２」の場合には店ＩＤ＝「Ｅ１」となる。
【００５５】
「売上」値リスト２１３は、「売上」値ＩＤと売上の値との対応を示す。「売上」値ＩＤ＝「０」〜「４」の場合で、売上は各々「８００」「１０００」「１２００」「４８００」「１２０００」となる。
【００５６】
そしてデータ構造変換部１１３は、各々の値ＩＤで表データ２１０を置き換え、さらに日付２１０ａと店ＩＤ２１０ｂの値ごとに表データ２１０を分割して、値ＩＤ表２２１〜２２２，２３１〜２３３を作成する。値ＩＤ表２２１は、「日付」値ＩＤ＝「０」の場合の「店ＩＤ」値ＩＤと「売上」値ＩＤの対応を示す。値ＩＤ表２２２は、「日付」値ＩＤ＝「１」の場合の「店ＩＤ」値ＩＤと「売上」値ＩＤの対応を示す。
【００５７】
値ＩＤ表２３１は、「店ＩＤ」値ＩＤ＝「０」の場合の「日付」値ＩＤと「売上」値ＩＤの対応を示す。値ＩＤ表２３２は、「店ＩＤ」値ＩＤ＝「１」の場合の「日付」値ＩＤと「売上」値ＩＤの対応を示す。値ＩＤ表２３３は、「店ＩＤ」値ＩＤ＝「２」の場合の「日付」値ＩＤと「売上」値ＩＤの対応を示す。
【００５８】
データ構造変換部１１３は、以上で作成した値リスト２１１〜２１３、および値ＩＤ表２２１〜２２２，２３１〜２３３を、各データノード２１〜２３に分配して記憶させる。図３に示した例では、データ構造変換部１１３は、値ＩＤ表２２２、値ＩＤ表２３１、および値リスト２１１をデータノード２１の記憶手段２０２に記憶させている。また、値ＩＤ表２２１、値ＩＤ表２３２、および値リスト２１２をデータノード２２の記憶手段２０２に記憶させている。さらに値ＩＤ表２３３、および値リスト２１３をデータノード２３の記憶手段２０２に記憶させている。
【００５９】
ここでデータ構造変換部１１３が行う処理については、データノード２１〜２３のうちの特定の１つのデータノードに、データの容量および処理量が大きく偏ることがなければ、任意の分割方法を使用することができる。また、図２で示した表データ２１０のデータ構造を設計する際に、基準列および対象列といった各列の属性について、あらかじめ操作者が入力しているものとする。データ構造変換部１１３は、「基準列」および「対象列」であると設定されたデータ列の全てについて値リストを作成し、かつ「基準列」であると設定されたデータ列の全てについて上記で示したように表データ２１０を分割する。
【００６０】
図４は、図１に示したデータ構造変換部１１３が、図２に示すデータを図３に示すように分割して各データノード２１〜２３に分配して記憶させる処理を示すフローチャートである。まず、表データ２１０のデータ構造について、ユーザによる入力を受け付ける（ステップＳ３０１）。この際に、どのデータ項目が「基準列」や「対象列」であるかについての入力も同時に行われる。
【００６１】
その次に、ユーザから表データ２１０の入力を受け付け（ステップＳ３０２）、これが完了すると基準列のうちの１つについて（ステップＳ３０３〜３０４）、まずデータ列の値を値ＩＤに置き換えて（ステップＳ３０５）、同時にこの基準列の値ごとに表を分割する（ステップＳ３０６）。データ構造変換部１１３は、このステップＳ３０５〜３０６の処理を全ての基準列について繰り返すと共に、置き換えた値と値ＩＤの対応を示す値リスト２１１〜２１３も同時に作成する。
【００６２】
全ての基準列についてこの処理が完了したら、出来上がった値リストおよび値ＩＤ表を、各データノード２１〜２３に送信して記憶させる（ステップＳ３０７）。
【００６３】
図５は、図１に示したデータ配置情報１２１の、図２および図３に示した各データに対応する例について示す説明図である。データ配置情報１２１は、各データノード２１〜２３のコンピュータ名を示すデータノード名１２１ａと、当該コンピュータに記憶される値リスト２１１〜２１３、および値ＩＤ表２２１〜２２２，２３１〜２３３のデータ種類を示す記憶内容１２１ｂとの対応を示す。
【００６４】
データ配置情報１２１は、図５で示した例のような形に限られるものではなく、計算で使用されるデータ、および値ＩＤに対応する実際の値が、各データノード２１〜２３のうちのいずれに記憶されているかを特定できさえすれば、どのようなデータ形式でもよい。
【００６５】
（日付別の売上集計処理）
このように各データノード２１〜２３に分配して記憶されたデータに対して、クライアントマシン５０からフロントＤＢサーバ１０に対してクエリー（ＳＱＬ文）が発行された際の、フロントＤＢサーバ１０および各データノード２１〜２３で行われる処理について以下に説明する。
【００６６】
以下に示す数４は、図２〜３に示した内容のデータ例に対して、クライアントマシン５０がフロントＤＢサーバ１０に対して発行するクエリーの一例である。これは、表データ２１０から日付ごとの売上の合計を求めるクエリーである。
【数４】
0005598279.tif 000005
【００６７】
図６は、数４に示したクエリーに対して、図１で説明した分散メモリデータベースシステム１で行われる処理を示すフローチャートである。数４に示したクエリーを受けたフロントＤＢサーバ１０の問い合わせ処理部１１１は、データ配置情報管理部１１２がデータ配置情報１２１を参照して、「売上表」に対し「日付」別の値ＩＤ表が各データノード２１〜２３上に存在することを確認し、分割された各表の存在するノードを特定する（ステップＳ４０１）。
【００６８】
そして、フロントＤＢサーバ１０の問い合わせ処理部１１１は、データノード２１〜２３の問い合わせ処理部２０４に対して、日付別の値ＩＤ表２２１〜２２２で、「値ＩＤ」によって表現された「売上」列の値を「値ＩＤ」ごとの出現数を数えるよう問い合わせを発行する（ステップＳ４０２）。データノード２３は日付別の値ＩＤ表を記憶していないので、ここでは対象外となる。
【００６９】
問い合わせを受け付けたデータノード２１〜２２の問い合わせ処理部２０４は、日付別の値ＩＤ表２２１〜２２２に対し、「売上」列の「値ＩＤ」ごとの出現数を計算して、これをフロントＤＢサーバ１０に返却する（ステップＳ４０３）。図７は、図６のステップＳ４０３（数４）に示す処理で、データノード２１〜２２からフロントＤＢサーバ１０に返却される「値ＩＤ」ごとの出現数の表２４１〜２４２を示す説明図である。
【００７０】
これを受けたフロントＤＢサーバ１０の問い合わせ処理部１１１は、「日付」と「売上」の各々の「値ＩＤ」に対応する値リスト２１１〜２１３を、各データノード２１〜２３から取得する（ステップＳ４０４〜４０５）。なお、このステップＳ４０４〜４０５の処理は、値リスト２１１〜２１３そのものを各データノード２１〜２３から取得するのではなく、値ＩＤに対応する値を各データノード２１〜２３から取得するものでもよい。
【００７１】
そして、フロントＤＢサーバ１０の問い合わせ処理部１１１は、ステップＳ４０３で返却された「売上」列の「値ＩＤ」ごとの出現数に、実際の「売上」の数値を適用して、実際の売上金額を結果データ２４３として算出して、これをクライアントマシン５０に返却する（ステップＳ４０６）。
【００７２】
以下に示す数５は、図６のステップＳ４０６に示した処理で、図２〜３に示した内容のデータ例に対して数４のクエリーによって実際に行われる計算を示す。図８は、図６のステップＳ４０６（数５）に示した処理の結果、クライアントマシン５０に返却される日付ごとの売上の合計を示す結果データ２４３について示す説明図である。
【数５】
0005598279.tif 000006
【００７３】
（店ＩＤ別の売上集計処理）
上記で示した処理は、たとえば以下の数６に示すクエリーをクライアントマシン５０が発行した場合においても、図６で示した動作によって同様に処理することができる。これは、表データ２１０から店ＩＤごとの売上の合計を求めるクエリーである。
【数６】
0005598279.tif 000007
【００７４】
この場合、問い合わせ処理部１１１は、データ配置情報管理部１１２がデータ配置情報１２１を参照して、「売上表」に対し「店ＩＤ」別の値ＩＤ表が各データノード２１〜２３上に存在することを確認し、分割された各表の存在するノードを特定する（ステップＳ４０１）。
【００７５】
そして、フロントＤＢサーバ１０の問い合わせ処理部１１１は、データノード２１〜２３の問い合わせ処理部２０４に対して、店ＩＤ別の値ＩＤ表２３１〜２３３で、「値ＩＤ」によって表現された「売上」列の値を「値ＩＤ」ごとの出現数を数えるよう問い合わせを発行する（ステップＳ４０２）。
【００７６】
問い合わせを受け付けたデータノード２１〜２３の問い合わせ処理部２０４は、店ＩＤ別の値ＩＤ表２３１〜２３３に対し、「売上」列の「値ＩＤ」ごとの出現数を計算して、これをフロントＤＢサーバ１０に返却する（ステップＳ４０３）。図９は、図６のステップＳ４０３（数６）に示す処理で、データノード２１〜２３からフロントＤＢサーバ１０に返却される「値ＩＤ」ごとの出現数の表２５１〜２５３を示す説明図である。
【００７７】
これを受けたフロントＤＢサーバ１０の問い合わせ処理部１１１は、「店ＩＤ」と「売上」の各々の「値ＩＤ」に対応する値リスト２１１〜２１３を、各データノード２１〜２３から取得する（ステップＳ４０４〜４０５）。なお、このステップＳ４０４〜４０５の処理は、値リスト２１１〜２１３そのものを各データノード２１〜２３から取得するのではなく、値ＩＤに対応する値を各データノード２１〜２３から取得するものでもよい。
【００７８】
そして、フロントＤＢサーバ１０の問い合わせ処理部１１１は、ステップＳ４０３で返却された「売上」列の「値ＩＤ」ごとの出現数に、実際の「売上」の数値を適用して、実際の売上金額を結果データ２５４として算出して、算出して、これをクライアントマシン５０に返却する（ステップＳ４０６）。
【００７９】
以下に示す数７は、図６のステップＳ４０６に示した処理で、図２〜３に示した内容のデータ例に対して数６のクエリーによって実際に行われる計算を示す。図１０は、図６のステップＳ４０６（数７）に示した処理の結果、クライアントマシン５０に返却される店ＩＤごとの売上の合計を示す結果データ２５４について示す説明図である。
【数７】
0005598279.tif 000008
【００８０】
（和以外の集計処理）
以上、各データノード２１〜２３に分配して記憶されたデータに対して、クライアントマシン５０からフロントＤＢサーバ１０に対して対象列の和（ＳＵＭ）を求めるクエリーが発行された際の処理について説明したが、これ以外のたとえば最小値（ＭＩＮ）、最大値（ＭＡＸ）、出現数（ＣＯＵＮＴ）、平均値（ＡＶＧ）を求める動作についても、同一のシステムで可能である。
【００８１】
このうち最小値（ＭＩＮ）もしくは最大値（ＭＡＸ）を求めるクエリーを受けた場合は、各データノード２１〜２３に記憶されている値ＩＤ表２２１〜２２２，２３１〜２３３から、問い合わせ処理部２０４が各々の値ＩＤが最大もしくは最小となるものを選択してフロントＤＢサーバ１０の問い合わせ処理部１１１に返却する。そしてフロントＤＢサーバ１０の問い合わせ処理部１１１は、図６のステップＳ４０６と同様にして、値リスト２１１〜２１３から返却された値ＩＤに対応する値をクライアントマシン５０に返却する。
【００８２】
値リスト２１１〜２１３は、前述したように値の小さいものから順に整列して並べて、その順番に値ＩＤを割り振るものであるので、各データノード２１〜２３の問い合わせ処理部２０４は、値リスト２１１〜２１３で実際の値を参照しなくても、値ＩＤが最大もしくは最小となるものを最大値もしくは最小値であると判断することができる。
【００８３】
出現数（ＣＯＵＮＴ）を求めるクエリーを受けた場合は、各データノード２１〜２３に値ＩＤ表２２１〜２２２，２３１〜２３３に各値ＩＤごとの出現数が記憶されているので、フロントＤＢサーバ１０の問い合わせ処理部１１１は各データノード２１〜２３側でその出現数を計算させる。そして、フロントＤＢサーバ１０の問い合わせ処理部１１１は各データノード２１〜２３から返却された出現数を受けて、図６のステップＳ４０６と同様にして、その値ＩＤを実際の値に変換してクライアントマシン５０に返却する。
【００８４】
平均値（ＡＶＧ）を求めるクエリーを受けた場合は、図６のステップＳ４０１〜４０６と同様の処理で、ただステップＳ４０６でフロントＤＢサーバ１０の問い合わせ処理部１１１で各々の値ＩＤを実際の値に変換してから平均値を求めてクライアントマシン５０に返却する点のみが図６で示した処理と異なる。
【００８５】
（第１の実施形態の全体的な動作）
次に、上記の実施形態の全体的な動作について説明する。本実施形態に係るデータ処理方法は、フロントデータベースサーバ（フロントＤＢサーバ１０）と複数台のデータノード２１〜２３とが相互に接続されて構成される分散メモリデータベースシステム１にあって、外部からの表データの入力をフロントデータベースサーバのデータ構造変換部が受け付け（図４・ステップＳ３０１〜３０２）、入力された表データを、集計軸になり得る列としてあらかじめ指定されたデータ項目の各々についてフロントデータベースサーバのデータ構造変換部が個別に分割して実際のデータを値ＩＤに置換した複数の値ＩＤ表を生成し（図４・ステップＳ３０４〜３０６）、生成された複数の値ＩＤ表をフロントデータベースサーバのデータ構造変換部が各データノードに分散して記憶させ（図４・ステップＳ３０７）、外部のクライアントマシンから発行された集合関数を含むクエリーをフロントデータベースサーバの問い合わせ処理部が受け付け、受け付けられたクエリーに基づいて表データの中の特定の値ＩＤの出現数をフロントデータベースサーバの問い合わせ処理部が各データノードに問い合わせ（図６・ステップＳ４０１〜４０２）、各データノードから返された特定の値ＩＤの出現数からフロントデータベースサーバの問い合わせ処理部がクエリーに対応する集合関数の値を計算してクライアントマシンに返送する（図６・ステップＳ４０４〜４０６）。
【００８６】
ここで、上記各動作ステップについては、これをコンピュータで実行可能にプログラム化し、これらを前記各ステップを直接実行するコンピュータであるフロントＤＢサーバ１０に実行させるようにしてもよい。本プログラムは、非一時的な記録媒体、例えば、ＤＶＤ、ＣＤ、フラッシュメモリ等に記録されてもよい。その場合、本プログラムは、記録媒体からコンピュータによって読み出され、実行される。
この動作により、本実施形態は以下のような効果を奏する。
【００８７】
本実施形態では、全ての基準列、即ち集計軸になり得る列について、表データ２１０を分割して各データノード２１〜２３に分配して記憶させている。これによって、どの基準列についてクエリーが発行されたとしても、他の装置とのデータの交換を発生させずにデータノード２１〜２３のうちの１台だけで集合関数に対する集計の処理を行って、その集計結果だけをフロントＤＢサーバ１０に送信するようにできる。さらに、フロントＤＢサーバ１０での処理も、単純に値ＩＤを実際の値に差し替えるだけでよいので、高速に行うことができる。
【００８８】
その際、各データノード２１〜２３が記憶するデータは、値リストと値ＩＤによる表現に変換した上で記憶されるので、各データノード２１〜２３に記憶されるデータの容量を削減することができる。特に重複する値が多い場合に、そのデータの容量の削減の効果はより顕著なものとなる。さらに、複数の基準列について表データ２１０を分割する際のデータ容量の増大も、最低限に抑制することができる。
【００８９】
（第２の実施形態）
本発明の第２の実施形態では、フロントデータベースサーバ（フロントＤＢサーバ５１０）のデータ構造変換部が、表データの中で集計軸および集計対象のいずれにもなり得ない列としてあらかじめ指定されたデータ項目の各々について、集計軸になり得る列についての値ＩＤ表のいずれか１種類に付随して記憶させる構成とした。
【００９０】
この構成によれば、集計軸および集計対象のいずれにもなり得ないデータ項目を含むデータに対しても、第１の実施形態と同一の効果を得ることができる。
以下、これをより詳細に説明する。
【００９１】
図１１は、本発明の第２の実施形態に係る分散メモリデータベースシステム５０１の構成を示す説明図である。分散メモリデータベースシステム５０１は、フロントＤＢサーバ５１０と複数台のデータノード５２１〜５２３とが、第１の実施形態と同一の内部ネットワーク３０を介して相互に接続されて構成される。外部ネットワーク４０、およびクライアントマシン５０も、第１の実施形態と同一である。
【００９２】
フロントＤＢサーバ５１０およびデータノード５２１〜５２３は、第１の実施形態のフロントＤＢサーバ１０およびデータノード２１〜２３と、ハードウェア的には同一の構成を有する。フロントＤＢサーバ５１０の主演算制御手段１０１で動作する問い合わせ処理部１１１およびデータ構造変換部１１３が、各々問い合わせ処理部５１１およびデータ構造変換部５１３に置換されている。また、データノード５２１〜５２３については、各々が記憶している値ＩＤ表６２１〜６２２，６３１〜６３２が第１の実施形態と異なる。
【００９３】
図１２は、図１１で説明した分散メモリデータベースシステム５０１に対して入力される表データ６１０の一例を示す説明図である。表データ６１０は、項目Ａ６１０ａ、項目Ｂ６１０ｂ、項目Ｃ６１０ｃ、項目Ｄ６１０ｄといったデータ項目を持つが、このうち基準列として項目Ａ６１０ａおよび項目Ｂ６１０ｂ、対象列として項目Ｄ６１０ｄが指定されているが、項目Ｃ６１０ｃは基準列および対象列のいずれにも該当しない。なお、項目Ａ６１０ａは同時に主キーにも指定されている。
【００９４】
図１３は、図１２に示した表データ６１０からデータ構造変換部５１３が作成する値ＩＤ表６２１〜６２２，６３１〜６３２の例を示す説明図である。前述のように基準列でも対象列でもない項目Ｃ６１０ｃが表データ６１０に含まれる場合、データ構造変換部５１３は、項目Ａ６１０ａの値ＩＤ別の値ＩＤ表６２１〜６２２にのみ項目Ｃ６１０ｃの値ＩＤを同時に保持し、項目Ｂ６１０ｂの値ＩＤ別の値ＩＤ表６３１〜６３２には項目Ｃ６１０ｃの値ＩＤを含めないようにする。値リストは、項目Ａ〜Ｄの全てについて、第１の実施形態と同様に作成され、各データノード５２１〜５２３に分散して記憶される。
【００９５】
たとえば、項目Ｂ６１０ｂの特定の値もしくは値ＩＤから、これに対応する項目Ｃ６１０ｃの値もしくは値ＩＤを知りたい場合には、まず項目Ｂ６１０ｂの値ＩＤ別の値ＩＤ表６３１〜６３２から、項目Ｂ６１０ｂの特定の値ＩＤに対応する項目Ａ６１０ａの値ＩＤを特定し、そこから項目Ａ６１０ａの値ＩＤ別の値ＩＤ表６２１〜６２２を参照してこれに対応する項目Ｃ６１０ｃの値ＩＤを特定することができる。
【００９６】
項目Ｃ６１０ｃは基準列でも対象列でもなく、従って集合関数による処理の対象とはならないので、全ての値ＩＤ表でその対応関係を保持する必要はなく、ただ他のデータ項目の値との対応がわかるようにしておけばよいものである。従って、いずれか１つの基準列（必ずしも主キーである必要はない）についてのみ項目Ｃ６１０ｃとの対応がわかるようにしておけば、他の値との対応を辿ることが可能となる。
【００９７】
（実施形態の拡張）
以上で説明した第１および第２の実施形態は、その趣旨を改変しない範囲で、様々な拡張が考えられる。
たとえば、作成された値ＩＤ表および値リストについて、１つの表を必ず１つのデータノードに記憶する必要はない。１つの値ＩＤ表もしくは値リストを、各データノードの記憶容量などのような制約に応じて、複数のデータノードに適宜分割して記憶してもよい。この場合には、データ配置情報管理部１１２が、どの値ＩＤ表もしくは値リストが、どのデータノードに分割して記憶されているかを把握してデータ配置情報１２１にその旨を記憶するようにすればよい。
【００９８】
これまで本発明について図面に示した特定の実施形態をもって説明してきたが、本発明は図面に示した実施形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができる。
【００９９】
上述した各々の実施形態について、その新規な技術内容の要点をまとめると、以下のようになる。なお、上記実施形態の一部または全部は、新規な技術として以下のようにまとめられるが、本発明は必ずしもこれに限定されるものではない。
【０１００】
（付記１）  フロントデータベースサーバと複数台のデータノードとが相互に接続されて構成される分散メモリデータベースシステムであって、
前記フロントデータベースサーバが、
外部から入力される表データを分割して各々の実際のデータを値ＩＤに置換した複数の値ＩＤ表を生成してこれらを前記各データノードに分散して記憶させるデータ構造変換部と、
外部のクライアントマシンから発行された集合関数を含むクエリーに基づいて前記各データノードに対して前記表データの中の特定の値ＩＤの出現数を問い合わせると共に、これに応じて前記各データノードから返された特定の値ＩＤの出現数から前記クエリーに対応する集合関数の値を計算して前記クライアントマシンに返送する問い合わせ処理部と
を有し、
前記データ構造変換部が、前記複数の値ＩＤ表を生成する際に、前記表データの中で集計軸になり得る列としてあらかじめ指定された複数のデータ項目の各々について個別に前記複数の値ＩＤ表を生成することを特徴とする分散メモリデータベースシステム。
【０１０１】
（付記２）  前記フロントデータベースサーバの前記データ構造変換部が、前記複数の値ＩＤ表を生成する際に、前記表データの中で集計軸および集計対象になり得る列としてあらかじめ指定されたデータ項目の各々について実際の値を値ＩＤに置換すると共に、前記値ＩＤと前記実際の値との対応を示す値リストを生成する機能を有し、
前記フロントデータベースサーバが、前記値リストおよび前記値ＩＤ表が前記各データノードの中のいずれに分散されたかを記憶するデータ配置情報管理部を有することを特徴とする、付記１に記載の分散メモリデータベースシステム。
【０１０２】
（付記３）  前記フロントデータベースサーバの前記データ構造変換部が、前記複数の値ＩＤ表を生成する際に、前記実際の値を大小順にソートしてから前記値ＩＤに置換することを特徴とする、付記２に記載の分散メモリデータベースシステム。
【０１０３】
（付記４）  前記フロントデータベースサーバの前記データ構造変換部が、前記表データの中で集計軸および集計対象のいずれにもなり得ない列としてあらかじめ指定されたデータ項目の各々について、前記集計軸になり得る列についての前記値ＩＤ表のいずれか１種類に付随して記憶させることを特徴とする、付記２に記載の分散メモリデータベースシステム。
【０１０４】
（付記５）  複数台のデータノードと相互に接続されて分散メモリデータベースシステムを構成するフロントデータベースサーバであって、
外部から入力される表データを分割して各々の実際のデータを値ＩＤに置換した複数の値ＩＤ表を生成してこれらを前記各データノードに分散して記憶させるデータ構造変換部と、
外部のクライアントマシンから発行された集合関数を含むクエリーに基づいて前記各データノードに対して前記表データの中の特定の値ＩＤの出現数を問い合わせると共に、これに応じて前記各データノードから返された特定の値ＩＤの出現数から前記クエリーに対応する集合関数の値を計算して前記クライアントマシンに返送する問い合わせ処理部と
を有し、
前記データ構造変換部が、前記複数の値ＩＤ表を生成する際に、前記表データの中で集計軸になり得る列としてあらかじめ指定された複数のデータ項目の各々について個別に前記複数の値ＩＤ表を生成することを特徴とするフロントデータベースサーバ。
【０１０５】
（付記６）  フロントデータベースサーバと複数台のデータノードとが相互に接続されて構成される分散メモリデータベースシステムにあって、
外部からの表データの入力を前記フロントデータベースサーバのデータ構造変換部が受け付け、
入力された前記表データを、集計軸になり得る列としてあらかじめ指定されたデータ項目の各々について前記フロントデータベースサーバのデータ構造変換部が個別に分割して実際のデータを値ＩＤに置換した複数の値ＩＤ表を生成し、
生成された前記複数の値ＩＤ表を前記フロントデータベースサーバのデータ構造変換部が前記各データノードに分散して記憶させ、
外部のクライアントマシンから発行された集合関数を含むクエリーを前記フロントデータベースサーバの問い合わせ処理部が受け付け、
受け付けられた前記クエリーに基づいて前記表データの中の特定の値ＩＤの出現数を前記フロントデータベースサーバの問い合わせ処理部が前記各データノードに問い合わせ、
前記各データノードから返された特定の値ＩＤの出現数から前記フロントデータベースサーバの問い合わせ処理部が前記クエリーに対応する集合関数の値を計算して前記クライアントマシンに返送する
ことを特徴とするデータ処理方法。
【０１０６】
（付記７）  フロントデータベースサーバと複数台のデータノードとが相互に接続されて構成される分散メモリデータベースシステムにあって、
前記フロントデータベースサーバが備えるコンピュータに、
外部からの表データの入力を受け付ける手順、
入力された前記表データを、集計軸になり得る列としてあらかじめ指定されたデータ項目の各々について個別に分割して実際のデータを値ＩＤに置換した複数の値ＩＤ表を生成する手順、
生成された前記複数の値ＩＤ表を前記各データノードに分散して記憶させる手順、
外部のクライアントマシンから発行された集合関数を含むクエリーを受け付ける手順、
受け付けられた前記クエリーに基づいて前記表データの中の特定の値ＩＤの出現数を前記各データノードに問い合わせる手順、
および前記各データノードから返された特定の値ＩＤの出現数から前記クエリーに対応する集合関数の値を計算して前記クライアントマシンに返送する手順
を実行させることを特徴とするデータ処理プログラム。
【産業上の利用可能性】
【０１０７】
本発明はデータベースを利用するコンピュータシステム、特に分散メモリを使用するデータベースシステムに幅広く適用できる。
【符号の説明】
【０１０８】
１、５０１  分散メモリデータベースシステム
１０、５１０  フロントＤＢサーバ
２１〜２３、５２１〜５２３  データノード
３０  内部ネットワーク
４０  外部ネットワーク
５０  クライアントマシン
１０１、２０１  主演算制御手段
１０２、２０２  記憶手段
１０３、２０３  通信手段
１１１、２０４、５１１  問い合わせ処理部
１１２、５１３  データ配置情報管理部
１１３  データ構造変換部
１２１  データ配置情報
２１０、６１０  表データ
２１１〜２１３  値リスト
２２１〜２２２、２３１〜３３、６２１〜６２２、６３１〜６３２  値ＩＤ表
【図１】
0005598279.tif 000009
【図２】
0005598279.tif 000010
【図３】
0005598279.tif 000011
【図４】
0005598279.tif 000012
【図５】
0005598279.tif 000013
【図６】
0005598279.tif 000014
【図７】
0005598279.tif 000015
【図８】
0005598279.tif 000016
【図９】
0005598279.tif 000017
【図１０】
0005598279.tif 000018
【図１１】
0005598279.tif 000019
【図１２】
0005598279.tif 000020
【図１３】
0005598279.tif 000021
【図１４】
0005598279.tif 000022
【図１５】
0005598279.tif 000023
【図１６】
0005598279.tif 000024