(57)【要約】【課題】データの一貫性及び最新性を確保しつつ、適切な負荷分散を行なうことができるデータ管理システム、データ管理方法及びデータ管理プログラムを提供する。【解決手段】データノード３１乃至３４は、固有の識別子に対応付けられたデータを保持する。アプリケーションノード１１乃至１４は、アクセスノード２１乃至２３に対し、識別子を指定して、データへのアクセス要求を通知する。アクセスノード２１乃至２３は、識別子と、識別子に対応するデータを保持するデータノードとを対応付けたインデックス情報、複数のデータノードに対するアクセス順序を予め定義したデータノード情報を保持しており、アクセス要求に応じ、前記インデックス情報に基づいて特定されるデータノードに対する第１のアクセス、及び第１のアクセスが失敗した場合にデータノード情報に基づいて特定されるデータノードに対する第２のアクセスを実行する。【選択図】図１
2013134522.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータノードと、
複数のアプリケーションノードと、
前記データノードと前記アプリケーションノードとに接続された１以上のアクセスノードとを含むデータ管理システムであって、
前記データノードは、固有の識別子に対応付けられたデータを複数保持するデータベースを有し、
前記データは、マスタデータ、又は他の前記データノードの前記マスタデータを複製したバックアップデータであり、
前記アプリケーションノードは、前記アクセスノードに対し、前記識別子を指定して、前記データへのアクセス要求を通知するアクセス要求手段を有し、
前記アクセスノードは、前記識別子と、前記識別子に対応する前記データを前記マスタデータとして保持する前記データノードとを対応付けたインデックス情報、及び前記複数のデータノードに対するアクセス順序を予め定義したデータノード情報を保持する記憶手段と、
前記アクセス要求に応じ、前記インデックス情報において前記アクセス要求にかかる前記識別子と対応付けられた前記データノードに対する第１のアクセスを実行し、前記第１のアクセスを正常に完了できない場合、前記データノード情報において前記第１のアクセスにかかる前記データノードに次ぐアクセス順序が定められている前記データノードに対する第２のアクセスを実行するアクセス制御手段とを有する
データ管理システム。
【請求項２】
前記データベースは、前記識別子、前記データ、及び第１の更新識別子を対応付けて保持し、
前記記憶手段は、前記インデックス情報として、前記識別子、前記データノード、及び第２の更新識別子を対応付けて保持し、
前記アクセス制御手段は、
前記アクセス要求が前記データの検索要求である場合、前記データベースから前記識別子と対応付けられた前記データ及び前記第１の更新識別子とを取得し、前記第１の更新識別子と、前記インデックス情報において前記識別子に対応付けられた前記第２の更新識別子とを比較し、一致する場合、前記データは最新であると推定する
請求項１記載のデータ管理システム。
【請求項３】
前記アクセス制御手段は、
前記アクセス要求が前記データの更新要求である場合、前記データベースにおいて前記識別子と対応付けられた前記データを更新するとともに前記第１の更新識別子を変更し、前記インデックス情報において前記識別子に対応付けられた前記第２の更新識別子を、変更された前記第１の更新識別子と同じ値に変更する
請求項２記載のデータ管理システム。
【請求項４】
前記アクセス制御手段は、
前記アクセス要求が前記データの追加要求である場合、新たな前記識別子及び前記第１の更新識別子を生成し、前記識別子、前記データ及び前記第１の更新識別子を前記データベースに追加するとともに、前記識別子、前記データを追加した前記データノード及び前記第１の更新識別子と同じ値を有する前記第２の更新識別子を前記インデックス情報に追加する
請求項２乃至３いずれか１項記載のデータ管理システム。
【請求項５】
前記第１の更新識別子及び前記第２の更新識別子は連続する数値である
請求項２乃至４いずれか１項記載のデータ管理システム。
【請求項６】
複数の前記アクセスノードを含み、
複数の前記アクセスノードは、前記インデックス情報を分散管理する
請求項１乃至５いずれか１項記載のデータ管理システム。
【請求項７】
前記データは、第１のデータ及び第２のデータを含み、
前記記憶手段は、前記第１のデータ、前記データノード及び前記識別子を対応付けた第２のインデックス情報をさらに保持し、
前記アクセス要求手段は、前記アクセスノードに対し、前記第１のデータを指定して、前記第２のデータへのアクセス要求を通知し、
前記アクセス制御手段は、前記アクセス要求に応じ、前記第２のインデックス情報において前記アクセス要求にかかる前記第１のデータと対応付けられた前記データノードに対する第１のアクセスを実行し、前記第１のアクセスを正常に完了できない場合、前記データノード情報において前記第１のアクセスにかかる前記データノードに次ぐアクセス順序が定められている前記データノードに対する第２のアクセスを実行する
請求項１記載のデータ管理システム。
【請求項８】
前記データベースは、前記識別子、前記データ、及び第１の更新識別子を対応付けて保持し、
前記記憶手段は、前記インデックス情報として、前記識別子、前記データノード、及び第２の更新識別子を対応付けて保持し、
前記アクセス制御手段は、
前記アクセス要求が前記第２のデータの検索要求である場合、前記データベースから前記第１のデータと対応付けられた前記第２のデータ及び前記第１の更新識別子とを取得するとともに、前記第２のインデックス情報から前記第１のデータと対応付けられた前記識別子を取得し、前記第１の更新識別子と、前記インデックス情報において前記識別子に対応付けられた前記第２の更新識別子とを比較し、一致する場合、前記第２のデータは最新であると推定する
請求項８記載のデータ管理システム。
【請求項９】
固有の識別子に対応付けられたデータであって、マスタデータ又は他の前記データノードの前記マスタデータを複製したバックアップデータを複数保持する、複数のデータノードへのアクセスを管理する方法であって、
アプリケーションノードが、アクセスノードに対し、前記識別子を指定して、前記データへのアクセス要求を通知するアクセス要求ステップと、
前記アクセスノードが、前記アクセス要求に応じ、前記アクセス要求にかかる予め前記識別子と対応付けられた、前記識別子に対応する前記データを前記マスタデータとして保持する前記データノードに対する第１のアクセスを実行し、前記第１のアクセスを正常に完了できない場合、前記複数のデータノードについて予め定められたアクセス順序に従って、前記第１のアクセスにかかる前記データノードに次ぐアクセス順序が定められている前記データノードに対する第２のアクセスを実行するアクセス制御ステップとを有する
データ管理方法。
【請求項１０】
コンピュータに、
固有の識別子に対応付けられたデータであって、マスタデータ又は他の前記データノードの前記マスタデータを複製したバックアップデータを複数保持する、複数のデータノードへのアクセスを管理する処理を実行させるプログラムであって、前記プログラムは、
アプリケーションノードが、アクセスノードに対し、前記識別子を指定して、前記データへのアクセス要求を通知するアクセス要求ステップと、
前記アクセスノードが、前記アクセス要求に応じ、前記アクセス要求にかかる予め前記識別子と対応付けられた、前記識別子に対応する前記データを前記マスタデータとして保持する前記データノードに対する第１のアクセスを実行し、前記第１のアクセスを正常に完了できない場合、前記複数のデータノードについて予め定められたアクセス順序に従って、前記第１のアクセスにかかる前記データノードに次ぐアクセス順序が定められている前記データノードに対する第２のアクセスを実行するアクセス制御ステップとを有する
データ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ管理システム、データ管理方法及びデータ管理プログラムに関し、特にデータの一貫性及び最新性を確保しつつ、適切な負荷分散を行う技術に関する。
【背景技術】
【０００２】
分散データベースを利用するコンピュータシステムにおいて、データの一貫性を保証するための手法が、従来より種々提案されている。
【０００３】
分散データベースとは、複数のデータベースサーバに分散して配置されたデータベースを、１以上のアプリケーションサーバからあたかも単一のデータベースのように取り扱えるようにした構成をいう。分散データベースでは、データは各データベースサーバに分散して配置される。典型的な例は、一連の商品コードによって識別される商品データを管理する分散データベースである。この分散データベースにおいて、各データベースサーバは、予め割り当てられたレンジ（範囲）の商品コードを管理する。これにより、アクセス性能を維持しつつ、データ量の増大に対応することができる。
【０００４】
また、分散データベースは、多くの場合、あるデータベースサーバに障害が発生しても、他のデータベースサーバがその機能を代行して、データベースシステム全体のサービスが停止しないよう構成される。この構成を実現するため、あるデータベースサーバのデータの複製（バックアップ）を、予め他のデータベースサーバに持たせておくことになる。
【０００５】
このように、あるデータを複数のデータベースサーバに重複して持たせた構成を前提としつつ、複数のアプリケーションサーバが同時に同じデータを参照しても、取得される値が同じでなければならないとする要件を、一貫性の保証という。従来、一貫性の保証を実現するためには、データの複製先を一箇所に集中するか、複製先を複数とする場合はデータの更新処理毎に全ての複製先に対し同じ問い合わせを行うかのどちらかの手法を用いる必要があった。しかし、データの複製を一元集中させると、その複製を管理するサーバに異常があった場合にサービスが提供できなくなってしまう。また、毎回複数の複製先に対し問い合わせを行うと、システム全体の負荷が大きくなり、その負荷はデータベースサーバの増設に従って増大してしまう。
【０００６】
このような問題点を解決する技術として、ＤＨＴ（分散ハッシュテーブル）がある。ＤＨＴは、物理的に分散されたデータ群を、まとまった１つのデータとして扱う技術であり、負荷分散や一貫性維持に強い手法である。例えば特許文献１には、ＤＨＴにおいて範囲・多次元検索を実現するための手法が公開されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００８−２３４５６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、ＤＨＴは未だ研究レベルにあり、実際のシステムに組み込み運用するには非常に難度が高い。ＤＨＴには、ハッシュ計算を用いているという性質から導かれるいくつかの問題点がある。第１の問題点は、一度分散されて配置先が決まってしまったデータを、外部から配置変更することが難しいことである。ＤＨＴでは、データがハッシュ計算により確率的に均一に分散配置されてしまうため、何らかの理由でシステム内に負荷が高い部分が発生した場合でも、恣意的に一部のデータの配置先を変更することはできないためである。どうしても再配置したい場合は、ハッシュ計算の内容を変えなければならず、システム全体でデータの移動が発生し全体に高負荷がかかってしまうことになる。第２の問題点は、データの配置先がランダムであるため、ユーザが求めるデータ配置を達成できないことである。その理由は、ハッシュ計算自体が完全にランダムな結果をもたらすことにある。特にデータベースサーバが広範囲に存在するような場合、遠距離にあるデータベースサーバに特段の意義もなくデータを格納しなければならず、結果としてシステム全体として高負荷となってしまうことがある。
【０００９】
本発明は、このような問題点を解決するためになされたものであり、データの一貫性及び最新性を確保しつつ、適切な負荷分散を行なうことができるデータ管理システム、データ管理方法及びデータ管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明に係るデータ管理システムは、複数のデータノードと、複数のアプリケーションノードと、前記データノードと前記アプリケーションノードとに接続された１以上のアクセスノードとを含むデータ管理システムであって、前記データノードは、固有の識別子に対応付けられたデータを複数保持するデータベースを有し、前記データは、マスタデータ、又は他の前記データノードの前記マスタデータを複製したバックアップデータであり、前記アプリケーションノードは、前記アクセスノードに対し、前記識別子を指定して、前記データへのアクセス要求を通知するアクセス要求手段を有し、前記アクセスノードは、前記識別子と、前記識別子に対応する前記データを前記マスタデータとして保持する前記データノードとを対応付けたインデックス情報、及び前記複数のデータノードに対するアクセス順序を予め定義したデータノード情報を保持する記憶手段と、前記アクセス要求に応じ、前記インデックス情報において前記アクセス要求にかかる前記識別子と対応付けられた前記データノードに対する第１のアクセスを実行し、前記第１のアクセスを正常に完了できない場合、前記データノード情報において前記第１のアクセスにかかる前記データノードに次ぐアクセス順序が定められている前記データノードに対する第２のアクセスを実行するアクセス制御手段とを有するものである。
【００１１】
本発明に係るデータ管理方法は、固有の識別子に対応付けられたデータであって、マスタデータ又は他の前記データノードの前記マスタデータを複製したバックアップデータを複数保持する、複数のデータノードへのアクセスを管理する方法であって、アプリケーションノードが、アクセスノードに対し、前記識別子を指定して、前記データへのアクセス要求を通知するアクセス要求ステップと、前記アクセスノードが、前記アクセス要求に応じ、前記アクセス要求にかかる予め前記識別子と対応付けられた、前記識別子に対応する前記データを前記マスタデータとして保持する前記データノードに対する第１のアクセスを実行し、前記第１のアクセスを正常に完了できない場合、前記複数のデータノードについて予め定められたアクセス順序に従って、前記第１のアクセスにかかる前記データノードに次ぐアクセス順序が定められている前記データノードに対する第２のアクセスを実行するアクセス制御ステップとを有するものである。
【００１２】
本発明に係るデータ管理プログラムは、コンピュータに、固有の識別子に対応付けられたデータであって、マスタデータ又は他の前記データノードの前記マスタデータを複製したバックアップデータを複数保持する、複数のデータノードへのアクセスを管理する処理を実行させるプログラムであって、前記プログラムは、アプリケーションノードが、アクセスノードに対し、前記識別子を指定して、前記データへのアクセス要求を通知するアクセス要求ステップと、前記アクセスノードが、前記アクセス要求に応じ、前記アクセス要求にかかる予め前記識別子と対応付けられた、前記識別子に対応する前記データを前記マスタデータとして保持する前記データノードに対する第１のアクセスを実行し、前記第１のアクセスを正常に完了できない場合、前記複数のデータノードについて予め定められたアクセス順序に従って、前記第１のアクセスにかかる前記データノードに次ぐアクセス順序が定められている前記データノードに対する第２のアクセスを実行するアクセス制御ステップとを有するものである。
【発明の効果】
【００１３】
本発明により、データの一貫性及び最新性を確保しつつ、適切な負荷分散を行なうことができるデータ管理システム、データ管理方法及びデータ管理プログラムを提供することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施の形態１の構成を示す図である。
【図２】本発明の実施の形態１のデータノード情報を示す図である。
【図３】本発明の実施の形態１のインデックス情報を示す図である。
【図４】本発明の実施の形態１のデータベースを示す図である。
【図５】本発明の実施の形態１の処理を示す図である。
【図６】本発明の実施の形態１の処理を示す図である。
【図７】本発明の実施の形態１の処理を示す図である。
【図８】本発明の実施の形態１の処理を示す図である。
【図９】本発明の実施の形態１の処理を示す図である。
【図１０】本発明の実施の形態１の処理を示す図である。
【図１１】本発明の実施の形態１の処理を示す図である。
【図１２】本発明の実施の形態１の処理を示す図である。
【図１３】本発明の実施の形態２のインデックス情報を示す図である。
【発明を実施するための形態】
【００１５】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
【００１６】
＜実施の形態１＞
まず、図１を用いて、本発明の実施の形態１にかかるデータ管理システム１００の構成について説明する。
【００１７】
データ管理システム１００は、複数のアプリケーションノード１１乃至１４、アプリケーションノード１１乃至１４からデータベースへのアクセスを制御するアクセスノード２１乃至２３、データベースを格納するデータノード３１乃至３４を含む。ここで、アプリケーションノード及びデータベースノードは複数の、アクセスノードは１以上の任意の数であって良い。
【００１８】
アプリケーションノード１１乃至１４は、データベースアクセスを行なうアプリケーションプログラムが動作するノードである。データベースアクセスとは、データベースに対するデータの更新、追加及び削除を含む。アプリケーションノード１１乃至１４は、必ずアクセスノード２１乃至２３を介してデータベースアクセスを行なう。アプリケーションノードは複数が同時に動作することができる。アプリケーションノードはそれぞれ対等な立場であり、互いに優先劣後することはない。
【００１９】
アクセスノード２１乃至２３は、データノード情報及びインデックス情報を管理するノードであり、これらの情報に従ってデータベースアクセスを制御する。アクセスノード２１乃至２３はそれぞれ対等な立場であり、アプリケーションノード１１乃至１４はどのアクセスノード２１乃至２３に問い合わせても同等のデータベースアクセスを行うことができる。
【００２０】
図２に、データベース情報の例を示す。データノード情報は、データノード３１乃至３４を識別するための情報であって、各データノードへアクセスするための情報、典型的にはＩＰアドレスと、データノードの通し番号とを対応付けた一覧表である。本実施の形態では、通し番号は一意の数値であって、連続する値が各データノードに対して割り当てられる。データノード情報は、システム稼動時に決定される情報である。データノード情報は固定情報であるので、アクセスノード間での同期などを考える必要はなく、同一の情報の複製を全てのアクセスノードが保持しておけばよい。アクセスノード２１乃至２３は、この通し番号によりデータノード３１乃至３４へのアクセスを制御する。
【００２１】
図３に、インデックス情報の例を示す。インデックス情報は、検索キーと、その検索キーに紐付けられたデータがどのデータノードに格納されているのかを対応付けた一覧表である。本実施の形態においては、図２のデータベース情報で定義されている通し番号を用いて、データの格納先のデータノードを定義する。また、本実施の形態においてはさらに、各検索キーに更新識別子としての更新シーケンス番号を紐付ける。なお、図３に示すテーブルは論理的なイメージである。本実施の形態では、負荷分散及び耐障害性を考慮し、全てのアクセスノード２１乃至２３が１つのインデックス情報を分散管理する構成を採用している。分散管理の手法は任意で良いが、例えばＤＨＴ（分散ハッシュテーブル）等の技術を用いることができ、サーバ分散やサーバ間レプリケーションを行ったり、木構造の検索ツリーによって効率的検索を実現しても良い。
【００２２】
データノード３１乃至３４はそれぞれ、データベース、典型的には一般的なリレーショナルデータベースを格納するノードである。図４に、データノード３１乃至３４が格納するテーブルの例を示す。このテーブルは、プライマリキーを検索キーとして、名前、住所等のデータを格納している。また、本発明特有の構成として、更新シーケンス番号をテーブルの属性値として有している。
【００２３】
また、データノード３１乃至３４はそれぞれ、自らがマスタとして管理するマスタデータと、他のデータノードのデータのバックアップであるバックアップデータとを格納する。各データノードのマスタデータは、システム全体にとってもマスタデータである。すなわち、あるデータノードに新たにデータが追加された場合、そのデータはマスタデータであり、システム内ではそのデータノードのみがマスタデータを保持する。また、各データノードは、他のデータノードのマスタデータを、非同期で自らのデータベース内にバックアップする。バックアップの手法は任意で良い。
【００２４】
アプリケーションノード１１乃至１４、アクセスノード２１乃至２３、データノード３１乃至３４は論理的なノードである。これらのノードは、典型的にはコンピュータ（パーソナルコンピュータ、サーバコンピュータ、携帯端末装置等）によって構成される。このコンピュータは、制御装置（ＣＰＵ）、記憶装置（揮発性メモリ及び不揮発性メモリ）、入出力装置（ディスプレイ、キーボード、ポインティングデバイス、通信インタフェイス等）を含み、特に記憶装置には、本発明に関する処理を制御装置に実行させるためのプログラムや、処理に必要なデータ及びデータベースが格納される。各ノードは、上記制御装置、記憶装置及び入出力装置と、上記プログラムとの協働により、本発明の構成要素である各種手段を論理的に実現する。また、各ノードは、典型的にはそれぞれ独立の装置であるが、必ずしも物理的に独立している必要はない。すなわち、これらのノードは互いに論理的に独立していれば良く、例えば、同一のサーバコンピュータ上で複数のノードが論理的に実現されていても、複数のサーバコンピュータ上で１つのノードが論理的に実現されていても良い。さらに、データ管理システム１００を構成する複数のノードは、更新識別子として更新シーケンス番号を用いる場合、互いに時刻同期を行う必要はない。
【００２５】
つぎに、本実施の形態におけるデータ管理システム１００の処理について説明する。データ管理システム１００は、データベースへのデータの追加、更新、削除、参照の各処理が可能である。
【００２６】
図５は、データの追加処理を示すフローチャートである。この追加処理の結果を図６に示す。アプリケーションノード１１が、アクセスノード２１を介し、データノード４のデータベースに、検索キーが５００であるデータ（名前＝「Ｔａｋａｈａｓｈｉ」、住所＝「Ｏｓａｋａ」）を追加する場合を例として、この追加処理について説明する。
【００２７】
Ａ１：アプリケーションノード１１は、アクセスノード２１に対し、データノード４へのデータの追加要求を通知する。
【００２８】
Ａ２：アクセスノード２１は、検索キーを採番する。検索キーは、データ管理システム１００全体を通じて唯一の識別子であり、既存の検索キーと重複しない。ここで、採番された検索キーを５００であるとすると、この検索キー５００と、データノードの通し番号４、更新シーケンス番号０を内容とするインデックス情報を適切なアクセスノード２１乃至２３に格納する。ここで、インデックス情報の格納先のアクセスノードは、アクセスノード２１乃至２３の分散管理手法に従って、任意に決定して良い。
【００２９】
Ａ３：アクセスノード２１は、アプリケーションノード１１からの追加要求に含まれるデータ、検索キー５００、及び更新シーケンス番号０を、データノード４のＩＰアドレス１９２．１６８．１．２に送信する。送信先のＩＰアドレスは、データノードの通し番号４と、データノード情報とに基づいて決定できる。
【００３０】
Ａ４：データノード４は、受け取った情報、すなわちデータ、検索キー５００、及び更新シーケンス番号０を、自らのデータベースに格納する。
【００３１】
図７は、データの更新処理を示すフローチャートである。この更新処理の結果を図８に示す。アプリケーションノード１１が、アクセスノード２１を介し、データノード４のデータベースの、検索キーが５００であるデータ（住所）を「Ｋｏｂｅ」に更新する場合を例として、この更新処理について説明する。
【００３２】
Ｂ１：アプリケーションノード１１は、アクセスノード２１に対し、検索キー５００のデータの更新要求を通知する。
【００３３】
Ｂ２：アクセスノード２１は、インデックス情報に従い、検索キー５００にかかるインデックス情報を管理するアクセスノード２１乃至２３のいずれかに対して、更新要求を通知する。ここで、インデックス情報を管理するアクセスノードは、アクセスノード２１乃至２３の分散管理手法に従って特定される。
【００３４】
Ｂ３：検索キー５００のインデックス情報を管理するアクセスノードは、検索キー５００のインデックス情報の更新シーケンス番号をインクリメントし、新たな更新シーケンス番号として保持する。また、インデックス情報に基づいて、検索キー５００のデータを格納しているデータノードの通し番号４を特定する。つづいて、このアクセスノードは、アプリケーションノード１１及びアクセスノード２１から通知された通知されたデータの更新要求と、更新シーケンス番号の更新要求とを、データノード４に送信する。
【００３５】
Ｂ４：データノード４、受け取った情報に従って、自らのデータベース内の検索キー５００にかかるデータ及び更新シーケンス番号を更新する。
【００３６】
図９は、データの削除処理を示すフローチャートである。この削除処理の結果を図１０に示す。アプリケーションノード１１が、アクセスノード２１を介し、データノード４のデータベースから、検索キーが５００であるデータを削除する場合を例として、この削除処理について説明する。
【００３７】
Ｃ１：アプリケーションノード１１、アクセスノード２１に対し、検索キー５００のデータの削除要求を通知する。
【００３８】
Ｃ２：アクセスノード２１は、インデックス情報に従い、検索キー５００にかかるインデックス情報を管理するアクセスノード２１乃至２３のいずれかに対して、削除要求を通知する。
【００３９】
Ｃ３：検索キー５００のインデックス情報を管理するアクセスノードは、検索キー５００のインデックス情報のデータノード通し番号４を旧通し番号として保持し、ＤＢ通し番号を０に設定する。つづいて、このアクセスノードは、旧通し番号４を宛先として、すなわちデータノード４に対して、検索キー５００にかかるデータの削除要求を送信する。
【００４０】
Ｃ４：データノード４は、受け取った情報に従って、自らのデータベース内の検索キー５００にかかるレコードを削除する。
【００４１】
本実施の形態の削除処理においては、データノード４内の検索キー５００にかかるレコードは削除されるが、インデックス情報の検索キー５００にかかるエントリは削除されない。これは、後に同じ検索キーを持つデータが挿入された場合の前後関係を管理し、メンテナンスの便宜を図るためである。一定期間ごとのメンテナンスにおいて、バックアップデータ含め全てのデータが削除されたことを確認できれば、インデックス情報から該当データを削除しても構わない。
【００４２】
図１１は、データの検索（参照）処理を示すフローチャートである。アプリケーションノード１１が、アクセスノード２１を介し、データノード４のデータベースから、検索キーが５００であるデータを検索する場合を例として、この検索処理について説明する。本実施の形態における検索処理は、サーバ障害がある場合にもできるだけ成功させるため、耐障害性を備えたものとなっている。すなわち、アクセスノード２１乃至２３が正常に稼動している際には、検索により取得されるデータの一貫性を保証する。すなわち、同時刻に複数のアプリケーションノード１１乃至１４が同じデータを取得した場合、それらのデータが同一であることを保証する。一方、障害発生時には、一貫性を保証しない前提での検索を実行できるものとする。また、データノードが正常に稼動している際には、検索により取得されるデータが最新であること（最新性）を保証し、障害発生時には、検索により取得されるデータが最新であるか否かを示す情報を同時に出力するものとする。
【００４３】
Ｄ１：アプリケーションノード１１は、アクセスノード２１に対し、検索キー５００のデータの検索要求を通知する。
【００４４】
Ｄ３：アクセスノード２１は、検索キー５００にかかるインデックス情報を管理するアクセスノード２１乃至２３のいずれかに対して、検索要求を通知する。
【００４５】
Ｄ５：ここまでで失敗する、すなわちステップＤ２にてアプリケーションノード１１がアクセスノード２１に接続できない（Ｄ２）か、検索キー５００にかかるインデックス情報を管理するアクセスノードが使用不能（Ｄ４）と判断された場合には、アプリケーションノード１１は、適当なデータノードに対して直接、検索キー５００にかかるデータの検索要求を通知する。ここで、データノードから検索キー５００にかかるデータを発見できたならば、当該データは一貫性を保証しない前提のもとで出力される。例えば、アプリケーションノード１１は、取得したデータを、取得されるデータは一貫性が失われている可能性がある旨の情報とともに出力することができる。一方、アプリケーションノード１１がデータノードから検索キー５００にかかるデータを発見できなかった場合は、検索失敗として異常終了する（Ｄ６）。
【００４６】
Ｄ７：検索キー５００にかかるインデックス情報を管理するアクセスノードを発見できた場合（Ｄ４）、そのアクセスノードは、後述の最新性チェック付検索処理を行う。この処理により正常にデータを取得できた場合、そのアクセスノードは、アプリケーションノード１１に対し、取得したデータを出力する。このデータは、一貫性及び最新性が保証されたデータである。一方、この処理において最新性を保証しないが一貫性を保証するデータを取得できた場合、そのアクセスノードは、アプリケーションノード１１に対し、取得したデータを、取得されたデータは最新性が失われている可能性がある旨の情報とともに出力することができる。一方、この処理を正常に終了できなかった場合は、検索失敗として異常終了する（Ｄ６）。
【００４７】
図１２に、検索処理のサブシーケンスである、最新性チェック付検索処理のフローチャートを示す。
【００４８】
Ｅ１：最新性チェック付検索処理は、検索キー５００にかかるインデックス情報を管理するアクセスノードが実施する処理である。よって、そのアクセスノードは検索キー５００のデータを格納しているデータノードの通し番号４を取得できる。そこで、この通し番号４を検索対象通し番号として、データノードに検索要求を行う。
【００４９】
このデータノードからデータを取得できた場合（Ｅ２）は、マスタデータを取得できたことになる。マスタデータは、最新性を備えている。よって、この場合、最新性を備えるデータを正常取得できたものとして、このデータを出力する。また、検索キー５００に対応するインデックス情報が存在しない場合、および対応するインデックス情報のＤＢ通し番号が0であった場合は、データが存在しないことを保証できるので、これも正常取得扱いとする。
【００５０】
Ｅ３：一方、マスタデータを持つデータノードからマスタデータを取得できない場合、アクセスノードは、他のデータノードからバックアップデータの取得を試行する。アクセスノードは検索対象通し番号をインクリメントし、その番号にかかるデータノードにバックアップの検索要求を行う。ただし、検索対象通し番号がデータノード情報に定義された通し番号のレンジを超えた場合には、検索対象通し番号をデータノード情報に定義された最小の通し番号に戻す。
【００５１】
ここで、さらにデータ取得に失敗した場合は（Ｅ４）、検索対象通し番号を上述の要領でさらにインクリメントし、その通し番号にかかるデータノードに検索要求を行う。もし全てのデータノードが検索済みであれば（Ｅ５）、データ取得は失敗となる。すなわち、検索に失敗するのは、全てのデータノードが異常な場合のみであり、１つでも正常なデータノードがあれば、何らかのデータを取得できることになる。
【００５２】
なお、データの安定した取得よりも負荷低減を求める場合は、Ｅ５の判断基準を、一定数のデータノードを検索したか、として検索を途中で打ち切ってしまってもよい。
【００５３】
Ｅ６：データを取得できた場合（Ｅ４）、バックアップデータを取得できたことになる。アクセスノードは、バックアップデータが最新性を備えているか否かを検証するため、取得したデータの更新シーケンス番号と、インデックス情報の中の更新シーケンス番号とを比較する。両者が等しい場合（Ｅ７）は、当該バックアップデータは最新のマスタデータを反映しているということなので、取得したデータは最新性を備えているということになる。よって、このデータを正常取得扱いとして出力する。一方、両者の更新シーケンス番号にずれがあった場合には、最新性が失われていると判断できるので、最新性が失われているとの前提において、取得したデータを出力する。例えば、そのアクセスノードは、アプリケーションノード１１に対し、取得したデータを、取得されたデータは最新性が失われている可能性がある旨の情報とともに出力することができる。
【００５４】
本実施の形態によれば、アクセスノード２１乃至２３が、分散管理されたインデックス情報を利用して、アプリケーションノード１１乃至１４からのデータベースアクセスを制御し、同一のデータに対するアクセス要求であれば同一の結果を出力する。これにより、従来は難しいとされていた、一貫性と負荷分散との両立を実現できる。また、この結果、データノードさえ増設すれば、一貫性を保ちつつ、データベースを容易に拡張することができる。
【００５５】
より具体的には、本実施の形態では、アクセスノード２１乃至２３が、インデックス情報としてレコード単位でマスタデータの所在を管理し、データを探す流れをレコード単位で統一している。また、データノード情報を固定してしまうことにより、インデックス情報自体を最低限まで減らしている。そして、この容量の小さいインデックス情報のみを、分散管理の対象としている。これにより、従来、容量の大きいデータでは処理負荷等の問題により実装困難であったＤＨＴ等の既存の分散管理手法の効果を、最大限発揮することができる。
【００５６】
また、本実施の形態によれば、各ノードに異常が発生したときでもできるだけ正常にデータを取得することができる。よって、バックアップが一通り終わっている場合には、数台のサーバがダウンしたとしてもＤＢ起因のサービス品質低下を起こさないようにすることができる。
【００５７】
さらに、本実施の形態によれば、インデックス情報に対してレコード単位で更新識別子を付与することで、データの最新性の喪失や一貫性の喪失を確実に検出できる。よって、例えば最新性、一貫性が喪失された状態で出力されたデータのみを、ログとして保存しておくならば、保存すべきログを低減することができる。これは、例えばＰＯＳシステム等、膨大なトランザクションが発生するシステムにおいて、メンテナンス性を向上させるのに有用である。
【００５８】
また、本実施の形態では、更新識別子として更新シーケンス情報を採用し、単純に番号のインクリメントで世代情報を管理している。一般に、複数のサーバコンピュータでデータを管理するシステムにおいては、例えば更新識別子としてタイムスタンプで最新性を管理しようとすると、コンピュータ間で厳密な時刻同期を行うか、どのコンピュータの時刻を基準にしているかの管理を行わなければならず、管理の複雑化や負荷上昇が懸念される。一方、本発明は、上記構成によりシンプルな仕組みで厳密な最新性管理を実現できる。
【００５９】
本実施の形態では、一貫性、最新性の両方を保証する手法を示した。すなわち、本実施の形態では、データノード情報が備える一連の通し番号を用いた一連の処理により、一貫性の保証を実現した。併せて、インデックス情報が備える更新識別子を用いた一連の処理によって、最新性の保障を実現した。ただし、本発明は必ずしもこの例に限定されるものではない。例えば、必要に応じ、インデックス情報の更新識別子を具備せず、一貫性のみを実現するシステムとして構成しても差し支えない。
【００６０】
＜実施の形態２＞
つづいて、本発明の実施の形態２にかかるデータ管理システム１００の構成について説明する。
【００６１】
本実施の形態におけるデータ管理システム１００は、アクセスノード２１乃至２３が、図１３に示すようなインデックス情報を備える点に特徴を有する。その余の構成は、実施の形態１と同様である。
【００６２】
図１３に、本実施の形態におけるインデックス情報の例を示す。このインデックス情報は、図４に示すテーブルから検索キー以外の属性、例えば住所を指定して検索できるようにするためのインデックス情報である。本発明におけるインデックス情報は、プライマリキーすなわち検索キー以外の各属性に紐付ける形で作成することが可能である。ここで、実施の形態１（図３）に示すような、検索キーに紐付ける形で作成されているインデックス情報をプライマリインデックス情報、それ以外の属性に紐付ける形で作成されたインデックス情報をセカンダリインデックス情報と呼ぶ。セカンダリインデックス情報は、複数作成可能である。
【００６３】
本実施の形態では、アクセスノード２１乃至２３が、セカンダリインデックス情報として、住所にＤＢ通し番号を紐付けた一覧表を備える。これにより、検索キー以外の属性を用いたデータベースアクセスも実現することができる。すなわち、アクセスノードは、住所をキーとしてデータを検索する場合は、セカンダリインデックス情報に基づいてデータノードの通し番号を特定し、この通し番号のデータノードに検索要求を通知する。
【００６４】
ここで、最新性を保証するためには、実施の形態１で示したように、更新識別子としての更新シーケンス番号を取り扱う必要がある。更新シーケンス番号については、本実施の形態のようにインデックス情報が複数備えられている場合であっても、全てのインデックス情報が同じものを利用する必要がある。そこで、アクセスノードは、セカンダリインデックス情報を用いてデータベースアクセスを行う場合においても、プライマリインデックス情報内の更新シーケンス番号を利用するものとする。
【００６５】
すなわち、本実施の形態では、セカンダリインデックス情報において、住所及びＤＢ通し番号に加え、検索キーを紐付ける。そして、アクセスノードは、セカンダリインデックス情報を用いてデータベースアクセスを行う際、住所に紐付けられた検索キーを特定する。つづいて、その検索キーを用い、プライマリインデックス情報を参照して対応する更新シーケンス番号を取得する。アクセスノードは、この更新シーケンス番号を用いて、最新性を保証するための一連の処理を行う。
【００６６】
本実施の形態では、実施の形態１と比較して、データの更新及び削除時にはインデックス情報を辿る操作が１つ加わる。しかしながら、かかる操作はせいぜいサーバ間ホップが１回増える程度の負荷をもたらすに過ぎない。また、データ追加時は、プライマリインデックス情報及びセカンダリインデックス情報の生成を並列して実行するならば、レスポンスの低下はほとんど起こらない。さらに、データ検索についても、データノードへのアクセスと更新シーケンス番号の取得を並列して実行できるため、レスポンスの低下はほとんど起こらない。
【００６７】
本実施の形態では、セカンダリインデックス情報を用いた一連の処理により、検索キー以外を用いたデータベースアクセスを、一貫性及び最新性を確保しつつ、かつ適切な負荷分散を行いつつ実現することができる。
【００６８】
＜その他の実施の形態＞
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【００６９】
例えば、上述の実施の形態では、本発明をハードウェアによる構成されるものとして説明したが、これに限定されるものではなく、任意の処理を、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）にコンピュータプログラムを実行させることにより論理的に実現することも可能である。この場合、コンピュータプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【符号の説明】
【００７０】
１００  データ管理システム
１１  アプリケーションノード
１２  アプリケーションノード
１３  アプリケーションノード
１４  アプリケーションノード
２１  アクセスノード
２２  アクセスノード
２３  アクセスノード
３１  データノード
３２  データノード
３３  データノード
３４  データノード
【図１】
2013134522.tif 000003
【図２】
2013134522.tif 000004
【図３】
2013134522.tif 000005
【図４】
2013134522.tif 000006
【図５】
2013134522.tif 000007
【図６】
2013134522.tif 000008
【図７】
2013134522.tif 000009
【図８】
2013134522.tif 000010
【図９】
2013134522.tif 000011
【図１０】
2013134522.tif 000012
【図１１】
2013134522.tif 000013
【図１２】
2013134522.tif 000014
【図１３】
2013134522.tif 000015