(57)【特許請求の範囲】
【請求項１】
フロントメモリデータベースサーバと、単数もしくは複数台のバックエンドデータベースサーバとが相互に接続された分散メモリデータベースシステムであって、
前記フロントメモリデータベースサーバが、
あらかじめ入力されたデータテーブル内のデータをインデックス番号に置換したインデックステーブル，前記データテーブルの中で集計処理対象となる列であるフロントインデックス列，および前記インデックス番号に対応する実データがいずれの前記バックエンドデータベースサーバに記憶されているかの情報であるスキーマ情報を記憶する第１の記憶手段と、
前記インデックステーブルおよび前記フロントインデックス列に対してユーザに入力されたクエリを実行して中間データを作成するクエリ実行部と、
前記スキーマ情報に基づいて前記インデックス番号に対応する前記実データが記憶されている前記バックエンドデータベースサーバを特定する表情報管理部と、
特定された前記バックエンドデータベースサーバに前記インデックス番号に対応する実データを照会してこれを取得する実データ照会部と
を備え、
前記バックエンドデータベースサーバの各々が、
前記フロントメモリデータベースサーバにあらかじめ入力された前記データテーブルの列ごとに前記インデックス番号に対応する実データを保存する第２の記憶手段と、
前記フロントメモリデータベースサーバから前記インデックス番号について照会を受けた場合にこのインデックス番号に対応する前記実データを返信するカラムデータ管理部と
を備え、
前記フロントメモリデータベースサーバの前記クエリ実行部が、前記中間データ中の前記インデックス番号を取得された前記実データに置換して出力する機能を有する
ことを特徴とする分散メモリデータベースシステム。
【請求項２】
前記バックエンドデータベースサーバの前記第２の記憶手段が、前記インデックス番号に対応する前記実データを重複を排除した形でソートして記憶していることを特徴とする、請求項１に記載の分散メモリデータベースシステム。
【請求項３】
前記フロントメモリデータベースサーバの前記第１の記憶手段が、複数個の前記インデックステーブルを記憶しており、
前記クエリ実行部が、前記クエリの実行内容に応じて前記複数個のインデックステーブルに対して結合処理を行う機能を有することを特徴とする、請求項１に記載の分散メモリデータベースシステム。
【請求項４】
前記フロントメモリデータベースサーバの前記第１の記憶手段が、前記データテーブルの中で前記フロントインデックス列および前記結合処理のキーとなるグループ列のいずれにも該当しない列のうち少なくとも１列を直接データ列として記憶していることを特徴とする、請求項３に記載の分散メモリデータベースシステム。
【請求項５】
単数もしくは複数台のバックエンドデータベースサーバと相互に接続されて分散メモリデータベースシステムを構成するフロントメモリデータベースサーバであって、
あらかじめ入力されたデータテーブル内のデータをインデックス番号に置換したインデックステーブル，前記データテーブルの中で集計処理対象となる列であるフロントインデックス列，および前記インデックス番号に対応する実データがいずれの前記バックエンドデータベースサーバに記憶されているかの情報であるスキーマ情報を記憶する第１の記憶手段と、
前記インデックステーブルおよび前記フロントインデックス列に対してユーザに入力されたクエリを実行して中間データを作成するクエリ実行部と、
前記スキーマ情報に基づいて前記インデックス番号に対応する前記実データが記憶されている前記バックエンドデータベースサーバを特定する表情報管理部と、
特定された前記バックエンドデータベースサーバに前記インデックス番号に対応する実データを照会してこれを取得する実データ照会部とを備え、
前記クエリ実行部が、前記中間データ中の前記インデックス番号を取得された前記実データに置換して出力する機能を有する
ことを特徴とするフロントメモリデータベースサーバ。
【請求項６】
フロントメモリデータベースサーバと、単数もしくは複数台の複数台のバックエンドデータベースサーバとが相互に接続された分散メモリデータベースシステムにあって、
前記フロントメモリデータベースサーバがあらかじめ備える第１の記憶手段に、あらかじめ入力されたデータテーブル内のデータをインデックス番号に置換したインデックステーブルとして記憶すると共に、前記データテーブルの中で集計処理対象となる列であるフロントインデックス列および前記インデックス番号に対応する実データがいずれの前記バックエンドデータベースサーバに記憶されているかの情報であるスキーマ情報を前記第１の記憶手段に同時に記憶し、
前記バックエンドデータベースサーバがあらかじめ備える第１の記憶手段に、前記データテーブルの列ごとに前記インデックス番号に対応する実データをあらかじめ記憶し、
前記インデックステーブルおよび前記フロントインデックス列に対して前記フロントメモリデータベースサーバのクエリ実行部がユーザに入力されたクエリを実行して中間データを作成し、
前記スキーマ情報に基づいて前記インデックス番号に対応する前記実データが記憶されている前記バックエンドデータベースサーバを前記フロントメモリデータベースサーバの表情報管理部が特定し、
特定された前記バックエンドデータベースサーバに前記インデックス番号に対応する前記実データを前記フロントメモリデータベースサーバの実データ照会部が照会し、
前記フロントメモリデータベースサーバから照会を受けたインデックス番号に対応する実データを前記バックエンドデータベースサーバのカラムデータ管理部が返信し、
前記中間データ中の前記インデックス番号を前記フロントメモリデータベースサーバの前記クエリ実行部が前記実データに置換して出力する
ことを特徴とするデータベース用データ処理方法。
【請求項７】
あらかじめ入力されたデータテーブル内のデータをインデックス番号に置換したインデックステーブル，前記データテーブルの中で集計処理対象となる列であるフロントインデックス列，および前記インデックス番号に対応する実データがいずれの前記バックエンドデータベースサーバに記憶されているかの情報であるスキーマ情報を記憶する第１の記憶手段を有するフロントメモリデータベースサーバと、前記データテーブルの列ごとに前記インデックス番号に対応する実データを記憶する第２の記憶手段を有する単数もしくは複数台のバックエンドデータベースサーバとが相互に接続された分散メモリデータベースシステムにあって、
前記フロントメモリデータベースサーバがあらかじめ備えるコンピュータに、
前記インデックステーブルおよび前記フロントインデックス列に対してユーザに入力されたクエリを実行して中間データを作成する手順、
前記スキーマ情報に基づいて前記インデックス番号に対応する前記実データが記憶されている前記バックエンドデータベースサーバを特定する手順、
特定された前記バックエンドデータベースサーバに前記実データを照会してこれを受信する手順、
および前記中間データ中の前記インデックス番号を受信した前記実データに置換して出力する手順
を実行させることを特徴とするデータベース用データ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は分散メモリデータベースシステム、データベースサーバ、データ処理方法およびプログラムに関し、特に集計にかかる速度と通信量を削減することの可能な分散メモリデータベースシステム等に関する。
【背景技術】
【０００２】
ある程度以上の規模のコンピュータ装置を利用したシステム、たとえばウェブサービスや業務システム等では、大量のデータを扱うためにデータベース管理システム（ＤＢＭＳ: DataBase Management System）の利用が不可欠である。また、近年は主記憶装置（メモリ）の大容量化および低価格化が進行しているので、ネットワークによって接続された多数のコンピュータのメモリを連携させて１つの巨大な論理的メモリとして使用する分散メモリ技術が確立されてきている。
【０００３】
分散メモリ技術によって、データベース上のデータを全てメモリ上に展開して処理することで、データの集計や結合などの処理を高速化したＤＢＭＳを、ここでは分散メモリデータベースシステムという。分散メモリデータベースシステムは特に、大量のデータを一括で処理するバッチ用途や、企業の扱う大量のデータから特定の部署が必要とするものを抽出するデータマートの作成などで、特に処理の高速化の効果が発揮される。
【０００４】
分散メモリデータベースシステムに関連して、次のような技術文献がある。その中でも特許文献１は、複数のプロセッサ付きメモリモジュールをリング状に配置して、表形式データの結合を高速化するという分散メモリ型情報処理システムが記載されている。特許文献２には、カラム単位で記録データを管理してデータの格納および検索を効率化するというデータベース検索システムが記載されている。
【０００５】
特許文献３には、データベースを複数の区画に区分し、その各々に局所索引を付けるという多層索引構造の生成方法が記載されている。特許文献４には、複数のデータベースの各々の処理装置を並列に活用して処理を行わせることによってネットワークの負荷を軽減するというデータ加工システムが記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】再特ＷＯ２００５／０７３８８０号公報
【特許文献２】特開２００４−２５２８２８号公報
【特許文献３】特開平０７−１２３４５０号公報
【特許文献４】特開平０７−１８２３６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
分散メモリデータベースシステムは、全てのデータをメモリ上に格納することによって、処理を高速化しようという発想に基づいている。しかしながら、もともとのデータ量がメモリ容量を超えた場合、あるいは演算途中の一時的なデータによって増加したデータ量がメモリ容量を超えた場合、一般的にはＯＳ（Operating System）によってハードディスク上に確保された仮想メモリ領域が使用される。
【０００８】
コンピュータプログラムを実行するプロセッサとハードディスクとの間のデータ転送速度は、プロセッサとメモリとの間のそれと比べて劣っているため、仮想メモリ領域が使用されると処理速度が大きく低下してしまうことになる。そのため、データ量がメモリ容量を超えるような大容量のデータを扱う場合には、分散メモリデータベースシステムによる処理速度の高速化が困難であるという問題がある。
【０００９】
ハードディスクを用いた通常のＤＢＭＳでは、その処理の高速化のため、テーブルを行単位で分割する水平分割を行い、複数のサーバにまたがる検索処理、特にデータの集計処理や結合処理を行うためには、各データベースサーバ間でデータの通信を行いながら処理を行うという方法が用いられる。
【００１０】
しかしながら、分散メモリデータベースシステムでは、各データベースサーバ間で行われるデータ通信処理が、メモリ上での演算処理に比べて長い時間を要するためにボトルネックとなり、分散メモリデータベースシステムの高速性を損なわせることとなる。また、データの転送された量に応じて課金される通信環境もあり、その場合には分散メモリデータベースシステムを使用することによって巨額の課金が発生することとなる。
【００１１】
前述の特許文献１〜４には、分散メモリデータベースシステムで各データベースサーバ間の通信を抑制する技術は記載されていないので、当然ながらこれらの問題を解決することはできない。
【００１２】
本発明の目的は、各データベースサーバ間の通信容量を抑制して、複数のサーバにまたがる処理を高速化することを可能とする分散メモリデータベースシステム、データベースサーバ、データ処理方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００１３】
上記目的を達成するため、本発明に係る分散メモリデータベースシステムは、フロントメモリデータベースサーバと、単数もしくは複数台のバックエンドデータベースサーバとが相互に接続された分散メモリデータベースシステムであって、フロントメモリデータベースサーバが、あらかじめ入力されたデータテーブル内のデータをインデックス番号に置換したインデックステーブル，データテーブルの中で集計処理対象となる列であるフロントインデックス列，およびインデックス番号に対応する実データがいずれのバックエンドデータベースサーバに記憶されているかの情報であるスキーマ情報とを記憶する第１の記憶手段と、インデックステーブルおよびフロントインデックス列に対してユーザに入力されたクエリを実行して中間データを作成するクエリ実行部と、スキーマ情報に基づいてインデックス番号に対応する実データが記憶されているバックエンドデータベースサーバを特定する表情報管理部と、特定されたバックエンドデータベースサーバにインデックス番号に対応する実データを照会してこれを取得する実データ照会部とを備え、バックエンドデータベースサーバの各々が、フロントメモリデータベースサーバにあらかじめ入力されたデータテーブルの列ごとにインデックス番号に対応する実データを保存する第２の記憶手段と、フロントメモリデータベースサーバからインデックス番号について照会を受けた場合にこのインデックス番号に対応する実データを返信するカラムデータ管理部とを備え、フロントメモリデータベースサーバのクエリ実行部が、中間データ中のインデックス番号を取得された実データに置換して出力する機能を有することを特徴とする。
【００１４】
上記目的を達成するため、本発明に係るデータベースサーバは、単数もしくは複数台のバックエンドデータベースサーバと相互に接続されて分散メモリデータベースシステムを構成するフロントメモリデータベースサーバであって、あらかじめ入力されたデータテーブル内のデータをインデックス番号に置換したインデックステーブル、データテーブルの中で集計処理対象となる列であるフロントインデックス列、およびインデックス番号に対応する実データがいずれのバックエンドデータベースサーバに記憶されているかの情報であるスキーマ情報とを記憶する第１の記憶手段と、インデックステーブルおよびフロントインデックス列に対してユーザに入力されたクエリを実行して中間データを作成するクエリ実行部と、スキーマ情報に基づいてインデックス番号に対応する実データが記憶されているバックエンドデータベースサーバを特定する表情報管理部と、特定されたバックエンドデータベースサーバにインデックス番号に対応する実データを照会してこれを取得する実データ照会部とを備え、クエリ実行部が、中間データ中のインデックス番号を取得された実データに置換して出力する機能を有することを特徴とする。
【００１５】
上記目的を達成するため、本発明に係るデータベース用データ処理方法は、フロントメモリデータベースサーバと、単数もしくは複数台の複数台のバックエンドデータベースサーバとが相互に接続された分散メモリデータベースシステムにあって、フロントメモリデータベースサーバがあらかじめ備える第１の記憶手段に、あらかじめ入力されたデータテーブル内のデータをインデックス番号に置換したインデックステーブルとして記憶すると共に、データテーブルの中で集計処理対象となる列であるフロントインデックス列およびインデックス番号に対応する実データがいずれのバックエンドデータベースサーバに記憶されているかの情報であるスキーマ情報を第１の記憶手段に同時に記憶し、バックエンドデータベースサーバがあらかじめ備える第１の記憶手段に、データテーブルの列ごとにインデックス番号に対応する実データをあらかじめ記憶し、インデックステーブルおよびフロントインデックス列に対してフロントメモリデータベースサーバのクエリ実行部がユーザに入力されたクエリを実行して中間データを作成し、スキーマ情報に基づいてインデックス番号に対応する実データが記憶されているバックエンドデータベースサーバをフロントメモリデータベースサーバの表情報管理部が特定し、特定されたバックエンドデータベースサーバにインデックス番号に対応する実データをフロントメモリデータベースサーバの実データ照会部が照会し、フロントメモリデータベースサーバから照会を受けたインデックス番号に対応する実データをバックエンドデータベースサーバのカラムデータ管理部が返信し、中間データ中のインデックス番号をフロントメモリデータベースサーバのクエリ実行部が実データに置換して出力する
ことを特徴とする。
【００１６】
上記目的を達成するため、本発明に係るデータベース用データ処理プログラムは、あらかじめ入力されたデータテーブル内のデータをインデックス番号に置換したインデックステーブル、データテーブルの中で集計処理対象となる列であるフロントインデックス列、およびインデックス番号に対応する実データがいずれのバックエンドデータベースサーバに記憶されているかの情報であるスキーマ情報とを記憶する第１の記憶手段を有するフロントメモリデータベースサーバと、データテーブルの列ごとにインデックス番号に対応する実データを記憶する第２の記憶手段を有する単数もしくは複数台のバックエンドデータベースサーバとが相互に接続された分散メモリデータベースシステムにあって、フロントメモリデータベースサーバがあらかじめ備えるコンピュータに、インデックステーブルおよびフロントインデックス列に対してユーザに入力されたクエリを実行して中間データを作成する手順、スキーマ情報に基づいてインデックス番号に対応する実データが記憶されているバックエンドデータベースサーバを特定する手順、特定されたバックエンドデータベースサーバに実データを照会してこれを受信する手順、および中間データ中のインデックス番号を受信した実データに置換して出力する手順を実行させることを特徴とする。
【発明の効果】
【００１７】
本発明は、上述したようにフロントメモリデータベースサーバにインデックステーブルと集計処理対象となるフロントインデックス列とを記憶するように構成したので、フロントメモリデータベースサーバ単体で集計作業を進めることができ、バックエンドデータベースサーバには出力段階でインデックス番号に対応する実データを照会するだけでよい。これによって、各データベースサーバ間の通信容量を抑制し、複数のサーバにまたがる処理を高速化することが可能である分散メモリデータベースシステム、データベースサーバ、データ処理方法およびプログラムを提供することができる。
【図面の簡単な説明】
【００１８】
【図１】本実施形態に係る分散メモリデータベースシステムの構成を示す説明図である。
【図２】図１に示した分散メモリデータベースシステムにユーザが登録するデータの一例を示す説明図である。
【図３】図２に示したデータを登録した結果、図１に示したデータ保存メモリ領域およびスキーマ情報領域に記憶されるデータの例を示す説明図である。
【図４】図２に示したデータを登録した結果、図１に示したカラムデータ保存メモリ領域の各々に記憶されるデータの例を示す説明図である。
【図５】図１に示した分散メモリデータベースシステムにデータを登録して利用可能な状態にする動作を示すフローチャートである。
【図６】図１に示した分散メモリデータベースシステムに対してクライアントコンピュータからデータ検索の操作があった場合の動作を示す説明図である。図６（ａ）は入力されたＳＱＬコマンドを示し、図６（ｂ）〜（ｄ）は各処理段階でフロントＤＢサーバの中間データ領域に記憶される内容を示す。
【図７】図６（ａ）に示すＳＱＬコマンドを入力されたクエリ実行部が実行する処理を示すフローチャートである。
【図８】図６〜７に示した処理によって出力される最終出力データを示す説明図である。
【図９】図１に示した分散メモリデータベースシステムに入力される別のＳＱＬコマンドの例を示す説明図である。
【発明を実施するための形態】
【００１９】
（第１の実施形態）
以下、本発明の第１の実施形態の構成について添付図１〜７に基づいて説明する。
最初に、本実施形態の基本的な内容について説明し、その後でより具体的な内容について説明する。
本実施形態に係る分散メモリデータベースシステム１は、フロントメモリデータベースサーバ１０と、単数もしくは複数台のバックエンドデータベースサーバ２１とが相互に接続された分散メモリデータベースシステムである。フロントメモリデータベースサーバ１０は、あらかじめ入力されたデータテーブル内のデータをインデックス番号に置換したインデックステーブル、データテーブルの中で集計処理対象となる列であるフロントインデックス列、およびインデックス番号に対応する実データがいずれのバックエンドデータベースサーバに記憶されているかの情報であるスキーマ情報とを記憶する第１の記憶手段１０２と、インデックステーブルおよびフロントインデックス列に対してユーザに入力されたクエリを実行して中間データを作成するクエリ実行部１１１と、スキーマ情報に基づいてインデックス番号に対応する実データが記憶されているバックエンドデータベースサーバを特定する表情報管理部１１２と、特定されたバックエンドデータベースサーバにインデックス番号に対応する実データを照会してこれを取得する実データ照会部１１３とを備える。バックエンドデータベースサーバ２１は各々、データテーブルの列ごとにインデックス番号に対応する実データを保存する第２の記憶手段２０２と、フロントメモリデータベースサーバからインデックス番号について照会を受けた場合にこのインデックス番号に対応する実データを返信するカラムデータ管理部２１１とを備える。そしてフロントメモリデータベースサーバ１０のクエリ実行部１１１が、中間データ中のインデックス番号を取得された実データに置換して出力する機能を有する。
【００２０】
ここでバックエンドデータベースサーバ２１の第２の記憶手段２０２は、インデックス番号に対応する実データを重複を排除した形でソートして記憶している。そしてフロントメモリデータベースサーバ１０の第１の記憶手段１０２は、複数個のインデックステーブルを記憶しており、クエリ実行部１１１が、クエリの実行内容に応じて複数個のインデックステーブルに対して結合処理を行う。さらにフロントメモリデータベースサーバ１０の第１の記憶手段１０２が、データテーブルの中でフロントインデックス列および結合処理のキーとなるグループ列のいずれにも該当しない列のうち少なくとも１列を直接データ列として記憶している。
【００２１】
この構成を備えることにより、この分散メモリデータベースシステム１は各サーバ間の通信容量を抑制し、これによってデータの集計などの処理を高速化することが可能となる。
以下、これをより詳細に説明する。
【００２２】
図１は、本実施形態に係る分散メモリデータベースシステム１の構成を示す説明図である。分散メモリデータベースシステム１は、フロントメモリデータベースサーバ１０（以後フロントメモリＤＢサーバ１０という）と、複数台のバックエンドデータベースサーバ２１〜２３（以後バックエンドＤＢサーバ２１〜２３という）とが内部ネットワーク３０を介して相互に接続されて構成される。
【００２３】
利用者は、クライアントコンピュータ４０を操作してネットワークを介してフロントメモリＤＢサーバ１０に接続し、分散メモリデータベースシステム１上のデータを利用する。図１では３台のバックエンドＤＢサーバ２１〜２３を示しているが、このバックエンドＤＢサーバの台数は任意であり、１台以上何台でもよい。また、内部ネットワーク３０のネットワーク方式やプロトコルなどは任意である。
【００２４】
フロントメモリＤＢサーバ１０は、プロセッサ１０１、記憶手段１０２、および通信手段１０３を備えるコンピュータ装置である。プロセッサ１０１はコンピュータプログラムの動作主体となるＣＰＵ（Central Processing Unit）であり、記憶手段１０２はプロセッサ１０１が作業中のデータを記憶するＲＡＭ（Random Access Memory）などのような記憶装置である。通信手段１０３は他のコンピュータとのデータ通信を行う。
【００２５】
プロセッサ１０１では、クエリ実行部１１１、表情報管理部１１２、および実データ照会部１１３が、コンピュータプログラムとして動作する。また、記憶手段１０２には、データ保存メモリ領域１２１、スキーマ情報領域１２２、および中間データ領域１２３が確保されている。
【００２６】
クエリ実行部１１１はクライアントコンピュータ４０から発行されたＳＱＬ（Structured Query Language）文に定義されたクエリ（処理要求）を実行するＤＢＭＳとしての基本的な機能部である。表情報管理部１１２はデータベースの表定義の情報と各列の実データがバックエンドＤＢサーバ２１〜２３のうちのいずれにあるかをスキーマ情報領域１２２に記憶および管理する機能を有する。実データ照会部１１３は、実データが記憶されているバックエンドＤＢサーバ２１〜２３に、インデックス番号に対応する実データを照会して取得する。
【００２７】
クエリ実行部１１１は同時に、ＳＱＬ文を実行した結果に、実データ照会部１１３が取得した実データを含めて出力する機能も有する。スキーマ情報領域１２２には、クエリ実行部１１１やデータ保存メモリ領域１２１に必要なデータの配置情報であるスキーマ（データ構造）情報１２２が記憶されており、表情報管理部１１２は必要に応じて実データ照会部１１３にその情報を渡す。
【００２８】
データ保存メモリ領域１２１には、ユーザが登録した全てのデータ情報が、インデックス番号もしくは実データの形で保存されている。ここでいうインデックス番号とは、実データがバックエンドＤＢサーバ２１〜２３のうちのいずれにある実データ列で何行目のデータであるかを示す番号である。このインデックス番号と、表情報管理部１１２が管理しているスキーマ情報とを照合することによって、実データの所在を把握して取得することが可能となる。
【００２９】
なお、スキーマ情報領域１２２および中間データ領域１２３に記憶される内容については後述する。
【００３０】
バックエンドＤＢサーバ２１〜２３の中の１台であるバックエンドＤＢサーバ２１も、フロントメモリＤＢサーバ１０と同様に、プロセッサ２０１、記憶手段２０２、および通信手段２０３を備えるコンピュータ装置である。その各々のハードウェアとしての機能は、フロントメモリＤＢサーバ１０の同名部と同一である。プロセッサ２０１では、カラムデータ管理部２１１が、コンピュータプログラムとして動作する。また、記憶手段２０２には、カラムデータ保存メモリ領域２１２が確保されている。
【００３１】
カラムデータ管理部２１１は、フロントメモリＤＢサーバ１０のクエリ実行部１１１から受けた問い合わせに対して、カラムデータ保存メモリ領域２１２に記憶されたデータの検索・更新などの操作を行い、その結果をクエリ実行部１１１に返却する。カラムデータ保存メモリ領域２１２は、カラムデータ管理部２１１から操作を受けて必要な列情報を格納する。
【００３２】
ここで、カラムデータ保存メモリ領域２１２に記憶されたデータはある列の全ての実データを重複を排除した形でソート（並べ替え）したものであり、ある列のデータを複数のサーバに分割して格納するものではない。他サーバとは、異なる列単位でデータを分散して格納している。
【００３３】
バックエンドＤＢサーバ２２および２３も、バックエンドＤＢサーバ２１とハードウェア的には同一の構成を有する。バックエンドＤＢサーバ２２は、カラムデータ管理部２２１およびカラムデータ保存メモリ領域２２２といった各機能部を備える。バックエンドＤＢサーバ２３は、カラムデータ管理部２３１およびカラムデータ保存メモリ領域２３２といった各機能部を備える。これら各々の機能は、バックエンドＤＢサーバ２１の同名の機能部と同一である。
【００３４】
図２は、図１に示した分散メモリデータベースシステム１にユーザが登録するデータの一例を示す説明図である。また図３は、図２に示したデータを登録した結果、図１に示したデータ保存メモリ領域１２１およびスキーマ情報領域１２２に記憶されるデータ、図４はカラムデータ保存メモリ領域２１２、２１２、２３２の各々に記憶されるデータの例をそれぞれ示す説明図である。
【００３５】
図２に示す例では、商品テーブル３００と売上テーブル３１０という各々のテーブルを定義されている。商品テーブル３００には、商品ＩＤ３００ａ、商品種別３００ｂ、メーカー３００ｃ、発売年３００ｄという各々の列が定義されている。売上テーブル３１０には、売上ＩＤ３１０ａ、商品ＩＤ３００ａ、数量３１０ｂ、価格３１０ｃという各々の列が定義されている。
【００３６】
各々のテーブル間で、結合を行うことが想定される列を１グループとし、グループ化された列のことをグループ列といい、結合を行わない列を非グループ列という。さらに、グループ列と非グループ列をまとめてインデックス列という。図２に示す例では、商品テーブル３００と売上テーブル３１０の間で、商品ＩＤ３００ａをキーとして結合を行うことができるので、この両テーブルの商品ＩＤ３００ａがグループ列となる。
【００３７】
フロントメモリＤＢサーバ１０には原則としてインデックス列を格納するが、対象列の実データがｉｎｔ（整数）型やｆｌｏａｔ（浮動小数点）型などの比較的データ量が少ない数値データであり、そのデータが集計対象かつ結合の対象列ではない場合には、（バックエンドＤＢサーバ２１〜２３に実データを配置した場合の）インデックスと、実データとの間で、データのサイズ自体がほとんど変わらない。従って、このような場合には直接実データを格納するようにした方が効率的である。この列を直接データ列と呼ぶ。
【００３８】
本発明を適用する領域ではデータ量が多いため、データ格納の効率性を考慮するとこの方法や有効である。ただし、結合を行う対象列の場合は、インデックス番号で格納しているインデックス列との結合ができないので留意が必要である。図２に示す例では、数量３１０ｂが結合を行う対象ではなく、またデータ量も少ないので、直接データ列となる。
【００３９】
また、集計対象で計算処理を行うと思われる列について、フロントメモリＤＢサーバ１０上に対象列の実データを配置するように指定することもできる。そのようにすれば、集計処理が１つのサーバ上に集約されるため高速化が可能となる。ただし、この集計対象列に関しては、フロントＤＢサーバのデータ保存メモリ領域１２１の容量に応じて、適用するかどうかの判断を行う必要がある。この列をフロントインデックス列と呼ぶ。図２に示す例では、価格３１０ｃをフロントインデックス列としている。これは、このデータが集計処理の対象となることが多いからである。
【００４０】
図３〜４に示した例では、フロントメモリＤＢサーバ１０のデータ保存メモリ領域１２１上には、図２に示した商品テーブル３００および売上テーブル３１０を各々インデックス番号としたインデックス商品テーブル４００およびインデックス売上テーブル４１０と、価格３１０ｃを記憶する価格テーブル４２０として保存している。
【００４１】
なお、インデックス商品テーブル４００およびインデックス売上テーブル４１０は、ＳＱＬ文で扱うテーブル名称は各々「商品テーブル」と「売上テーブル」であるが、インデックス番号に置換する処理を行った後のテーブルであるという意味で、ここではこれらを各々「インデックス商品テーブル」と「インデックス売上テーブル」と呼ぶことにする。たとえばインデックス商品テーブル４００の項目「メーカー」に対応する列には、メーカーテーブル４３０の何番目の項目の実データに対応するかを示す番号が記憶されている。インデックス番号とは、このようにバックエンドＤＢサーバ２１〜２３のカラムデータ保存メモリ領域に記憶されている実データの何番目の項目に対応するかを示す番号である。
【００４２】
バックエンドＤＢサーバ２１のカラムデータ保存メモリ領域２１２には、メーカー３００ｃを記憶するメーカーテーブル４３０が記憶されている。同様に、バックエンドＤＢサーバ２２のカラムデータ保存メモリ領域２２２には、商品種別３００ｂを記憶する商品種別テーブル４４０、および売上ＩＤ３１０ａを記憶する売上ＩＤテーブル４５０が記憶されている。バックエンドＤＢサーバ２３のカラムデータ保存メモリ領域２３２には、発売年３００ｄを記憶する発売年テーブル４６０、および商品ＩＤ３００ａを記憶する商品ＩＤテーブル４７０が記憶されている。
【００４３】
スキーマ情報領域１２２には、以上の各データ項目とそれらが実際に記憶されているバックエンドＤＢサーバとの対応を示すデータ配置テーブルが記憶されている。価格３１０ｃについてはフロントインデックス列である旨を示す「フロント」、数量３１０ｂについては直接データ列である旨を示す「直接」というデータになっている。これら以外は、各データが実際に記憶されているバックエンドＤＢサーバ名が、各データ項目に対応づけられている。
【００４４】
（データの登録の動作）
図５は、図１に示した分散メモリデータベースシステム１にデータを登録して利用可能な状態にする動作を示すフローチャートである。データベース管理者は、フロントメモリＤＢサーバ１０に対して、通常のＤＢＭＳに対する操作と同様にして図２に示した商品テーブル３００および売上テーブル３１０のようにデータベースの表定義を作成する。その作成の際に、前述のグループ列、直接データ列、フロントインデックス列を定義する（ステップＳ５０１）。
【００４５】
表定義の作成を終えた後、作成した表に実データを登録する（ステップＳ５０２）。そして、実データの登録を終えた後、各データをインデックス格納列ごとに、各々のバックエンドＤＢサーバごとのカラムデータ保存メモリ領域に分散させ、重複を排除しソートした形で格納する（ステップＳ５０３）。
【００４６】
ちなみにステップＳ５０３の処理で、どの列データをどのバックエンドＤＢサーバに割り振るかの決定は、空き容量が多いバックエンドＤＢサーバから順番に列データを割り振るようにすることが簡単である。ただし、ある一定のクエリが処理に時間が非常にかかることが事前に判断できている場合は、列の検索条件（ａｎｄ条件やｏｒ条件）に合わせた形で分割しておくことによって、検索性能を向上させることができる。
【００４７】
（データ検索時の動作）
図６は、図１に示した分散メモリデータベースシステム１に対してクライアントコンピュータ４０からデータ検索の操作があった場合の動作を示す説明図である。図６（ａ）は入力されたＳＱＬコマンド６０１を示し、図６（ｂ）〜（ｄ）は各処理段階でフロントＤＢサーバ１０の中間データ領域１２３に記憶される内容を示す。また図７は、図６（ａ）に示すＳＱＬコマンド６０１を入力されたクエリ実行部１１１が実行する処理を示すフローチャートである。
【００４８】
図６（ａ）に示すように、「商品テーブルおよび売上テーブルから、価格が１０００００円以上の商品で、商品テーブルの商品ＩＤと売上テーブルの商品ＩＤが等しいものについて、商品種別とメーカーを抽出する」ことを意味するＳＱＬコマンド６０１を入力されたクエリ実行部１１１は、フロントＤＢサーバ１０のデータ保存メモリ領域１２１に記憶されたデータのみでＳＱＬコマンド６０１を実行する（図７・ステップＳ７０１）。
【００４９】
まず、インデックス売上テーブル４１０から「価格が１０００００円以上」の条件に該当するものを抽出して図６（ｂ）に示す第１の中間データ６１０を抽出する。そこから続けて、第１の中間データ６１０にインデックス商品テーブル４００を商品ＩＤ３００ａをキーとして結合して、図６（ｃ）に示す第２の中間データ６２０とする。これを、出力対象である商品種別３００ｂとメーカー３００ｃとだけを残したテーブルとして、図６（ｄ）に示す最終中間データ６３０とする。なお、図６（ｃ）に示した第２の中間データ６２０では、紙面の都合で一部の列の記載を省略している。
【００５０】
この最終中間データ６３０をクエリ実行部１１１が中間データ領域１２３に記憶したことを受けた実データ照会部１１３は、最終中間データ６３０にあるインデックス番号に相当する実データがいずれのバックエンドＤＢサーバ２１〜２３に記憶されているかを表情報管理部１１２に問い合わせる（図７・ステップＳ７０２）。表情報管理部１１２は、スキーマ情報領域１２２のデータ配置テーブル４８０を参照して、実データの記憶されているバックエンドＤＢサーバ２１〜２３の所在を返却する。
【００５１】
これを受けた実データ照会部１１３は、返却されてきた結果に基づいてバックエンドＤＢサーバ２１〜２３にインデックス番号に相当する実データを問い合わせて取得する（図７・ステップＳ７０３）。商品種別３００ｂはバックエンドＤＢサーバ２２に、メーカー３００ｃはバックエンドＤＢサーバ２１に各々、実データが記憶されているので、その各々の実データを取得した後、クエリ実行部１１１が取得したデータでインデックスを置き換えてクライアントコンピュータ４０に対して出力し（図７・ステップＳ７０４）、処理を終了する。
【００５２】
図８は、図６〜７に示した処理によって出力された最終出力データ６４０を示す説明図である。このように、入力されたＳＱＬコマンド６０１に対して、フロントメモリＤＢサーバ１０単体で処理可能なところまで問い合わせを実行して得られた最終中間データ６３０を中間データ領域１２３に格納し、そこにあるインデックス番号に相当する実データを各バックエンドＤＢサーバ２１〜２３に問い合わせて取得し、最終中間データ６３０をこの実データに置き換えて最終出力データ６４０とする。
【００５３】
本実施形態によれば、表の結合処理ではグループ列で実データやインデックスが共通化されているため、フロントメモリＤＢサーバ１０にあるインデックス番号だけで結合演算を行うことが可能である。あとは最終出力時に実データを取得する処理以外で各バックエンドＤＢサーバ２１〜２３への問い合わせは発生しないので、このデータの問い合わせに伴うデータ転送量の増大および処理速度の低下を最低限に抑制することが可能となる。
【００５４】
図９は、図１に示した分散メモリデータベースシステム１に入力される別のＳＱＬコマンド８０１の例を示す説明図である。このＳＱＬコマンド８０１は、「商品テーブルで、商品種別が『ＰＣ』であるデータの件数を取得する」という処理を意味する。このＳＱＬコマンド８０１を入力されたクエリ実行部１１１は、商品種別３００ｂ＝「ＰＣ」をこのデータが記憶されたバックエンドＤＢサーバ２２に送信し、そのインデックス番号を照会して取得する。そしてクエリ実行部１１１は、返信されたインデックス番号を用いてその件数を算出する。
【００５５】
このように、図６〜８に記載したフロントメモリＤＢサーバ１０からバックエンドＤＢサーバ２１〜２３に対して「インデックス番号に相当する実データを照会して取得する」処理だけではなく、これとは逆に「実データに相当するインデックス番号を照会して取得する」処理も、ＳＱＬコマンドの内容によっては考え得ることである。
【００５６】
（第１の実施形態の全体的な動作）
次に、上記の実施形態の全体的な動作について説明する。本実施形態に係るデータベース用データ処理方法は、フロントメモリデータベースサーバ１０と、単数もしくは複数台のバックエンドデータベースサーバ２１とが相互に接続された分散メモリデータベースシステムにあって、フロントメモリデータベースサーバ１０があらかじめ備える第１の記憶手段１０２に、あらかじめ入力されたデータテーブルをインデックス番号に置換したインデックステーブルとして保存すると共に、データテーブルの中で集計処理対象となる列であるフロントインデックス列およびインデックス番号に対応する実データがいずれのバックエンドデータベースサーバに記憶されているかの情報であるスキーマ情報を第１の記憶手段に同時に保存し、バックエンドデータベースサーバ２１があらかじめ備える第１の記憶手段２０２に、データテーブルの列ごとにインデックス番号に対応する実データをあらかじめ保存し、インデックステーブルおよびフロントインデックス列に対してフロントメモリデータベースサーバのクエリ実行部がユーザに入力されたクエリを実行して中間データを作成し（図７・ステップＳ７０１）、スキーマ情報に基づいてインデックス番号に対応する実データが記憶されているバックエンドデータベースサーバをフロントメモリデータベースサーバの表情報管理部が特定し（図７・ステップＳ７０２）、特定されたバックエンドデータベースサーバにインデックス番号に対応する実データをフロントメモリデータベースサーバの実データ照会部が照会し（図７・ステップＳ７０３）、フロントメモリデータベースサーバから照会を受けたインデックス番号に対応する実データをバックエンドデータベースサーバのカラムデータ管理部が返信し、中間データ中のインデックス番号をフロントメモリデータベースサーバのクエリ実行部が実データに置換して出力する（図７・ステップＳ７０４）。
【００５７】
ここで、上記各動作ステップについては、これをコンピュータで実行可能にプログラム化し、これらを前記各ステップを直接実行するコンピュータであるフロントメモリデータベースサーバ１０およびバックエンドデータベースサーバ２１に実行させるようにしてもよい。
この構成および動作により、本実施形態は以下のような効果を奏する。
【００５８】
本実施形態によれば、１台のサーバでは取り扱うことができない大容量のデータを分散メモリデータベースとして取り扱うことができる。その理由は、全ての列の実データをバックエンドＤＢサーバのメモリ上に分散して保有し、フロントメモリＤＢサーバにインデックス情報やデータ量の少ない数値データのみを保有することで、全ての表の情報を１台のサーバに集約しつつ、多くのデータを保有することができる。特に文字列やバイト列の様な１レコードのデータ量が多い列を多く含む場合に、演算処理を迅速に行うことが可能となる。
【００５９】
かつ、本実施形態によれば、データベース上でのデータ列の結合処理や集計処理で、速度の劣化を最小限に抑えることができる。その理由は、フロントメモリＤＢサーバにはインデックス番号という形で全ての表情報を保有しているため、このフロントメモリＤＢサーバが保有する情報のみで結合処理を行うことができる。また、各データをカラム単位にソートした形で格納しているため、水平分割している場合に必要となる各ＤＢサーバ間の通信は必要なく、列に対する検索処理命令の際にフロントサーバからバックエンドＤＢサーバに対して通信を行うだけでよい。また、検索結果が中間結果を求めるためのものであれば、列番号を返却するだけでよいので、実データを返却するよりも通信量を削減することができるという効果もある。
【００６０】
上記説明では、フロントインデックス列である価格３１０ｃに対して「価格が１０００００円以上」の条件に該当するものを抽出するという演算を行ったが、たとえば「商品ＩＤとの売り上げ金額」を集計して、それをたとえば「メーカーごと」「商品種別ごと」などのように観点を変えて売り上げ金額を抽出集計するなどのような演算も、ＳＱＬコマンドによって可能である。
【００６１】
これまで本発明について図面に示した特定の実施形態をもって説明してきたが、本発明は図面に示した実施形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができる。
【００６２】
上述した各々の実施形態について、その新規な技術内容の要点をまとめると、以下のようになる。なお、上記実施形態の一部または全部は、新規な技術として以下のようにまとめられるが、本発明は必ずしもこれに限定されるものではない。
【００６３】
（付記１）  フロントメモリデータベースサーバと、単数もしくは複数台のバックエンドデータベースサーバとが相互に接続された分散メモリデータベースシステムであって、
前記フロントメモリデータベースサーバが、
あらかじめ入力されたデータテーブル内のデータをインデックス番号に置換したインデックステーブル，前記データテーブルの中で集計処理対象となる列であるフロントインデックス列，および前記インデックス番号に対応する実データがいずれの前記バックエンドデータベースサーバに記憶されているかの情報であるスキーマ情報を記憶する第１の記憶手段と、
前記インデックステーブルおよび前記フロントインデックス列に対してユーザに入力されたクエリを実行して中間データを作成するクエリ実行部と、
前記スキーマ情報に基づいて前記インデックス番号に対応する前記実データが記憶されている前記バックエンドデータベースサーバを特定する表情報管理部と、
特定された前記バックエンドデータベースサーバに前記インデックス番号に対応する実データを照会してこれを取得する実データ照会部と
を備え、
前記バックエンドデータベースサーバの各々が、
前記フロントメモリデータベースサーバにあらかじめ入力された前記データテーブルの列ごとに前記インデックス番号に対応する実データを保存する第２の記憶手段と、
前記フロントメモリデータベースサーバから前記インデックス番号について照会を受けた場合にこのインデックス番号に対応する前記実データを返信するカラムデータ管理部と
を備え、
前記フロントメモリデータベースサーバの前記クエリ実行部が、前記中間データ中の前記インデックス番号を取得された前記実データに置換して出力する機能を有する
ことを特徴とする分散メモリデータベースシステム。
【００６４】
（付記２）  前記バックエンドデータベースサーバの前記第２の記憶手段が、前記インデックス番号に対応する前記実データを重複を排除した形でソートして記憶していることを特徴とする、付記１に記載の分散メモリデータベースシステム。
【００６５】
（付記３）  前記フロントメモリデータベースサーバの前記第１の記憶手段が、複数個の前記インデックステーブルを記憶しており、
前記クエリ実行部が、前記クエリの実行内容に応じて前記複数個のインデックステーブルに対して結合処理を行う機能を有することを特徴とする、付記１に記載の分散メモリデータベースシステム。
【００６６】
（付記４）  前記フロントメモリデータベースサーバの前記第１の記憶手段が、前記データテーブルの中で前記フロントインデックス列および前記結合処理のキーとなるグループ列のいずれにも該当しない列のうち少なくとも１列を直接データ列として記憶していることを特徴とする、付記３に記載の分散メモリデータベースシステム。
【００６７】
（付記５）  単数もしくは複数台のバックエンドデータベースサーバと相互に接続されて分散メモリデータベースシステムを構成するフロントメモリデータベースサーバであって、
あらかじめ入力されたデータテーブル内のデータをインデックス番号に置換したインデックステーブル、前記データテーブルの中で集計処理対象となる列であるフロントインデックス列、および前記インデックス番号に対応する実データがいずれの前記バックエンドデータベースサーバに記憶されているかの情報であるスキーマ情報を記憶する第１の記憶手段と、
前記インデックステーブルおよび前記フロントインデックス列に対してユーザに入力されたクエリを実行して中間データを作成するクエリ実行部と、
前記スキーマ情報に基づいて前記インデックス番号に対応する前記実データが記憶されている前記バックエンドデータベースサーバを特定する表情報管理部と、
特定された前記バックエンドデータベースサーバに前記インデックス番号に対応する実データを照会してこれを取得する実データ照会部とを備え、
前記クエリ実行部が、前記中間データ中の前記インデックス番号を取得された前記実データに置換して出力する機能を有する
ことを特徴とするフロントメモリデータベースサーバ。
【００６８】
（付記６）  フロントメモリデータベースサーバと、単数もしくは複数台の複数台のバックエンドデータベースサーバとが相互に接続された分散メモリデータベースシステムにあって、
前記フロントメモリデータベースサーバがあらかじめ備える第１の記憶手段に、あらかじめ入力されたデータテーブル内のデータをインデックス番号に置換したインデックステーブルとして記憶すると共に、前記データテーブルの中で集計処理対象となる列であるフロントインデックス列および前記インデックス番号に対応する実データがいずれの前記バックエンドデータベースサーバに記憶されているかの情報であるスキーマ情報を前記第１の記憶手段に同時に記憶し、
前記バックエンドデータベースサーバがあらかじめ備える第１の記憶手段に、前記データテーブルの列ごとに前記インデックス番号に対応する実データをあらかじめ記憶し、
前記インデックステーブルおよび前記フロントインデックス列に対して前記フロントメモリデータベースサーバのクエリ実行部がユーザに入力されたクエリを実行して中間データを作成し、
前記スキーマ情報に基づいて前記インデックス番号に対応する前記実データが記憶されている前記バックエンドデータベースサーバを前記フロントメモリデータベースサーバの表情報管理部が特定し、
特定された前記バックエンドデータベースサーバに前記インデックス番号に対応する前記実データを前記フロントメモリデータベースサーバの実データ照会部が照会し、
前記フロントメモリデータベースサーバから照会を受けたインデックス番号に対応する実データを前記バックエンドデータベースサーバのカラムデータ管理部が返信し、
前記中間データ中の前記インデックス番号を前記フロントメモリデータベースサーバの前記クエリ実行部が前記実データに置換して出力する
ことを特徴とするデータベース用データ処理方法。
【００６９】
（付記７）  あらかじめ入力されたデータテーブル内のデータをインデックス番号に置換したインデックステーブル，前記データテーブルの中で集計処理対象となる列であるフロントインデックス列，および前記インデックス番号に対応する実データがいずれの前記バックエンドデータベースサーバに記憶されているかの情報であるスキーマ情報を記憶する第１の記憶手段を有するフロントメモリデータベースサーバと、前記データテーブルの列ごとに前記インデックス番号に対応する実データを記憶する第２の記憶手段を有する単数もしくは複数台のバックエンドデータベースサーバとが相互に接続された分散メモリデータベースシステムにあって、
前記フロントメモリデータベースサーバがあらかじめ備えるコンピュータに、
前記インデックステーブルおよび前記フロントインデックス列に対してユーザに入力されたクエリを実行して中間データを作成する手順、
前記スキーマ情報に基づいて前記インデックス番号に対応する前記実データが記憶されている前記バックエンドデータベースサーバを特定する手順、
特定された前記バックエンドデータベースサーバに前記実データを照会してこれを受信する手順、
および前記中間データ中の前記インデックス番号を受信した前記実データに置換して出力する手順
を実行させることを特徴とするデータベース用データ処理プログラム。
【産業上の利用可能性】
【００７０】
本発明はデータベースを利用するコンピュータシステム、特に分散メモリを使用するデータベースシステムに幅広く適用できる。
【符号の説明】
【００７１】
１  分散メモリデータベースシステム
１０  フロントメモリＤＢサーバ
２１、２２、２３  バックエンドＤＢサーバ
３０  内部ネットワーク
４０  クライアントコンピュータ
１０１、２０１  プロセッサ
１０２、２０２  記憶手段
１０３、２０３  通信手段
１１１  クエリ実行部
１１２  表情報管理部
１１３  実データ照会部
１２１  データ保存メモリ領域
１２２  スキーマ情報領域
１２３  中間データ領域
２１１、２２１、２３１  カラムデータ管理部
２１２、２２２、２３２  カラムデータ保存メモリ領域
３００  商品テーブル
３００ａ  商品ＩＤ（グループ列）
３１０  売上テーブル
３１０ｂ  数量（直接データ列）
３１０ｃ  価格（フロントインデックス列）
４００  インデックス商品テーブル
４１０  インデックス売上テーブル
４２０  価格テーブル
４３０  メーカーテーブル
４４０  商品種別テーブル
４５０  売上ＩＤテーブル
４６０  発売年テーブル
４７０  商品ＩＤテーブル
４８０  データ配置テーブル
６０１  ＳＱＬコマンド
６１０、６２０、６３０  中間データ
６４０  最終出力データ
【図１】
0005464017.tif 000002
【図２】
0005464017.tif 000003
【図３】
0005464017.tif 000004
【図４】
0005464017.tif 000005
【図５】
0005464017.tif 000006
【図６】
0005464017.tif 000007
【図７】
0005464017.tif 000008
【図８】
0005464017.tif 000009
【図９】
0005464017.tif 000010