(57)【要約】【課題】アクセス集中による処理時間の増大を抑制すること。【解決手段】記憶装置２０は、キーと第１の値とを含むレコード２１ａを有するテーブル２１を記憶する。情報処理装置１０は、レコード２１ａに基づいて、複数の値の合計が第１の値に等しくなるように第１の値を複数の値に分割し、複数の値のうちの１つの値と当該キーとを含むレコード３１ａ，４１ａを複数の値の各々に対して生成する。情報処理装置１０は、生成したレコード３１ａ，４１ａをノード３０，４０に配置し、キーに対応する値の変更を伴うアクセスを受け付けると、ノード３０，４０の何れかにアクセスを振り分ける。【選択図】図１７
2020135410.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
キーと第１の値とを含む第１のレコードに基づいて、複数の値の合計が前記第１の値に等しくなるように前記第１の値を前記複数の値に分割し、
前記複数の値のうちの１つの値と前記キーとを含む第２のレコードを前記複数の値の各々に対して生成し、
生成した複数の第２のレコードを複数のノードに配置し、
前記キーに対応する値の変更を伴うアクセスを受け付けると、前記複数のノードの何れかに前記アクセスを振り分ける、
処理を実行させるアクセス制御プログラム。
【請求項２】
前記コンピュータに更に、前記アクセスを振り分けたノードに配置された前記第２のレコードの値の更新結果を、前記ノードから受信する、
処理を実行させる請求項１記載のアクセス制御プログラム。
【請求項３】
前記コンピュータに更に、前記第１のレコードを記憶する記憶装置に、前記第１の値を含む参照用の第３のレコードを格納し、前記更新結果に応じて、前記第３のレコードに含まれる前記第１の値を更新する、
処理を実行させる請求項２記載のアクセス制御プログラム。
【請求項４】
前記コンピュータに更に、前記複数のノードのうちの第１のノードに配置された前記第２のレコードの値の減少、または、前記アクセスによる前記複数のノードの負荷に応じて、前記複数のノードのうちの第２のノードに配置された前記第２のレコードの値を減らし、前記第１のノードに配置された前記第２のレコードの値を増やす、
処理を実行させる請求項１乃至３の何れか１項に記載のアクセス制御プログラム。
【請求項５】
前記コンピュータに更に、前記アクセスによる前記複数のノードの負荷に応じて、前記複数のノードのうちの一部のノードに配置された前記第２のレコードの値を、前記複数のノードのうちの他の一部のノードに配置された前記第２のレコードの値に加算し、前記アクセスの振り分け先の候補から前記一部のノードを除外する、
処理を実行させる請求項１乃至４の何れか１項に記載のアクセス制御プログラム。
【請求項６】
前記コンピュータに更に、複数のレコードを有するテーブルから、アクセス頻度が閾値よりも大きい前記第１のレコードを特定する、
処理を実行させる請求項１乃至５の何れか１項に記載のアクセス制御プログラム。
【請求項７】
前記アクセスの振り分けでは、前記キーに対応する値の減少を伴う前記アクセスを受け付け、前記複数の第２のレコードそれぞれに含まれる値が、前記減少による減少量よりも小さいとき、前記複数のノードのうちの２以上のノードに前記減少量を分割した前記アクセスを振り分ける、
請求項１乃至６の何れか１項に記載のアクセス制御プログラム。
【請求項８】
複数のノードと、
キーと第１の値とを含む第１のレコードを有するテーブルを記憶する記憶装置と、
前記第１のレコードに基づいて、複数の値の合計が前記第１の値に等しくなるように前記第１の値を前記複数の値に分割し、前記複数の値のうちの１つの値と前記キーとを含む第２のレコードを前記複数の値の各々に対して生成し、生成した複数の第２のレコードを前記複数のノードに配置し、前記キーに対応する値の変更を伴うアクセスを受け付けると、前記複数のノードの何れかに前記アクセスを振り分ける情報処理装置と、
を有するデータベース管理システム。
【請求項９】
コンピュータが、
キーと第１の値とを含む第１のレコードに基づいて、複数の値の合計が前記第１の値に等しくなるように前記第１の値を前記複数の値に分割し、
前記複数の値のうちの１つの値と前記キーとを含む第２のレコードを前記複数の値の各々に対して生成し、
生成した複数の第２のレコードを複数のノードに配置し、
前記キーに対応する値の変更を伴うアクセスを受け付けると、前記複数のノードの何れかに前記アクセスを振り分ける、
アクセス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はアクセス制御プログラム、データベース管理システムおよびアクセス制御方法に関する。
【背景技術】
【０００２】
情報処理システムでは、大量のデータが扱われる。データの管理に、データベースが用いられることがある。例えば、データベースにおける表データを、複数の記憶装置に配置するデータベースシステムの提案がある。提案のデータベースシステムは、データに対応するハッシュ値（例えば、当該データに含まれる商品コードに対するハッシュ値）に基づいて、当該データの格納先の記憶装置を決定する。
【０００３】
また、Ｃｏｎｓｉｓｔｅｎｔ  Ｈａｓｈｉｎｇ法と呼ばれる方法により、複数のサーバにデータを分散配置するＮｏＳＱＬデータベースを用いてデータを管理する計算機システムの提案もある。
【０００４】
なお、在庫更新情報の受け渡しに電子メールを用い、電子メールを予め設定されたタイミングで受信し在庫情報を更新することで、在庫情報を更新する頻度を任意に設定する在庫管理システムの提案もある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００３−６０２１号公報
【特許文献２】国際公開第２０１３／０７３０２０号
【特許文献３】特開２０１６−８１３９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
データベースなどのデータを管理する装置にアクセスが集中すると、当該装置の負荷の高まりにより、アクセスに対する処理時間が増大するという問題がある。
１つの側面では、本発明は、アクセス集中による処理時間の増大を抑制することができるアクセス制御プログラム、データベース管理システムおよびアクセス制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
１つの態様では、アクセス制御プログラムが提供される。このアクセス制御プログラムは、コンピュータに、キーと第１の値とを含む第１のレコードに基づいて、複数の値の合計が第１の値に等しくなるように第１の値を複数の値に分割し、複数の値のうちの１つの値とキーとを含む第２のレコードを複数の値の各々に対して生成し、生成した複数の第２のレコードを複数のノードに配置し、キーに対応する値の変更を伴うアクセスを受け付けると、複数のノードの何れかにアクセスを振り分ける、処理を実行させる。
【０００８】
また、１つの態様では、データベース管理システムが提供される。
また、１つの態様では、アクセス制御方法が提供される。
【発明の効果】
【０００９】
１つの側面では、アクセス集中による処理時間の増大を抑制することができる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施の形態の情報処理システムを示す図である。
【図２】第２の実施の形態のデータベース管理システムの例を示す図である。
【図３】制御装置のハードウェア例を示す図である。
【図４】制御装置の機能例を示す図である。
【図５】ＤＢ装置の機能例を示す図である。
【図６】ノードの機能例を示す図である。
【図７】振り分け先定義情報の例を示す図である。
【図８】アイテムテーブル（複製前）の例を示す図である。
【図９】アイテムテーブル（複製後）の第１の例を示す図である。
【図１０】アイテムテーブル（複製後）の第２の例を示す図である。
【図１１】クエリの例を示す図である。
【図１２】ＤＢ複製判定処理の例を示すフローチャートである。
【図１３】ＤＢ複製処理の例を示すフローチャートである。
【図１４】ＤＢ複製の例を示す図である。
【図１５】ＤＢアクセス処理の例を示すフローチャートである。
【図１６】ＤＢアクセスの例を示す図である。
【図１７】ＤＢアクセスの他の例を示す図である。
【図１８】参照用レコード更新処理の例を示すフローチャートである。
【図１９】参照用レコードの更新例を示す図である。
【図２０】レコード値調整監視処理の例を示すフローチャートである。
【図２１】レコード値調整処理の例を示すフローチャートである。
【図２２】レコード値の調整例を示す図である。
【図２３】スケールイン判定処理の例を示すフローチャートである。
【図２４】スケールイン処理の例を示すフローチャートである。
【図２５】スケールインの例を示す図である。
【発明を実施するための形態】
【００１１】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１２】
図１は、第１の実施の形態の情報処理システムを示す図である。
第１の実施の形態の情報処理システムは、情報処理装置１０、記憶装置２０およびノード３０，４０を有する。情報処理装置１０、記憶装置２０およびノード３０，４０は、ネットワークＮ１に接続されている。記憶装置２０は、情報処理装置１０またはネットワークＮ１に接続された他の情報処理装置に内蔵されてもよい。第１の実施の形態の情報処理システムは、データを管理し、データに対するアクセスを行う。データの管理には、例えば、データベース（ＤＢ：DataBase）が用いられる。
【００１３】
例えば、記憶装置２０は、テーブル２１を記憶する。テーブル２１は、キーおよび属性値の項目を含む。テーブル２１は、レコード２１ａ（第１のレコード）を含む。レコード２１ａは、キーが「Ｋ１」であり属性値が「２０」である。テーブル２１は、レコード２１ａ以外のレコードを含んでもよい。
【００１４】
情報処理装置１０は、ネットワークＮ２に接続されている。ネットワークＮ２には、端末装置５０，６０が接続されている。端末装置５０，６０は、データに対するアクセスを行う。情報処理装置１０は、端末装置５０，６０からデータに対するアクセス要求を受け付け、アクセス要求に応じて、データに対するアクセスを制御する。
【００１５】
情報処理装置１０は、記憶部１１および処理部１２を有する。記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性記憶装置でもよい。処理部１２は、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。処理部１２はプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。
【００１６】
記憶部１１は、処理部１２の処理に用いられる情報を記憶する。例えば、記憶部１１は、端末装置５０，６０から受信したアクセス要求などの情報を記憶する。
処理部１２は、記憶装置２０に記憶されたテーブル２１における１つのレコードを、ノード３０，４０に分散して配置し、アクセス要求に応じて、当該レコードに対するアクセスをノード３０，４０に振り分ける。
【００１７】
例えば、処理部１２は、テーブル２１に対するアクセス履歴などに基づき、テーブル２１のうち、比較的アクセスが集中する傾向にあるレコードを選択し、選択したレコードをノード３０，４０への分散配置対象とする。一例として、レコード２１ａを分散配置対象とする場合を考える。
【００１８】
処理部１２は、複数の値の合計がレコード２１ａの属性値（第１の値）に等しくなるように当該属性値を複数の値に分割する。本例では、分散配置先のノードが２つなので、複数の値の数は２つである。例えば、処理部１２は、レコード２１ａの属性値「２０」を、「１０」および「１０」に分割する（２０＝１０＋１０である）。
【００１９】
処理部１２は、分割後の複数の値のうちの１つの値と、分割元のレコード２１ａのキーとを含むレコード（第２のレコード）を複数の値の各々に対して生成する。例えば、上記の例の場合、キー「Ｋ１」および属性値「１０」を含むレコード（第２のレコード）を２つ生成する。複数の値の各々は、同じ値でもよいし、異なる値でもよい。各ノードに対して割り当てる値や値の比などは記憶部１１に予め設定される。
【００２０】
処理部１２は、生成した複数のレコード（複数の第２のレコード）を複数のノードに配置する。例えば、処理部１２は、ノード３０のテーブル３１に、キー「Ｋ１」および属性値「１０」を含むレコード３１ａ（複数の第２のレコードのうちの１つ）を配置（登録）する。また、処理部１２は、ノード４０のテーブル４１に、キー「Ｋ１」および属性値「１０」を含むレコード４１ａ（複数の第２のレコードのうちの１つ）を配置（登録）する。
【００２１】
処理部１２は、端末装置５０，６０から、該当のキーに対応する値の変更を伴うアクセスを受け付けると、複数のノードの何れかに当該アクセスを振り分ける。例えば、処理部１２は、端末装置５０からキー「Ｋ１」に対応する値の変更を伴うアクセスを受け付けると、ノード３０に当該アクセスを振り分ける。ノード３０は、振り分けられたアクセスに応じて、レコード３１ａの属性値を変更する。また、処理部１２は、端末装置６０からキー「Ｋ１」に対応する値の変更を伴うアクセスを受け付けると、ノード４０に当該アクセスを振り分ける。ノード４０は、振り分けられたアクセスに応じて、レコード４１ａの属性値を変更する。ノード３０，４０による属性値の変更の処理は、並列に実行可能である。処理部１２によるアクセスの振り分け方法にはラウンドロビンや、アクセスの振り分け数が最小のノードに振り分けるなどの種々の方法が考えられる。
【００２２】
情報処理装置１０によれば、キーと第１の値とを含む第１のレコードに基づいて、複数の値の合計が第１の値に等しくなるように第１の値が複数の値に分割される。複数の値のうちの１つの値とキーとを含む第２のレコードが複数の値の各々に対して生成される。生成された複数の第２のレコードが複数のノードに配置される。キーに対応する値の変更を伴うアクセスを受け付けると、複数のノードの何れかにアクセスが振り分けられる。
【００２３】
これにより、アクセス集中による処理時間の増大を抑制することができる。すなわち、情報処理装置１０は、ある時点で、端末装置５０，６０のそれぞれからキー「Ｋ１」に対するアクセスを重複して受け付けた時、端末装置５０のアクセスをノード３０に振り分け、端末装置６０のアクセスをノード４０に振り分ける。ノード３０によるレコード３１ａに対する処理と、ノード４０によるレコード４１ａに対する処理とは、並列に実行可能である。このため、１つのノードに集中して複数のアクセスを実行させるよりも、複数のノードにより複数のアクセスを分散して並列に実行可能になり、処理時間の増大を抑制できる。特に、キーに対応する値の変更を伴うアクセス（すなわち、更新系のアクセス）に対して、処理時間の増大を抑制できる。
【００２４】
なお、第１の実施の形態の例では、２つのノード（ノード３０，４０）に、第２のレコードを配置するものとしたが、３以上のノードに第２のレコードを配置してもよい。この場合、３以上のノードにより複数のアクセスを分散して並列に実行可能になり、処理時間の増大を一層抑制できる。
【００２５】
また、処理部１２は、アクセスを振り分けたノードに配置された第２のレコードの値の更新結果を、当該ノードから受信してもよい。これにより、処理部１２は、何れかのノードに振り分けたアクセスに応じた更新結果を、端末装置５０，６０に適切に応答できる。
【００２６】
また、処理部１２は、レコード２１ａを記憶する記憶装置２０に、第１の値を含む参照用のレコード（第３のレコード）を格納し、更新結果に応じて、参照用のレコードに含まれる第１の値を更新してもよい。これにより、処理部１２は、端末装置５０，６０から該当のキーを指定した参照要求を受け付けた場合に、参照用のレコードを参照することで、ノード３０，４０に配置した各レコードを参照するよりも、当該参照要求に迅速に応答することができる。
【００２７】
また、処理部１２は、複数のノードのうちの第１のノードに配置された第２のレコードの値の減少、または、アクセスによる複数のノードの負荷に応じて、複数のノードのうちの第２のノードに配置された第２のレコードの値を減らし、第１のノードに配置された第２のレコードの値を増やしてもよい。これにより、第１のノードに配置された第２のレコードの値が減り過ぎることによる複数のアクセスに対する処理の並列度の低下を防ぎ、処理時間の増大を抑制できる。
【００２８】
また、処理部１２は、アクセスによる複数のノードの負荷に応じて、複数のノードのうちの一部のノードに配置された第２のレコードの値を、複数のノードのうちの他の一部のノードに配置された第２のレコードの値に加算し、当該アクセスの振り分け先の候補から一部のノードを除外してもよい。例えば、複数のノードの負荷が比較的低い場合に、一部のノードをアクセスの振り分け先の候補から除外することで、一部のノードのリソースを別の処理に利用可能になる。
【００２９】
また、処理部１２は、複数のレコードを有するテーブル２１から、アクセス頻度が閾値よりも大きい第１のレコード（レコード２１ａ）を特定して、当該第１のレコードを複数の第２のレコードへの分割対象としてもよい。この場合、テーブル２１における第１のレコード以外の他のレコードについては、分割対象とならず、当該テーブル２１にアクセスして、値の更新が行われる。アクセス頻度が比較的高いレコードを分割対象とし、アクセス頻度が比較的低いレコードを分割非対象とすることで、スケールアウトを効率的に行える。
【００３０】
また、処理部１２は、アクセスの振り分けの際、キーに対応する値の減少を伴うアクセスを受け付けることもある。この場合、各ノードに配置された複数の第２のレコードそれぞれに含まれる値が、当該減少による減少量よりも小さいことがある。このとき、処理部１２は、複数のノードのうちの２以上のノードに当該減少量を分割したアクセスを振り分けるようにしてもよい。例えば、減少量が１０の場合に、２つのノードに減少量を５ずつ振り分けるなどの方法が考えられる。これにより、単一の第２のレコードでは対応できないアクセスについても、適切に処理可能になる。
【００３１】
以下では、更に具体的なシステムを例示して、情報処理装置１０の機能を詳細に説明する。
［第２の実施の形態］
次に、第２の実施の形態を説明する。
【００３２】
図２は、第２の実施の形態のデータベース管理システムの例を示す図である。
第２の実施の形態のデータベース管理システムは、制御装置１００、ＤＢ装置２００、ノード３００，３００ａ，３００ｂ，…、Ｗｅｂサーバ４００およびＡＰ（APplication）サーバ５００を有する。制御装置１００、ＤＢ装置２００、ノード３００，３００ａ，３００ｂ，…、Ｗｅｂサーバ４００およびＡＰサーバ５００は、ネットワーク７０に接続されている。ネットワーク７０は、例えば、ＬＡＮ（Local Area Network）である。ネットワーク７０は、ネットワーク８０に接続されている。ネットワーク８０は、例えば、ＬＡＮでもよいし、ＷＡＮ（Wide Area Network）またはインターネットでもよい。ネットワーク８０には、クライアント６００，７００，…が接続されている。
【００３３】
制御装置１００は、データベース管理システムで管理されるデータに対するアクセスを制御するサーバコンピュータである。制御装置１００は、ＤＢ装置２００に格納されているテーブルに含まれるレコードを複数に分割し、ノード３００，３００ａ，３００ｂ，…に配置する。データベースとして、関係データベース（ＲＤＢ：Relational DB）を考える。ＲＤＢのテーブルは、複数の項目（属性とも呼ばれる）を含み、項目間の関係を保持する。複数の項目の値の組（タプル）をレコードと呼ぶ。
【００３４】
レコードを複数に分割して複数のノードに配置する処理を、「ＤＢ複製」と呼ぶ。制御装置１００は、該当のレコードの配置先のノードの数を減らすこともある。レコードの配置先のノードの数を減らす処理を「スケールイン」と呼ぶ。制御装置１００は、第１の実施の形態の情報処理装置１０の一例である。
【００３５】
ＤＢ装置２００は、ＤＢＭＳ（DataBase Management System）の機能を有し、ＤＢを記憶するサーバコンピュータである。ＤＢ装置２００は、複数のテーブルを記憶する。
ノード３００，３００ａ，３００ｂ，…は、ＤＢ装置２００に記憶されたテーブルに含まれるレコードが分割して配置されるサーバコンピュータである。例えば、ノード３００，３００ａ，３００ｂ，…は、ＤＢＭＳを複数実行可能である。ノード３００，３００ａ，３００ｂ，…それぞれは、複数の仮想マシンを動作させ、各仮想マシンによりＤＢＭＳを実行してもよい。
【００３６】
Ｗｅｂサーバ４００は、クライアント６００，７００，…からのＷｅｂアクセスを受け付けるサーバコンピュータである。Ｗｅｂサーバ４００は、ＷｅｂアクセスをＡＰサーバ５００に対するＡＰアクセス要求に変換し、ＡＰアクセス要求をＡＰサーバ５００に送信する。Ｗｅｂサーバ４００は、処理結果をＡＰサーバ５００から受信すると、当該処理結果を、Ｗｅｂアクセスの要求元のクライアントに応答する。
【００３７】
ＡＰサーバ５００は、Ｗｅｂサーバ４００からＡＰアクセス要求を受信すると、ＡＰアクセス要求をＤＢに対するアクセス要求（クエリと称する）に変換し、当該クエリを制御装置１００に送信する。ＡＰサーバ５００は、制御装置１００からクエリに対する処理結果を受信すると、当該処理結果をＷｅｂサーバ４００に応答する。
【００３８】
クライアント６００，７００，…は、ユーザが利用するクライアントコンピュータである。クライアント６００，７００，…は、Ｗｅｂブラウザの機能を有し、データ更新やデータ参照のＷｅｂアクセス要求をＷｅｂサーバ４００に送信する。クライアント６００，７００，…は、Ｗｅｂアクセス要求に対応する処理結果をＷｅｂサーバ４００から受信し、Ｗｅｂブラウザの機能により当該処理結果をユーザに提示する。
【００３９】
ここで、ＷｅｂサーバやＡＰサーバの数は、１つに限らず、複数でもよい。近年では、クラウド技術の普及によって、実質的に設備の資源が許容する限りスケールアウトが可能であることにより、Ｗｅｂサーバ／ＡＰサーバに対して更新系を有するＤＢ装置２００における処理がボトルネックになり易い。そこで、制御装置１００は、ＤＢ装置２００における当該ボトルネックを軽減する機能を提供する。
【００４０】
図３は、制御装置のハードウェア例を示す図である。
制御装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６およびＮＩＣ（Network Interface Card）１０７を有する。なお、ＣＰＵ１０１は、第１の実施の形態の処理部１２に対応する。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１に対応する。
【００４１】
ＣＰＵ１０１は、プログラムの命令を実行するプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを含んでもよい。また、制御装置１００は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００４２】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、制御装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００４３】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、制御装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００４４】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、制御装置１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなど、任意の種類のディスプレイを用いることができる。
【００４５】
入力信号処理部１０５は、制御装置１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウス・タッチパネル・タッチパッド・トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、制御装置１００に、複数の種類の入力デバイスが接続されていてもよい。
【００４６】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、磁気ディスク、光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤが含まれる。光ディスクには、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）が含まれる。
【００４７】
媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータを、ＲＡＭ１０２やＨＤＤ１０３などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、ＣＰＵ１０１によって実行される。なお、記録媒体１１３は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体１１３やＨＤＤ１０３を、コンピュータ読み取り可能な記録媒体と言うことがある。
【００４８】
ＮＩＣ１０７は、ネットワーク７０に接続され、ネットワーク７０を介して他のコンピュータと通信を行うインタフェースである。ＮＩＣ１０７は、例えば、スイッチやルータなどの通信装置とケーブルで接続される。
【００４９】
なお、ＤＢ装置２００、ノード３００，３００ａ，３００ｂ，…、Ｗｅｂサーバ４００、ＡＰサーバ５００およびクライアント６００，７００，…も制御装置１００と同様のハードウェアにより実現される。
【００５０】
図４は、制御装置の機能例を示す図である。
制御装置１００は、記憶部１２０、ＤＢ管理部１３０、アクセス制御部１４０およびＤＢ監視部１５０を有する。記憶部１２０は、ＲＡＭ１０２またはＨＤＤ１０３の記憶領域を用いて実現される。ＤＢ管理部１３０、アクセス制御部１４０およびＤＢ監視部１５０は、ＲＡＭ１０２に記憶されたプログラムをＣＰＵ１０１が実行することで実現される。
【００５１】
記憶部１２０は、ノード３００，３００ａ，３００ｂ，…に対するレコードの振り分け先の定義情報（振り分け先定義情報）や、アクセスの振り分け先を決定するために参照される振り分け情報などを記憶する。また、記憶部１２０は、ノード３００，３００ａ，３００ｂ，…におけるレコードの値や負荷などを監視するための監視条件の情報（監視条件情報）を記憶する。
【００５２】
ＤＢ管理部１３０は、ＤＢ複製およびスケールインの実行を制御する。ＤＢ複製の実行タイミングとしては、スケジュールされた時刻に達したタイミング、および、ＤＢアクセス負荷が閾値を超えたタイミングがある。スケールインの実行タイミングとしては、スケジュールされた時刻に達したタイミング、および、ＤＢアクセス負荷が閾値以下になったタイミングがある。
【００５３】
アクセス制御部１４０は、ＤＢ複製先のノードに対するクエリの振り分けを行う。クエリの振り分け方法としては、ラウンドロビンやクエリの振り分け数が最小のノードに振り分ける方法などがある。
【００５４】
ＤＢ監視部１５０は、ＤＢアクセス負荷を監視する。ＤＢ監視部１５０は、監視結果に応じて、ＤＢ複製やスケールインの実行を、ＤＢ管理部１３０に指示する。
なお、第２の実施の形態では、制御装置１００がＤＢ管理部１３０、アクセス制御部１４０およびＤＢ監視部１５０を有するものとしたが、ＤＢ管理部１３０、アクセス制御部１４０およびＤＢ監視部１５０それぞれを別個の情報処理装置により実現してもよい。
【００５５】
図５は、ＤＢ装置の機能例を示す図である。
ＤＢ装置２００は、ＤＢ記憶部２１０およびＤＢＭＳ２２０を有する。ＤＢ記憶部２１０は、ＤＢ装置２００が備えるＲＡＭやＨＤＤなどの記憶領域により実現される。ＤＢＭＳ２２０は、ＤＢ装置２００が備えるＲＡＭに記憶されたプログラムがＤＢ装置２００のＣＰＵにより実行されることで実現される。
【００５６】
ＤＢ記憶部２１０は、ユーザのデータが登録された複数のテーブルを記憶する。各テーブルは複数のレコードを含む。
ＤＢＭＳ２２０は、ＤＢ記憶部２１０に記憶されたテーブルに対するアクセスを行う。
【００５７】
図６は、ノードの機能例を示す図である。
ノード３００は、複製ＤＢ装置３１０を有する。複製ＤＢ装置３１０は、ＤＢ装置２００の複製である。複製ＤＢ装置３１０のスペックは、ＤＢ装置２００と同等でもよいし、ＤＢ装置２００とは異なっていてもよい（ＤＢ装置２００よりスペックが低くてもよいし、高くてもよい）。ノード３００は、複数の複製ＤＢ装置を実現することができる。例えば、ノード３００は、それぞれがＣＰＵ、ＲＡＭおよびフラッシュメモリなどのハードウェアを備えた複数のブレード（物理マシン）を有し、複数のブレードにより複数の複製ＤＢ装置を実現してもよい。あるいは、ノード３００は、複数の仮想マシンを動作させ、複数の仮想マシンにより複数の複製ＤＢ装置を実現してもよい。
【００５８】
複製ＤＢ装置３１０は、ＤＢ記憶部３２０およびＤＢＭＳ３３０を有する。ＤＢ記憶部３２０は、ＤＢ記憶部２１０に記憶されたテーブルの複製を記憶する。ただし、当該テーブルの複製には、分割して配置される対象のレコードのみが登録される。
【００５９】
ＤＢＭＳ３３０は、ＤＢ記憶部３２０に記憶されたテーブルに対するアクセスを行う。
なお、ノード３００ａ，３００ｂ，…もノード３００と同様の機能を有する。
図７は、振り分け先定義情報の例を示す図である。
【００６０】
振り分け先定義情報１２１は、記憶部１２０に格納される。振り分け先定義情報１２１は、複数のノードへの振り分け対象となるＤＢ装置２００上のテーブルおよび当該テーブルにおけるカラム名の定義、および、振り分け先のホスト名、ＤＢ名、テーブル名およびカラム名の定義を含む。
【００６１】
例えば、振り分け対象の定義は、［ｒｅｑｕｅｓｔ＿ｔａｒｇｅｔ］のフィールドに設定される。例えば、振り分け対象の定義は、「テーブル名（カラム名＝‘値’）」のフォーマットである。一例では、振り分け対象の定義は、「ｉｔｅｍ（ｉｔｅｍ＿ｃｏｄｅ＝‘００１−Ｘ−Ｓ’）」である。
【００６２】
また、振り分け先の定義は、「ａｌｌｏｃａｔｉｏｎ＿ｔａｒｇｅｔ」のフィールドに設定される。例えば、振り分け先の定義は、「ホスト名＠ＤＢ名：テーブル名（カラム名＝‘値’）」のフォーマットである。一例では、振り分け先の定義は、「ｏｒｉｇｉｎａｌ＿ＤＢ＠ｔｉｃｋｅｔ：ｉｔｅｍ（ｉｔｅｍ＿ｃｏｄｅ＃０＝‘００１−Ｘ−Ｓ’）」である。この振り分け先の定義は、複製元のＤＢ装置２００（ｏｒｉｇｉｎａｌ＿ＤＢ）に振り分け対象のカラムを振り分ける際の定義であり、ＤＢ装置２００に振り分け対象のカラムを振り分けない場合には、当該定義はなくてもよい。また、他の例では、振り分け先の定義は、「ｒｅｐｌｉｃａ＿ＤＢ＿Ａ＠ｔｉｃｋｅｔ：ｉｔｅｍ＃１（ｉｔｅｍ＿ｃｏｄｅ＃１＝‘００１−Ｘ−Ｓ’）」である。この振り分け先の定義は、振り分け先のノード（ｒｅｐｌｉｃａ＿ＤＢ＿Ａ）に振り分け対象のカラムを振り分ける際の定義である。
【００６３】
図７の例は、１つのノードに２つのＤＢを用意し、各ＤＢに２つのテーブルを設けることで、１ノード当たり、４つのレコードを配置する例である。複製元のＤＢ装置２００に対するレコードの配置を含めれば、カラム名「ｉｔｅｍ＿ｃｏｄｅ＝‘００１−Ｘ−Ｓ’」に対応する値（例えば、在庫数とする）が、合計で９個の値に分割されることになる。ただし、レコードの配置例は、上記の例に限らず、複製元のＤＢ装置２００における１つのレコードに対し、１つのノードに１つのレコードを配置してもよいし、１つのノードに４以外の複数のレコードを配置してもよい。
【００６４】
図８は、アイテムテーブル（複製前）の例を示す図である。
アイテム（ｉｔｅｍ）テーブル２１１は、ＤＢ記憶部２１０に格納される。アイテムテーブル２１１は、各ノードに対してレコードの複製を行う前の状態を示す。アイテムテーブル２１１は、チケットの単価（ｐｒｉｃｅ）の在庫数（ｑｔｙ）を管理するためのテーブルである。アイテムテーブル２１１は、ｉｔｅｍ＿ｃｏｄｅ、ｉｔｅｍ＿ｎａｍｅ、ｐｒｉｃｅおよびｑｔｙのカラム（項目）を含む。
【００６５】
ｉｔｅｍ＿ｃｏｄｅのカラムには、アイテム（チケット）の識別情報（ｉｔｅｍ＿ｃｏｄｅ）が登録される。ｉｔｅｍ＿ｎａｍｅのカラムには、アイテムの名称が登録される。ｐｒｉｃｅのカラムには、アイテムの単価が登録される。ｑｙｔのカラムには、アイテムの在庫数が登録される。
【００６６】
例えば、アイテムテーブル２１１には、ｉｔｅｍ＿ｃｏｄｅ「００１−Ｘ−Ｚ」、ｉｔｅｍ＿ｎａｍｅ「Ｘ日程（ＳＳ席）」、ｐｒｉｃｅ「１２０００」、ｑｔｙ「２０００」というレコードが登録されている。
【００６７】
振り分け先定義情報１２１では、振り分け対象として、「ｉｔｅｍ＿ｃｏｄｅ＝‘００１−Ｘ−Ｓ’」が指定されている。このため、アイテムテーブル２１１の各レコードのうち、値が分割されるレコードは、「ｉｔｅｍ＿ｃｏｄｅ＝‘００１−Ｘ−Ｓ’」のレコードである。例えば、振り分け先定義情報１２１には、比較的アクセスが集中し易いレコードが、分割対象のレコードとして予め登録される。例えば、ＤＢ管理部１３０は、ＤＢ装置２００の各レコードに対するアクセス頻度を監視し、当該アクセス頻度が所定の閾値よりも大きいレコードを分割対象とし、アクセス頻度が所定の閾値以下のレコードを分割非対象とすることが考えられる。
【００６８】
図９は、アイテムテーブル（複製後）の第１の例を示す図である。
アイテムテーブル２１２は、ＤＢ記憶部２１０に格納される。アイテムテーブル２１２は、ＤＢ装置２００および各ノードに対して、アイテムテーブル２１１のあるレコードの複製を行った後の状態を示す。アイテムテーブル２１２は、ｉｔｅｍ＿ｃｏｄｅ、ｉｔｅｍ＿ｃｏｄｅ＃０、ｉｔｅｍ＿ｎａｍｅ、ｐｒｉｃｅおよびｑｔｙのカラムを含む。
【００６９】
ｉｔｅｍ＿ｃｏｄｅ、ｉｔｅｍ＿ｎａｍｅ、ｐｒｉｃｅおよびｑｔｙのカラムに登録される情報は、アイテムテーブル２１１と同様である。ｉｔｅｍ＿ｃｏｄｅ＃０のカラムには、振り分け先定義情報１２１で指定された振り分け先カラムの値が登録される。例えば、振り分け先定義情報１２１では、ＤＢ装置２００に対する振り分け先カラム（ｉｔｅｍ＿ｃｏｄｅ＃０）の値としてｉｔｅｍ＿ｃｏｄｅのカラムの値と同一の値「００１−Ｘ−Ｓ」が指定されている。このため、分割された値を含むレコードのｉｔｅｍ＿ｃｏｄｅ＃０のカラムには、「００１−Ｘ−Ｓ」が登録される。図９の例では、元のｑｔｙの値に対して、分割され、ＤＢ装置２００に振り分けられたｑｔｙの値は「４０００」である。
【００７０】
なお、振り分け先定義情報１２１において、振り分けた対象として指定されていないレコードについてはｉｔｅｍ＿ｃｏｄｅ＃０のカラムの設定値は、設定なし（図中「−」（ハイフン）記号で表す）となる。また、値（在庫数）の分割元となったレコードについても、ｉｔｅｍ＿ｃｏｄｅ＃０のカラムの設定値は、設定なしとなる。更に、分割された値を含むレコードでは、分割対象となる在庫数（ｑｔｙ）の値を含めばよく、ｉｔｅｍ＿ｎａｍｅやｐｒｉｃｅのカラムは、設定なしとなる。
【００７１】
値の分割元となったレコードのカラムｑｔｙの設定値は、分割されたｑｔｙの値の合計（１００００）を示す。当該分割元のレコードは、後述される参照用レコードとして用いることができる。図９の例では、１００００−４０００＝６０００が、各ノード（およびＤＢ装置２００）に振り分けられたことを意味する。
【００７２】
アイテムテーブル２１２では、「ｉｔｅｍ＿ｃｏｄｅ」および「ｉｔｅｍ＿ｃｏｄｅ＃０」の組を複合キーとして用いて、ｑｔｙなどの値の操作を行える。
図１０は、アイテムテーブル（複製後）の第２の例を示す図である。
【００７３】
アイテムテーブル３２１は、ＤＢ記憶部３２０に格納される。アイテムテーブル３２１は、アイテムテーブル２１１のあるレコードの複製を行った後の状態を示す。アイテムテーブル３２１は、ｉｔｅｍ＿ｃｏｄｅ、ｉｔｅｍ＿ｃｏｄｅ＃１、ｉｔｅｍ＿ｃｏｄｅ＃２およびｑｔｙのカラムを含む。
【００７４】
ｉｔｅｍ＿ｃｏｄｅおよびｑｔｙのカラムに登録される情報は、アイテムテーブル２１１と同様（ただし、ｑｔｙについては、ノード３００に振り分けられた値となる）である。ｉｔｅｍ＿ｃｏｄｅ＃１およびｉｔｅｍ＿ｃｏｄｅ＃２のカラムには、分割された値の振り分け先のレコードに対応する設定値が登録される。振り分け先定義情報１２１の例では、ノード３００に対する振り分け先カラム（ｉｔｅｍ＿ｃｏｄｅ＃１およびｉｔｅｍ＿ｃｏｄｅ＃２）の値としてアイテムテーブル２１１におけるｉｔｅｍ＿ｃｏｄｅのカラムの値と同一の値「００１−Ｘ−Ｓ」が指定されている。このため、分割された値を含むレコードのｉｔｅｍ＿ｃｏｄｅ＃１のカラムおよびｉｔｅｍ＿ｃｏｄｅ＃２のカラムには、「００１−Ｘ−Ｓ」が登録される。なお、ｉｔｅｍ＿ｃｏｄｅ＃１のカラムおよびｉｔｅｍ＿ｃｏｄｅ＃２のカラムには、何れか１つのみが設定値をもち、それ以外のカラムは設定なしとなる。また、図１０の例では、元のｑｔｙの値に対して、分割され、ノード３００に振り分けられたｑｔｙの値は７５０＋７５０＝１５００である。
【００７５】
アイテムテーブル３２１では、「ｉｔｅｍ＿ｃｏｄｅ」、「ｉｔｅｍ＿ｃｏｄｅ＃１」および「ｉｔｅｍ＿ｃｏｄｅ＃２」の組を複合キーとして用いて、ｑｔｙなどの値の操作を行える。
【００７６】
図１１は、クエリの例を示す図である。
クエリｑ１は、ＡＰサーバ５００により、制御装置１００に対して発行されるチケット購入時のクエリの一例を示す。例えば、クエリｑ１は、「ＵＰＤＡＴＥ  ｉｔｅｍ  ＳＥＴ  ｑｔｙ＝ｑｔｙ−２  ＷＨＥＲＥ  ｉｔｅｍ＿ｃｏｄｅ＝‘００１−Ｘ−Ｓ’」であり、ｉｔｅｍ＿ｃｏｄｅ＝‘００１−Ｘ−Ｓ’のレコードについて、ｑｔｙから２を減算することを示す。
【００７７】
アクセス制御部１４０は、振り分け先定義情報１２１（または振り分け先定義情報１２１から作成される振り分け情報）に基づいて、クエリｑ１を変換し、各ノードの振り分け先のレコードを指定したクエリを生成する。例えば、アクセス制御部１４０は、クエリｑ１を、振り分け先のＤＢ名、テーブル名およびレコードに対応するキー（単一のキーでもよいし、複合キーでもよい）を指定したクエリに変換し、当該レコードを保持するノードに変換後のクエリを送信する。これにより、アクセス制御部１４０は、クエリｑ１に応じた処理を、何れかのノードに振り分ける。
【００７８】
なお、アクセス制御部１４０は、振り分け先を決定する際に、振り分け先のノードが保持するレコード値も考慮する。例えば、更新要求がレコード値の減算の場合に、アクセス制御部１４０は、減算量よりも大きなレコード値を保持する振り分け先候補から、振り分け先を選択する。減算量よりも大きなレコード値を保持する振り分け先候補が存在しない場合、アクセス制御部１４０は、複数の振り分け先候補を振り分け先として選択する。
【００７９】
次に、制御装置１００の処理手順を説明する。
図１２は、ＤＢ複製判定処理の例を示すフローチャートである。
下記のステップＳ１０が実行される直前では、各ノードにおいて複製ＤＢ装置が動作しておらず、ＤＢ装置２００のみでＤＢへのアクセスを受け付けているものとする。この場合に、制御装置１００は、下記の処理を定期的に実行する。
【００８０】
（Ｓ１０）ＤＢ管理部１３０は、ＤＢ複製日時の設定があるか否かを判定する。ＤＢ複製日時の設定がある場合、ステップＳ１１に処理が進む。ＤＢ複製日時の設定がない場合、ステップＳ１２に処理が進む。ここで、ＤＢ複製日時の設定は、各ノードにおける複製ＤＢの起動時刻（起動スケジュール）の設定を示す。当該起動時刻が記憶部１１０に設定されている場合、ＤＢ複製日時の設定があることになり、当該起動時刻が記憶部１１０に設定されていない場合、ＤＢ複製日時の設定がないことになる。
【００８１】
（Ｓ１１）ＤＢ管理部１３０は、ＤＢ複製日時に到達したか否かを判定する。ＤＢ複製日時に到達した場合、ステップＳ１５に処理が進む。ＤＢ複製日時に到達していない場合、ステップＳ１２に処理が進む。
【００８２】
（Ｓ１２）ＤＢ管理部１３０は、アクセス負荷に応じたＤＢ複製の設定があるか否かを判定する。アクセス負荷に応じたＤＢ複製の設定がある場合、ステップＳ１３に処理が進む。アクセス負荷に応じたＤＢ複製の設定がない場合、ＤＢ複製判定処理が終了する。ここで、アクセス負荷に応じたＤＢ複製の設定とは、ＤＢ装置２００の負荷が閾値に達した場合における複製ＤＢの起動設定であり、記憶部１１０に予め設定される。記憶部１１０に当該起動設定がある場合に、アクセス負荷に応じたＤＢ複製の設定があることになり、当該起動設定がない場合、アクセス負荷に応じたＤＢ複製の設定がないことになる。アクセス負荷としては、例えば、ＤＢ装置２００のＣＰＵ負荷、ＤＢ装置２００における処理待ちアクセス要求（クエリ）の数、ＤＢ装置２００のＮＩＣの負荷など、種々の情報を用いることができる。
【００８３】
（Ｓ１３）ＤＢ管理部１３０は、ＤＢ装置２００のアクセス負荷の情報を取得する。
（Ｓ１４）ＤＢ管理部１３０は、ＤＢ装置２００のアクセス負荷が閾値を超過しているか否かを判定する。アクセス負荷が閾値を超過している場合、ステップＳ１５に処理が進む。アクセス負荷が閾値を超過していない場合、ＤＢ複製判定処理が終了する。
【００８４】
（Ｓ１５）ＤＢ管理部１３０は、振り分け先定義情報１２１に基づいてＤＢ複製処理を実行する。処理の詳細は後述される。そして、ＤＢ複製判定処理が終了する。
図１３は、ＤＢ複製処理の例を示すフローチャートである。
【００８５】
ＤＢ複製処理は、ステップＳ１５に相当する。
（Ｓ２０）ＤＢ管理部１３０は、振り分け先定義情報１２１に基づいて、各ノードにおいてＤＢ装置２００の複製（複製ＤＢ装置）を起動させる。複製ＤＢ装置を起動させるノードは、振り分け先定義情報１２１における「ａｌｌｏｃａｔｉｏｎ＿ｔａｒｇｅｔ」のホスト名によって予め定められる。
【００８６】
（Ｓ２１）ＤＢ管理部１３０は、ステップＳ２０で起動させた複製ＤＢ装置においてＤＢＭＳを起動させる（ＤＢＭＳ複製）。前述のように、ＤＢ管理部１３０は、１つのノードにより複数のＤＢＭＳを起動させることもできる。
【００８７】
（Ｓ２２）ＤＢ管理部１３０は、ステップＳ２１で起動させたＤＢＭＳにより、振り分け先定義情報１２１で指定されたテーブルを複製する。ただし、複製先のテーブルには、前述の複合キーと分割対象の値のカラムが存在していればよく、それ以外のカラムはなくてもよい。また、前述のように、ＤＢ装置２００にも分割した値を振り分ける場合、ＤＢ管理部１３０は、ＤＢ装置２００の複製元のテーブルに、複合キー用のキーを登録するカラムを追加することもある。
【００８８】
（Ｓ２３）ＤＢ管理部１３０は、ステップＳ２２で複製したテーブルに対してレコードを複製する。分割対象のカラムの値としては、該当のノード（またはＤＢ装置２００）に対して振り分ける分割後の値が登録される。各ノード（またはＤＢ装置２００）に対して振り分ける分割後の値（あるいは、分割元の値に対して各ノードやＤＢ装置２００に振り分ける分割後の値の割合など）は、記憶部１１０に予め設定される。また、ＤＢ管理部１３０は、記憶部１２０に記憶された振り分け情報に振り分け対象のキーに対する振り分け先の情報（振り分け先のノード名、ＤＢ名、テーブル名およびレコードを示すキー）を、振り分け先のレコード毎に、追加する。
【００８９】
（Ｓ２４）ＤＢ管理部１３０は、ＤＢ装置２００に参照用レコードがあるか否かを判定する。参照用レコードがある場合、ステップＳ２６に処理が進む。参照用レコードがない場合、ステップＳ２５に処理が進む。参照用レコードとは、分割対象となったレコードの分割された値の合計値が登録されるレコードであり、当該合計値の参照に用いられる。
【００９０】
（Ｓ２５）ＤＢ管理部１３０は、複製元のＤＢ装置２００に参照用レコードを追加する。そして、ステップＳ２６に処理が進む。
（Ｓ２６）ＤＢ管理部１３０は、ＤＢ監視部１５０による参照用レコードの更新監視を開始させる。以後、ＤＢ監視部１５０は、各ノード（またはＤＢ装置２００）において分割された値が更新された場合に、参照用レコードの更新を行う。そして、ＤＢ複製処理が終了する。
【００９１】
図１４は、ＤＢ複製の例を示す図である。
図１４の例、ＤＢ装置２００に、テーブルＴが存在しており、テーブルＴには、分割対象のレコードＭが存在しているものとする。レコードＭは、あるアイテムの在庫数６０００が登録されている。また、レコードＭの在庫数は、振り分け先定義情報１２１に基づく分割対象になっており、２つの複製ＤＢ装置へ４つずつ、ＤＢ装置へ１つ、合計で９分割されるものとする。各装置への分割割合は予め定められる。例えば、複製ＤＢ装置については振り分け先の１レコード当たり複製元の値の１２分の１が、ＤＢ装置２００については振り分け先の１レコード当たり複製元の値の３分の１が、それぞれ割り当てられるものとする。
【００９２】
制御装置１００は、スケジュールされた時刻に達するか、または、ＤＢ装置２００の負荷が高まると、レコードＭの在庫数６０００を、ノード３００，３００ａおよびＤＢ装置２００に分割して振り分ける。上記の割合でいえば、ノード３００，３００ａについては振り分け先の１レコード当たり５００が、ＤＢ装置２００については２０００が、それぞれ振り分けられる。
【００９３】
まず、制御装置１００は、ノード３００において複製ＤＢ装置３１０を起動し、テーブルＴ１，Ｔ２を作成させる。また、制御装置１００は、ノード３００ａにおいて複製ＤＢ装置３１０ａを起動し、テーブルＴ３，Ｔ４を作成させる。
【００９４】
そして、制御装置１００は、テーブルＴ１にレコードＭ１＃１およびレコードＭ１＃２を登録し、レコードＭ１＃１およびレコードＭ１＃２の各々に、該当のアイテムの在庫数５００を振り分ける。
【００９５】
また、制御装置１００は、テーブルＴ２にレコードＭ２＃１およびレコードＭ２＃２を登録し、レコードＭ２＃１およびレコードＭ２＃２の各々に、該当のアイテムの在庫数５００を振り分ける。
【００９６】
また、制御装置１００は、テーブルＴ３にレコードＭ３＃１およびレコードＭ３＃２を登録し、レコードＭ３＃１およびレコードＭ３＃２の各々に、該当のアイテムの在庫数５００を振り分ける。
【００９７】
また、制御装置１００は、テーブルＴ４にレコードＭ４＃１およびレコードＭ４＃２を登録し、レコードＭ４＃１およびレコードＭ４＃２の各々に、該当のアイテムの在庫数５００を振り分ける。
【００９８】
更に、制御装置１００は、ＤＢ装置２００のテーブルＴのレコードＭの該当のアイテムの在庫数を２０００とし、当該テーブルＴに、該当のアイテムの在庫数の合計６０００を登録した参照用レコードＮを追加する。
【００９９】
制御装置１００は、振り分け先定義情報１２１に基づいて、レコードＭ，Ｍ１＃１，Ｍ１＃２，Ｍ２＃１，Ｍ２＃２，Ｍ３＃１，Ｍ３＃２，Ｍ４＃１，Ｍ４＃２の対応関係（ホスト名、ＤＢ名や振り分け先のテーブル名やレコードを示す情報（複合キーなど））を示す振り分け情報１２２を生成する。
【０１００】
制御装置１００は、テーブルＴ１のレコードＭに対するアクセスを、振り分け情報１２２に基づいて、ノード３００，３００ａおよびＤＢ装置２００に振り分けることができる。また、制御装置１００は、該当のアイテムに対する参照用のクエリに対しては、参照用レコードＮを参照して、参照結果を応答する。振り分け情報１２２には、該当のアイテムに対する参照用レコードＮの所在を示す情報も登録される。
【０１０１】
次に、制御装置１００によるＤＢアクセス処理の手順を説明する。
図１５は、ＤＢアクセス処理の例を示すフローチャートである。
以下では、分割対象のレコードに対するアクセス要求を受信した場合の制御装置１００の処理を説明する。分割対象でないレコードに対するアクセス要求を受信した場合、制御装置１００は、該当のアクセス要求をＤＢ装置２００に転送すればよい。
【０１０２】
（Ｓ３０）アクセス制御部１４０は、ＡＰサーバ５００からＤＢに対するアクセス要求（クエリ）を受信する。
（Ｓ３１）アクセス制御部１４０は、受信したアクセス要求が更新要求であるか否かを判定する。更新要求である場合、ステップＳ３２に処理が進む。参照要求である場合、ステップＳ３６に処理が進む。更新要求とは、ＤＢに登録された値の更新を伴うアクセス要求である。参照要求とは、ＤＢに登録された値の更新を伴わないアクセス要求である。
【０１０３】
（Ｓ３２）アクセス制御部１４０は、振り分け情報１２２に基づき更新要求を複製ＤＢ装置に振り分ける。該当のレコードについて、ＤＢ装置２００も振り分け先になっている場合、ＤＢ装置２００も更新要求の振り分け先の候補となり得る。ここで、振り分け方法のアルゴリズムとしては、ラウンドロビンやクエリの振り分け数が最小のノードに振り分ける方法などを採用することができる。
【０１０４】
（Ｓ３３）アクセス制御部１４０は、更新要求を振り分けた複製ＤＢ装置（またはＤＢ装置２００）から更新要求に応じた更新結果を取得する。
（Ｓ３４）アクセス制御部１４０は、ＡＰサーバ５００に更新結果を応答する。
【０１０５】
（Ｓ３５）ＤＢ監視部１５０は、更新結果に応じて、ＤＢ装置２００における該当のアイテムの参照用レコードを更新する。そして、ＤＢアクセス処理が終了する。
（Ｓ３６）アクセス制御部１４０は、振り分け情報１２２に基づき参照要求をＤＢ装置２００に振り分ける。
【０１０６】
（Ｓ３７）アクセス制御部１４０は、ＤＢ装置２００から参照要求に応じた参照結果を取得する。
（Ｓ３８）アクセス制御部１４０は、ＡＰサーバ５００に参照結果を応答する。そして、ＤＢアクセス処理が終了する。
【０１０７】
図１６は、ＤＢアクセスの例を示す図である。
制御装置１００は、Ｗｅｂサーバ４００およびＡＰサーバ５００を介して、クライアント６００，７００，…のＷｅｂアクセスに応じた更新要求を受信する。図１６の例では、制御装置１００が、ほぼ同時に８つの更新要求を受け付けた場合を例示している。例えば、制御装置１００は、ラウンドロビンによって、当該８つの更新要求を、複製ＤＢ装置３１０，３１０ａにおけるレコードＭ１＃１，Ｍ１＃２，Ｍ２＃１，Ｍ２＃２，Ｍ３＃１，Ｍ３＃２，Ｍ４＃１，Ｍ４＃２にそれぞれ振り分ける（図中、更新アクセスを実線矢印で示すことがある）。
【０１０８】
例えば、第１の更新要求により、レコードＭ１＃１の在庫数が５００から４９８に更新される。第２の更新要求により、レコードＭ１＃２の在庫数が５００から４９６に更新される。第３の更新要求により、レコードＭ２＃１の在庫数が５００から４９７に更新される。第４の更新要求により、レコードＭ２＃２の在庫数が５００から４９５に更新される。第５の更新要求により、レコードＭ３＃１の在庫数が５００から４９６に更新される。第６の更新要求により、レコードＭ３＃２の在庫数が５００から４９７に更新される。第７の更新要求により、レコードＭ４＃１の在庫数が５００から４９５に更新される。第８の更新要求により、レコードＭ４＃２の在庫数が５００から４９６に更新される。
【０１０９】
制御装置１００は、複製ＤＢ装置３１０，３１０ａから８つの更新要求に応じた８つの更新結果を受信し、ＡＰサーバ５００に８つの更新結果を応答する。また、制御装置１００は、８つの更新結果をマージして、該当のアイテムの在庫数が８つの更新要求により合計で３０だけ減少したことを特定する。すると、制御装置１００は、ＤＢ装置２００が保持する参照用レコードＮにおける当該アイテムの在庫数から３０を減少させ（更新結果の到着順に更新結果毎の減少量を順次減少させてもよい）、参照用レコードＮにおける当該アイテムの在庫数を５９７０に更新する。
【０１１０】
制御装置１００は、何れかのクライアントからＷｅｂサーバ４００およびＡＰサーバ５００を介して、振り分け対象のアイテムを指定した参照要求を受信すると、ＤＢ装置２００の参照用レコードＮを参照する。制御装置１００は、ＡＰサーバ５００およびＡＰサーバ５００を介して参照結果を参照要求元のクライアントに応答する（図中、参照アクセスを点線矢印で示すことがある）。
【０１１１】
なお、図９，１０のテーブル例に対して、制御装置１００は、複製ＤＢ装置３１０，３１０ａにおける１つのテーブルで複数の分割された値を含むレコードが複数存在するため複合キーを用いて、当該レコードに対する更新要求を発行し得る。一方、１つのテーブルにおいて分割された値を含むレコードを１つだけ配置する場合には、制御装置１００は、複合キーを用いずに、複製元のテーブルにおける主キーのみで当該レコードに対する更新要求を発行することができる。
【０１１２】
図１７は、ＤＢアクセスの他の例を示す図である。
例えば、ＤＢ装置２００は、品番および在庫のカラムを有する商品テーブル２１３を記憶する。商品テーブル２１３では、品番「００１−Ｘ−Ｓ」のレコードに対して比較的アクセスが集中し易い。商品テーブル２１３には、当初、品番「００１−Ｘ−Ｓ」のレコードに対して、在庫「１００００」のレコードのみが存在する。制御装置１００は、ＤＢ装置２００の負荷に応じて、商品テーブル２１３の品番「００１−Ｘ−Ｓ」のレコードを、ＤＢ装置２００および複製ＤＢ装置３１０，３１０ａに分割して配置する。
【０１１３】
分割後では、商品テーブル２１３は、品番「００１−Ｘ−Ｓ」および在庫「４０００」のレコードと、品番「００１−Ｘ−Ｓ」および在庫「１００００」（分割前の合計）のレコードとを含む。また、分割後では、複製ＤＢ装置３１０は商品テーブル３２２を記憶する。商品テーブル３２２は、品番「００１−Ｘ−Ｓ」および在庫「３０００」のレコードを含む。更に、分割後では、複製ＤＢ装置３１０ａは商品テーブル３２２ａを記憶する。商品テーブル３２２ａは、品番「００１−Ｘ−Ｓ」および在庫「３０００」のレコードを含む。すると、制御装置１００は、品番「００１−Ｘ−Ｓ」をキーとした在庫を更新する更新要求を、複製ＤＢ装置３１０，３１０ａに振り分け可能になる（この場合、ＤＢ装置２００を振り分け候補に含めてもよい）。
【０１１４】
ところで、制御装置１００は、参照用レコードの在庫数を種々のタイミングで更新し、参照用レコードの在庫数を最新の状態にする。そこで、次に、制御装置１００による参照用レコードの更新処理の手順を説明する。
【０１１５】
図１８は、参照用レコード更新処理の例を示すフローチャートである。
以下に示す参照用レコード更新処理の各判定処理は、記憶部１２０に記憶された監視条件情報の設定に基づいて実行される。
【０１１６】
（Ｓ４０）ＤＢ監視部１５０は、参照用レコードの定期更新設定があるか否かを判定する。定期更新設定がある場合、ステップＳ４１に処理が進む。定期更新設定がない場合、ステップＳ４２に処理が進む。
【０１１７】
（Ｓ４１）ＤＢ管理部１３０は、参照用レコードの定期更新を行う。具体的には、ＤＢ管理部１３０は、参照用レコードに対応する振り分け先のレコードを振り分け情報１２２から特定し、当該振り分け先のレコードにおける該当のアイテムに対応する値を取得する。ＤＢ管理部１３０は、取得した値を合計した値で参照用レコードを更新する。そして、ステップＳ４２に処理が進む。
【０１１８】
（Ｓ４２）ＤＢ監視部１５０は、複製レコード更新時の更新設定があるか否かを判定する。複製レコード更新時の更新設定がある場合、ステップＳ４３に処理が進む。複製レコード更新時の更新設定がない場合、ステップＳ４４に処理が進む。ここで、複製レコードとは、複製元のレコードにおける分割対象の値が分割されて複製ＤＢ装置またはＤＢ装置２００に配置されたレコードである。複製レコード更新時とは、ＡＰサーバ５００からの更新要求を複製ＤＢ装置に振り分け、当該更新要求に応じた更新結果を取得したタイミングである。
【０１１９】
（Ｓ４３）ＤＢ管理部１３０は、更新後レコードの値に基づき参照用レコードの値を更新する。そして、ステップＳ４４に処理が進む。
（Ｓ４４）ＤＢ監視部１５０は、複製レコード値の定期取得設定があるか否かを判定する。複製レコード値の定期取得設定がある場合、ステップＳ４５に処理が進む。複製レコード値の定期取得設定がない場合、ステップＳ４６に処理が進む。複製レコード値の定期取得設定とは、複製ＤＢ装置に分割して配置した各レコードの値を定期的に取得する設定を示す。
【０１２０】
（Ｓ４５）ＤＢ監視部１５０は、複製ＤＢ装置における各レコードの値の定期取得結果に基づき、参照用レコードの更新をＤＢ管理部１３０に指示する。ＤＢ管理部１３０は、指示に応じて、参照用レコードを更新する。そして、ステップＳ４６に処理が進む。
【０１２１】
（Ｓ４６）ＤＢ監視部１５０は、参照用レコードの参照時の更新設定があるか否かを判定する。参照用レコードの参照時の更新設定がある場合、ステップＳ４７に処理が進む。参照用レコードの参照時の更新設定がない場合、ステップＳ４８に処理が進む。参照用レコードの参照時の更新設定とは、ＡＰサーバ５００から参照要求を受け付けた際、ＤＢ装置２００に参照要求のクエリを送信する前に、参照用レコードを更新するか否かの設定を示す。
【０１２２】
（Ｓ４７）ＤＢ監視部１５０は、参照時に、参照用レコードの更新をＤＢ管理部１３０に指示する。ＤＢ管理部１３０は、指示に応じて、各複製ＤＢ装置から複製レコード値を取得し、参照用レコードを更新する。そして、ステップＳ４８に処理が進む。
【０１２３】
（Ｓ４８）ＤＢ監視部１５０は、ＤＢ構成変更時の更新設定があるか否かを判定する。ＤＢ構成変更時の更新設定がある場合、ステップＳ４９に処理が進む。ＤＢ構成変更時の更新設定がない場合、ステップＳ５０に処理が進む。ＤＢ構成変更時とは、例えば、複製ＤＢ装置のスケールインを行うときである。
【０１２４】
（Ｓ４９）ＤＢ監視部１５０は、ＤＢ構成変更時に、参照用レコードの更新をＤＢ管理部１３０に指示する。ＤＢ管理部１３０は、指示に応じて、複製レコード値を取得し、参照用レコードを更新する。そして、ステップＳ５０に処理が進む。
【０１２５】
（Ｓ５０）ＤＢ監視部１５０は、複製レコードへの要求受付時の更新設定があるか否かを判定する。複製レコードへの要求受付時の更新設定がある場合、ステップＳ５１に処理が進む。複製レコードへの要求受付時の更新設定がない場合、参照用レコード更新処理が終了する。複製レコードへの更新受付時の更新設定とは、複製ＤＢ装置に分割して配置した各レコードに対する更新要求または参照要求の受付時に、参照用レコードを更新するか否かの設定を示す。
【０１２６】
（Ｓ５１）ＤＢ監視部１５０は、複製レコードへの要求受付時に、参照用レコードの更新をＤＢ管理部１３０に指示する。ＤＢ管理部１３０は、指示に応じて、要求対象の複製レコード値を取得し、取得した複製レコードに基づいて、参照用レコードを更新する。そして、参照用レコード更新処理が終了する。
【０１２７】
図１９は、参照用レコードの更新例を示す図である。
制御装置１００は、監視条件情報１２３に設定された参照用レコードの更新条件（図１８で例示した各判定処理に対応する条件）が満たされたときに、複製ＤＢ装置３１０，３１０ａにおける各レコードの在庫数、および、ＤＢ装置２００における在庫数を参照する。制御装置１００は、当該参照結果に応じて、参照用レコードＮを更新する。例えば、図１９の例の場合、制御装置１００は、レコードＭ＃０，Ｍ１＃１，Ｍ１＃２，Ｍ２＃１，Ｍ２＃２，Ｍ３＃１，Ｍ３＃２，Ｍ４＃１，Ｍ４＃２それぞれから、該当のアイテムの在庫数２０００，４９８，４９６，４９７，４９５，４９６，４９７，４９５，４９６を取得する。制御装置１００は、取得した在庫数の合計５９７０を参照用レコードＮに登録することで参照用レコードＮの更新前の在庫数６０００を、５９７０に更新する。
【０１２８】
ある複製ＤＢ装置が保持する複製レコードにおける値が小さくなると、当該複製ＤＢ装置により該当のアイテムに対する値の更新要求を処理できなくなる可能性が高まる。更新要求を処理できない複製ＤＢ装置が存在すると、更新処理の並列度が低下し得る。そこで、制御装置１００は、複製ＤＢ装置のレコード値を調整することで、更新処理の並列度の低下を抑制する。次に、制御装置１００によるレコード値の調整のための処理手順を説明する。
【０１２９】
図２０は、レコード値調整監視処理の例を示すフローチャートである。
以下に示すレコード値調整監視処理の各判定処理は、記憶部１２０に記憶された監視条件情報の設定に基づいて実行される。
【０１３０】
（Ｓ６０）ＤＢ監視部１５０は、各複製ＤＢ装置における複製レコード値を監視する。
（Ｓ６１）ＤＢ監視部１５０は、複製レコード値が閾値以上であるか否かを判定する。複製レコード値が閾値以上である場合、ステップＳ６２に処理が進む。複製レコード値が閾値よりも大きい場合、ステップＳ６４に処理が進む。例えば、閾値は、初期値（該当の複製ＤＢ装置に最初に振り分けられた値）の半分の値などとすることが考えられる。
【０１３１】
（Ｓ６２）ＤＢ監視部１５０は、制御装置１００による各複製ＤＢ装置に対するアクセス負荷を監視する。
（Ｓ６３）ＤＢ監視部１５０は、アクセス負荷が閾値以下であるか否かを判定する。制御装置１００の負荷が閾値を超過している場合、ステップＳ６４に処理が進む。制御装置１００の負荷が閾値以下である場合、レコード値調整監視処理が終了する。
【０１３２】
（Ｓ６４）ＤＢ監視部１５０は、レコード値調整処理の実行をＤＢ管理部１３０に指示する。レコード値調整処理の詳細は後述される。そして、レコード値調整監視処理が終了する。
【０１３３】
ここで、制御装置１００による各複製ＤＢ装置に対するアクセス負荷が比較的高い場合（例えば、一部の複製ＤＢ装置のアクセス負荷が高いなど）、何れかの複製ＤＢ装置でレコード値が不足し、ＤＢアクセスが適切に分散されていないことが考えられる。この場合、制御装置１００は、レコード値調整処理を行うことで、ＤＢアクセスを適切に分散できるようにする。
【０１３４】
図２１は、レコード値調整処理の例を示すフローチャートである。
レコード値調整処理は、ステップＳ６４に相当する。
（Ｓ７０）ＤＢ管理部１３０は、レコード値が定義値よりも小さい複製レコードについてステップＳ７１，Ｓ７２を繰り返し実行する。ただし、ステップＳ７２はスキップされることもある。なお、定義値は、ステップＳ６１の閾値とは異なる値でもよいし、ステップＳ６１の閾値と同じ値でもよい。例えば、ＤＢ管理部１３０は、ステップＳ６１  Ｎｏの場合にはステップＳ６１の閾値と同じ第１の定義値を用い、ステップＳ６３  Ｎｏの場合には、ステップＳ６１の閾値よりも大きい第２の定義値を用いることが考えられる。
【０１３５】
（Ｓ７１）ＤＢ管理部１３０は、複製ＤＢ装置における複製レコード値の加算、および、ＤＢ装置２００に配置された複製レコード値（複製元レコード値という）の減算（加算分の減算）を行う。例えば、ＤＢ管理部１３０は、該当の複製ＤＢ装置に最初に振り分けた複製レコード値の初期値に達するまで、複製レコード値の加算、および、複製元レコード値の減算を行う。複製元レコードは、ＤＢ装置２００に配置された複製レコードを示す。
【０１３６】
（Ｓ７２）ＤＢ管理部１３０は、複製レコード同士でのレコード値の調整を行う。例えば、ステップＳ７１において、複製元レコード値が不足して、該当の複製レコード値を初期値にできなかった場合に、ステップＳ７２を実行し、複製ＤＢ装置における複製レコード同士で、複製レコード値を融通することが考えられる。例えば、この場合、ＤＢ管理部１３０は、各複製ＤＢ装置における複製レコード値を均等にしてもよい。
【０１３７】
（Ｓ７３）ＤＢ管理部１３０は、レコード値が定義値よりも小さい複製レコードに対して、ステップＳ７１，Ｓ７２を実行すると（前述のようにステップＳ７２はスキップされることもある）、繰り返しを終了する。そして、レコード値調整処理が終了する。
【０１３８】
図２２は、レコード値の調整例を示す図である。
制御装置１００は、監視条件情報１２３に基づいて、定期的に、レコードＭ＃０，Ｍ１＃１，Ｍ１＃２，Ｍ２＃１，Ｍ２＃２，Ｍ３＃１，Ｍ３＃２，Ｍ４＃１，Ｍ４＃２のレコード値（複製レコード値）を監視する。レコードＭ＃０の初期値は、２０００である。レコードＭ１＃１，Ｍ１＃２，Ｍ２＃１，Ｍ２＃２，Ｍ３＃１，Ｍ３＃２，Ｍ４＃１，Ｍ４＃２の初期値は５００である。
【０１３９】
ある監視タイミングにおいて、制御装置１００は、レコードＭ３＃１の在庫数が２００に減少していることを検出する。監視条件情報１２３には、複製レコード値が初期値の半分よりも小さくなった場合に、レコード値調整処理を行うことが設定されている。すると、制御装置１００は、監視条件情報１２３に基づいて、複製元レコードであるレコードＭ＃０の在庫数から３００を減算し、レコードＭ３＃１の在庫数に３００を加算し、レコードＭ３＃１の在庫数を２００＋３００＝５００とする。
【０１４０】
こうして、制御装置１００は、ＤＢアクセスの並列度の低下を未然に防げる。なお、レコード値の調整では、加算に限らず、乗算などの方法で、在庫数を増加させてもよい。
ここで、制御装置１００は、ＤＢアクセス負荷が比較的小さい場合、ＤＢアクセスの並列度を小さくしても、ＤＢアクセスに求められる応答性能を確保できることがある。この場合、制御装置１００は、複製ＤＢ装置をスケールインし、各ノードの資源を別処理に割り当てられるようにする。制御装置１００は、スケールインを段階的に行うことができる。例えば、制御装置１００は、１回目のスケールインでは、複製ＤＢ装置を半数に減らし、２回目のスケールインでは、半数に減った複製ＤＢ装置を全て停止する。このようにすると、スケールインに伴うＤＢアクセスに対する応答性能が急激に小さくなってしまうことを防げる。次に、制御装置１００によるスケールインのための処理手順を説明する。
【０１４１】
図２３は、スケールイン判定処理の例を示すフローチャートである。
下記のステップＳ８０が実行される直前では、各ノードにおいて複製ＤＢ装置が動作しているものとする。この場合に、制御装置１００は、下記の処理を定期的に実行する。
【０１４２】
（Ｓ８０）ＤＢ管理部１３０は、スケールイン日時の設定があるか否かを判定する。スケールイン日時の設定がある場合、ステップＳ８１に処理が進む。スケールイン日時の設定がない場合、ステップＳ８２に処理が進む。ここで、スケールイン日時の設定は、各ノードにおける複製ＤＢの停止時刻（停止スケジュール）の設定を示す。当該停止時刻が記憶部１１０に設定されている場合、スケールイン日時の設定があることになり、当該停止時刻が記憶部１１０に設定されていない場合、スケールイン日時の設定がないことになる。
【０１４３】
（Ｓ８１）ＤＢ管理部１３０は、スケールイン日時に到達したか否かを判定する。スケールイン日時に到達した場合、ステップＳ８５に処理が進む。スケールイン日時に到達していない場合、ステップＳ８２に処理が進む。
【０１４４】
（Ｓ８２）ＤＢ管理部１３０は、アクセス負荷に応じたスケールインの設定があるか否かを判定する。アクセス負荷に応じたスケールインの設定がある場合、ステップＳ８３に処理が進む。アクセス負荷に応じたスケールインの設定がない場合、スケールイン判定処理が終了する。ここで、アクセス負荷に応じたスケールインの設定とは、ＤＢ装置２００および各複製ＤＢ装置に対する総アクセス負荷が閾値以下になった場合におけるスケールインの実行設定であり、記憶部１１０に予め設定される。記憶部１１０に当該スケールインの実行設定がある場合に、アクセス負荷に応じたスケールインの設定があることになり、記憶部１１０に当該スケールインの実行設定がない場合、アクセス負荷に応じたスケールインの実行設定がないことになる。アクセス負荷としては、ステップＳ１２と同様に、ＤＢ装置２００および各複製ＤＢ装置における処理待ちアクセス要求（クエリ）の総数、ＤＢ装置２００および各複製ＤＢ装置によるＮＩＣの負荷の平均値など、種々の情報を用いることができる。
【０１４５】
（Ｓ８３）ＤＢ管理部１３０は、ＤＢ装置２００および各複製ＤＢ装置のアクセス負荷の情報を取得する。
（Ｓ８４）ＤＢ管理部１３０は、ＤＢ装置２００および各複製ＤＢ装置のアクセス負荷（総負荷、または、負荷の平均など）が閾値以下であるか否かを判定する。当該アクセス負荷が閾値以下の場合、ステップＳ８５に処理が進む。当該アクセス負荷が閾値よりも大きい場合、スケールイン判定処理が終了する。
【０１４６】
（Ｓ８５）ＤＢ管理部１３０は、スケールイン処理を実行する。処理の詳細は後述される。そして、スケールイン判定処理が終了する。
図２４は、スケールイン処理の例を示すフローチャートである。
【０１４７】
スケールイン処理は、ステップＳ８５に相当する。
（Ｓ９０）ＤＢ管理部１３０は、レコードスケールイン処理を行う。具体的には、ＤＢ管理部１３０は、スケールイン対象の複製レコードの値を、スケールイン対象外の複製レコード（残る複製レコード）またはＤＢ装置２００における複製元レコードの値に加算し、スケールイン対象の複製レコードを削除する。例えば、ＤＢ管理部１３０は、スケールイン対象外の複製レコードがない場合に、スケールイン対象の複製レコードの値を複製元レコードの値に加算することが考えられる。
【０１４８】
（Ｓ９１）ＤＢ管理部１３０は、テーブルスケールイン処理を行う。具体的には、ＤＢ管理部１３０は、スケールイン対象のテーブルを複製ＤＢ装置から削除する。
（Ｓ９２）ＤＢ管理部１３０は、ＤＢＭＳスケールイン処理を行う。具体的には、ＤＢ管理部１３０は、複製ＤＢ装置におけるスケールイン対象のＤＢＭＳを停止させる。
【０１４９】
（Ｓ９３）ＤＢ管理部１３０は、ＤＢ装置スケールイン処理を行う。具体的には、ＤＢ管理部１３０は、スケールインによってＤＢＭＳを実行していない複製ＤＢ装置を停止させる。
【０１５０】
（Ｓ９４）ＤＢ管理部１３０は、スケールインを行ったアイテムに対して、複製ＤＢ装置に配置された複製レコードがあるか否かを判定する。複製ＤＢ装置に配置された複製レコードがある場合、ステップＳ９６に処理が進む。複製ＤＢ装置に配置された複製レコードがない場合、ステップＳ９５に処理が進む。
【０１５１】
（Ｓ９５）ＤＢ管理部１３０は、各複製レコードの複製レコード値をマージして、ＤＢ装置２００における参照用レコードを更新する。そして、スケールイン処理が終了する。
（Ｓ９６）ＤＢ管理部１３０は、複製元のＤＢ装置２００から参照用レコードを削除する。ただし、ＤＢ管理部１３０は、ＤＢ装置２００における元の（オリジナルの）レコードを参照用レコードとして用いている場合、参照用レコードの削除をスキップしてよい。また、ＤＢ装置２００における元の（オリジナルの）レコードを参照用レコードとして用いていない場合、参照用レコードにおける値を、元のレコードの値に反映させる。何れの場合も、ＤＢ管理部１３０は、ＤＢ装置２００に配置された複製元レコードを削除してよい。そして、スケールイン処理が終了する。
【０１５２】
図２５は、スケールインの例を示す図である。
図２５では、複製ＤＢ装置３１０，３１０ａのうち、複製ＤＢ装置３１０ａを停止させるスケールインの例を示す。制御装置１００は、複製ＤＢ装置３１０ａにより保持されている各レコードの値を、複製ＤＢ装置３１０の各レコードに加算する。
【０１５３】
例えば、制御装置１００は、レコードＭ３＃１の在庫数を、レコードＭ１＃１の在庫数に加算する。その結果、レコードＭ１＃１の在庫数は９９８となる。制御装置１００は、レコードＭ３＃２の在庫数を、レコードＭ１＃２の在庫数に加算する。その結果、レコードＭ１＃２の在庫数は９８４となる。制御装置１００は、レコードＭ４＃１の在庫数を、レコードＭ２＃１の在庫数に加算する。その結果、レコードＭ２＃１の在庫数は９９２となる。制御装置１００は、レコードＭ４＃２の在庫数を、レコードＭ２＃２の在庫数に加算する。その結果、レコードＭ２＃２の在庫数は９９１となる。
【０１５４】
制御装置１００は、複製ＤＢ装置３１０に、複製ＤＢ装置３１０ａの値を反映させると、ノード３００ａにおいて複製ＤＢ装置３１０ａを停止させることができる。制御装置１００は、スケールインの結果を、振り分け情報１２２に反映させる。これにより、該当のアイテムに対する更新要求の振り分け先の候補は、複製ＤＢ装置３１０のレコードＭ１＃１，Ｍ１＃２，Ｍ２＃１，Ｍ２＃２およびＤＢ装置２００におけるレコードＭ＃０となる。また、制御装置１００は、スケールインを行った後に、複製ＤＢ装置３１０における各レコードの値と、ＤＢ装置２００におけるレコードＭ＃０の値とを加算した結果により、参照用レコードＮの値を更新してもよい。これにより、スケールイン実行後に、参照用レコードＮが最新の状態でない場合に、最新の状態に更新できる。
【０１５５】
上記の説明では、スケールインを段階的に行うものとした。例えば、その後、ＤＢアクセス負荷が更に小さくなったタイミングで、制御装置１００は、複製ＤＢ装置３１０を停止させて、ＤＢ装置２００のみでの運用に切り替えることができる。あるいは、制御装置１００は、１回目のスケールインの後、ＤＢアクセス負荷が所定の閾値よりも高まった場合に、複製ＤＢ装置のスケールアウトを行うことで、複製ＤＢ装置３１０ａを再び起動させ、ＤＢアクセス処理の並列度を向上させてもよい。
【０１５６】
第２の実施の形態の制御装置１００によれば、アクセス集中による処理時間の増大を抑制することができる。すなわち、制御装置１００は、複数のクライアントから、あるアイテムに相当するキーに対する複数のアクセスを重複して受け付けた時、複数のアクセスを、複数のノード（あるいは当該ノード上の複製ＤＢ装置）に分散して振り分ける。各ノード（あるいは複製ＤＢ装置）によるアクセス処理は、並列に実行可能である。このため、１つのノード（あるいは複製ＤＢ装置）に集中して複数のアクセスを実行させるよりも、複数のノード（あるいは複製ＤＢ装置）により複数のアクセスを分散して並列に実行可能になり、更新系のアクセスの処理時間の増大を抑制できる。
【０１５７】
なお、第１の実施の形態の情報処理は、処理部１２にプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、ＣＰＵ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体１１３に記録できる。
【０１５８】
例えば、プログラムを記録した記録媒体１１３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体１１３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＨＤＤ１０３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０１５９】
１０  情報処理装置
１１  記憶部
１２  処理部
２０  記憶装置
３０，４０  ノード
２１，３１，４１  テーブル
２１ａ，３１ａ，４１ａ  レコード
５０，６０  端末装置
Ｎ１，Ｎ２  ネットワーク
【図１】
2020135410.tif 000003
【図２】
2020135410.tif 000004
【図３】
2020135410.tif 000005
【図４】
2020135410.tif 000006
【図５】
2020135410.tif 000007
【図６】
2020135410.tif 000008
【図７】
2020135410.tif 000009
【図８】
2020135410.tif 000010
【図９】
2020135410.tif 000011
【図１０】
2020135410.tif 000012
【図１１】
2020135410.tif 000013
【図１２】
2020135410.tif 000014
【図１３】
2020135410.tif 000015
【図１４】
2020135410.tif 000016
【図１５】
2020135410.tif 000017
【図１６】
2020135410.tif 000018
【図１７】
2020135410.tif 000019
【図１８】
2020135410.tif 000020
【図１９】
2020135410.tif 000021
【図２０】
2020135410.tif 000022
【図２１】
2020135410.tif 000023
【図２２】
2020135410.tif 000024
【図２３】
2020135410.tif 000025
【図２４】
2020135410.tif 000026
【図２５】
2020135410.tif 000027