(57)【要約】【課題】複数の情報処理装置間での処理負荷の偏りを抑制することを目的とする。【解決手段】データ分配装置は、複数の情報処理装置のうちいずれかの情報処理装置が記憶するデータ量に関する値が基準を超えた場合、いずれかの情報処理装置が記憶する複数のデータを複数の条件それぞれで分割した際の条件別のデータ量を算出する算出部１３と、算出したデータ量に基づき、複数の条件のうち、何れかの条件を選択する選択部１４と、選択した何れかの条件を用いて、複数のデータを分割して、複数のデータ群を生成する生成部１５と、生成された複数のデータ群のいずれかを他の情報処理装置に分配する分配部１６とを含む。【選択図】図２
2018032079.tif 000002
【特許請求の範囲】
【請求項１】
複数の情報処理装置のうちいずれかの情報処理装置が記憶するデータ量に関する値が基準を超えた場合、前記いずれかの情報処理装置が記憶する複数のデータを複数の条件それぞれで分割した際の条件別のデータ量を算出し、
算出したデータ量に基づき、前記複数の条件のうち、何れかの条件を選択し、
選択した前記何れかの条件を用いて、前記複数のデータを分割して、複数のデータ群を生成し、
生成された前記複数のデータ群のいずれかを他の情報処理装置に分配する
処理をコンピュータに実行させることを特徴とするデータ分配プログラム。
【請求項２】
前記いずれかの情報処理装置が記憶するデータ量に関する値が前記基準を超えた場合、前記他の情報処理装置の記憶許容量を取得し、
算出したデータ量と、取得した前記記憶許容量とに基づき、前記複数の条件のうち、何れかの条件を選択する、
処理をコンピュータに実行させることを特徴とする請求項１記載のデータ分配プログラム。
【請求項３】
分割後の前記複数のデータ群のデータ量の均等度合いを示す均等率が所定の均等基準以上となるように条件を選択し、
選択した前記条件を用いて、前記複数のデータを分割して、複数のデータ群を生成し、
生成された前記複数のデータ群のいずれかを新たに使用される情報処理装置に分配する
処理を前記コンピュータに実行させることを特徴とする請求項１または２記載のデータ分配プログラム。
【請求項４】
前記いずれかの情報処理装置のデータ量の、所定閾値よりデータ量が少ない特定情報処理装置のデータ量に対する比率に関する値に基づいて、条件を選択し、
選択した前記条件を用いて、前記複数のデータを分割して、複数のデータ群を生成し、
前記複数のデータ群のデータ量に関する値が前記基準を超えない場合、生成された前記複数のデータ群のいずれかを新たに使用される情報処理装置に分配する
処理を前記コンピュータに実行させることを特徴とする請求項１または２記載のデータ分配プログラム。
【請求項５】
前記複数のデータ群のデータ量に関する値が前記基準を超えた場合、
生成された複数のデータ群のうちのいずれかのデータ群のデータ量の、前記特定情報処理装置のデータ量に対する比率に関する値に基づいて、再度、条件を選択し、
再度選択した前記条件を用いて、前記いずれかのデータ群を分割して、複数のデータ群を再度、生成し、
再度生成された前記複数のデータ群のデータ量に関する値が前記基準を超えない場合、再度生成された前記複数のデータ群のいずれかを前記新たに使用される情報処理装置に分配する
処理を前記コンピュータに実行させることを特徴とする請求項４に記載のデータ分配プログラム。
【請求項６】
前記いずれかの情報処理装置から他の情報処理装置に所定割合のデータを分配した場合に、前記いずれかの情報処理装置が記憶するデータ量と、前記他の情報処理装置が記憶するデータ量との差が差分基準以下となる条件を選択し、
選択した前記条件を用いて、前記複数のデータを分割して、複数のデータ群を生成し、
生成された前記複数のデータ群のうち前記所定割合のデータに相当するデータ群を前記他の情報処理装置に分配する
処理を前記コンピュータに実行させることを特徴とする請求項１または２記載のデータ分配プログラム。
【請求項７】
時期に応じて前記複数の条件それぞれで分割した際の条件別のデータ量が異なる場合、前記算出を行うために取得する過去の実績情報を、前記分配を行う時期に基づいて選択する
処理を前記コンピュータに実行させることを特徴とする請求項１乃至６のうち何れか１項に記載のデータ分配プログラム。
【請求項８】
複数の情報処理装置のうちいずれかの情報処理装置が記憶するデータ量に関する値が基準を超えた場合、前記いずれかの情報処理装置が記憶する複数のデータを複数の条件それぞれで分割した際の条件別のデータ量を算出し、
算出したデータ量に基づき、前記複数の条件のうち、何れかの条件を選択し、
選択した前記何れかの条件を用いて、前記複数のデータを分割して、複数のデータ群を生成し、
生成された前記複数のデータ群のいずれかを他の情報処理装置に分配する
処理をコンピュータが実行することを特徴とするデータ分配方法。
【請求項９】
複数の情報処理装置のうちいずれかの情報処理装置が記憶するデータ量に関する値が基準を超えた場合、前記いずれかの情報処理装置が記憶する複数のデータを複数の条件それぞれで分割した際の条件別のデータ量を算出する算出部と、
算出したデータ量に基づき、前記複数の条件のうち、何れかの条件を選択する選択部と、
選択した前記何れかの条件を用いて、前記複数のデータを分割して、複数のデータ群を生成する生成部と、
生成された前記複数のデータ群のいずれかを他の情報処理装置に分配する分配部と、
を備えることを特徴とするデータ分配装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ分配プログラム、データ分配方法、およびデータ分配装置に関する。
【背景技術】
【０００２】
ハードディスク等に記憶されたデータベースにデータを格納した場合に、ディスクInput/Output（I/O）の負荷により、処理速度のボトルネックが発生する。そのため、大量のデータをオンメモリで管理することにより高速にデータを処理する分散キャッシュ技術が利用されている。
【０００３】
関連する技術として、データベースの追加ブロック内に格納されたインデックスエントリ内にどのキー値が存在するかを示すビットマップセル中のビットを更新する技術が提案されている（例えば、特許文献１を参照）。また、関連する技術として、キー特徴値が類似するデータ同士を同一のグループとするセグメントを生成する技術が提案されている（例えば、特許文献２を参照）。効率良く候補数を減らすことができると推定される属性を該検索者に提示する技術が提案されている（例えば、特許文献３を参照）
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平０５−０１２０８５号公報
【特許文献２】特開第２０１３−１５６９６０号公報
【特許文献３】特開平０７−０８５０６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
分散キャッシュ技術を利用した際に、キャッシュデータを記憶する情報処理装置（キャッシュサーバ）に対するデータアクセスの高速性をさらに高めることが求められている。分散キャッシュ技術において、大量のデータを管理するために、複数の情報処理装置にデータが分散して管理される。この際に、各情報処理装置のデータ量の偏りが生じていると、データ検索時の処理負荷にも偏りが生じる。
【０００６】
１つの側面として、本発明は、複数の情報処理装置間での処理負荷の偏りを抑制することを目的とする。
【課題を解決するための手段】
【０００７】
１つの態様では、データ分配プログラムは、複数の情報処理装置のうちいずれかの情報処理装置が記憶するデータ量に関する値が基準を超えた場合、前記いずれかの情報処理装置が記憶する複数のデータを複数の条件それぞれで分割した際の条件別のデータ量を算出し、算出したデータ量に基づき、前記複数の条件のうち、何れかの条件を選択し、選択した前記何れかの条件を用いて、前記複数のデータを分割して、複数のデータ群を生成し、生成された前記複数のデータ群のいずれかを他の情報処理装置に分配する処理をコンピュータに実行させる。
【発明の効果】
【０００８】
１つの側面によれば、複数の情報処理装置間での処理負荷の偏りを抑制することができる。
【図面の簡単な説明】
【０００９】
【図１】実施形態のシステムの全体構成の一例を示す図である。
【図２】データ分配装置の一例を示す図である。
【図３】各サーバが記憶するデータの構成例を示す図である。
【図４】第１の実施形態の処理の流れの一例を示すフローチャートである。
【図５】図４のステップＳ１０７の詳細な処理の一例を示すフローチャートである。
【図６】図５のステップＳ２０９の詳細な処理の第１の例を示すフローチャートである。
【図７】新サーバへのデータ分配処理の第１の実施例を示す図（その１）である。
【図８】新サーバへのデータ分配処理の第１の実施例を示す図（その２）である。
【図９】図５のステップＳ２０９の詳細な処理の第２の例を示すフローチャートである。
【図１０】新サーバへのデータ分配処理の第２の実施例を示す図である。
【図１１】図４のステップＳ１０８の詳細な処理の一例を示すフローチャートである。
【図１２】図１１のステップＳ７０９の詳細な処理の一例を示すフローチャートである。
【図１３】他のサーバへのデータ分配処理の実施例を示す図である。
【図１４】第２の実施形態の処理の流れの一例を示すフローチャートである。
【図１５】各属性でデータを分割した場合の各月の均等率を示す図である。
【図１６】データ分配装置のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１０】
＜実施形態のシステムの全体構成の一例＞
以下、図面を参照して、実施形態について説明する。図１は、実施形態のシステムの全体構成の一例を示す。
【００１１】
実施形態のシステムは、データ分配装置１と、ネットワーク２と、第１のサーバ３ａと、第２のサーバ３ｂとを含む。以下、第１のサーバ３ａ、第２のサーバ３ｂとをサーバ３と総称することがある。サーバ３の台数は３台以上であってもよい。
【００１２】
サーバ３は、分割された複数のデータの少なくとも一部を記憶する。サーバ３は、例えば、分散キャッシュ技術に用いられるキャッシュサーバであり、分割された複数のデータをメモリ（主記憶装置）上に記憶する。サーバ３は、情報処理装置の一例である。
【００１３】
なお、実施形態の説明において、複数のデータの集合であるデータ群を単にデータと表現することがある。
【００１４】
サーバ３が記憶するデータは、例えば、特定のサービスに用いられ、同じ属性を有するデータであり、利用者の検索対象となるデータである。特定のサービスは、例えば、電子商取引等の複数の顧客に利用されるサービスである。
【００１５】
データ分配装置１は、ネットワーク２を介して、サーバ３にデータの分配に関する指示を送る。データ分配装置１は、例えば、第１のサーバ３ａに記憶されているデータの一部を第２のサーバ３ｂに分配する指示を第１のサーバ３ａに送る。
【００１６】
ネットワーク２は、データ分配装置１と、サーバ３のそれぞれに接続するネットワークである。ネットワーク２は、例えば、企業内で用いられるイントラネットである。なお、ネットワーク２は、インターネット等であってもよい。
【００１７】
＜データ分配装置の一例＞
図２は、データ分配装置の一例を示す図である。データ分配装置１は、通信部１１と、取得部１２と、算出部１３と、選択部１４と、生成部１５と、分配部１６と、記憶部１７と、制御部１８とを含む。
【００１８】
通信部１１は、ネットワーク２を介してサーバ３との通信を行う。
取得部１２は、通信部１１を介して、サーバ３のデータ量、または記憶許容量（空き容量）を取得する。取得部１２は、例えば、いずれかのサーバ３が記憶するデータ量に関する値が基準（基準値）を超えた場合、他のサーバ３の記憶許容量を取得する。
【００１９】
算出部１３は、複数のサーバ３のうちいずれかのサーバ３が記憶するデータ量に関する値が基準を超えた場合、いずれかのサーバ３が記憶する複数のデータを複数の条件（属性）それぞれで分割した際の属性別のデータ量を算出する。
【００２０】
算出部１３は、時期に応じて複数の属性それぞれで分割した際の属性別のデータ量が異なる場合、算出を行うために取得する過去の実績情報を、分配を行う時期に基づいて選択してもよい。
【００２１】
選択部１４は、算出部１３が算出したデータ量に基づき、複数の属性のうち、何れかの属性を選択する。選択部１４は、算出部１３が算出したデータ量と、取得部１２が取得した他のサーバ３の記憶許容量に基づき、複数の属性のうち、何れかの条件を選択してもよい。
【００２２】
選択部１４は、複数の属性のうち、分割後の複数のデータ群のデータ量の均等度合いを示す均等率が所定の均等基準以上となる条件を選択してもよい。選択部１４は、いずれかのサーバ３のデータ量の、所定閾値よりデータ量が少ないサーバ３のデータ量に対する比率に関する値に基づいて、属性を選択してもよい。
【００２３】
選択部１４は、いずれかのサーバ３から他のサーバ３に所定割合のデータを分配した場合に、いずれかのサーバ３が記憶するデータ量と、他のサーバ３が記憶するデータ量との差が所定の差分基準以下となる条件を選択してもよい。
【００２４】
生成部１５は、選択部１４が選択した何れかの属性を用いて、複数のデータを分割して、複数のデータ群を生成する。
【００２５】
分配部１６は、生成部１５により生成された複数のデータ群のいずれかを他のサーバ３に分配する。他のサーバ３は、新たに使用されるサーバ３であってもよいし、稼動中であって、すでにデータを記憶しているサーバ３であってもよい。
【００２６】
記憶部１７は、過去に各属性を用いて検索対象のデータを分割した際の均等率を記憶する。均等率は、分割後の一方のデータと他方のデータとのうち、何れか一方に対する他方の比率である。均等率は、例えば、分割後の小さい方のデータ量をｄ１とし、大きい方のデータ量をｄ２とした場合に、ｄ１／ｄ２と表される。
制御部１８は、データ分配処理１の各種制御を実行する。
【００２７】
図３は、各サーバ３が記憶するデータの構成例を示す図である。各サーバ３が記憶する一つのデータは、キーと、キーに対応付けられた値とを含む。
【００２８】
キーは、例えば、シーケンスＮｏである。また、図３に示す例では、値は、オブジェクトであり、複数の属性と、属性に対する値（属性値）とを含む。
【００２９】
オブジェクトは、例えば「顧客」を表す。その場合、属性は、例えば「個人または団体」、「年齢」、「性別」等である。
【００３０】
属性が「個人または団体」である場合、属性値は、「個人」または「団体」である。属性が「年齢」である場合、属性値は、例えば、「３０歳」、「５０歳」のように具体的な年齢を示す数値であってもよいし、例えば「２０代」、「５０歳未満」「５０歳以上」のように年齢の範囲を示す情報であってもよい。属性が「性別」である場合、属性値は、「男」または「女」である。
【００３１】
サーバ３が記憶するデータの構成は、図３に示すデータ構成に限られず、一つデータが複数の属性を含む構成であればよい。サーバ３が記憶するデータの構成は、例えば、JavaScript Object Notation（ＪＳＯＮ）、またはYAML Ain't a Markup Language（ＹＡＭＬ）であってもよい。
【００３２】
複数のサーバ３に複数のデータを分散して記憶させる場合、どのように各データを分散するかが決定される。各サーバ３のデータ量が均等になるようにデータが分配される場合、例えば、キーを用いて分配することが考えられる。しかし、キーは、シーケンスＮｏのような意味を持たない数値であることが多く、キーを用いてデータを分配した場合に、無秩序にデータが分配される。その場合、特定のデータを検索するために、全てのサーバ３を検索することになるため、高速に検索を行うことが困難となる。
【００３３】
そのため、サーバ３のデータを高速に検索するために、属性を用いてデータを分配することが好ましい。例えば、属性「個人または団体」の属性値が「個人」であるデータを第１のサーバ３ａに記憶させ、属性「個人または団体」の属性値が「団体」であるデータを第２のサーバ３ｂに記憶させることを想定する。この場合に「個人」かつ「５０歳以上」のデータを取得する場合に、第１のサーバ３ａ内のデータのみ検索すればよく、第２のサーバ３ｂ内のデータは、検索の対象から除外される。そのため、検索処理の高速化が実現される。
【００３４】
しかし、属性を用いてデータを分配した場合に、各サーバ３のデータ量が均等にならずに、大きな偏りが生じる場合がある。実施形態のシステムが、個人の顧客が多いサービスに用いられる場合に、上記のような属性「個人または団体」を用いた分配を行うと、第２のサーバ３ｂと比べて第１のサーバ３ａのデータ量が多くなる。そのような場合、第１のサーバ３ａに対する検索処理には時間がかかる。よって、各サーバ３に記憶されるデータ量の相違を抑制するように、データの分配に用いる属性を選択することが好ましい。
【００３５】
＜実施形態の処理の流れの一例＞
図４は、第１の実施形態の処理の流れの一例を示すフローチャートである。図４に示す処理は、例えば、所定期間毎に実施される。
【００３６】
制御部１８は、変数ｍ（ｍは２以上の整数）にサーバ３の台数をセットする（ステップＳ１０１）。ステップＳ１０１におけるサーバ３の台数は、稼動中であって検索対象のデータを記憶するサーバの台数であるとする。
【００３７】
制御部１８は、システムの運用を続けるかを判定する（ステップＳ１０２）。ステップＳ１０２において、制御部１８は、例えば、管理者によって予め設定された運用期間に基づいて、システムの運用を続けるかを判定する。システムの運用を続けない場合（ステップＳ１０２でＮＯ）、制御部１８は、処理を終了する。システムの運用を続ける場合（ステップＳ１０２でＹＥＳ）、制御部１８は、所定期間、システムの運用を続けることを決定する（ステップＳ１０３）。この場合、制御部１８は、通信部１１を介して、サーバ３にシステムの運用を続けることを通知する。
【００３８】
取得部１２は、各サーバ３のデータ量を取得する（ステップＳ１０４）。取得部１２は、例えば、通信部１１を介してサーバ３に問い合わせをし、キャッシュメモリのデータ量を取得する。なお、ステップＳ１０４で取得するデータ量は、検索対象のデータのデータ量のみであるとする。
【００３９】
制御部１８は、サーバ数が増加可能であるか判定する（ステップＳ１０６）。サーバ数は、検索対象のデータを記憶させるサーバの数を意味する。サーバ数が増加可能であるか否かは、例えば、予め管理者によって設定され、制御部１８は、設定内容を確認することにより、サーバ数が増加可能であるか判定する。
【００４０】
サーバ数が増加可能である場合（ステップＳ１０６でＹＥＳ）、新サーバへのデータ分配処理に移行する（ステップＳ１０７）。サーバ数が増加可能でない場合（ステップＳ１０６でＮＯ）、稼動中の他のサーバへのデータ分配処理に移行する（ステップＳ１０８）。
【００４１】
図５は、図４のステップＳ１０７の詳細な処理の例を示すフローチャートである。図５に示す処理は、図４のステップＳ１０７における新サーバへのデータ分配処理の詳細な内容の一例である。
【００４２】
算出部１３は、ステップＳ１０４で取得した各サーバ３のデータ量に対して、データ量の大きさに応じて順序をつける（ステップＳ２０１）。以下、各サーバ３のデータ群（およびそのデータ群のデータ量）をＤ１、Ｄ２、・・・Ｄｍと表し、それぞれのデータ量について、Ｄ１≦Ｄ２≦・・・≦Ｄｍが成り立つとする。
【００４３】
算出部１３は、各サーバ３のデータ群Ｄｉについて、繰り返し処理を開始する（ｉ＝２、３、・・・ｍ）（ステップＳ２０２）。算出部１３は、Ｄｉ／Ｄ１を計算する（ステップＳ２０３）。算出部１３は、Ｄｉ／Ｄ１が、予め設定された基準値を以上であるか判定する（ステップＳ２０４）。基準値以上である場合（ステップＳ２０４でＹＥＳ）、算出部１３は、Ｄｉを集合Ｓに入力する。
【００４４】
ステップＳ２０４において、Ｄ１の替わりに、データ量が所定閾値より小さい他のデータのデータ量を用いてもよい。また、ステップＳ２０４において、Ｄｉのデータ量が上限閾値以上であるかを判定してもよい。
【００４５】
算出部１３は、全てのＤｉ（ｉ＝２〜ｍ）に関してステップＳ２０３〜Ｓ２０５の処理を完了した場合に、繰り返し処理を終了する（ステップＳ２０６）。ステップＳ２０２〜Ｓ２０７の処理により、集合Ｓは、Ｄｉ／Ｄ１が基準値を超えるＤｉを全て含む集合となる。
【００４６】
算出部１３は、集合ＳにＤｉが存在するか判定する（ステップＳ２０７）。ステップＳ２０７でＹＥＳである場合、ステップＳ２０４の処理においてＹＥＳとなるＤｉが一つ以上存在したことを意味する。制御部１８は、集合ＳにＤｉが存在しない場合（ステップＳ２０７でＮＯ）、処理を終了する。集合ＳにＤｉが存在しない場合、ステップＳ２０４の処理においてＹＥＳとなるＤｉが存在しなかったことを意味する。その場合、全てのサーバ３のデータ量が所定の水準以上に均等化されたことを意味する。
【００４７】
制御部１８は、集合ＳにＤｉが存在する場合（ステップＳ２０７でＹＥＳ）、集合Ｓ内のＤｉについて、繰り返し処理を開始する（ステップＳ２０８）。データ分配装置１は、Ｄｉを新サーバに分配する処理を実行する（ステップＳ２０９）。新サーバは、検索対処の複数のデータを記憶するために新たに使用されるサーバ３である。制御部１８は、集合Ｓ内の全てのＤｉに関して、ステップＳ２０９の処理が完了した場合に、繰り返し処理を終了する（ステップＳ２１０）。
【００４８】
データ分配装置１は、ステップＳ２１０の処理後、再度ステップＳ２０１に戻ってもよい。そして、ステップＳ２０７の判定でＮＯとなるまで、ステップＳ２０１〜Ｓ２１０の処理を繰り返してもよい。ステップＳ２０７でＮＯとなる場合、全てのサーバ３のデータが所定の水準以上に均等化されたことを意味するためである。
【００４９】
図６は、図５のステップＳ２０９の詳細な処理の第１の例を示すフローチャートである。取得部１２は、データの分配先となる新サーバの記憶許容量を取得する（ステップＳ３０１）。記憶許容量は、例えば、新サーバのキャッシュメモリの現在の空き容量である。
【００５０】
算出部１３は、各属性を選択してデータ群（Ｄｉ）を分割した場合の、属性別の分割後データ量を算出する（ステップＳ３０２）。算出部１３は、例えば、過去の実績に基づいて、各属性で複数のデータを分割した場合に分割後の各データ量を算出する。
【００５１】
例えば、過去にデータを分割した実績に基づいて、属性と、その属性でデータを分割した場合の均等率とが対応づけられて記憶されているとする。均等率は、例えば、分割後の小さい方のデータ量をｄ１とし、大きい方のデータ量をｄ２とした場合に、ｄ１／ｄ２と表される。
【００５２】
選択部１４は、算出したデータ量に基づいて、複数の属性のうち、分割後の複数のデータ群の均等率が予め定められた均等基準以上となる属性を選択する（ステップＳ３０３）。
【００５３】
また、ステップＳ３０３において、選択部１４は、分割対象のデータについて、まだ分割に用いられていない属性を選択する。例えば、すでに属性「性別」を用いて分割したデータに対して、再度属性「性別」を用いて分割してもデータ量が変わらないからである。
【００５４】
生成部１５は、選択された属性を用いてＤｉを分割し、複数のデータ群を生成する（ステップＳ３０４）。
【００５５】
例えば、ステップＳ３０３において選択された属性が「性別」である場合、生成部１５は、ステップＳ３０４において「性別」が「男」であるデータ群と「性別」が「女」であるデータ群とに分割することにより複数データ群を生成する。
【００５６】
制御部１８は、分割後の一方のデータ群のデータ量が新サーバの記憶許容量以下であるか判定する（ステップＳ３０５）。制御部１８は、例えば、分割後の複数のデータ群のうち、データ量が大きい方を現在そのデータを記憶しているサーバ３に残すと仮定し、データ量が少ない方を対象としてステップＳ３０５の処理を行う。
【００５７】
対象のデータ群のデータ量が新サーバの記憶許容量以下でない場合（ステップＳ３０５でＮＯ）、算出部１３は、各属性を選択して、ステップＳ３０４で生成された複数のデータ群を分割した場合の、属性別の分割後データ量を算出する（ステップＳ３０６）。選択部１４は、算出したデータ量に基づいて、複数の属性のうち、分割後の複数のデータ群の均等率が均等基準以上となる属性を選択する（ステップＳ３０７）。選択部１４は、ステップＳ３０７において、対象のデータについてまだ分割に用いられていない属性を選択する。生成部１５は、選択された属性を用いて複数のデータ群のそれぞれを再度分割し、複数のデータ群を生成する（ステップＳ３０８）。
【００５８】
ステップＳ３０６〜Ｓ３０８の処理は、ステップＳ３０２〜３０４の処理と同様である。ただし、ステップＳ３０２〜３０４の処理の対象はデータＤｉであるのに対し、ステップＳ３０６〜Ｓ３０８の処理の対象は、Ｄｉの分割後の複数のデータ群である。
【００５９】
制御部１８は、ステップＳ３０８で分割されたデータ群のうち、現在記憶されているサーバ３に残す一つのデータ群を除くデータ群について、データ量が新サーバの記憶許容量以下であるか判定する（ステップＳ３０５）。制御部１８は、例えば、ステップＳ３０８で分割されたデータ群のうち、最もデータ量が多いデータ群を現在のそのデータ群が記憶されているサーバ３に残すと仮定する。データ量が新サーバの記憶許容量以下でない場合、再度、ステップＳ３０６の処理に移行する。
【００６０】
データ量が新サーバの記憶許容量以下である場合、分配部１６は、分割後のデータ群のいずれかを新サーバに分配する（ステップＳ３０９）。分配部１６は、例えば、複数のデータ群のうち、最も大きいデータ群を現在そのデータ群を記憶する記憶サーバ３に残し、他のデータ群を新サーバに分配する。  図６に示す新サーバへのデータ分配処理の第１の例において、データ量に対して新サーバの記憶許容量に十分空きがあると考えられる場合、記憶許容量を確認しなくてもよい。その場合、ステップＳ３０１、Ｓ３０５〜Ｓ３０８を省略してもよい。
【００６１】
図７、８は、新サーバへのデータ分配処理の第１の実施例を示す図である。第１の実施例は、図５、６に示した処理に対応する。図７は、第１の実施例における各データの分配状況を表している。図８は、第１の実施例における各データの属性と、属性に対応付けられている均等率とを示している。点線で囲われた部分は、選択された属性を示している。
【００６２】
図７に示すように、サーバ３ａにデータ群Ｄ１が記憶され、サーバ３ｂにデータ群Ｄｉが記憶されていたとする。この場合に、ステップＳ２０４においてＤｉ／Ｄ１が基準値を超えると判定され、Ｄｉが分割され、分割されたデータ群が新サーバに分配されることを想定する。
【００６３】
選択部１４は、ステップＳ３０３の処理においてＤｉを分割する属性として属性１を選択したとする。生成部１５は、ステップＳ３０４の処理において、属性１を用いてＤｉを分割して複数のデータ群Ｄｉ１とＤｉ２とを生成する。そして、Ｄｉ１とＤｉ２とのいずれかが新サーバの記憶許容量を超えており、ステップＳ３０５でＮＯとなったとする。
【００６４】
そして、ステップＳ３０７の処理において、選択部１４は、Ｄｉ１とＤｉ２とを分割する属性として属性２を選択したとする。生成部１５は、ステップＳ３０８の処理において属性２を用いてデータＤｉ１、Ｄｉ２を分割して、複数のデータ群Ｄｉ１１と、Ｄｉ１２と、Ｄｉ２１と、Ｄｉ２２とを生成する。
【００６５】
分配部１６は、ステップＳ３０９において、データ群Ｄｉ１２と、Ｄｉ２１と、Ｄｉ２２とをそれぞれ新サーバに分配する。この場合、Ｄ１とＤｉ１１は、移動せず、それぞれ現在記憶されているサーバ３ａとサーバ３ｂにそのまま残る。
【００６６】
なお、ステップＳ３０６〜Ｓ３０８の処理が実行されたことにより第１の実施例が実現されたことを説明した。ステップＳ３０６〜Ｓ３０８の処理が実行されない場合でも、ステップＳ２０１〜Ｓ２１０の処理が２回実行されることにより、第１の実施例のように２回の分割が行われる可能性がある。
【００６７】
以上のように、データ分配装置１は、複数のサーバ間においてデータ量に偏りがある場合に、データ量が多いサーバ３のデータを分割する。これにより、データ量の偏りを抑制することができるので、データ検索時の処理負荷の偏りを抑制することができる。
【００６８】
また、データ分配先の新サーバの記憶許容量を確認し、分配予定のデータ量が記憶許容量を超える場合に、再度の分割を行うので、分配するデータ量がデータ分配先の新サーバの記憶許容量を超えることを防ぐことができる。
【００６９】
図９は、図５のステップＳ２０９の詳細な処理の第２の例を示すフローチャートである。取得部１２は、データの分配先となる新サーバの記憶許容量を取得する（ステップＳ５０１）。記憶許容量は、例えば、新サーバのキャッシュメモリの現在の空き容量である。
【００７０】
制御部１８は、データ群ＤｉをＤｘにセットする（ステップＳ５０２）。制御部１８は、Ｄｘ／Ｄ１が基準値以上であるかを判定する（ステップＳ５０３）。ステップＳ５０３で用いる基準値は、例えば、ステップＳ２０４で用いた基準値と同じであってもよい。
【００７１】
ステップＳ５０４において、Ｄ１の替わりに、データ量が所定閾値より小さい他のデータのデータ量を用いてもよい。また、ステップＳ５０４において、Ｄｘのデータ量が上限閾値以上であるかを判定してもよい。
【００７２】
Ｄｘ／Ｄ１が基準値以上である場合（ステップＳ５０３でＹＥＳ）、算出部１３は、各属性を選択してデータ群Ｄｘを分割した場合の、属性別の分割後データ量を算出する（ステップＳ５０４）。算出部１３は、例えば、過去の実績に基づいて、各属性で複数のデータを分割した場合に分割後の各データ量を算出する。そして、算出部１３は、Ｎ≦Ｄｘ/Ｄ１＜Ｎ+１を満たすＮを算出する（ステップＳ５０５）。
【００７３】
ステップＳ５０５において、Ｄ１の替わりに、データ量が所定閾値より少ない他のサーバ３が記憶するデータ量を用いてもよい。
【００７４】
選択部１４は、ステップＳ５０４で算出したデータ量とステップＳ５０１で取得した記憶容量に基づいて、分割した場合に一方のデータ量が他方のデータ量のＮ−１倍となる属性を選択する（ステップＳ５０６）。選択部１４は、例えば、分割した場合に一方のデータ数が他方のデータ数のＮ−１倍に最も近くなる属性を選択してもよい。ステップＳ５０６の処理により、分割後の小さい方のデータのデータ量が、Ｄ１に近いデータ量となる。
【００７５】
選択部１４は、ステップＳ５０６において、例えば、分割後のデータのうち新サーバに分配予定のデータ群（例えば、データ量が大きい方のデータ群）が新サーバの合計記憶容量より小さくなるように属性を選択する。
【００７６】
生成部１５は、選択された属性を用いてＤｘを分割し、複数のデータ群を生成する（ステップＳ５０７）。生成部１５は、生成したデータ群のうち、データ数が大きい方を新たなＤｘとする（ステップＳ５０８）。
【００７７】
制御部１８は、再度、Ｄｘ／Ｄｉが基準値を超えたかを判定する（ステップＳ５０３）。ステップＳ５０３でＮＯとなった場合、分配部１６は、Ｄｉを分割したデータ群のいずれかを新サーバに分配する（ステップＳ５０９）。
【００７８】
図９に示す新サーバへのデータ分配処理の第２の例において、データ量に対して新サーバの記憶許容量に十分空きがあると考えられる場合、記憶許容量を確認しなくてもよい。その場合、ステップＳ５０６において、選択部１４は、記憶許容量を考慮せずに、分割した場合に一方のデータ量が他方のデータ量のＮ−１倍となる属性を選択すればよい。
【００７９】
図１０は、新サーバへのデータ分配処理の第２の実施例を示す図である。図１０に示す第２の実施例は、図９に示す新サーバへのデータ分配処理の第２の例に対応する。
【００８０】
図１０に示す第２の実施例では、サーバ３ａにデータ群Ｄ１が記憶され、サーバ３ｂにデータ群Ｄｉが記憶されている。また、データ量の比率は、Ｄｉ／Ｄ１＝３であるとし、ステップＳ５０３の基準値が２であるとする。この場合、ステップＳ５０３の処理において、Ｄｘ／Ｄ１が基準値以上であると判定される。
【００８１】
そして、ステップＳ５０５の処理において、Ｄｘ／Ｄ１＝３であるのでＮ＝３が算出される。そして、選択部１４は、ステップＳ５０６において、Ｄｉを分割するために一方のデータ量が他方のデータ量の２倍（Ｎ−１倍）となる属性を選択する。そして、データ群Ｄｉがデータ群Ｄｉ１とＤｉ２に分割される（Ｄｉ２／Ｄｉ１＝２）。
【００８２】
その後、ステップＳ５０８においてＤｉ２がＤｘに設定され、再度、ステップＳ５０３の判定が行われる。この例では、Ｄｘ／Ｄ１＝２となるため、基準値（＝２）以上となり、再度の分割が行われる。
【００８３】
この場合、ステップＳ５０５の処理において、Ｄｘ／Ｄ１＝２であるのでＮ＝２が算出される。よって、選択部１４は、ステップＳ５０６において、Ｄｉを分割するために一方のデータ量が他方のデータ量の１倍（Ｎ−１倍）となる属性を選択する。そして、データ群Ｄｉ２がデータ群Ｄｉ２１とＤｉ２２に分割される（Ｄｉ２２／Ｄｉ２１＝１）。
【００８４】
以上の処理により、サーバ３ｂのデータＤｉがデータＤｉ１、データＤｉ２１、データＤｉ２３の３つのデータ群に分割される。この実施例では、分配部１６は、データＤｉ２１とデータＤｉ２２をそれぞれ新サーバに分配する。これにより、サーバ３ａに記憶されるＤ１、サーバ３ｂに記憶されるデータＤｉ１、新サーバに記憶されるデータＤｉ２１とデータＤｉ２２のデータ量を均等にすることができる。
【００８５】
以上の処理により、複数のサーバ間においてデータ量に偏りがある場合に、分割後の複数のデータ群のデータ量が、Ｄ１と近くなるようにデータを分割する。これにより、複数のサーバ３間での処理負荷の偏りを抑制することができる。
【００８６】
また、データ分配先の新サーバの記憶許容量を確認し、分配予定のデータ量が記憶許容量を超えないように属性を選択するので、分配するデータ量がデータ分配先の新サーバの記憶許容量を超えることを防ぐことができる。
【００８７】
図１１は、図４のステップＳ１０８の詳細な処理の一例を示すフローチャートである。
算出部１３は、ステップＳ１０４で取得した各サーバ３のデータ量に対して、データ量の大きさに応じて順序をつける（ステップＳ７０１）。以下、各サーバ３のデータ群（およびそのデータ群のデータ量）をＤ１、Ｄ２、・・・Ｄｍと表し、それぞれのデータ量について、Ｄ１≦Ｄ２≦・・・≦Ｄｍが成り立つとする。
【００８８】
算出部１３は、各サーバ３のデータＤｉについて、繰り返し処理を開始する（ｉ＝１、２、・・・ｍ／２）（ステップＳ７０２）。算出部１３は、Ｄｍ/Ｄ１,Ｄ(ｍ-１)/Ｄ２,・・・Ｄ(ｍ-ｉ+１)/Ｄｉをそれぞれ計算する（ステップＳ７０３）。算出部１３は、ステップＳ７０３で算出した計算結果（Ｄ(ｍ-ｉ+１)/Ｄｉ）が、予め設定された基準値以上であるか判定する（ステップＳ７０４）。基準値以上である場合（ステップＳ７０４でＹＥＳ）、算出部１３は、計算に用いた２つのデータ群（Ｄ(ｍ-ｉ+１)およびＤｉ）の組をＴｊ（ｊ＝１，２・・・）として集合Ｔに入力する。
【００８９】
なお、ステップＳ７０４で用いる基準値は、ステップＳ２０４で用いる基準値と同じ値であってもよいし、異なる値であってもよい。
【００９０】
算出部１３は、全てのＤｉ（ｉ＝１〜ｍ／２）に関してステップＳ７０３〜Ｓ７０５の処理を完了した場合に、繰り返し処理を終了する（ステップＳ７０６）。ステップＳ７０２〜Ｓ７０６の処理により、集合Ｔは、Ｄ(ｍ-ｉ+１)/Ｄｉが基準値を超えるＤ(ｍ-ｉ+１)とＤｉの組を全て含む集合となる。
【００９１】
算出部１３は、集合ＴにＴｊが存在するか判定する（ステップＳ７０７）。制御部１８は、集合ＴにＴｊが存在しない場合（ステップＳ７０７でＮＯ）、処理を終了する。集合ＴにＴｊが存在しない場合、ステップＳ７０４の処理においてＹＥＳとなるＤ(ｍ-ｉ+１)/Ｄｉが存在しなかったことを意味する。すなわち、全てのサーバ３のデータが所定の水準以上に均等化されたことを意味する。
【００９２】
制御部１８は、集合ＴにＴｊが存在する場合（ステップＳ７０７でＹＥＳ）、集合Ｔ内のＴｊについて、繰り返し処理を開始する（ステップＳ７０８）。ステップＳ７０７でＹＥＳである場合、ステップＳ７０４の処理においてＹＥＳとなるＤ(ｍ-ｉ+１)/Ｄｉが一つ以上存在したことを意味する。データ分配装置１は、Ｄ(ｍ-ｉ+１)の一部をＤｉ（他のサーバ）に分配する処理を実行する（ステップＳ７０９）。制御部１８は、集合Ｔ内の全てのＴｊに関して、ステップＳ７０９の処理が完了した場合に、繰り返し処理を終了する（ステップＳ７１０）。
【００９３】
図１２は、図１１のステップＳ７０９の詳細な処理の一例を示すフローチャートである。取得部１２は、分配先サーバ（Ｄｉを記憶するサーバ３）の記憶許容量を取得する（ステップＳ８０１）。記憶許容量は、例えば、Ｄｉを記憶するサーバ３のキャッシュメモリの現在の空き容量である。
【００９４】
算出部１３は、Ｄ(ｍ-ｉ+１)を、各属性を選択して分割した場合のデータ量を算出する（ステップＳ８０２）。例えば、過去にデータを分割した実績に基づいて、属性と、その属性でデータを分割した場合の均等率とが対応づけられて記憶されている。算出部１３は、その均等率を用いて、Ｄ(ｍ-ｉ+１)を各属性で分割した場合のデータ量を算出する。
【００９５】
選択部１４は、算出したデータ量に基づいて、分配するデータ量と残すデータ量との比率がｘとなり、分配データが記憶許容量を超えない属性を選択する（ステップＳ８０３）。残すデータ量と分配するデータ量との比率xは、以下のように表現される。
ｘ=(Ｄ(ｍ-ｉ+１)-Ｄｉ)／(Ｄ(ｍ-ｉ+１)+Ｄｉ)
均等率がｘとなる属性を選択してデータを分割し、小さいほうのデータを分配した場合、データを分配したサーバ３（(Ｄ(ｍ-ｉ+１)を記憶していたサーバ３）と分配されたサーバ３（Ｄｉを記憶していたサーバ３）のデータ量が均等になる。
【００９６】
選択部１４は、例えば、過去の実績における均等率がｘとなる属性、または均等率とｘとの差が所定値以内である属性を選択する。すなわち、選択部１４は、いずれかのサーバ３から他のサーバ３に所定割合（ｘの分子に相当する割合）のデータを分配した場合に、いずれかのサーバ３が記憶するデータ量と、他のサーバ３が記憶するデータ量との差が所定の差分基準以下となる条件を選択する。
【００９７】
また、選択部１４は、例えば、均等率がｘと近い属性を選択した結果、分配するデータ量が記憶許容量を超える場合、分配するデータ量が少なくなる（均等率が低い）属性を選択しなおす。
【００９８】
生成部１５は、選択された属性を用いてＤ(ｍ-ｉ+１)を分割し、複数のデータ群を生成する（ステップＳ８０４）。分配部１６は、生成された複数のデータ群のうち、小さいほうのデータ群（比率ｘの分子に対応するデータ群）を他のサーバ３（Ｄｉを記憶するサーバ３）に分配する（ステップＳ８０５）。
【００９９】
以上のように、データ量が多いサーバ３からデータ量が少ないサーバにデータを分配することにより、サーバを増加することが難しい状況であっても、複数のサーバ間での処理負荷の偏りを抑制することができる。
【０１００】
図１３は、他のサーバへのデータ分配処理の実施例を示す図である。図１３に示す例では、サーバ３ａにデータ群Ｄｉが記憶され、サーバ３ｂにデータ群Ｄ(ｍ-ｉ+１)が記憶されていることを想定する。また、Ｄ(ｍ-ｉ+１)/Ｄｉが３であると想定する。
【０１０１】
この場合、ステップＳ７０４の判定処理において、基準値が２であるとすると、判定はＹＥＳとなる。そして、（Ｄ(ｍ-ｉ+１)およびＤｉ）の組が集合Ｔに入力され、ステップＳ７０９のデータ分配処理が行われる。
【０１０２】
この実施例では、Ｄ(ｍ-ｉ+１)/Ｄｉが３であるため、ステップＳ８０３の処理において、比率ｘは、１／２となる。そのため、選択部１４は、均等率が１／２となる属性、または均等率と１／２との差が所定値以内である属性を選択する。また、この実施例では、選択された属性で分割したと仮定したときに、分配するデータ量が記憶許容量を超えていなかったとする。
【０１０３】
生成部１５は、ステップＳ８０５において、選択された属性を用いてＤ(ｍ-ｉ+１)を分割し、複数のデータ群Ｄａ、Ｄｂを生成する（Ｄａ／Ｄｂ＝１／２とする）。分配部１６は、データ群Ｄａ、Ｄｂのうち小さい方のデータ群Ｄａをサーバ３ａに分配する。
【０１０４】
以上の処理により、比率ｘが属性に対応付けられた均等率と同じであれば、分配後のサーバ３ａのデータ量Ｄｉ+ＤａはデータＤｂと同じデータ量となり、サーバ３ａのデータ量とサーバ３ｂのデータ量が均等となる。
【０１０５】
図１４は、第２の実施形態の処理の流れの一例を示すフローチャートである。第２の実施形態の処理は、１ヶ月ごとにサーバ分配処理を行うことを想定しており、月毎に均等率の傾向が異なる例を示す。また、下記処理はｉ月の初めに行われているものとする。図１５は、各属性でデータを分割した場合の各月の均等率を示す図である。
【０１０６】
制御部１８は、変数ｍにｉ-1月のサーバ数をセットする（ステップＳ９０１）。ステップＳ１０１におけるサーバ３の台数は、稼動中であって検索対象のデータを記憶するサーバの台数であるとする。
【０１０７】
制御部１８は、システムの運用を続けるかを判定する（ステップＳ９０２）。ステップＳ９０２において、制御部１８は、例えば、管理者によって予め設定された運用期間に基づいて、システムの運用を続けるかを判定する。システムの運用を続けない場合（ステップＳ１０２でＮＯ）、処理を終了する。システムの運用を続ける場合（ステップＳ１０２でＹＥＳ）、１ヶ月間、システムの運用を続けることを決定する（ステップＳ９０３）。この場合、制御部１８は、通信部１１を介して、サーバ３にシステムの運用を続けることを通知する。
【０１０８】
取得部１２は、各サーバ３のデータ量を取得する（ステップＳ９０４）。取得部１２は、例えば、通信部１１を介してサーバ３に問い合わせをし、キャッシュメモリのデータ量を取得する。なお、ステップＳ９０４で取得するデータは、検索対象のデータのみであるとする。
【０１０９】
制御部１８は、ｉ月にサーバ数が増加可能であるか判定する（ステップＳ９０５）。サーバ数は、検索対象のデータを記憶させるサーバの数を意味する。サーバ数が増加可能であるか否かは、例えば、予め管理者によって設定され、制御部１８は、設定内容を確認することにより、サーバ数が増加可能であるか判定する。
【０１１０】
サーバ数が増加可能である場合（ステップＳ９０６でＹＥＳ）、新サーバへのデータ分配処理に移行する（ステップＳ９０７）。サーバ数が増加可能でない場合（ステップＳ９０６でＮＯ）、稼動中の他のサーバへのデータ分配処理に移行する（ステップＳ９０８）。
【０１１１】
ステップＳ９０７における処理の詳細は、第１の実施形態のステップＳ１０７の処理の詳細（図５、６、９参照）と同様であるため説明を省略する。また、ステップＳ９０８における処理の詳細は、第１の実施形態のステップＳ１０８の処理の詳細（図１１、１２参照）と同様であるため説明を省略する。
【０１１２】
なお、第１の実施形態では、図６のステップＳ３０２、図９のステップＳ５０４、図１２のステップＳ８０２の各処理において、過去の分配実績に基づいて、現在のデータを分割した場合のデータ量を算出している。第２の実施形態では、図１５に示すように月毎に均等率が異なるため、上記各処理において、例えば、前年同月の分配実績を参照する。
【０１１３】
また、例えば、曜日毎に均等率の傾向が異なる場合、よう図６のステップＳ３０２、図９のステップＳ５０４、図１２のステップＳ８０２の各処理において、前週の同じ曜日の均等率を参照すればよい。
【０１１４】
つまり、第２の実施形態では、算出部１３は、時期に応じて複数の属性それぞれで分割した際の条件別のデータ量が異なる場合、算出を行うために取得する過去の実績情報を、分配を行う時期に基づいて選択する。
【０１１５】
以上のように、第２の実施形態では、時期によって均等率が異なる場合に、時期を考慮して過去の実績を参照するので、適切に属性を選択することができる。これにより、複数のサーバ間での処理負荷の偏りを抑制することができる。
【０１１６】
＜データ分配装置のハードウェア構成の一例＞
次に、図１６の例を参照して、データ分配装置のハードウェア構成の一例を説明する。図１６の例に示すように、バス１００に対して、プロセッサ１１１とRandom Access Memory(RAM)１１２とRead Only Memory(ROM)１１３とが接続される。また、該バス１００に対して、補助記憶装置１１４と媒体接続部１１５と通信インタフェース１１６とが接続される。
【０１１７】
プロセッサ１１１はＲＡＭ１１２に展開されたプログラムを実行する。実行されるプログラムとしては、実施形態における処理を行うデータ分配プログラムが適用されてもよい。
【０１１８】
ＲＯＭ１１３はＲＡＭ１１２に展開されるプログラムを記憶する不揮発性の記憶装置である。補助記憶装置１１４は、種々の情報を記憶する記憶装置であり、例えばハードディスクドライブや半導体メモリ等を補助記憶装置１１４に適用してもよい。媒体接続部１１５は、可搬型記録媒体１１８と接続可能に設けられている。
【０１１９】
可搬型記録媒体１１８としては、可搬型のメモリや光学式ディスク（例えば、Compact Disc(CD)やDigital Versatile Disc(DVD))、半導体メモリ等を適用してもよい。この可搬型記録媒体１１８に実施形態の処理を行うデータ分配プログラムが記録されていてもよい。
【０１２０】
図２に示す記憶部１７は、ＲＡＭ１１２や補助記憶装置１１４等により実現されてもよい。図２に示す通信部１１は、通信インタフェース１１６により実現されてもよい。図２に示す取得部１２、算出部１３、選択部１４、生成部１５、分配部１６、および制御部１８は、与えられたデータ分配プログラムをプロセッサ１１１が実行することにより実現されてもよい。
【０１２１】
ＲＡＭ１１２、ＲＯＭ１１３、補助記憶装置１１４および可搬型記録媒体１１８は、何れもコンピュータ読み取り可能な有形の記憶媒体の一例である。これらの有形な記憶媒体は、信号搬送波のような一時的な媒体ではない。
【０１２２】
＜その他＞
本実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
【符号の説明】
【０１２３】
１    事業者側システム
２    ネットワーク
３ａ  第１のサーバ
３ｂ  第２のサーバ
１１    通信部
１２    取得部
１３    算出部
１４    選択部
１５    生成部
１６    分配部
１７    記憶部
１８    制御部
１１１    プロセッサ
１１２    ＲＡＭ
１１３    ＲＯＭ
【図１】
2018032079.tif 000003
【図２】
2018032079.tif 000004
【図３】
2018032079.tif 000005
【図４】
2018032079.tif 000006
【図５】
2018032079.tif 000007
【図６】
2018032079.tif 000008
【図７】
2018032079.tif 000009
【図８】
2018032079.tif 000010
【図９】
2018032079.tif 000011
【図１０】
2018032079.tif 000012
【図１１】
2018032079.tif 000013
【図１２】
2018032079.tif 000014
【図１３】
2018032079.tif 000015
【図１４】
2018032079.tif 000016
【図１５】
2018032079.tif 000017
【図１６】
2018032079.tif 000018