(57)【特許請求の範囲】
【請求項１】
複数のデータサーバと、
各データサーバの稼動状態を監視し、前記各データサーバの稼動状態の情報を作成し閲覧可能に公開する管理サーバと、
前記各データサーバの稼動状態の情報を前記管理サーバから取得し、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択し、前記各データサーバの稼動状態の情報に反して、前記選択したデータサーバにデータを書き込めないとき、前記選択したデータサーバの稼動状態を書き込み可能から書き込み不能へと前記管理サーバに更新させるクライアント装置と、
を備えることを特徴とするデータ分散システム。
【請求項２】
複数のデータサーバと、
各データサーバの稼動状態を監視し、前記各データサーバの稼動状態の情報を作成し閲覧可能に公開する管理サーバと、
前記各データサーバの稼動状態の情報を前記管理サーバから取得し、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択し、前記選択したデータサーバにデータを書き込むクライアント装置と、
前記クライアント装置が、前記各データサーバの稼動状態の情報に反して、前記選択したデータサーバに前記データを書き込めないとき、前記クライアント装置が選択したデータサーバに代わり前記データの書き込みを受け付け、前記クライアント装置が選択したデータサーバが、書き込み可能に復旧したとき、前記クライアント装置が選択したデータサーバに前記データを書き戻す代理サーバと、
を備えることを特徴とするデータ分散システム。
【請求項３】
複数のデータサーバの稼動状態を監視する稼動状態監視部と、
各データサーバの稼動状態の情報を作成し閲覧可能に公開する稼動状態作成部と、
クライアント装置が、前記各データサーバの稼動状態の情報を取得し、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択し、前記各データサーバの稼動状態の情報に反して、前記選択したデータサーバにデータを書き込めないときにおいて、その旨の通知に基づいて、前記クライアント装置が選択したデータサーバの稼動状態を書き込み可能から書き込み不能へと更新する稼動状態更新部と、
を備えることを特徴とする管理サーバ。
【請求項４】
複数のデータサーバの稼動状態を監視する稼動状態監視部と、
各データサーバの稼動状態の情報を作成し閲覧可能に公開する稼動状態作成部と、
クライアント装置が、前記各データサーバの稼動状態の情報を取得し、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択し、前記各データサーバの稼動状態の情報に反して、前記選択したデータサーバにデータを書き込めないときにおいて、前記クライアント装置が選択したデータサーバの稼動回復を確認したとき、前記クライアント装置が選択したデータサーバに代わり前記データの書き込みを受け付ける代理サーバに対して、前記クライアント装置が選択したデータサーバの稼動回復を通知し、前記クライアント装置が選択したデータサーバに前記データを書き戻させる稼動回復通知部と、
を備えることを特徴とする管理サーバ。
【請求項５】
複数のデータサーバの稼動状態を監視する管理サーバから、各データサーバの稼動状態の情報を取得する稼動状態取得部と、
前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択するデータサーバ選択部と、
前記各データサーバの稼動状態の情報に反して、前記データサーバ選択部が選択したデータサーバにデータを書き込めないとき、前記データサーバ選択部が選択したデータサーバの稼動状態を書き込み可能から書き込み不能へと前記管理サーバに更新させる書込不可通知部と、
を備えることを特徴とするクライアント装置。
【請求項６】
複数のデータサーバの稼動状態を監視する管理サーバから、各データサーバの稼動状態の情報を取得する稼動状態取得部と、
前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択するデータサーバ選択部と、
前記各データサーバの稼動状態の情報に反して、前記データサーバ選択部が選択したデータサーバにデータを書き込めないとき、前記データサーバ選択部が選択したデータサーバに代わり前記データの書き込みを受け付ける代理サーバに前記データを書き込むデータ書込部と、
を備えることを特徴とするクライアント装置。
【請求項７】
複数のデータサーバの稼動状態を監視する稼動状態監視手順と、
各データサーバの稼動状態の情報を作成し閲覧可能に公開する稼動状態作成手順と、
クライアント装置が、前記各データサーバの稼動状態の情報を取得し、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択し、前記各データサーバの稼動状態の情報に反して、前記選択したデータサーバにデータを書き込めないときにおいて、その旨の通知に基づいて、前記クライアント装置が選択したデータサーバの稼動状態を書き込み可能から書き込み不能へと更新する稼動状態更新手順と、
をコンピュータに順に実行させるための管理サーバプログラム。
【請求項８】
複数のデータサーバの稼動状態を監視する稼動状態監視手順と、
各データサーバの稼動状態の情報を作成し閲覧可能に公開する稼動状態作成手順と、
クライアント装置が、前記各データサーバの稼動状態の情報を取得し、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択し、前記各データサーバの稼動状態の情報に反して、前記選択したデータサーバにデータを書き込めないときにおいて、前記クライアント装置が選択したデータサーバの稼動回復を確認したとき、前記クライアント装置が選択したデータサーバに代わり前記データの書き込みを受け付ける代理サーバに対して、前記クライアント装置が選択したデータサーバの稼動回復を通知し、前記クライアント装置が選択したデータサーバに前記データを書き戻させる稼動回復通知手順と、
をコンピュータに順に実行させるための管理サーバプログラム。
【請求項９】
複数のデータサーバの稼動状態を監視する管理サーバから、各データサーバの稼動状態の情報を取得する稼動状態取得手順と、
前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択するデータサーバ選択手順と、
前記各データサーバの稼動状態の情報に反して、前記データサーバ選択手順が選択したデータサーバにデータを書き込めないとき、前記データサーバ選択手順が選択したデータサーバの稼動状態を書き込み可能から書き込み不能へと前記管理サーバに更新させる書込不可通知手順と、
をコンピュータに順に実行させるためのクライアント装置プログラム。
【請求項１０】
複数のデータサーバの稼動状態を監視する管理サーバから、各データサーバの稼動状態の情報を取得する稼動状態取得手順と、
前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択するデータサーバ選択手順と、
前記各データサーバの稼動状態の情報に反して、前記データサーバ選択手順が選択したデータサーバにデータを書き込めないとき、前記データサーバ選択手順が選択したデータサーバに代わり前記データの書き込みを受け付ける代理サーバに前記データを書き込むデータ書込手順と、
をコンピュータに順に実行させるためのクライアント装置プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ分散システムでのデータの書き込み及び稼動状態の監視に関する。
【背景技術】
【０００２】
ＩＣＴ（Ｉｎｆｏｒｍａｔｉｏｎ  ａｎｄ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｔｅｃｈｎｏｌｏｇｙ）技術の発達に伴い、流通するデータの量が爆発的に増加している。これらを処理するために、分散ストレージや分散処理システムが使われている。
【０００３】
分散処理システムでは、複数配置された同様の働きをするサーバそれぞれが分担して処理を実行するため、サーバの台数を増やすことでシステムの規模を拡張することができる。すなわち、分散処理システムは、スケールアウトするシステムとなる。
【０００４】
クライアントからのデータの書き込みを分散させる場合は、複数のデータサーバが分担してデータの書き込みを受け付けることになる。その分担の方法は様々であるが、データのＩＤ（ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）のハッシュ値によって割り振る方法（非特許文献１）や、ランダムに選択する方法（非特許文献２）などがある。
【０００５】
いずれの方法でも、データサーバの故障が発生することを前提としたメカニズムを採用することが多く、そのために管理サーバがデータサーバの死活監視を行う。その上で、現在稼動しているものの中から、非特許文献１や非特許文献２に例示したルールによって書き込み先のデータサーバを選ぶことになる。
【０００６】
ここで、クライアントが管理サーバにデータを渡して書き込みを代替させた場合、管理サーバはクライアントからのアクセスに加えてデータの入出力も担うことになり、管理サーバの負荷が極端に高くなってしまい、システムがスケールアウトしなくなる。
【０００７】
そこで、クライアントが管理サーバからデータサーバの稼動状態の情報を取得し、クライアントが直接データサーバに書き込む場合、管理サーバはデータの入出力を担わず、管理サーバの負荷が低くなり、システムがスケールアウトする（非特許文献２）。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】首藤一幸、「スケールアウトの技術」、情報処理、Ｖｏｌ．５０、Ｎｏ．１１、２００９年１１月
【非特許文献２】佐藤浩史、井上武、山崎敬広、片山陽平、清水敬司、小柳恵一、「センサデータのための分散サンプリングストレージとそのサンプルサイズ制御手法」、ＦＩＴ２０１０、Ｄ−０２２、ｐｐ．１４１−１４２、２０１０年
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ここで、管理サーバが自己の内部で管理するデータサーバの稼動状態の情報（内部用リスト）は、稼動状態が変化するたびに更新される。しかし、管理サーバがクライアントに公開するデータサーバの稼動状態の情報（公開用リスト）は、稼動状態が変化するたびに更新されるのではなく、有効期限が経過するたびに内部用リストに基づいて更新される。よって、内部用リスト及び公開用リストは、常には一致しない。
【００１０】
公開用リストの有効期限が経過するまでの間に、データサーバの稼動状態が変化することがある。従って、活きているとされているデータサーバが書き込み時には死んでいる可能性があり、その場合クライアントは書き込みに失敗してしまう。この可能性を低く抑えるために死活監視の頻度を上げると、やはり管理サーバの負荷が高くなってしまう。
【００１１】
データサーバの選択方法によっては、書き込みに失敗した際に改めて別個のデータサーバを選択し直すことも考えられる。しかし、例えばデータサーバのランダムな選択を求められており、全ての活きているデータサーバに対して確率均等に選択することが重要である場合は、そのような選び直しをすることで偏りが生じ均等性が失われてしまうため、選び直しは望ましくない。また、データサーバの選択が一意に決まる場合、例えばデータサーバが冗長化されていない環境でデータのＩＤのハッシュ値によって割り振る場合などは、そもそも選び直すこと自体が原理的に不可能である。
【００１２】
管理サーバを分散させてスケールアウトさせることも可能であるが、コストの問題から、集中させるか分散させるとしても少ない台数に抑えることが好ましい。いずれにせよ、管理サーバの負荷を小さく抑える技術が重要である。
【００１３】
そこで、前記課題を解決するために、本発明は、管理サーバの負荷低減のため、管理サーバによるデータサーバの監視の頻度を下げても、クライアントの書き込み失敗を増やすことなく、別個のデータサーバの選び直しをなくすことを目的とする。
【課題を解決するための手段】
【００１４】
上記目的を達成するために、クライアント装置は、各データサーバの稼動状態の情報に反して、選択したデータサーバにデータを書き込めないとき、管理サーバに、選択したデータサーバの稼動状態を、書き込み可能から書き込み不能へと更新させることとした。
【００１５】
具体的には、本発明は、複数のデータサーバと、各データサーバの稼動状態を監視し、前記各データサーバの稼動状態の情報を作成し閲覧可能に公開する管理サーバと、前記各データサーバの稼動状態の情報を前記管理サーバから取得し、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択し、前記各データサーバの稼動状態の情報に反して、前記選択したデータサーバにデータを書き込めないとき、前記選択したデータサーバの稼動状態を書き込み可能から書き込み不能へと前記管理サーバに更新させるクライアント装置と、を備えることを特徴とするデータ分散システムである。
【００１６】
また、本発明は、複数のデータサーバの稼動状態を監視する稼動状態監視部と、各データサーバの稼動状態の情報を作成し閲覧可能に公開する稼動状態作成部と、クライアント装置が、前記各データサーバの稼動状態の情報を取得し、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択し、前記各データサーバの稼動状態の情報に反して、前記選択したデータサーバにデータを書き込めないときにおいて、その旨の通知に基づいて、前記クライアント装置が選択したデータサーバの稼動状態を書き込み可能から書き込み不能へと更新する稼動状態更新部と、を備えることを特徴とする管理サーバである。
【００１７】
また、本発明は、複数のデータサーバの稼動状態を監視する管理サーバから、各データサーバの稼動状態の情報を取得する稼動状態取得部と、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択するデータサーバ選択部と、前記各データサーバの稼動状態の情報に反して、前記データサーバ選択部が選択したデータサーバにデータを書き込めないとき、前記データサーバ選択部が選択したデータサーバの稼動状態を書き込み可能から書き込み不能へと前記管理サーバに更新させる書込不可通知部と、を備えることを特徴とするクライアント装置である。
【００１８】
また、本発明は、複数のデータサーバの稼動状態を監視する稼動状態監視手順と、各データサーバの稼動状態の情報を作成し閲覧可能に公開する稼動状態作成手順と、クライアント装置が、前記各データサーバの稼動状態の情報を取得し、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択し、前記各データサーバの稼動状態の情報に反して、前記選択したデータサーバにデータを書き込めないときにおいて、その旨の通知に基づいて、前記クライアント装置が選択したデータサーバの稼動状態を書き込み可能から書き込み不能へと更新する稼動状態更新手順と、をコンピュータに順に実行させるための管理サーバプログラムである。
【００１９】
また、本発明は、複数のデータサーバの稼動状態を監視する管理サーバから、各データサーバの稼動状態の情報を取得する稼動状態取得手順と、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択するデータサーバ選択手順と、前記各データサーバの稼動状態の情報に反して、前記データサーバ選択手順が選択したデータサーバにデータを書き込めないとき、前記データサーバ選択手順が選択したデータサーバの稼動状態を書き込み可能から書き込み不能へと前記管理サーバに更新させる書込不可通知手順と、をコンピュータに順に実行させるためのクライアント装置プログラムである。
【００２０】
この構成によれば、管理サーバの負荷低減のため、管理サーバによるデータサーバの監視の頻度を下げても、クライアントが管理サーバと併せてデータサーバの稼動状態を監視するため、クライアントの書き込み失敗を増やさないことができる。さらに、管理サーバによるデータサーバの監視の頻度を下げたまま、データサーバの稼動状態の情報の更新頻度を上げることができるため、クライアントの書き込み失敗を減らすこともできる。
【００２１】
上記目的を達成するために、代理サーバは、選択されたデータサーバに代わりデータの書き込みを受け付け、管理サーバは、選択されたデータサーバの稼動回復を確認したとき、代理サーバに対して選択されたデータサーバにデータを書き戻させることとした。
【００２２】
具体的には、本発明は、複数のデータサーバと、各データサーバの稼動状態を監視し、前記各データサーバの稼動状態の情報を作成し閲覧可能に公開する管理サーバと、前記各データサーバの稼動状態の情報を前記管理サーバから取得し、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択し、前記選択したデータサーバにデータを書き込むクライアント装置と、前記クライアント装置が、前記各データサーバの稼動状態の情報に反して、前記選択したデータサーバに前記データを書き込めないとき、前記クライアント装置が選択したデータサーバに代わり前記データの書き込みを受け付け、前記クライアント装置が選択したデータサーバが、書き込み可能に復旧したとき、前記クライアント装置が選択したデータサーバに前記データを書き戻す代理サーバと、を備えることを特徴とするデータ分散システムである。
【００２３】
また、本発明は、複数のデータサーバの稼動状態を監視する稼動状態監視部と、各データサーバの稼動状態の情報を作成し閲覧可能に公開する稼動状態作成部と、クライアント装置が、前記各データサーバの稼動状態の情報を取得し、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択し、前記各データサーバの稼動状態の情報に反して、前記選択したデータサーバにデータを書き込めないときにおいて、前記クライアント装置が選択したデータサーバの稼動回復を確認したとき、前記クライアント装置が選択したデータサーバに代わり前記データの書き込みを受け付ける代理サーバに対して、前記クライアント装置が選択したデータサーバの稼動回復を通知し、前記クライアント装置が選択したデータサーバに前記データを書き戻させる稼動回復通知部と、を備えることを特徴とする管理サーバである。
【００２４】
また、本発明は、複数のデータサーバの稼動状態を監視する管理サーバから、各データサーバの稼動状態の情報を取得する稼動状態取得部と、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択するデータサーバ選択部と、前記各データサーバの稼動状態の情報に反して、前記データサーバ選択部が選択したデータサーバにデータを書き込めないとき、前記データサーバ選択部が選択したデータサーバに代わり前記データの書き込みを受け付ける代理サーバに前記データを書き込むデータ書込部と、を備えることを特徴とするクライアント装置である。
【００２５】
また、本発明は、複数のデータサーバの稼動状態を監視する稼動状態監視手順と、各データサーバの稼動状態の情報を作成し閲覧可能に公開する稼動状態作成手順と、クライアント装置が、前記各データサーバの稼動状態の情報を取得し、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択し、前記各データサーバの稼動状態の情報に反して、前記選択したデータサーバにデータを書き込めないときにおいて、前記クライアント装置が選択したデータサーバの稼動回復を確認したとき、前記クライアント装置が選択したデータサーバに代わり前記データの書き込みを受け付ける代理サーバに対して、前記クライアント装置が選択したデータサーバの稼動回復を通知し、前記クライアント装置が選択したデータサーバに前記データを書き戻させる稼動回復通知手順と、をコンピュータに順に実行させるための管理サーバプログラムである。
【００２６】
また、本発明は、複数のデータサーバの稼動状態を監視する管理サーバから、各データサーバの稼動状態の情報を取得する稼動状態取得手順と、前記各データサーバの稼動状態の情報に基づいて、書き込み可能であるデータサーバを選択するデータサーバ選択手順と、前記各データサーバの稼動状態の情報に反して、前記データサーバ選択手順が選択したデータサーバにデータを書き込めないとき、前記データサーバ選択手順が選択したデータサーバに代わり前記データの書き込みを受け付ける代理サーバに前記データを書き込むデータ書込手順と、をコンピュータに順に実行させるためのクライアント装置プログラムである。
【００２７】
この構成によれば、管理サーバの負荷低減のため、管理サーバによるデータサーバの監視の頻度を下げても、データを代理のサーバに退避させた後にデータを本来のサーバに書き戻すため、別個のデータサーバの選び直しをなくすことができる。
【発明の効果】
【００２８】
本発明は、管理サーバの負荷低減のため、管理サーバによるデータサーバの監視の頻度を下げても、クライアントの書き込み失敗を増やすことなく、別個のデータサーバの選び直しをなくすことができる。
【図面の簡単な説明】
【００２９】
【図１】データ分散システムの構成を示すブロック図である。
【図２】データ分散システムにおけるデータの書き込みの処理を示すブロック図である。
【図３】データ分散システムにおける稼動状態の監視の処理を示すシーケンスである。
【図４】クライアントの処理を示すフローチャートである。
【図５】データ分散システムにおけるデータの書き戻しの処理を示すブロック図である。
【図６】データ分散システムにおけるデータの書き戻しの処理を示すシーケンスである。
【図７】代理サーバの第１のデータ構造を示す図である。
【図８】代理サーバの第２のデータ構造を示す図である。
【発明を実施するための形態】
【００３０】
添付の図面を参照して本発明の実施形態を説明する。以下に説明する実施形態は本発明の実施の例であり、本発明は以下の実施形態に制限されるものではない。なお、本明細書及び図面において符号が同じ構成要素は、相互に同一のものを示すものとする。
【００３１】
（データ分散システムの構成の概要）
データ分散システムの構成を示すブロック図を図１に示す。データ分散システムは、分散データベース１、管理サーバ２、クライアント３及び代理サーバ４から構成される。分散データベース１は、複数のデータベース部１１、１２、１３を備える。
【００３２】
管理サーバ２は、死活監視部２１、稼動状態管理部２２、稼動状態リスト公開部２３、報告受付部２４及びデータベース制御部２５から構成される。
【００３３】
死活監視部２１は、稼動状態監視部として、複数のデータベース部１１、１２、１３の稼動状態を監視する。稼動状態作成部として、稼動状態管理部２２は、各データベース部１１、１２、１３の稼動状態の情報を作成し、稼動状態リスト公開部２３は、各データベース部１１、１２、１３の稼動状態の情報を閲覧可能に公開する。
【００３４】
報告受付部２４は、クライアント３が、各データベース部１１、１２、１３の稼動状態の情報を取得し、各データベース部１１、１２、１３の稼動状態の情報に基づいて、書き込み可能であるいずれかのデータベース部を選択し、各データベース部１１、１２、１３の稼動状態の情報に反して、選択したいずれかのデータベース部にデータを書き込めないときにおいて、その旨の通知を受ける。稼動状態管理部２２は、稼動状態更新部として、その旨の通知に基づいて、クライアント３が選択したいずれかのデータベース部の稼動状態を書き込み可能から書き込み不能へと更新する。
【００３５】
データベース制御部２５は、稼動回復通知部として、クライアント３が選択したいずれかのデータベース部の稼動回復を確認したとき、クライアント３が選択したいずれかのデータベース部に代わりデータの書き込みを受け付ける代理サーバ４に対して、クライアント３が選択したいずれかのデータベース部の稼動回復を通知し、クライアント３が選択したいずれかのデータベース部にデータを書き戻させる。
【００３６】
クライアント３は、管理サーバ対応部３１、稼動状態リスト管理部３２、サーバ選択部３３及びデータ入出力部３４から構成される。
【００３７】
管理サーバ対応部３１は、稼動状態取得部として、複数のデータベース部１１、１２、１３の稼動状態を監視する管理サーバ２から、各データベース部１１、１２、１３の稼動状態の情報を取得する。稼動状態リスト管理部３２は、各データベース部１１、１２、１３の稼動状態の情報を保持する。サーバ選択部３３は、データサーバ選択部として、各データベース部１１、１２、１３の稼動状態の情報に基づいて、書き込み可能であるいずれかのデータベース部を選択する。データ入出力部３４は、データ書込部として、書き込み可能であるいずれかのデータベース部にデータを書き込む。
【００３８】
管理サーバ対応部３１は、書込不可通知部として、各データベース部１１、１２、１３の稼動状態の情報に反して、サーバ選択部３３が選択したいずれかのデータベース部にデータを書き込めないとき、サーバ選択部３３が選択したいずれかのデータベース部の稼動状態を書き込み可能から書き込み不能へと管理サーバ２に更新させる。
【００３９】
データ入出力部３４は、データ書込部として、サーバ選択部３３が選択したデータベース部に代わりデータの書き込みを受け付ける代理サーバ４にデータを書き込む。
【００４０】
代理サーバ４は、クライアント３が選択したいずれかのデータベース部に代わりデータの書き込みを受け付け、データ入出力部４１、データベース部４２、管理サーバ対応部４３及びテーブル管理部４４から構成される。
【００４１】
データ入出力部４１は、クライアント３が選択したいずれかのデータベース部が書き込み不能となったとき、クライアント３からデータを入力し、クライアント３が選択したいずれかのデータベース部が書き込み可能となったとき、そのデータベース部にデータを出力する。データベース部４２は、クライアント３からのデータを格納する。
【００４２】
管理サーバ対応部４３は、クライアント３が選択したいずれかのデータベース部が書き込み可能となったとき、管理サーバ２のデータベース制御部２５からその旨の通知を受ける。管理サーバ対応部４３は、クライアント３が選択したいずれかのデータベース部に書き戻しが終了したとき、管理サーバ２の報告受付部２４にその旨を通知する。テーブル管理部４４は、クライアント３が選択したデータベース部がいずれであるかに応じて、クライアント３が出力したデータをデータベース部４２の適切な領域において管理する。
【００４３】
図１に説明した各装置は、コンピュータとプログラムによっても実現でき、プログラムを記録媒体に記録することも、ネットワークを通して提供することも可能である。
【００４４】
発明が解決しようとする課題において記載したように、公開用リストの有効期限が経過するまでの間に、データサーバの稼動状態が変化する場合には、活きているとされているデータベース部が書き込み時には死んでいる可能性がある。
【００４５】
しかし、図１のように、クライアント３は、各データベース部１１、１２、１３の稼動状態の情報に反して、選択したいずれかのデータベース部にデータを書き込めないとき、管理サーバ２に、選択したいずれかのデータベース部の稼動状態を、書き込み可能から書き込み不能へと更新させる。つまり、クライアント３が管理サーバ２と併せてデータベース部１１、１２、１３の稼動状態を監視するため、管理サーバ２の負荷を高くすることなくクライアント３の書き込み失敗を減らすことができる。
【００４６】
そして、図１のように、代理サーバ４は、選択されたいずれかのデータベース部に代わりデータの書き込みを受け付け、管理サーバ２は、選択されたいずれかのデータベース部の稼動回復を確認したとき、代理サーバ４に対して選択されたいずれかのデータベース部にデータを書き戻させる。つまり、データを代理のサーバに退避させた後にデータを本来のサーバに書き戻すため、別個のデータサーバの選び直しをなくすことができる。
【００４７】
（データの書き込みに成功する場合の処理）
次に、データの書き込みに成功する場合の処理について説明する。データ分散システムにおけるデータの書き込みの処理を示すブロック図を図２に示す。
【００４８】
管理サーバ２は、各データベース部１１、１２、１３にｐｉｎｇを送信し、各データベース部１１、１２、１３の稼動状態を監視する。そして、管理サーバ２は、各データベース部１１、１２、１３の稼動状態の情報を示す公開用リストＰを公開する。ここで、公開用リストＰのうち｛１、２、３｝は、ＤＢ１、ＤＢ２、ＤＢ３とマークされたデータベース部１１、１２、１３に書き込み可能であることを示す。クライアント３は、管理サーバ２に公開用リストＰを要求し、管理サーバ２から公開用リストＰを取得する。そして、クライアント３は、公開用リストＰに基づいて、データベース部１１、１２、１３に書き込み可能であることを確認し、データベース部１３にデータＤを書き込む。
【００４９】
データ分散システムにおける稼動状態の監視の処理を示すシーケンスを図３に示す。稼動状態管理部２２は、稼動状態リストを２つ保持しており、１つは内部用（ｉｎｔｅｒｎａｌ）リストＩで、もう１つは公開用（ｐｕｂｌｉｓｈ）リストＰである。
【００５０】
死活監視部２１は、定期的にデータベース部１１、１２、１３の稼動状態をチェックする。稼動状態には、「正常」、「準備中」、「異常」の３種類がある。「正常」は、正常に動いており、クライアント３からの書き込みを受け付けられる状態、「準備中」は、正常に動いているが、クライアント３からの書き込みを受け付けられない状態、「異常」は、正常に動いておらず、クライアント３からの書き込みを受け付けられない状態を表す。
【００５１】
死活監視部２１は、データベース部１１、１２、１３に対してｐｉｎｇを投げる。そして、正しく返ってきた場合、今まで「正常」であったデータベース部は引き続き「正常」と判断し、今まで「異常」であったデータベース部は「準備中」と判断する。しかし、正しく返らなかった場合、今まで「異常」であったデータベース部は引き続き「異常」と判断し、今まで「正常」であったデータベース部は「異常」と判断する。稼動状態管理部２２は、内部用リストＩを更新する。このチェックを例えば５分おきに行う。
【００５２】
また、前述したように、クライアント３がデータベース部の異常を報告してくる場合がある。この場合、報告受付部２４がその報告を受け、稼動状態管理部２２が内部用リストＩの該当する稼動状態を「異常」に更新する。
【００５３】
また、前述したように、代理サーバ４がデータベース部の復旧を報告してくる場合がある。この場合、報告受付部２４がその報告を受け、稼動状態管理部２２が内部用リストＩの該当する稼動状態を「正常」に更新する。
【００５４】
稼動状態管理部２２は、例えば５分おきに内部用リストＩのうち「正常」状態にあるデータベース部のリストを公開用リストＰとして作成する。稼動状態リスト公開部２３は、有効期限を例えば５分後までとして公開用リストＰを公開する。
【００５５】
図３においては、初期状態では、内部用リストＩも公開用リストＰ１も、｛１、２、３｝を示している。まず、稼動状態管理部２２は、データベース部１３の異常の報告を受けたとき、内部用リストＩを｛１、２、３｝から｛１、２｝へと更新し、内部用リストＩ１を作成する。しかし、稼動状態リスト公開部２３は、有効期限が経過していないため、公開用リストＰ１を更新するわけではない。次に、稼動状態リスト公開部２３は、有効期限が経過しているため、内部用リストＩ１に基づいて、公開用リストＰ１を｛１、２、３｝から｛１、２｝へと更新し、公開用リストＰ２を公開する。以下、内部用リストＩ２、Ｉ３、Ｉ４、Ｉ５及び公開用リストＰ３、Ｐ４、Ｐ５が、内部用リストＩ１及び公開用リストＰ１、Ｐ２と同様にして、作成されて公開される。
【００５６】
このように、稼動状態リストは、内部用と公開用で常には一致しない。ここで、管理サーバ２がクライアント３に、内部用リストＩではなく公開用リストＰを公開する理由を説明する。管理サーバ２は、クライアント３がいずれのデータベース部の集合からデータベース部を選択したかを把握する必要があり、少なくともクライアント３が何台のデータベース部の集合からデータベース部を選択したかを把握する必要がある。管理サーバ２は、データベース部１３の集合であるいくつの分散データベース１からデータベース部１３が選択されたかに基づいて、後に統計処理を実行するためである。
【００５７】
まず、管理サーバ２がクライアント３に内部用リストＩを公開する場合を考える。内部用リストＩは、稼動状態が変化するたび更新されるため、同一の時刻において、各クライアント３が保持している稼動状態リストは、それぞれ異なることがある。よって、クライアント３がいずれの時点で更新された内部用リストＩに基づいてデータベース部を選択したのかを、管理サーバ２は把握することが負担になる。
【００５８】
次に、管理サーバ２がクライアント３に公開用リストＰを公開する場合を考える。公開用リストＰは、有効期限が経過してから更新されるため、同一の時刻において、各クライアント３が保持している稼動状態リストは、それぞれ同一と保証される。よって、クライアント３が有効期限満了で更新された公開用リストＰに基づいてデータベース部を選択したことを、管理サーバ２は把握することが容易になる。
【００５９】
そこで、管理サーバ２はクライアント３に、内部用リストＩではなく公開用リストＰを公開する。しかし、公開用リストの有効期限が経過するまでの間に、データサーバの稼動状態が変化する可能性があり、活きているとされているデータベース部が書き込み時には死んでいる可能性がある。そこで、本発明が適用されるのである。
【００６０】
クライアントの処理を示すフローチャートを図４に示す。クライアント３において、データが発生する（ステップＳ１）。稼動状態リスト管理部３２は、稼動状態リストが有効期限内にあるか、又は稼動状態リストが保持されているかを確認する（ステップＳ２）。
【００６１】
稼動状態リスト管理部３２が、稼動状態リストが有効期限内にあることを確認したとき（ステップＳ２においてＹＥＳ）について説明する。サーバ選択部３３は、稼動状態リストに基づいて、データベース部を選択する（ステップＳ５）。データ入出力部３４は、そのデータベース部にデータを書き込むことを試みる（ステップＳ６）。
【００６２】
稼動状態リスト管理部３２が、稼動状態リストが有効期限内にないこと、又は稼動状態リストが保持されていないことを確認したとき（ステップＳ２においてＮＯ）について説明する。管理サーバ対応部３１は、管理サーバ２から稼動状態リストを取得する（ステップＳ３）。稼動状態リスト管理部３２は、その稼動状態リストを保持する（ステップＳ４）。ステップＳ５、Ｓ６については、前述と同様にして実行される。
【００６３】
データ入出力部３４が、データベース部にデータを書き込むことができたとき（ステップＳ７においてＹＥＳ）、一連の処理は終了する。データ入出力部３４が、データベース部にデータを書き込むことができないとき（ステップＳ７においてＮＯ）、管理サーバ対応部３１は、その旨を管理サーバ２に報告し（ステップＳ８）、データ入出力部３４は、データを代理サーバ４に書き込む（ステップＳ９）。ステップＳ８、Ｓ９については、データの書き込みに失敗する場合の処理の項目で詳述する。
【００６４】
（データの書き込みに失敗する場合の処理）
次に、データの書き込みに失敗する場合の処理について説明する。データ分散システムにおけるデータの書き戻しの処理を示すブロック図を図５に示す。
【００６５】
クライアント３は、公開用リストＰに基づいて、データベース部１１、１２、１３に書き込み可能であることを確認し、データベース部１３にデータＤを書き込もうとする。しかし、クライアント３は、公開用リストＰに反して、データベース部１３にデータＤを書き込めない。そこで、クライアント３は、データベース部１３に書き込み不能であることを、管理サーバ２に通知する。さらに、クライアント３は、データベース部１３の識別子ＩＤを紐付けたデータＤを、代理サーバ４に書き込む。
【００６６】
管理サーバ２は、内部用リストＩを更新する。つまり、内部用リストＩのうち、｛１、２、３｝は｛１、２｝に更新される。代理サーバ４は、データＤを格納する。管理サーバ２は、データベース部１３にｐｉｎｇを送信し、データベース部１３の稼動状態を監視する。管理サーバ２は、データベース部１３に書き込み可能であることを確認したとき、その旨を代理サーバ４に通知する。代理サーバ４は、その旨の通知を受けたとき、データＤをデータベース部１３に書き戻す。クライアント３は、書き戻しの際に関与していない。
【００６７】
データ分散システムにおけるデータの書き戻しの処理を示すシーケンスを図６に示す。管理サーバ対応部３１は、稼動状態リスト公開部２３に稼動状態リストを要求する（ステップＳ１１）。稼動状態リスト公開部２３は、管理サーバ対応部３１に稼動状態リストを公開する（ステップＳ１２）。このとき、内部用リストＩ１１は、｛１、２、３｝を示している。その後、データベース部１３は、異常状態になっている。しかし、内部用リストＩ１１は、｛１、２、３｝を示したままである。
【００６８】
データ入出力部３４は、データベース部１３にデータを書き込むことを試みるが、データベース部１３にデータを書き込めない（ステップＳ１３）。管理サーバ対応部３１は、その旨を報告受付部２４に報告する（ステップＳ１４）。稼動状態管理部２２は、内部用リストＩ１１を｛１、２、３｝から｛１、２｝へと更新し、内部用リストＩ１２を作成する。報告受付部２４は、代理サーバ４のアドレスを管理サーバ対応部３１に通知するが（ステップＳ１５）、稼動状態リスト公開部２３が、代理サーバ４のアドレスを管理サーバ対応部３１に公開することもできる。データ入出力部３４は、データベース部１３の識別子ＩＤを紐付けたデータを、代理サーバ４に書き込む（ステップＳ１６）。
【００６９】
稼動状態管理部２２は、死活監視部２１が内部用リストＩ１２で「異常」となっているデータベース部１３からｐｉｎｇを正常に受け取った時点で、または、運用者がデータベース部１３を復旧させた旨を稼動状態管理部２２へ直接登録した時点で、内部用リストＩ１２のデータベース部１３の稼動状態を「準備中」に更新する（ステップＳ１７）。データベース制御部２５は、管理サーバ対応部４３に、データベース部１３の稼動状態が「準備中」になったことを通知する（ステップＳ１８）。
【００７０】
テーブル管理部４４は、データベース部１３へ紐付けられているテーブルを選び、その全データをデータベース部４２から読み込み、データ入出力部４１を通してデータベース部１３へ書き戻す（ステップＳ１９）。その後、テーブル管理部４４は、データベース部１３へ紐付けられているテーブルをテーブル管理部４４及びデータベース部４２から削除する。そして、管理サーバ対応部４３は、処理が終了したことを報告受付部２４へ報告する（ステップＳ２０）。稼動状態管理部２２は、代理サーバ４からの処理終了の報告を受けてデータベース部１３が復旧したと判断し、内部用リストＩ１２を｛１、２｝から｛１、２、３｝へと更新し、内部用リストＩ１３を作成する。
【００７１】
なお、書き戻し中にデータベース部１３に異常が発生した場合は、データ入出力部４１は書き戻し処理を中止し、テーブル管理部４４はデータを削除せず、管理サーバ対応部４３は報告受付部２４にその旨を伝え、稼動状態管理部２２は内部用リストＩのうちデータベース部１３の稼動状態を「異常」に戻し、死活監視部２１は監視を続ける。
【００７２】
また、データベース部１３の異常が、クライアント３からの報告ではなく死活監視部２１のチェックにより気付いたものであり、その後もクライアント３から一度もデータベース部１３の異常について報告が無いまま、データベース部１３が復旧する場合がある。この場合、代理サーバ４にはデータベース部１３に紐付けられているデータは無いと判断することも可能である。そこで、死活監視部２１がデータベース部１３の復旧に気付いた時点で、前述した書き戻し処理を実行することなく、稼動状態管理部２２は内部用リストＩのうちデータベース部１３の稼動状態を「正常」に戻すことにしても良い。
【００７３】
代理サーバの第１のデータ構造を示す図を図７に示す。データベース部１１、１２、１３に紐付けられたデータが、一括のテーブルによって管理されている。データベース部の識別用のカラムが存在しており、データの読み込みおよび削除の前にデータベース部の識別子で全データをフィルタする処理が必要であるが、テーブル管理部４４は不要である。
【００７４】
代理サーバの第２のデータ構造を示す図を図８に示す。データベース部１１、１２、１３に紐付けられたデータが、別個のテーブルによって管理されている。データベース部毎にテーブルが管理されており、テーブル管理部４４は必要であるが、データの読み込みおよび削除の前にデータベース部の識別子で全データをフィルタする処理は不要である。なお、テーブルではなくデータベースを別個にすることも可能である。
【産業上の利用可能性】
【００７５】
本発明に係るデータ分散システム、管理サーバ、クライアント装置、管理サーバプログラム及びクライアント装置プログラムは、流通するデータの量の爆発的な増加に関わらず、管理サーバの負荷や書き込みの偏りを軽減するときに適用することができる。
【符号の説明】
【００７６】
１：分散データベース
２：管理サーバ
３：クライアント
４：代理サーバ
１１、１２、１３：データベース部
２１：死活監視部
２２：稼動状態管理部
２３：稼動状態リスト公開部
２４：報告受付部
２５：データベース制御部
３１：管理サーバ対応部
３２：稼動状態リスト管理部
３３：サーバ選択部
３４：データ入出力部
４１：データ入出力部
４２：データベース部
４３：管理サーバ対応部
４４：テーブル管理部
Ｉ：内部用リスト
Ｐ：公開用リスト
Ｄ：データ
ＩＤ：識別子
【図１】
0005483473.tif 000002
【図２】
0005483473.tif 000003
【図３】
0005483473.tif 000004
【図４】
0005483473.tif 000005
【図５】
0005483473.tif 000006
【図６】
0005483473.tif 000007
【図７】
0005483473.tif 000008
【図８】
0005483473.tif 000009