(57)【要約】 １又は複数のデータベースサーバと、１又は複数のジョブ実行サーバと、スケジュールサーバと、を備えた計算機システムであって、１又は複数のデータベースサーバの各々は、当該データベースサーバの管理下のデータベース内のレコードに含まれるキー値の範囲を複数の区間に分割し、分割された各区間のレコードの分布情報を取得し、スケジュールサーバは、１又は複数のデータベースサーバの各々の管理下のデータベース内のレコードに含まれるキー値の範囲を示すデータベースサーバ構成情報を保持し、取得されたレコードの分布情報と、当該スケジュールサーバが保持するデータベースサーバ構成情報とに基づいて、同一のキー値の範囲に含まれる複数の区間を組み合わせて複数の分割範囲を生成し、生成された分割範囲毎に、当該分割範囲のレコードを取得すべきレコードとして示すレコード取得範囲パラメータを生成する。
2012137347.tif 000002
【特許請求の範囲】
【請求項１】
データベースへのレコードの入出力処理を実行する１又は複数のデータベースサーバと、前記入出力処理を含むジョブを各々実行する１又は複数のジョブ実行サーバと、前記１又は複数のジョブ実行サーバが実行するジョブをスケジューリングするスケジュールサーバと、を備えた計算機システムであって、
前記１又は複数のデータベースサーバ、前記１又は複数のジョブ実行サーバ、及び前記スケジュールサーバの各々は、プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、を備え、
前記１又は複数のデータベースサーバの各々は、当該データベースサーバの管理下のデータベース内のレコードに含まれるキー値の範囲を複数の区間に分割し、前記分割された各区間のレコードの分布情報を取得し、
前記スケジュールサーバは、
前記１又は複数のデータベースサーバの各々の管理下のデータベース内のレコードに含まれるキー値の範囲を示すデータベースサーバ構成情報を保持し、
取得された前記レコードの分布情報と、当該スケジュールサーバが保持する前記データベースサーバ構成情報とに基づいて、同一のキー値の範囲に含まれる複数の前記区間を組み合わせて複数の分割範囲を生成し、生成された分割範囲毎に、当該分割範囲のレコードを取得すべきレコードとして示すレコード取得範囲パラメータを生成することを特徴とする計算機システム。
【請求項２】
前記スケジュールサーバは、生成された前記レコード取得範囲パラメータと、当該レコード取得範囲パラメータによって指定されるレコードの入出力処理を実行可能なデータベースサーバとの対応関係を示す管理情報を出力することを特徴とする請求項１に記載の計算機システム。
【請求項３】
前記管理情報は、さらに、前記データベースサーバが前記指定されるレコードの入出力処理を実行中か否かの情報を含み、
前記スケジュールサーバは、所定のレコード取得範囲パラメータによって指定されるレコードの入出力処理を実行中のデータベースサーバが存在する場合に、当該実行中のデータベースサーバによる他のレコードの入出力処理を含むジョブの実行を規制することを特徴とする請求項２に記載の計算機システム。
【請求項４】
前記スケジュールサーバは、生成された前記レコード取得範囲パラメータを、当該レコード取得範囲パラメータによって指定されるレコードの入出力処理を含むジョブを実行するジョブ実行サーバに送信し、
送信された前記レコード取得範囲パラメータを受信したジョブ実行サーバは、受信した前記レコード取得範囲パラメータによって指定されるレコードの入出力処理を実行するデータベースサーバに、当該指定されるレコードの取得を要求することを特徴とする請求項１に記載の計算機システム。
【請求項５】
前記１又は複数のデータベースサーバの各々は、当該データベースサーバの管理下のデータベース内のレコードに含まれるキー値の範囲を、前記１又は複数のジョブ実行サーバが実行するジョブの数より多数の区間に分割することを特徴とする請求項１に記載の計算機システム。
【請求項６】
前記スケジュールサーバは、同一のキー値の範囲に含まれる複数の前記区間を、組み合わせて生成される各分割範囲のレコード数が所定数より小さくなるよう組み合わせることを特徴とする請求項１に記載の計算機システム。
【請求項７】
データベースへのレコードの入出力処理を実行する１又は複数のデータベースサーバと、前記入出力処理を含むジョブを各々実行する１又は複数のジョブ実行サーバと、前記１又は複数のジョブ実行サーバが実行するジョブをスケジューリングするスケジュールサーバと、を備えた計算機システムであって、
前記１又は複数のデータベースサーバ、前記１又は複数のジョブ実行サーバ、及び前記スケジュールサーバの各々は、プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、を備え、
前記スケジュールサーバは、
前記１又は複数のデータベースサーバの各々の管理下のデータベース内のレコードに含まれるキー値の範囲を示すデータベースサーバ構成情報を保持し、
所定のレコード群を前記１又は複数のデータベースサーバの各々の管理下のデータベースに格納する場合に、当該スケジュールサーバが保持する前記データベースサーバ構成情報に基づいて、当該所定のレコード群に含まれるレコードのうちの同一のキー値の範囲に含まれるレコードを組み合わせて、複数の分割レコード群を生成することを特徴とする計算機システム。
【請求項８】
前記スケジュールサーバは、生成された前記分割レコード群と、当該分割レコード群に含まれるレコードの入出力処理を実行可能なデータベースサーバとの対応関係を示す管理情報を出力することを特徴とする請求項７に記載の計算機システム。
【請求項９】
前記管理情報は、さらに、前記データベースサーバが前記分割レコード群に含まれるレコードの入出力処理を実行中か否かの情報を含み、
前記スケジュールサーバは、所定の分割レコード群に含まれるレコードの入出力処理を実行中のデータベースサーバが存在する場合、当該実行中のデータベースサーバによる他の分割レコード群に含まれるレコードの入出力処理を含むジョブの実行を規制することを特徴とする請求項８に記載の計算機システム。
【請求項１０】
前記スケジュールサーバは、生成された前記分割レコード群を、当該分割レコード群に含まれるレコードの入出力処理を含むジョブを実行するジョブ実行サーバに送信し、
送信された前記分割レコード群を受信したジョブ実行サーバは、受信した前記分割レコード群に含まれるレコードの入出力処理を実行するデータベースサーバに、当該分割レコード群に含まれるレコードの格納を要求することを特徴とする請求項７に記載の計算機システム。
【請求項１１】
前記スケジュールサーバは、前記所定のレコード群に含まれるレコードのうちの同一のキー値の範囲に含まれるレコードを、組み合わせて生成される分割レコード群のレコード数が所定数より小さくなるよう組み合わせることを特徴とする請求項７に記載の計算機システム。
【請求項１２】
データベースへのレコードの入出力処理を実行する１又は複数のデータベースサーバと、前記入出力処理を含むジョブを各々実行する１又は複数のジョブ実行サーバと、前記１又は複数のジョブ実行サーバが実行するジョブをスケジューリングするスケジュールサーバと、を備えた計算機システムにおける並列分散処理方法であって、
前記１又は複数のデータベースサーバ、前記１又は複数のジョブ実行サーバ、及び前記スケジュールサーバの各々は、プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、を備え、
前記スケジュールサーバは、
前記１又は複数のデータベースサーバの各々の管理下のデータベース内のレコードに含まれるキー値の範囲を示すデータベースサーバ構成情報を前記メモリに保持し、
前記方法は、
前記１又は複数のデータベースサーバの各々が、当該データベースサーバの管理下のデータベース内のレコードに含まれるキー値の範囲を複数の区間に分割し、前記分割された各区間のレコードの分布情報を取得する手順と、
前記スケジュールサーバが、取得された前記レコードの分布情報と、当該スケジュールサーバが保持する前記データベースサーバ構成情報とに基づいて、同一のキー値の範囲に含まれる複数の前記区間を組み合わせて複数の分割範囲を生成し、生成された分割範囲毎に、当該分割範囲のレコードを取得すべきレコードとして示すレコード取得範囲パラメータを生成する手順と、
を含むことを特徴とする並列分散処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システムに関し、特に、データベースの入出力を伴うバッチジョブの並列分散処理を実行する計算機システムに関する。
【背景技術】
【０００２】
大量のデータを処理するバッチジョブ（バッチ処理）が動作する計算機システムにおいて、バッチジョブの高速化に関する各種技術が知られている（特許文献１、２参照）。【０００３】
特許文献１には、処理対象データのデータ量に応じて、処理対象データを複数の分割データに分割し、バッチジョブを複数の分割ジョブに分割し、各分割ジョブに各分割データを割り当てて、多重走行させるジョブの並列分散処理方法が開示されている。【０００４】
特許文献２には、ジョブの分割による並列分散処理を実行する際、利用可能なリソース群に対して分割ジョブを最適に割り当てることによって、各分割ジョブの処理時間を均等化し、ジョブの実行を高速化する方法が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−１４８４５１号公報
【特許文献２】特開２００７−２６４７９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、上記バッチジョブには、データベースへの大量のデータの入出力を伴うジョブも存在する。例えば、データベースに格納されたデータを抽出して、抽出されたデータの加工・集計・帳票作成などを実行するジョブである。また例えば、データベースにデータを格納する前に、格納すべきデータの重複チェックや加工を実行するジョブなどである。【０００７】
しかしながら、このようなデータベースへのデータの入出力を伴うジョブは、上記特許文献１や特許文献２に開示された手法では、十分に高速化できないという問題があった。これは、ＤＢサーバへのアクセス競合が発生するためである。ＤＢサーバとは、データベースへのデータの入出力を実行する計算機である。【０００８】
すなわち、バッチジョブとデータベースへのデータの入出力処理の負荷比や、障害対応を考慮して、バッチジョブを実行するジョブ実行サーバとＤＢサーバの関係を固定化せずに、且つ、両サーバを異なる個数設けた場合、ＤＢサーバへのアクセス競合や特定のＤＢサーバへの処理の集中が発生し、システム性能が低下する。また、入力されるデータがデータベースへ入力されるデータであるため、最適分割数の判断や分割後の各データの平準化が困難である。【０００９】
なお、ＤＢサーバへのアクセス競合を回避する方法として、例えば、地域や複数の店舗等の集合を論理単位として、ＤＢサーバ及びジョブ実行サーバを分離するパーティショニングと呼ばれる手法がある。このパーティショニング手法では、ＤＢサーバ及びジョブ実行サーバの関係を１対１に固定し、両サーバを同じ個数設ける。これにより、複数のジョブ実行サーバから同一のＤＢサーバへのアクセスの発生、すなわちアクセス競合を回避する。【００１０】
しかしながら、ＤＢサーバ又はジョブ実行サーバに障害が発生し、且つ、予備サーバが存在しない場合、ＤＢサーバとジョブ実行サーバの１対１の関係が失われ、特定のＤＢサーバへのアクセス競合が発生してしまう。また、予備サーバを用意する場合、予備サーバのコストがかかってしまう。また、パーティション毎のデータ量のばらつきが大きい場合、パーティション間のデータ移動が困難であるので、特定のジョブ実行サーバの負荷が増加してしまう。また、バッチジョブの負荷とデータベースへのデータの入出力処理の負荷のバランスが取れていない場合は、負荷の高いジョブ実行サーバ又はＤＢサーバがボトルネックとなってしまう。【００１１】
本発明は、上述した課題を考慮したものであって、データベース入出力を伴うジョブの並列分散処理において、データベースへのデータの入出力を実行するＤＢサーバへのアクセス競合を回避するとともに、ジョブを高速実行することが可能な計算機システム及び並列分散処理方法を提供することを主な目的とする。
【課題を解決するための手段】
【００１２】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、データベースへのレコードの入出力処理を実行する１又は複数のデータベースサーバと、前記入出力処理を含むジョブを各々実行する１又は複数のジョブ実行サーバと、前記１又は複数のジョブ実行サーバが実行するジョブをスケジューリングするスケジュールサーバと、を備えた計算機システムであって、前記１又は複数のデータベースサーバ、前記１又は複数のジョブ実行サーバ、及び前記スケジュールサーバの各々は、プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、を備え、前記１又は複数のデータベースサーバの各々は、当該データベースサーバの管理下のデータベース内のレコードに含まれるキー値の範囲を複数の区間に分割し、前記分割された各区間のレコードの分布情報を取得し、前記スケジュールサーバは、前記１又は複数のデータベースサーバの各々の管理下のデータベース内のレコードに含まれるキー値の範囲を示すデータベースサーバ構成情報を保持し、取得された前記レコードの分布情報と、当該スケジュールサーバが保持する前記データベースサーバ構成情報とに基づいて、同一のキー値の範囲に含まれる複数の前記区間を組み合わせて複数の分割範囲を生成し、生成された分割範囲毎に、当該分割範囲のレコードを取得すべきレコードとして示すレコード取得範囲パラメータを生成することを特徴とする。
【発明の効果】
【００１３】
本発明によれば、データベース入出力を伴うジョブの並列分散処理において、データベースへのデータの入出力を実行するＤＢサーバへのアクセス競合を回避するとともに、ジョブを高速実行することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第一実施形態の計算機システムのハードウェア構成例を示す図である。
【図２】本発明の第一実施形態の計算機システムのブロックダイアグラムを示す図である。
【図３】本発明の第一実施形態のＤＢサーバ構成情報の一例を示す図である。
【図４】本発明の第一実施形態のレコード分布情報の一例を示す図である。
【図５】本発明の第一実施形態のレコード分布取得方法指示パラメータの一例を示す図である。
【図６】本発明の第一実施形態のレコード分布管理テーブルの一例を示す図である。
【図７】本発明の第一実施形態の分割データ管理テーブルの一例を示す図である。
【図８】本発明の第一実施形態のレコード分布取得部の制御ロジックを示すフローチャートである。
【図９】本発明の第一実施形態のレコード取得範囲パラメータ生成部の制御ロジックを示すフローチャートである。
【図１０】本発明の第一実施形態のジョブスケジュール部の制御ロジックを示すフローチャートである。
【図１１】本発明の第一の実施形態のジョブプログラム起動部の制御ロジックを示すフローチャートである。
【図１２】本発明の第一実施形態のジョブプログラム部の制御ロジックを示すフローチャートである。
【図１３】本発明の第一実施形態のＤＢ要求受付部の制御ロジックを示すフローチャートである。
【図１４】本発明の第一実施形態のＤＢアクセス部の制御ロジックを示すフローチャートである。
【図１５】本発明の第二実施形態の計算機システムのハードウェア構成例を示す図である。
【図１６】本発明の第二実施形態の計算機システムのブロックダイアグラムを示す図である。
【図１７】本発明の第二実施形態の入力データの一例を示す図である。
【図１８】本発明の第二実施形態の分割データの一例を示す図である。
【図１９】本発明の第二実施形態のデータ分割部の第一の制御ロジックを示すフローチャートである。
【図２０】本発明の第二実施形態のデータ分割部の第二の制御ロジックを示すフローチャートである。
【図２１】本発明の第二実施形態のジョブプログラム部の制御ロジックを示すフローチャートである。
【図２２】本発明の第二実施形態のＤＢ要求受付部の制御ロジックを示すフローチャートである。
【図２３】本発明の第二実施形態のＤＢアクセス部の制御ロジックを示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、本発明の各実施形態について、図面を参照して説明する。
【００１６】
（第一実施形態）
まず、本発明の第一実施形態について説明する。
【００１７】
図１は、本発明の第一実施形態の計算機システム１のハードウェア構成例を示す図である。計算機システム１は、スケジュールサーバ１０と、１つ又は複数のジョブ実行サーバ２０と、１つ又は複数のＤＢサーバ３０とを備える。ＤＢサーバ３０には、記憶装置１５ｃが接続されている。
【００１８】
記憶装置１５ｃは、データベース１００を格納する。データベース１００はレコードの集合である。なお、レコードとは、ジョブプログラム部２１００が取得（入力）し、処理するデータベース１００内のデータの単位である。また、レコード内の特定フィールドの数値又は文字列をキーと呼ぶ。並列実行による処理の高速化のため、データベース１００内のデータの部分集合（レコードセット）である分割データ毎に、複数のプロセスやタスク等の実行単位に分けて処理される。
【００１９】
スケジュールサーバ１０は、主記憶装置１１ａと、ＣＰＵ（Central Processing Unit）１２ａと、通信Ｉ／Ｆ１３ａとを備える。このスケジュールサーバ１０は、各ジョブ実行サーバ２０が実行するジョブをスケジューリングする。本発明の第一実施形態でいうジョブとは、データベース１００に格納されたレコードの取得を伴うジョブである。
【００２０】
主記憶装置１１ａは、レコード取得範囲パラメータ生成部１０００及びジョブスケジュール部１１００の機能を実現する命令コードを含むプログラムを記憶するＲＡＭ（Random Access Memory）等の記憶装置である。この主記憶装置１１ａは、ＤＢサーバ構成情報２００、レコード分布管理テーブル４００及び分割データ管理テーブル５００などのプログラムの実行に必要なファイル、データも記憶する。ＣＰＵ１２ａは、主記憶装置１１ａに格納されたプログラムをロードして解釈実行する演算処理装置である。通信Ｉ／Ｆ１３ａは、通信路２を介して、ジョブ実行サーバ２０及びＤＢサーバ３０との間で実行要求や実行結果を送受信するインタフェース部である。
【００２１】
レコード取得範囲パラメータ生成部１０００は、データベース１００から取得すべきレコードの範囲を決定するパラメータを生成する。また、生成されたパラメータに基づいて、分割データ管理テーブル５００を生成する。このレコード取得範囲パラメータ生成部１０００の動作については、詳細に後述する。
【００２２】
ジョブスケジュール部１１００は、レコード取得範囲パラメータ生成部１０００によって生成されたパラメータ（分割データ管理テーブル５００）に基づいて、ジョブ実行サーバ２０が実行するジョブをスケジューリングする。また、ジョブ実行サーバ２０に、ジョブプログラム部２１００の実行を要求する。このジョブスケジュール部１１００の動作については、詳細に後述する。
【００２３】
ＤＢサーバ構成情報２００は、各ＤＢサーバ３０の構成情報、すなわち各ＤＢサーバ３０とデータベース１００内のレコードとの対応関係を示す情報を管理する。このＤＢサーバ構成情報２００は、任意のＤＢサーバ３０又はジョブ実行サーバ２０によって収集される。また、このＤＢサーバ構成情報２００は、スケジュールサーバ１０、ジョブ実行サーバ２０及びＤＢサーバ３０の全てにおいて、同一の内容で格納される。このＤＢサーバ構成情報２００については、詳細に後述する。
【００２４】
レコード分布管理テーブル４００は、データベース１００内のレコードの分布を示す情報を管理するテーブルである。レコードの分布を示す情報とは、例えばキーレンジ（キー値の範囲）毎のレコード数である。このレコード分布管理テーブル４００については、詳細に後述する。
【００２５】
分割データ管理テーブル５００は、分割データの範囲や処理状態などの分割データに関する情報を管理するテーブルである。この分割データ管理テーブル５００については、詳細に後述する。
【００２６】
ジョブ実行サーバ２０は、主記憶装置１１ｂと、ＣＰＵ１２ｂと、通信Ｉ／Ｆ１３ｂとを備える。
【００２７】
主記憶装置１１ｂは、ジョブプログラム起動部２０００、ジョブプログラム部２１００及びＤＢ要求受付部２２００の機能を実現する命令コードを含むプログラムを記憶するＲＡＭ等の記憶装置である。この主記憶装置１１ｂは、ＤＢサーバ構成情報２００などのプログラムの実行に必要なファイル、データも記憶する。ＣＰＵ１２ｂは、主記憶装置１１ｂに格納されたプログラムをロードして解釈実行する演算処理装置である。通信Ｉ／Ｆ１３ｂは、通信路２を介して、スケジュールサーバ１０及びＤＢサーバ３０との間で、実行要求やレコード取得要求やレコードを送受信するインタフェース部である。
【００２８】
ジョブプログラム起動部２０００は、スケジュールサーバ１０による要求を受け付けて、ジョブプログラム部２１００を起動する。このジョブプログラム起動部２０００の動作については、詳細に後述する。
【００２９】
ジョブプログラム部２１００は、ジョブプログラム起動部２０００によって起動され、データベース１００内のレコードを処理する。ここでいう処理は、データベース１００からのレコードの取得を伴う処理である。このジョブプログラム部２１００の動作については、詳細に後述する。
【００３０】
ＤＢ要求受付部２２００は、ジョブプログラム部２１００による要求を受け付けて、ＤＢアクセス部３１００に対して、レコード取得などの要求を送信する。このＤＢ要求受付部２２００の動作については、詳細に後述する。
【００３１】
ＤＢサーバ３０は、主記憶装置１１ｃと、ＣＰＵ１２ｃと、通信Ｉ／Ｆ１３ｃと、入出力Ｉ／Ｆ１４ｃとを備える。このＤＢサーバ３０は、入出力Ｉ／Ｆ１４ｃを介して記憶装置１５ｃに接続されている。
【００３２】
主記憶装置１１ｃは、レコード分布取得部３０００及びＤＢアクセス部３１００の機能を実現する命令コードを含むプログラムを記憶するＲＡＭ等の記憶装置である。この主記憶装置１１ｃは、ＤＢサーバ構成情報２００、レコード分布情報３００などのプログラムの実行に必要なファイル、データも記憶する。ＣＰＵ１２ｃは、主記憶装置１１ｃに格納されたプログラムをロードして解釈実行する演算処理装置である。通信Ｉ／Ｆ１３ｃは、通信路２を介して、ジョブ実行サーバ２０とレコード取得要求やレコードを送受信する通信インタフェースである。入出力Ｉ／Ｆ１３ｄは、データベース１００を格納した記憶装置１５ｃを接続するためのインタフェース部である。
【００３３】
レコード分布取得部３０００は、レコード分布取得方法指示パラメータ１１０に従って、レコード分布情報３００を生成する。このレコード分布取得部３０００の動作については、詳細に後述する。
【００３４】
ＤＢアクセス部３１００は、ＤＢ要求受付部２２００によるレコード取得などの要求を受け付けて、データベース１００内のレコードにアクセスする。このＤＢアクセス部３１００の動作については、詳細に後述する。
【００３５】
レコード分布情報３００は、ＤＢサーバ３０が管理するデータベース１００内のレコードの分布を示す情報である。レコードの分布を示す情報とは、例えばキーレンジ毎のレコード数である。このレコード分布情報３００は、ＤＢサーバ３０毎に異なる内容となる。このレコード分布情報３００については、詳細に後述する。
【００３６】
記憶装置１５ｃは、データベース１００、レコード分布取得方法指示パラメータ１１０を格納する。データベース１００は前述の通りである。レコード分布取得方法指示パラメータ１１０は、レコード分布取得部３０００に対し、レコードの分布の取得方法を指示するパラメータである。このレコード分布取得方法指示パラメータ１１０については、詳細に後述する。
【００３７】
図２は、本発明の第一実施形態の計算機システム１のブロックダイアグラムを示す図である。図２を用いて計算機システム１の動作の概要を説明する。
【００３８】
レコード分布取得部３０００は、レコード分布取得方法指示パラメータ１１０に従って、データベース１００内のレコードの分布を示す情報を取得し、レコード分布情報３００として出力する。
【００３９】
レコード取得範囲パラメータ生成部１０００は、各ＤＢサーバ３０からレコード分布情報３００を収集し、収集されたレコード分布情報３００に基づいて、レコード分布管理テーブル４００を作成する。また、ＤＢサーバ構成情報２００とレコード分布管理テーブル４００とに基づいて、分割データ管理テーブル５００を生成する。そうすると、ジョブスケジュール部１１００が、分割データ管理テーブル５００に基づいて、各ジョブ実行サーバ２０が実行するジョブをスケジューリングし、各ジョブ実行サーバ２０のジョブプログラム起動部２０００に、ジョブプログラム部２１００の実行を要求する。
【００４０】
ジョブプログラム起動部２０００は、ジョブプログラム部２１００を起動する。そうすると、起動されたジョブプログラム部２１００は、ＤＢ要求受付部２２００にデータベース１００内のレコードの取得を要求する。レコードの取得要求を受け付けたＤＢ要求受付部２２００は、ＤＢサーバ３０のＤＢアクセス部３１００に、データベース１００内のレコード取得要求を送信する。
【００４１】
ＤＢアクセス部３１００は、ＤＢ要求受付部２２００からの要求に応じて、データベース１００内のレコードを取得し、ＤＢ要求受付部２２００に回答する。
【００４２】
図３は、本発明の第一実施形態のＤＢサーバ構成情報２００の一例を示す図である。ＤＢサーバ構成情報２００では、各ＤＢサーバ３０が管理するデータベース１００内のレコードを示す情報が格納される。
【００４３】
ＤＢサーバ名２０１は、ＤＢサーバ３０を一意に識別する識別子である。管理レコード識別情報２０２は、ＤＢサーバ名２０１に示すＤＢサーバ３０が管理するデータベース１００内のレコードを識別するための情報（図３では、キー「銘柄」のキー値の範囲）である。
【００４４】
なお、ＤＢサーバ３０において複数のプロセスが実行され、レコードの管理がプロセス単位に細分化されている場合、ＤＢサーバ名２０１は、ＤＢサーバ３０を一意に識別する識別子と、プロセスを一意に識別する識別子との組み合わせた識別子であってもよい。図６のＤＢサーバ名４０３、図７のＤＢサーバ名５０３も同様である。
【００４５】
以上のように、ＤＢサーバ構成情報２００では、各ＤＢサーバ３０の管理下のデータベース１００内のレコードに含まれるキー値の範囲を示す情報が格納される。
【００４６】
図４は、本発明の第一実施形態のレコード分布情報３００の一例を示す図である。レコード分布情報３００では、データベース１００内のレコードの分布を示す情報として、キーレンジ毎のレコード数が格納される。
【００４７】
キーレンジ３０１は、レコードのキー値の範囲である。レコード数３０２は、キー値がキーレンジ３０１の範囲内であるレコードの数である。
【００４８】
なお、ＤＢサーバ３０において複数のプロセスが実行され、レコードの管理がプロセス単位に細分化されている場合、レコード分布情報３００のエントリは、プロセスの識別子を含んでもよい。
【００４９】
図５は、本発明の第一実施形態のレコード分布取得方法指示パラメータ１１０の一例を示す図である。レコード分布取得方法指示パラメータ１１０は、レコード分布取得部３０００に対し、データベース１００内のレコードの分布の取得方法を指示するためのパラメータである。
【００５０】
図５に示すレコード分布取得方法指示パラメータ１１０では、データベース１００内のレコードの分布の取得方法として、データベース１００内のレコードの第一キーのレコード内オフセット位置（取得開始位置−取得終了位置）、すなわち各分布（区間）におけるキーの位置が定義されている。図５に示す例では、第一キーのレコード内取得開始位置、取得終了位置として、それぞれ１１番目のカラム、２０番目のカラムが定義されている。
【００５１】
なお、データベース１００内に第一キーが同じレコードが多数存在することが予想される場合は、データベース１００内のレコードの第二キーのレコード内オフセット位置を定義してもよい。図５に示す例では、第二キーのレコード内取得開始位置、取得終了位置として、それぞれ２１番目のカラム、３０番目のカラムが定義されている。
【００５２】
また、レコード分布取得方法指示パラメータ１１０では、分割データのレコード数上限値が定義されている。分割データのレコード数上限値とは、取得されたレコードの分布に基づいて分割データを生成する場合に、１つの分割データに格納するレコード数の上限値である。すなわち、１つの分割データは、このレコード数上限値以下のレコード数を保持することになる。図５に示す例では、分割データのレコード数上限値として２００が定義されている。
【００５３】
また、レコード分布取得方法指示パラメータ１１０では、分割データのキーレンジ幅が定義されている。この分割データのキーレンジ幅は、レコードの分布を取得する場合における各分布（各区間）のキーレンジ幅を決定するための情報である。この分割データのキーレンジ幅を予め定めた整数定数値ｎで除算した値を、各区間のキーレンジ幅とする。図５に示す例では、分割データのキーレンジ幅として１００が定義されている。このキーレンジ幅（＝１００）を整数定数値（＝５）で除算した値（＝２０）を、各区間のキーレンジ幅とした場合、図４に示すように、各区間のキーレンジ幅は２０となる。
【００５４】
なお、分割データのキーレンジ幅の代わりに、各区間のキーレンジ幅を定義してもよい。すなわち、キー値の最小値からキー値の幅毎に１区間として、各区間のキーレンジ幅を求めてもよい。また、分割数を定義してもよい。すなわち、データベース１００全体のキーレンジを分割数で除算し、さらに整数定数値ｎで除算した値を、各区間のキーレンジ幅としてもよい。分割数とは、例えばジョブの分割数であって、各ジョブ実行サーバ２０が実行するサブジョブの数である。その他、このレコード分布取得方法指示パラメータ１１０には、データベース１００を識別する情報が定義されてもよい。
【００５５】
図６は、本発明の第一実施形態のレコード分布管理テーブル４００の一例を示す図である。レコード分布管理テーブル４００は、レコード取得範囲パラメータ生成部１０００によって、各ＤＢサーバ３０のレコード分布情報３００（図４参照）に基づいて生成される。
【００５６】
キーレンジ４０１は、レコードのキー値の範囲である。このキーレンジ４０１には、レコード分布情報３００のキーレンジ３０１が格納される。レコード数４０２は、キー値がキーレンジ４０１の範囲内であるレコードの数である。このレコード数４０２には、レコード分布情報３００のレコード数３０２が格納される。
【００５７】
ＤＢサーバ名４０３には、レコード分布情報３００の管理元のＤＢサーバ３０の名前が格納される。出力済フラグ４０４は、後述する分割データ管理テーブル５００（図７参照）に、キーレンジ４０１の値のキーレンジを含むキーレンジセットのエントリを出力したか否かを識別するためのフラグである。この出力済フラグ４０４には、初期値として「Ｎｏ」が格納される。
【００５８】
図７は、本発明の第一実施形態の分割データ管理テーブル５００の一例を示す図である。分割データ管理テーブル５００は、レコード取得範囲パラメータ生成部１０００によって、レコード分布管理テーブル４００及びＤＢサーバ構成情報２００に基づいて生成される。
【００５９】
分割データ識別子５０１は、分割データを一意に識別するシーケンス番号などの識別子である。キーレンジセット５０２は、分割データ内のレコードのキー値の範囲を組み合わせたセットである。ＤＢサーバ名５０３は、分割データ内のレコードを取得するために接続するレコードの管理元のＤＢサーバ３０の名前である。レコード数５０４は、分割データ内のレコード数を示す。実行状態５０５は、分割データの処理の実行状態として、「実行済」、「実行中」、「未実行」のいずれかが格納される。ジョブ実行サーバ名５０６は、分割データの処理を実行中のジョブ実行サーバ２０を一意に識別する文字列である。
【００６０】
なお、実行状態５０５が「実行済」の場合は、ジョブプログラム部２１００による分割データの処理が完了したことを示す。実行状態５０５が「実行中」の場合は、ジョブスケジュール部１１００がジョブプログラム起動部２０００に分割データの処理を要求したが、ジョブプログラム部２１００による分割データの処理が完了していないことを示す。実行状態５０５が「未実行」の場合は、ジョブスケジュール部１１００からジョブプログラム起動部２０００に分割データの処理を要求していないことを示す。
【００６１】
図８は、本発明の第一実施形態のレコード分布取得部３０００の制御ロジックを示すフローチャートである。
【００６２】
まず、レコード分布取得部３０００は、レコード分布取得方法指示パラメータ１１０を読み込む（ステップ３００１）。ここでは、レコード分布取得方法指示パラメータ１１０を読み込むことによって、レコード分布取得方法指示パラメータ１１０に定義されている各区間におけるキーの位置、分割データのレコード数上限値及び各区間のキーレンジ幅を決定するための分割データのキーレンジ幅などの情報を取得する。
【００６３】
次に、レコード分布取得部３０００は、各区間のキーレンジ（最小値及び最大値）を決定する（ステップ３００２）。ここでは、レコード分布取得方法指示パラメータ１１０において指定された分割データのキーレンジ幅を予め定めた整数定数値ｎで除算した値を、各区間のキーレンジ幅とする。その後、レコードのキー値の最小値からキーレンジ幅毎に各区間のキーレンジを設定する。
【００６４】
なお、１つの分割データのキーレンジセット５０２（図７参照）は、複数の区間のキーレンジを組み合わせることによって生成される。そのため、このステップ３００２では、指定された分割データのキーレンジ幅を整数定数値ｎ（５〜１０程度）で除算することによって、各区間のキーレンジ幅を、分割データのキーレンジ幅よりも小さく設定している。
【００６５】
また、ステップ３００２では、レコード分布取得方法指示パラメータ１１０において分割データのキーレンジ幅の代わりに分割数が指定されている場合は、データベース１００内の全レコードのキー値の「最大値−最小値」を｛（分割数）×（整数定数値ｎ）｝によって除算した値を、各区間のキーレンジ幅としてもよい。
【００６６】
次に、レコード分布取得部３０００は、初期化状態のレコード分布情報３００を生成する（ステップ３００３）。キーレンジ３０１には、ステップ３００２で決定された各区間のキーレンジ（最小値及び最大値）を代入する。レコード数３０２には、初期値０を代入する。
【００６７】
次に、レコード分布取得部３０００は、ステップ３００２で決定された各区間に含まれるレコード数を求め、レコード数３０２に登録する（ステップ３００４）。例えば、データベース１００内の全レコードの各々について、当該レコードのキー値を含むキーレンジ３０１のエントリのレコード数３０２を１加算する。また、データベース１００にレコードを格納する場合に、格納されるレコードのキー値を含むキーレンジ３０１のエントリのレコード数３０２を１加算する。
【００６８】
次に、レコード分布取得部３０００は、所定の区間（キーレンジ３０１）のレコード数３０２が、レコード分布取得方法指示パラメータ１１０で指定された分割データのレコード数上限値より大きい場合、当該区間を細分化する（ステップ３００５）。ここでは、分割データのレコード数上限値より大きい区間のキーレンジ幅を１／ｎに再設定することによって、区間を細分化し、細分化された区間に含まれるレコード数を再カウントする。なお、細分化された区間のキーレンジ幅が１になった場合は、レコード分布取得方法指示パラメータ１１０において指定された第二キーの値で区間を設定する。
【００６９】
以上に示す処理により、レコード分布取得部３０００は、レコード分布取得方法指示パラメータ１１０に基づいて、データベース１００内のレコードに含まれるキー値の範囲を複数の区間に分割し、分割された各区間のレコード数を、レコードの分布を示す情報として取得し、レコード分布情報３００として出力する。
【００７０】
図９は、本発明の第一実施形態のレコード取得範囲パラメータ生成部１０００の制御ロジックを示すフローチャートである。
【００７１】
まず、レコード取得範囲パラメータ生成部１０００は、各ＤＢサーバ３０からレコード分布情報３００を取得する（ステップ１００１）。具体的には、任意のＤＢサーバ３０に記憶されたＤＢサーバ構成情報２００を主記憶装置１１ａにロードし、ＤＢサーバ構成情報２００に登録された各ＤＢサーバ３０から、レコード分布情報３００を取得する。
【００７２】
次に、レコード取得範囲パラメータ生成部１０００は、ステップ１００１で取得された各ＤＢサーバ３０のレコード分布情報３００に基づいて、レコード分布管理テーブル４００を生成する（ステップ１００２）。
【００７３】
具体的には、まずステップ１００１で取得された各ＤＢサーバ３０のレコード分布情報３００のエントリ毎に、レコード分布管理テーブル４００のエントリを生成する。次に、レコード分布情報３００のキーレンジ３０１をキーレンジ４０１に、レコード数３０２をレコード数４０２に代入する。ＤＢサーバ名４０３には、レコード分布情報３００の取得元のＤＢサーバ３０の名称を代入する。出力済フラグ４０４には、初期値として「Ｎｏ」を代入する。
【００７４】
次に、レコード取得範囲パラメータ生成部１０００は、レコード分布管理テーブル４００から、出力済フラグ４０４が「Ｎｏ」の任意のエントリを１つ選択する（ステップ１００３）。
【００７５】
次に、レコード取得範囲パラメータ生成部１０００は、ステップ１００３で選択されたエントリとＤＢサーバ名４０３が一致し、且つ、出力済フラグ４０４が「Ｎｏ」のエントリを、レコード数４０２の合計値が分割データのレコード数上限値に達するまで選択する（ステップ１００４）。
【００７６】
なお、分割データのレコード数上限値は、レコード取得範囲パラメータ生成部１０００が、ＤＢサーバ３０からＤＢサーバ構成情報２００又はレコード分布情報３００を取得する場合に、併せて取得するものとする。また、レコード取得範囲パラメータ生成部１０００が、レコード分布取得方法指示パラメータ１１０を読み込むことによって取得してもよい。
【００７７】
次に、レコード取得範囲パラメータ生成部１０００は、ステップ１００３及びステップ１００４で選択されたレコード分布管理テーブル４００の全エントリの出力済フラグ４０４を「Ｙｅｓ」に変更する（ステップ１００５）。
【００７８】
次に、レコード取得範囲パラメータ生成部１０００は、分割データ管理テーブル５００に新規エントリを追加し、分割データに関する情報を登録する（ステップ１００６）。すなわち、ステップ１００３及びステップ１００４で選択された全エントリのキーレンジ４０１をまとめたキーレンジ（分割データの範囲、すなわち分割範囲）をキーレンジセット５０２に、エントリのＤＢサーバ名４０３をＤＢサーバ名５０３に、各エントリのレコード数４０２の合計値をレコード数５０４に、それぞれ設定する。分割データ識別子５０１には、先頭のエントリを１としたシーケンス番号を設定する。実行状態５０５には、初期値として「未実行」を設定する。
【００７９】
なお、ステップ１００６では、レコード取得範囲パラメータ生成部１０００は、分割データ管理テーブル５００に分割データに関する情報を登録する代わりに、キーレンジセット５０２、ＤＢサーバ名５０３及びレコード数５０４を、ファイルに出力してもよい。この場合、ジョブスケジュール部１１００は、ステップ１１１０（図１０参照）の前に、出力されたファイルから、キーレンジセット５０２、ＤＢサーバ名５０３及びレコード数５０４を読み込み、分割データ管理テーブル５００に新規エントリを追加し、読み込まれた情報を登録する。
【００８０】
次に、レコード取得範囲パラメータ生成部１０００は、レコード分布管理テーブル４００に、出力済フラグ４０４が「Ｎｏ」のエントリがあるか否かを判定する（ステップ１００７）。出力済フラグ４０４が「Ｎｏ」のエントリがある場合（ステップ１００７でＹＥＳ）、ステップ１００３に戻る。一方、出力済フラグ４０４が「Ｎｏ」のエントリがない場合（ステップ１００７でＮＯ）、処理を終了する。
【００８１】
以上に示す処理において、レコード取得範囲パラメータ生成部１０００は、特にステップ１００３〜ステップ１００６により、ＤＢサーバ構成情報２００とレコード分布管理テーブル４００とを参照して、同一のＤＢサーバ３０によって管理されるレコードのキーレンジを、組み合わせ後のレコード数が分割データのレコード数上限値以下で均等となるように組み合わせる。これにより、異なるＤＢサーバ３０によって管理されるレコードが組み合わされ、混在してしまうのを回避できる。その後、組み合わせられたキーレンジの集合であるキーレンジセット５０２と、ＤＢサーバ３０の識別子であるＤＢサーバ名５０３とを対応付けて、分割データ管理テーブル５００に格納する。
【００８２】
図１０は、本発明の第一実施形態のジョブスケジュール部１１００の制御ロジックを示すフローチャートである。
【００８３】
まず、ジョブスケジュール部１１００は、分割データ管理テーブル５００の全エントリを参照し、ＤＢサーバ名５０３が等しいエントリ毎に、実行状態５０５が「実行中」のエントリ数と、実行状態５０５が「未実行」のエントリ数とをカウントする（ステップ１１１０）。
【００８４】
次に、ジョブスケジュール部１１００は、実行状態５０５が「実行中」のエントリ数が０、且つ、実行状態５０５が「未実行」のエントリ数が最も多いＤＢサーバ名５０３を求め、求められたＤＢサーバ名５０３のエントリ群から、実行状態５０５が「未実行」、且つ、レコード数５０４が最も多いエントリを優先的に選択する（ステップ１１１１）。
【００８５】
次に、ジョブスケジュール部１１００は、ステップ１１１２で選択可能なエントリ、すなわち、実行状態５０５が「実行中」のエントリ数が０、且つ、実行状態５０５が「未実行」のエントリ数が０でないＤＢサーバ名５０３のエントリ群がある場合、次のステップ１１１３〜ステップ１１１７を実行する（ステップ１１１２）。
【００８６】
なお、ステップ１１１２では、各ＤＢサーバ３０において複数のプロセスが実行され、各ＤＢサーバ３０が同時に複数の接続を許容でき、複数のデータベース入出力を並列実行できる場合は、実行状態５０５が「実行中」のエントリ数が許容できる接続数未満の数であるＤＢサーバ３０のエントリを選択してもよい。
【００８７】
ステップ１１１３に移行した場合、ジョブスケジュール部１１００は、分割データ管理テーブル５００の全エントリを参照し、ジョブ実行サーバ名５０６毎にエントリ数をカウントし、実行状態５０５が「実行中」のエントリ数が、予め定めた多重度（同一のジョブ実行サーバ２０で同時に実行できるジョブプログラム部２１００の実行単位の最大数）に達していないジョブ実行サーバ名５０６を求める（ステップ１１１３）。
【００８８】
ジョブスケジュール部１１００は、実行状態５０５が「実行中」のエントリ数が多重度より小さいジョブ実行サーバ名５０６がある場合（ステップ１１１４でＹＥＳ）、ステップ１１１５に移行する。一方、実行状態５０５が「実行中」のエントリ数が多重度より少ないジョブ実行サーバ名５０６がない場合（ステップ１１１４でＮＯ）、ステップ１１１８に移行する。
【００８９】
ステップ１１１５に移行した場合、ジョブスケジュール部１１００は、ステップ１１１３で選択されたジョブ実行サーバ２０のジョブプログラム起動部２０００に、ステップ１１１１で選択されたエントリの情報を送信するとともに、ジョブプログラム部２１００の実行を要求する（ステップ１１１５）。ここでいうエントリの情報とは、当該エントリの分割データ識別子５０１とキーレンジセット（レコード取得範囲パラメータ）５０２の情報である。
【００９０】
次に、ジョブスケジュール部１１００は、ステップ１１１１で選択されたエントリの実行状態５０５を「実行中」に変更し、ジョブ実行サーバ名５０６に、実行要求先のジョブ実行サーバ２０の名称を代入する（ステップ１１１６）。
【００９１】
次に、ジョブスケジュール部１１００は、分割データ管理テーブル５００に実行状態５０５が「未実行」のエントリがあるか否か判定する（ステップ１１１７）。実行状態５０５が「未実行」のエントリがある場合（ステップ１１１７でＹＥＳ）、ステップ１１１０に戻る。一方、実行状態５０５が「未実行」のエントリがない場合（ステップ１１１７でＮＯ）、ステップ１１１８に移行する。
【００９２】
ステップ１１１８に移行した場合、ジョブスケジュール部１１００は、ジョブプログラム起動部２０００から、分割データの処理完了通知を待つ（ステップ１１１８）。その後、ジョブプログラム起動部２０００から処理完了通知を受けたジョブスケジュール部１１００は、処理が完了した分割データのエントリの実行状態５０５を「実行済」に変更し、ジョブ実行サーバ名５０６に代入されたジョブ実行サーバ２０の名称を消去する（ステップ１１１９）。
【００９３】
次に、ジョブスケジュール部１１００は、分割データ管理テーブル５００に実行状態５０５が「未実行」のエントリがあるか否か判定する（ステップ１１２０）。実行状態５０５が「未実行」のエントリがある場合（ステップ１１２０でＹＥＳ）、ステップ１１１０に戻る。一方、実行状態５０５が「未実行」のエントリがない場合（ステップ１１２０でＮＯ）、処理を終了する。
【００９４】
以上に示す処理により、ジョブスケジュール部１１００は、分割データ管理テーブル５００から、実行状態５０５が「未実行」のエントリを１つずつ取り出す。次に、取り出されたエントリの情報を、ジョブプログラム起動部２０００に送信し、ジョブプログラム部２１００の実行を要求する。なお、ステップ１１１０〜１１１２の処理により、同一のＤＢサーバ３０が同じエントリの処理を同時に実行することを規制している。これにより、ジョブ実行サーバ２０及びＤＢサーバ３０の関係が固定されない、又は、同数でない場合であっても、各ＤＢサーバ３０へのアクセス競合を回避することができる。
【００９５】
図１１に、本発明の第一の実施形態のジョブプログラム起動部２０００の制御ロジックを示すフローチャートである。
【００９６】
まず、ジョブプログラム起動部２０００は、ジョブスケジュール部１１００からの要求を待つ（ステップ２００１）。ジョブスケジュール部１１００から要求を受けたジョブプログラム起動部２０００は、ジョブスケジュール部１１００から、分割データ識別子５０１及びキーレンジセット５０２を受信する（ステップ２００２）。
【００９７】
次に、ジョブプログラム起動部２０００は、ステップ２００２で受信した分割データ識別子５０１及びキーレンジセット５０２を、ジョブプログラム部２１００が参照可能な領域（環境変数など）に設定し、ジョブプログラム部２１００を起動する（ステップ２００３）。
【００９８】
次に、ジョブプログラム起動部２０００は、ジョブプログラム部２１００によるデータベース１００内の分割データの処理の完了通知を待つ（ステップ２００４）。ジョブプログラム部２１００から処理完了通知を受けたジョブプログラム起動部２０００は、ジョブスケジュール部１１００に、処理が完了した分割データの分割データ識別子５０１を送信するとともに、分割データの処理完了を通知する（ステップ２００５）。
【００９９】
図１２に、本発明の第一実施形態のジョブプログラム部２１００の制御ロジックを示すフローチャートである。
【０１００】
まず、ジョブプログラム部２１００は、ジョブプログラム起動部２０００によって環境変数などに設定されたキーレンジセット５０２を読み込む（ステップ２１０１）。次に、ジョブプログラム部２１００は、ステップ２１０１で読み込まれたキーレンジセット５０２を、ＳＱＬ（Structured Query Language）のＳＥＬＥＣＴ文のオペランドに埋め込むことによって、データベース１００内のレコード取得用のＳＱＬ文を生成する（ステップ２１０２）。
【０１０１】
次に、ジョブプログラム部２１００は、ステップ２１０２で生成されたＳＱＬ文を、ＤＢ要求受付部２２００に送信するとともに、ＳＱＬ文中のオペランドで指定された範囲のレコードをデータベース１００から取得する要求を、ＤＢ要求受付部２２００に送信する（ステップ２１０３）。その後、ジョブプログラム部２１００は、ＤＢ要求受付部２２００からの応答を待つ。
【０１０２】
次に、ジョブプログラム部２１００は、ＤＢ要求受付部２２００からの応答を受信し、ＤＢ要求受付部２２００による応答結果が格納された応答領域から、取得されたレコードを取り出して、取り出されたレコードに対するプログラム固有の処理を実行する（ステップ２１０４）。ここでいうプログラム固有の処理とは、例えば取り出されたレコードの加工・集計・帳票作成等を実行する処理である。
【０１０３】
以上に示す処理により、ジョブプログラム部２１００は、キーレンジセット５０２を用いて、ＳＱＬのＳＥＬＥＣＴ文などＤＢ要求受付部２２００が理解できる形式のデータベース１００のレコード取得要求パラメータを生成し、ＤＢ要求受付部２２００に送信する。
【０１０４】
図１３は、本発明の第一実施形態のＤＢ要求受付部２２００の制御ロジックを示すフローチャートである。
【０１０５】
まず、ＤＢ要求受付部２２００は、ジョブプログラム部２１００から、ＳＱＬ文を受信する（ステップ２２０１）。次に、ＤＢ要求受付部２２００は、ステップ２２０１で受信したＳＱＬ文内のオペランドに記述されているキーレンジセット５０２と、ＤＢサーバ構成情報２００の管理レコード識別情報２０２とを比較し、キーレンジセット５０２を含む管理レコード識別情報２０２に対応付けられたＤＢサーバ名２０１を求める（ステップ２２０２）。
【０１０６】
次に、ＤＢ要求受付部２２００は、ステップ２２０２で求められたＤＢサーバ名２０１のＤＢサーバ３０のＤＢアクセス部３１００に、キーレンジセット５０２の情報を送信し、レコードの取得を要求する（ステップ２２０３）。
【０１０７】
次に、ＤＢ要求受付部２２００は、ＤＢアクセス部３１００によって取得されたレコードを応答領域に格納し、ＳＱＬ文の送信元のジョブプログラム部２１００に応答する（ステップ２２０４）。
【０１０８】
以上に示す処理により、ＤＢ要求受付部２２００は、ＤＢサーバ構成情報２００を参照し、ＳＱＬ文で指定されたキーレンジセット５０２を含むレコードを管理するＤＢサーバ３０を選択し、選択されたＤＢサーバ３０のＤＢアクセス部３１００に、データベース１００のレコード取得要求を送信する。
【０１０９】
図１４は、本発明の第一実施形態のＤＢアクセス部３１００の制御ロジックを示すフローチャートである。
【０１１０】
まず、ＤＢアクセス部３１００は、ＤＢ要求受付部２２００から、レコード取得要求（キーレンジセット５０２の情報を含む）を受信する（ステップ３１０１）。
【０１１１】
次に、ＤＢアクセス部３１００は、ステップ３１０１で受信したレコード取得要求において指定されたキーレンジセット５０２のレコードを、データベース１００から取得する（ステップ３１０２）。次に、ＤＢアクセス部３１００は、ステップ３１０２で取得されたレコードを、ＳＱＬ応答文などの形式で、ＤＢ要求受付部２２００に送信する（ステップ３１０３）。
【０１１２】
以上に示す処理により、ＤＢアクセス部３１００は、指定されたキーレンジセット５０２のレコードを、データベース１００から取り出し、ＤＢ要求受付部２２００に送信する。
【０１１３】
以上説明してきたように、本発明の第一実施形態の計算機システム１によれば、データベース１００に格納されたデータの入力を伴うジョブの並列分散処理において、ＤＢサーバ３０及びジョブ実行サーバ２０の関係を固定していない、又は、両者を同じ個数設けていない場合であっても、データベース１００に格納されたデータの入力を実行するＤＢサーバ３０へのアクセス競合を回避することができる。
【０１１４】
また、各ジョブ実行サーバ２０が処理するレコード数を適正な大きさにし、且つ、平均化することができるので、各ジョブ実行サーバ２０及びＤＢサーバ３０の負荷を平準化し、ジョブを高速実行することができる。
【０１１５】
（第二実施形態）
前述の第一実施形態では、ジョブ実行サーバ２０が、データベース１００に格納されたレコードの取得を伴うジョブを実行する形態について説明した。ここでは、ジョブ実行サーバ２０が、データベース１００へのレコードの出力（格納）を伴うジョブを実行する形態について説明する。
【０１１６】
図１５は、本発明の第二実施形態の計算機システム１のハードウェア構成例を示す図である。計算機システム１は、スケジュールサーバ１０と、１又は複数のジョブ実行サーバ２０と、１又は複数のＤＢサーバ３０とを備える。なお、以下では図１と同様の構成要素には同一の符号を付して重複する説明を適宜省略する。
【０１１７】
本発明の第二実施形態のスケジュールサーバ１０は、さらに、入出力Ｉ／Ｆ１４ａを備える。このスケジュールサーバ１０は、各ジョブ実行サーバ２０が実行するジョブをスケジューリングする。ここでいうジョブとは、データベース１００へのレコードの出力を伴うジョブである。このスケジュールサーバ１０は、入出力Ｉ／Ｆ１４ａを介して記憶装置１５ａに接続されている。
【０１１８】
記憶装置１５ａは、入力データ１２０、分割データ１３０を格納する。入力データ１２０は、ジョブプログラム部２１００が処理するレコードの集合である。分割データ１３０は、入力データ１２０を分割したデータである。なお、この記憶装置１５ａは、スケジュールサーバ１０に直接接続されているが、ネットワーク等を介して間接接続されてもよい。
【０１１９】
主記憶装置１１ａは、ジョブスケジュール部１１００及びデータ分割部１２００の機能を実現する命令コードを含むプログラムを記憶するＲＡＭ等の記憶装置である。この主記憶装置１１ａは、ＤＢサーバ構成情報２００及び分割データ管理テーブル５００などのプログラムの実行に必要なファイル、データも記憶する。
【０１２０】
ジョブスケジュール部１１００は、分割データ管理テーブル５００に基づいて、ジョブ実行サーバ２０が実行するジョブをスケジューリングする。また、ジョブ実行サーバ２０に、ジョブプログラム部２１００の実行を要求する。このジョブスケジュール部１１００の動作については、以下の点を除いて前述の第一実施形態（図１０参照）と同様であるため、ここでは相違点のみ説明する。
【０１２１】
すなわち、ステップ１１１５において、本発明の第二の実施形態のジョブスケジュール部１１００は、ステップ１１１３で選択されたジョブ実行サーバ２０のジョブプログラム起動部２０００に、データベース１００に出力すべき分割データ１３０の情報を送信するとともに、ジョブプログラム部２１００の実行を要求する（ステップ１１１５）。データベース１００に出力すべき分割データ１３０とは、分割データ管理テーブル５００に登録された分割データ１３０のうちの、ステップ１１１１で選択された１つの分割データ１３０である。
【０１２２】
なお、ステップ１１１０〜１１１２の処理により、ジョブスケジュール部１１００は、分割データ管理テーブル５００のＤＢサーバ名５０３を参照し、同一のＤＢサーバ３０が同じ分割データ１３０の処理を同時に実行することを規制している。また、ステップ１１１１の処理により、レコード数の多い分割データ１３０を優先的に選択する。
【０１２３】
データ分割部１２００は、入力データ１２０を複数の分割データ１３０に分割する。このデータ分割部１２００の動作については、詳細に後述する。
【０１２４】
ＤＢサーバ構成情報２００は、各ＤＢサーバ３０の構成情報を管理する。分割データ管理テーブル５００は、データ分割部１２００によって生成された各分割データ１３０の範囲や処理状態などの分割データ１３０に関する情報を管理するテーブルである。これらＤＢサーバ構成情報２００及び分割データ管理テーブル５００については、前述の第一実施形態（図３、７参照）と同様であるため、ここでは説明を省略する。
【０１２５】
ジョブ実行サーバ２０は、前述の第一実施形態と同様に、主記憶装置１１ｂと、ＣＰＵ１２ｂと、通信Ｉ／Ｆ１３ｂとを備える。
【０１２６】
主記憶装置１１ｂは、ジョブプログラム起動部２０００、ジョブプログラム部２１００ｂ及びＤＢ要求受付部２２００ｂの機能を実現する命令コードを含むプログラムを記憶するＲＡＭ等の記憶装置である。
【０１２７】
ジョブプログラム起動部２０００は、スケジュールサーバ１０による要求を受け付けて、ジョブプログラム部２１００を起動する。このジョブプログラム起動部２０００は、以下の点を除いて前述の第一実施形態（図１１参照）と同様であるため、ここでは相違点のみ説明する。
【０１２８】
すなわち、ステップ２００２において、本発明の第二の実施形態のジョブプログラム起動部２０００は、キーレンジセット（レコード取得範囲パラメータ）５０２を受信せずに、分割データ１３０を受信してもよい。また、ステップ２００３において、ステップ２００２で受信した分割データ１３０を、ジョブプログラム部２１００が参照可能な領域（環境変数など）に設定しない。
【０１２９】
ジョブプログラム部２１００ｂは、ジョブプログラム起動部２０００によって起動され、データベース１００内のレコードを処理する。ここでいう処理は、データベース１００へのレコードの出力を伴う処理である。このジョブプログラム部２１００ｂの動作については、詳細に後述する。
【０１３０】
ＤＢ要求受付部２２００ｂは、ジョブプログラム部２１００による要求を受け付けて、ＤＢアクセス部３１００に対して、レコード出力などの要求を送信する。このＤＢ要求受付部２２００ｂの動作については、詳細に後述する。
【０１３１】
ＤＢサーバ３０は、前述の第一の実施形態と同様に、主記憶装置１１ｃと、ＣＰＵ１２ｃと、通信Ｉ／Ｆ１３ｃと、入出力Ｉ／Ｆ１４ｃとを備える。このＤＢサーバ３０は、入出力Ｉ／Ｆ１４ｃを介して記憶装置１５ｃに接続されている。
【０１３２】
主記憶装置１１ｃは、ＤＢアクセス部３１００の機能を実現する命令コードを含むプログラムを記憶するＲＡＭ等の記憶装置である。この主記憶装置１１ｃは、ＤＢサーバ構成情報２００などのプログラムの実行に必要なファイル、データも記憶する。
【０１３３】
記憶装置１５ｃは、データベース１００を格納する。データベース１００はレコードの集合である。なお、レコードとは、ジョブプログラム部２１００が出力（格納）し処理するデータベース１００内のデータの単位である。また、レコード内の特定フィールドの数値又は文字列をキーと呼ぶ。
【０１３４】
図１６は、本発明の第二実施形態の計算機システム１のブロックダイアグラムを示す図である。図１６を用いて計算機システム１の動作の概要を説明する。
【０１３５】
データ分割部１２００は、入力データ１２０を複数の分割データ１３０に分割し、分割データ１３０の属性情報を、分割データ管理テーブル５００に登録する。そうすると、ジョブスケジュール部１１００は、分割データ管理テーブル５００に基づいて、各ジョブ実行サーバ２０が実行するジョブをスケジューリングし、各ジョブ実行サーバ２０のジョブプログラム起動部２０００に、ジョブプログラム部２１００の実行を要求する。
【０１３６】
ジョブプログラム起動部２０００は、ジョブプログラム部２１００ｂを起動する。そうすると、起動されたジョブプログラム部２１００ｂは、分割データ１３０を読み込んで処理し、ＤＢ要求受付部２２００ｂに、処理結果のレコードのデータベース１００への出力要求を送信する。レコードの出力要求を受け付けたＤＢ要求受付部２２００ｂは、ＤＢサーバ３０のＤＢアクセス部３１００に、データベース１００へのレコード出力要求を送信する。
【０１３７】
ＤＢアクセス部３１００ｂは、ＤＢ要求受付部２２００ｂからの要求に応じて、データベース１００にレコードを出力し、ＤＢ要求受付部２２００ｂに回答する。
【０１３８】
図１７は、本発明の第二実施形態の入力データ１２０の一例を示す図である。
【０１３９】
入力データ１２０は、複数のレコードから構成されるレコード群である。各レコードは、取引時刻（図中の先頭レコードでは「００：００：００」）、レコードのキーである取引銘柄名（「銘柄１」）、取引数（「２０」）などの情報を含む。
【０１４０】
図１８は、本発明の第二実施形態の分割データ１３０の一例を示す図である。
【０１４１】
分割データ１３０は、入力データ１２０に含まれる１又は複数のレコードから構成される。各レコードの内容は入力データ１２０と同様であるため、ここでは説明を省略する。
【０１４２】
図１９は、本発明の第二実施形態のデータ分割部１２００の第一の制御ロジックを示すフローチャートである。
【０１４３】
まず、データ分割部１２００は、任意のＤＢサーバ３０から、ＤＢサーバ構成情報２００を受信する（ステップ１２０１）。次に、データ分割部１２００は、入力データ１２０から全レコードを読み出し（ステップ１２０２）、読み出された全レコードをソートする（ステップ１２０３）。
【０１４４】
ステップ１２０３では、読み出された全レコードをソートする場合、ソートの第一キーは、レコードのキー値を含む管理レコード識別情報２０２のエントリのＤＢサーバ名２０１とする。また、ソートの第二キーはレコードのキー値とする。これにより、同一のＤＢサーバ３０によってデータベース１００に出力されるレコード群が、連続して並ぶようにソートされる。なお、レコードをソートするかわりに、レコードへのポインタをソートしてもよい。
【０１４５】
次に、データ分割部１２００は、ソート後の全レコードを、複数のレコードセットに分割し、生成された複数のレコードセットのそれぞれを、異なる分割データ１３０として出力する（ステップ１２０４）。
【０１４６】
ステップ１２０４では、ソート後の全レコードの並び順に、予め指定された分割データ１３０のレコード数上限値毎に複数のレコードセットに分割する。ただし、分割データ１３０のレコード数上限値に達していない場合でも、所定のレコードのソートの第一キーの値が直前のレコードのソートの第一キーの値と異なる場合、当該レコードと直前のレコードとの間で分割する。これにより、ソートの第一キーの値が異なる（すなわち、データベース１００へのレコードの出力を実行するＤＢサーバ３０が異なる）レコードが、同一の分割データ１３０に混在してしまうのを回避できる。なお、ソートの第二キーの値が同じレコードは、同じ分割データ１３０に含まれるように分割することが好ましい。
【０１４７】
次に、データ分割部１２００は、分割データ管理テーブル５００を生成し、分割データ１３０の数と同数のエントリを生成する（ステップ１２０５）。次に、データ分割部１２００は、ステップ１２０４で生成された各分割データ１３０に関する情報を、ステップ１２０５で生成されたエントリに登録する（ステップ１２０６）。
【０１４８】
ステップ１２０６では、生成された分割データ１３０の名称（又は、分割データ１３０を一意に識別するシーケンス番号）を、分割データ識別子５０１に設定する。分割データ１３０に含まれるレコードのキー値を含む管理レコード識別情報２０２のエントリのＤＢサーバ名２０１を、ＤＢサーバ名５０３に設定する。分割データ１３０に含まれるレコード数を、レコード数５０４に設定する。実行状態５０５は、初期値として「未実行」に設定する。ジョブ実行サーバ名５０６は設定しない。
【０１４９】
なお、ステップ１２０６では、データ分割部１２００は、分割データ管理テーブル５００に分割データ１３０に関する情報を登録する代わりに、分割データ識別子５０１、ＤＢサーバ名５０３及びレコード数５０４を、ファイルに出力してもよい。この場合、ジョブスケジュール部１１００は、ステップ１１１０（図１０参照）の前に、出力されたファイルから、分割データ識別子５０１、ＤＢサーバ名５０３及びレコード数５０４を読み込み、分割データ管理テーブル５００に新規エントリを追加し、読み込まれた情報を登録する。
【０１５０】
以上に示す第一の制御ロジックにより、データ分割部１２００は、入力データ１２０（レコード群）を複数の分割データ１３０（分割レコード群）に分割し、各分割データ１３０の属性情報を、分割データ管理テーブル５００に登録する。なお、データ分割部１２００は、特にステップ１２０３〜１２０４により、ＤＢサーバ構成情報２００と入力データ１２０の各レコードのキー値を参照して、入力データ１２０のレコードのうちの同一のキー値の範囲に含まれるレコード（同一のＤＢサーバ３０によって管理されるレコード）を組み合わせて、複数の分割データ１３０を生成している。そのため、異なるＤＢサーバ３０によって管理されるレコードが、同一の分割データ１３０に混在してしまうのを回避している。すなわち、分割データ１３０内のレコードを処理した結果の出力用レコードの全てが、同一のＤＢサーバ３０によって管理されるデータベース１００に出力されるように、入力データ１２０を分割している。
【０１５１】
図２０は、本発明の第二実施形態のデータ分割部１２００の第二の制御ロジックを示すフローチャートである。なお、以下では図１９と同様の構成要素には同一の符号を付して重複する説明を適宜省略する。
【０１５２】
まず、データ分割部１２００は、前述の第一の制御ロジック（図１９参照）と同様に、任意のＤＢサーバ３０から、ＤＢサーバ構成情報２００を受信する（ステップ１２０１）。  
【０１５３】
次に、データ分割部１２００は、入力データ１２０からレコードを順に読み出し、読み出されたレコードに基づいて、レコードのキー値（又は、予め指定された幅のキー値の範囲）毎の中間ファイルを生成、出力する（ステップ１２１１）。
【０１５４】
ステップ１２１１では、キー値の範囲毎の中間ファイルを生成する場合は、キー値の範囲は、管理レコード識別情報２０２に示すキー値の範囲の部分集合とする。これにより、ＤＢサーバ名２０１が異なるキーが、同一のキー値の範囲に含まれてしまうのを回避することができる。
【０１５５】
次に、データ分割部１２００は、ステップ１２１１で生成された複数の中間ファイルを組み合わせることによって、分割データ１３０を生成する（ステップ１２１２）。ここでは、中間ファイルに含まれるレコードのキー値を含む管理レコード識別情報２０２のエントリが同じ（すなわち、データベース１００へのレコードの出力を実行するＤＢサーバ３０が同じ）レコードを含む中間ファイル同士を、中間ファイルに含まれるレコード数の合計値が、予め指定された分割データ１３０のレコード数上限値に達するまで組み合わせる。
【０１５６】
以降、ステップ１２０５及びステップ１２０６の処理については、前述の第一の制御ロジック（図１９参照）と同様であるため、ここでは説明を省略する。
【０１５７】
以上に示す第二の制御ロジックにより、データ分割部１２００は、第一の制御ロジックのようなソート処理を実行することなく、入力データ１２０を、中間ファイルを介して複数の分割データ１３０に分割し、各分割データ１３０の属性情報を、分割データ管理テーブル５００に登録することができる。
【０１５８】
図２１は、本発明の第二実施形態のジョブプログラム部２１００ｂの制御ロジックを示すフローチャートである。
【０１５９】
まず、ジョブプログラム部２１００ｂは、分割データ１３０からレコードを取り出し、プログラム固有の処理を実行する（ステップ２１１１）。プログラム固有の処理とは、例えば、取り出されたレコードの重複チェックや加工を実行する処理である。
【０１６０】
次に、ジョブプログラム部２１００ｂは、ステップ２１１１でプログラム固有の処理が実行されたレコードとＳＱＬのＩＮＳＥＲＴ文とを、ＤＢ要求受付部２２００ｂに送信するとともに、当該レコードをデータベース１００に出力する要求を、ＤＢ要求受付部２２００ｂに送信する（ステップ２１１２）。
【０１６１】
以上に示す処理により、ジョブプログラム部２１００ｂは、分割データ１３０からレコードを取り出してプログラム固有の処理を実行し、処理結果のレコードとＳＱＬのＩＮＳＥＲＴ文などを、ＤＢ要求受付部２２００ｂに送信する。
【０１６２】
図２２は、本発明の第二実施形態のＤＢ要求受付部２２００ｂの制御ロジックを示すフローチャートである。
【０１６３】
まず、ＤＢ要求受付部２２００ｂは、第一実施形態と同様に、ジョブプログラム部２１００ｂからＳＱＬ文（及びジョブプログラム部２１００ｂのプログラム固有の処理が実行されたレコード）を受信する（ステップ２２０１）。次に、ＤＢ要求受付部２２００ｂは、ステップ２２０１で受信したレコードのキーと、ＤＢサーバ構成情報２００の管理レコード識別情報２０２とを比較し、レコードのキーを含む管理レコード識別情報２０２に対応付けられたＤＢサーバ名２０１を求める（ステップ２２１２）。
【０１６４】
次に、ＤＢ要求受付部２２００ｂは、ステップ２２１２で求められたＤＢサーバ名２０１のＤＢサーバ３０のＤＢアクセス部３１００に、レコードを送信し、データベース１００へのレコードの出力を要求する（ステップ２２１３）。
【０１６５】
以上に示す処理により、ＤＢ要求受付部２２００ｂは、ＤＢサーバ構成情報２００を参照し、ジョブプログラム部２１００ｂの処理結果のレコードを管理するＤＢサーバ３０を選択し、選択されたＤＢサーバ３０のＤＢアクセス部３１００に、データベース１００へのレコード出力要求を送信する。
【０１６６】
図２３は、本発明の第二実施形態のＤＢアクセス部３１００ｂの制御ロジックを示すフローチャートである。
【０１６７】
まず、ＤＢアクセス部３１００ｂは、ＤＢ要求受付部２２００ｂから、レコード出力要求（レコードの情報を含む）を受信する（ステップ３１１１）。次に、ＤＢアクセス部３１００は、ステップ３１１１で受信したレコードを、データベース１００に出力する（ステップ３１１２）。
【０１６８】
以上に示す処理により、ＤＢアクセス部３１００は、ジョブプログラム部２１００ｂの処理結果のレコードを、データベース１００に出力する。
【０１６９】
以上説明してきたように、本発明の第二実施形態の計算機システム１によれば、データベース１００への出力を伴うジョブの並列分散処理において、ＤＢサーバ３０及びジョブ実行サーバ２０の関係を固定していない、又は、両者を同じ個数設けていない場合であっても、データベース１００へのデータの出力を実行するＤＢサーバ３０へのアクセス競合を回避することができる。
【０１７０】
また、各ジョブ実行サーバ２０が処理するレコード数を適正な大きさにし、且つ、平均化することができるので、各ジョブ実行サーバ２０及びＤＢサーバ３０の負荷を平準化し、ジョブを高速実行することができる。
【０１７１】
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。
【産業上の利用可能性】
【０１７２】
本発明は、計算機システムに関し、特に、データベースの入出力を伴うバッチジョブの計算機システムに対して有用である。
【図１】
2012137347.tif 000003
【図２】
2012137347.tif 000004
【図３】
2012137347.tif 000005
【図４】
2012137347.tif 000006
【図５】
2012137347.tif 000007
【図６】
2012137347.tif 000008
【図７】
2012137347.tif 000009
【図８】
2012137347.tif 000010
【図９】
2012137347.tif 000011
【図１０】
2012137347.tif 000012
【図１１】
2012137347.tif 000013
【図１２】
2012137347.tif 000014
【図１３】
2012137347.tif 000015
【図１４】
2012137347.tif 000016
【図１５】
2012137347.tif 000017
【図１６】
2012137347.tif 000018
【図１７】
2012137347.tif 000019
【図１８】
2012137347.tif 000020
【図１９】
2012137347.tif 000021
【図２０】
2012137347.tif 000022
【図２１】
2012137347.tif 000023
【図２２】
2012137347.tif 000024
【図２３】
2012137347.tif 000025
【国際調査報告】
2012137347.tif 000026
2012137347.tif 000027