【文献】
米田 正明,絶対わかるクラウド技術,みてわかるクラウドマガジン,日本,日経BP社,2010年 5月10日,第1巻,p.56−57
(58)【調査した分野】(Int.Cl.,DB名)
ネットワークに接続されたデータベースサーバと複数のキャッシュサーバとからなり、前記データベースサーバ上のデータベースに保持するデータの一部をそれぞれ重複せずに前記各キャッシュサーバ上のキャッシュに格納することで、前記各キャッシュサーバ全体として前記データベースに保持する全てのデータを前記キャッシュに展開するパーティション型の分散キャッシュシステムであって、
前記各キャッシュサーバ上の前記キャッシュ上には、データを保持するための論理的な領域である1つ以上のバケットが定義され、前記各バケットには、当該分散キャッシュシステム内でユニークなIDが割り振られており、
前記データベースに保持するデータの各レコードには、それぞれ前記各バケットのIDのうちのいずれか1つに該当する値が分類番号として割り振られており、
前記キャッシュサーバは、前記データベースから、自身の前記キャッシュ上に定義されている前記バケットのIDに一致する前記分類番号を有するレコードのみを読み込んで、対応する前記バケットに格納するロード部を有し、
前記データベースは、前記データベース上の各テーブルに対する外部からの更新があった際に、前記データベースサーバ上のプログラムにより、当該更新内容を示し前記分類番号を含む更新レコードを追加して記録するログテーブルを有し、
前記キャッシュサーバの前記ロード部は、前記ログテーブルから、前記キャッシュ上に定義されている前記バケットのIDに一致する前記分類番号を有する更新レコードを読み込み、当該更新レコードの内容を対応する前記バケットの内容に反映させることを特徴とする分散キャッシュシステム。
【背景技術】
【0002】
データベースに保持するデータ量が増加し続ける中、近年では、大量のデータを保存する手段としてキー・バリュー型データストアなども注目されている。これらのデータを大量に保持するデータベースに対してネットワークを介して多数のユーザからのアクセスが行われるようなシステムでは、データベースへのアクセスが集中してボトルネックとなることを回避するとともに、並列処理により検索の性能を向上させるため、分散データベースや分散キャッシュの仕組みが多用される。
【0003】
分散キャッシュの基本的な仕組みとしては、クライアントからの要求に応じて各キャッシュサーバがデータベースから読み出したレコードをメモリのような記憶装置上にキャッシングする機能や、複数のキャッシュサーバ間での連携を管理する機能(キャッシュ間の整合の維持や、どのキャッシュにどのレコードが保持されているか等の管理)、キャッシュ内のレコードに加えられた変更をデータベースに書き戻す機能などがある。これらの仕組みは、主にデータベース管理ソフトウェアを製造販売するベンダー等から提供されるミドルウェアなどによって実現されている。
【0004】
分散キャッシュシステムの構成としては、大きく分けて一般的に、複数のキャッシュサーバが同じ内容のデータを保持するキャッシュを有して可用性を向上させるレプリケーション型と、各キャッシュサーバがそれぞれ重複しない異なる内容のデータをキャッシュに保持して拡張性を向上させデータの大容量化に対応するパーティション型がある。ベンダー等から提供される分散キャッシュシステムを実現するミドルウェアでは、これらの構成を選択的に利用することができるものもある。
【0005】
パーティション型の分散キャッシュシステムに係る技術としては、例えば、特開平11−224219号公報(特許文献1)には、1台の分散制御装置によってn台のキャッシュ装置を制御する分散キャッシュ制御方法において、分散制御装置が、クライアントからの要求を受け取り、要求内に記載されている要求資源識別情報のハッシュ値を算出し、分散管理情報を用いて、ハッシュ値に対応したキャッシュ装置を選択し、選択されたキャッシュ装置へ要求を送信し、キャッシュ装置から受信した応答をクライアントに送信する技術が記載されている。
【0006】
また例えば、特開2002−251313号公報(特許文献2)には、1つ以上のキャッシュサーバが夫々保持しているデータの情報を格納すると共に、データ照会要求に係るデータを格納しているキャッシュサーバを検索する親キャッシュサーバと、外部ネットワークからのデータを格納すると共に、そのデータの情報を前記親キャッシュサーバに送信する1以上の子キャッシュサーバとを有し、内部ネットワークからのデータ取得要求に係るデータを有している子キャッシュサーバがあれば、その子キャッシュサーバから前記データ取得要求に係るデータを取得する一方、データ取得要求に係るデータを有している子キャッシュサーバがなければ、外部ネットワークからデータ取得要求に係るデータを取得する分散キャッシュサーバシステムが記載されている。
【0007】
上記のような分散キャッシュシステムでは、一般的にクライアント等からのアクセスに対してデータベースから読み出したレコードをキャッシングするものであるため、必ずしも該当のレコードがキャッシュヒットするとは限らず、キャッシュミスする場合もある。ここで例えば、データベースに保持するデータが更新頻度が少ない静的な特性を有するものである場合などでは、あらかじめデータベースの全てのデータをキャッシュ上に展開しておくことが行われる。これによりキャッシュミスを排除し、アクセスの効率を大きく向上させることができる。
【0008】
この場合、データベースのデータ量に比して十分な容量のキャッシュが必要となるため、分散キャッシュシステムの構成としてレプリケーション型を利用することはコスト上困難であり、通常はパーティション型が利用される。この場合、複数のキャッシュサーバ全体でのキャッシュの総容量がデータベースのデータ量に比して十分であればよい。
【発明の概要】
【発明が解決しようとする課題】
【0010】
上述したようなパーティション型の分散キャッシュシステムにおいて、あらかじめデータベースの全てのデータを分散キャッシュに展開しておく構成をとる場合、従来は、各キャッシュサーバにデータベースから読み込むレコードの値の範囲(例えば“「あ行」のレコード”など)をそれぞれルールとして割り当てておき、そのルールに従って各キャッシュサーバがデータベースからレコードを読み込んでキャッシュ上に展開する方式がとられていた。
【0011】
しかしながら、この方式では、データベースに保持するレコードの値の分布状況に応じて、各キャッシュサーバがデータベースから読み込むレコードの量、およびキャッシュに保持するデータ量に不均衡が生じる場合がある。すなわち、キャッシュサーバによってリソースの使用量に不均衡が生じる場合がある。また、各キャッシュサーバがデータベースから読み込んだレコードの配置を複数のキャッシュサーバ間で調整してデータ量を均一化するような構成をとる場合は、読み込んだレコードを他のキャッシュサーバに転送するための内部トラフィックが増えることになる。
【0012】
また、レコードの値の範囲に基づく分散数(例えば「あ行」〜「わ行」で分散させる場合は10)とキャッシュサーバの台数が一致しない場合(運用中にキャッシュサーバの台数が増減した場合なども含む)の処置を決定するのが複雑で困難となる。また、データベースに保持するデータの内容によってはレコードの値の範囲毎のデータ量の分布状況や傾向を設計時に把握することができず、どのような値の範囲で分散させれば効率的かを判断するのが困難な場合もある。
【0013】
そこで本発明の目的は、データベースに保持する全てのデータを分散キャッシュ上に展開し、各キャッシュサーバに保持するデータがパーティション化された分散キャッシュシステムにおいて、データベースに保持するレコードの値の分布等に影響されずにリソースの使用量を平準化することができ、キャッシュサーバの台数の増減にも柔軟に対応可能で、内部トラフィックを低減させることができる分散キャッシュシステムを提供することにある。
【0014】
本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0015】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、以下のとおりである。
【0016】
本発明の代表的な実施の形態による分散キャッシュシステムは、ネットワークに接続されたデータベースサーバと複数のキャッシュサーバとからなり、前記データベースサーバ上のデータベースに保持するデータの一部をそれぞれ重複せずに前記各キャッシュサーバ上のキャッシュに格納することで、前記各キャッシュサーバ全体として前記データベースに保持する全てのデータを前記キャッシュに展開するパーティション型の分散キャッシュシステムであって、以下の特徴を有するものである。
【0017】
すなわち、分散キャッシュシステムにおいて、前記各キャッシュサーバ上の前記キャッシュ上には、データを保持するための論理的な領域である1つ以上のバケットが定義され、前記各バケットには、当該分散キャッシュシステム内でユニークなIDが割り振られており、前記データベースに保持するデータの各レコードには、それぞれ前記バケットのIDの範囲に属する値が分類番号として割り振られており、前記キャッシュサーバは、前記データベースから、自身の前記キャッシュ上に定義されている前記バケットのIDに一致する前記分類番号を有するレコードのみを読み込んで、対応する前記バケットに格納するロード部を有することを特徴とするものである。
【発明の効果】
【0018】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。
【0019】
本発明の代表的な実施の形態によれば、データベースに保持する全てのデータを分散キャッシュ上に展開し、各キャッシュサーバに保持するデータがパーティション化された分散キャッシュシステムにおいて、データベースに保持するレコードの値の分布等に影響されずにリソースの使用量を平準化することができ、キャッシュサーバの台数の増減にも柔軟に対応可能で、分散キャッシュシステムの内部トラフィックを低減させることが可能となる。
【発明を実施するための形態】
【0021】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部には原則として同一の符号を付し、その繰り返しの説明は省略する。
【0022】
本発明の一実施の形態である分散キャッシュシステムは、データベースに保持する全てのデータを分散キャッシュ上に展開し、各キャッシュサーバに保持するデータがパーティション化された分散キャッシュシステムである。各キャッシュサーバは、自身のキャッシュ内において定義された、レコードを保持するための論理的な領域(入れ物;本明細書において「バケット」と称する)の構成に応じて、自身が読み込むべきレコードのみをデータベースから読み込んでキャッシュに保持する。これにより、後述するように、データベースに保持するレコードの値の分布等に影響されずにリソースの使用量を平準化することができ、キャッシュサーバの台数の増減にも柔軟に対応可能で、内部トラフィックを低減させることが可能となる。
【0023】
さらに本実施の形態では、処理効率をより向上させるなどの観点から、クライアント側からのレコード(キャッシュデータ)の変更を許可しないようにして、キャッシュ内のレコードを読み取り専用とする。一方、データベースに保持する元データは他のシステム等により更新される場合があるため、この更新を遅滞なくキャッシュ内のレコードに反映させるための仕組みも有する。
【0024】
<システム構成>
図2は、本発明の一実施の形態である分散キャッシュシステムの構成例について概要を示した図である。分散キャッシュシステム1は、データベース(DB)サーバ100と複数台のキャッシュサーバ200とからなり、これらが図示しないネットワークによって相互に接続される構成を有する。本発明は、ネットワークとしてインターネットを介して相互に接続される外部ネットワークが用いられる場合にも適用可能であるが、以下、ネットワークとしてLAN(Local Area Network)等の内部ネットワークを用いる場合を例として説明する。
【0025】
DBサーバ100は、コンピュータシステムによって構成されるサーバ機器であり、図示しないOS(Operating System)やデータベース管理ソフトウェアを有してデータベース(DB)110を保持・管理する。DB110のデータは、他のシステムから、もしくは管理者等の手動により変更される。
【0026】
キャッシュサーバ200は、コンピュータシステムによって構成されるサーバ機器であり、例えば、メモリやハードディスクなどの記憶装置上に構成されるキャッシュ210、ソフトウェアプログラムによって実装されるロード部220、およびOS(図示しない)や分散キャッシュ管理部230などのミドルウェアを有する。
【0027】
キャッシュサーバ200は複数台によって構成され(
図2の例ではキャッシュサーバa〜n(200a〜n))、各キャッシュサーバ200は、DB110のデータをそれぞれ重複せずにキャッシュ210に読み込むことで、全体としてパーティション型の分散キャッシュシステム1を実現する。すなわち、図示しないクライアント端末等からのDBサーバ100へのアクセス要求を受け付けて、分散キャッシュ管理部230の機能により、該当のデータを保持するキャッシュサーバ200のキャッシュ210からデータを効率よく取得してクライアント端末に応答する。
【0028】
キャッシュ210は、DB110から読み込んだデータをキャッシュする記憶装置であり、キャッシュ210上にはさらにデータを分類して保持する論理的な領域(入れ物)であるバケット211を1つ以上有する(
図2の例ではキャッシュサーバa(200a)はバケットa〜c(211a〜c)を有する)。ロード部220は、対象のキャッシュサーバ200が読み込むべきレコードのみをDB110から読み込んで、該当するバケット211に格納することで、データをキャッシュ210(バケット211)にロードする。ロード部220によるデータのロード方法の詳細については後述する。
【0029】
分散キャッシュ管理部230は、分散キャッシュの基本的な仕組みを提供する製品等のミドルウェアであり、例えば、どのキャッシュサーバ200(キャッシュ210)にどのレコードが保持されているか等を管理し、クライアント端末からのアクセス要求を受けた際に、該当のレコードを保持するキャッシュサーバ200を特定してレコードを取得したりなどの機能を有する。なお、このような機能を有する管理サーバ等の機器を別途有し、クライアント端末はまず当該管理サーバにアクセスして該当のレコードを保持するキャッシュサーバ200を特定する構成とすることも可能である。
【0030】
<キャッシュへのデータのロード>
以下では、分散キャッシュシステムにおけるデータベースから各キャッシュサーバ上のキャッシュへのデータのロード方法について説明する。なお、本明細書においては「ロード」とはデータを読み込みキャッシュに保持させることを意味するものとする。ここでは、本発明の特徴を分かり易くするために、従来の技術と比較して説明する。
図6は、従来の分散キャッシュシステムにおける、キャッシュへのデータのロード方法の例について概要を示した図である。
【0031】
図6の例では、DB110の内容をキャッシュサーバa〜j(200a〜j)の10台で分担して読み込んでキャッシュ210にそれぞれ保持する場合を示している。従来は、各キャッシュサーバ200に対して予めDB110から読み込む値の範囲を割り当てておき、そのルールに従って該当のレコードを所定のタイミングで読み込んでいる。例えば、DB110上に顧客名のリストが保持されている場合、キャッシュサーバa(200a)は先頭が「あ」行のレコード、キャッシュサーバb(200b)は先頭が「か」行のレコード、…のように分担して該当するレコードを読み込んで、キャッシュ210に保持する。
【0032】
この方法をとった場合、DB110に保持するレコードの値の分布状況に応じて、各キャッシュサーバ200がDB110から読み込むデータ量、およびキャッシュ210に保持するデータ量に不均衡が生じる場合がある(例えば、「か」行や「わ」行が割り当てられたキャッシュサーバb(200b)やキャッシュサーバj(200j)が読み込んで保持するデータ量が少ない等)。すなわち、キャッシュサーバ200によってリソースの使用量に不均衡が生じる場合がある。
【0033】
また、DB110のレコードの値の範囲に基づく分散数とキャッシュサーバ200の台数が一致しない場合の処置を決定するのが複雑で困難となる。例えば、「さ」行が割り当てられていたキャッシュサーバc(200c)が障害によりダウンした場合、「さ」行のレコードをどのキャッシュサーバ200が読み込んで保持するのかを決定して、割り当てのルールを再設定する必要があるが、整合性を確保するためには考慮しなければならない点が多く複雑である。
【0034】
また、
図6の例ではDB110のレコードを「あ」行、「か」行、「さ」行、…「わ」行の10分割にして、10台のキャッシュサーバa〜j(200a〜j)に分散して保持しているが、キャッシュサーバ200の台数が11台以上ある場合(運用中にキャッシュサーバ200を追加した場合なども含む)にはどのように分散させるかのルールを決定するのが困難である。
【0035】
また、
図6の例ではDB110に顧客名のリストが保持されている場合であるが、例えば、顧客の趣味に関するデータが保持されているような場合、具体的にどのようなレコードが保持されるのかが不明である。従って、レコードの値の範囲毎のデータ量の分布状況や傾向を設計時に把握することができず、どのような値の範囲で分散させれば効率的かを判断するのが困難な場合もある。
【0036】
図7は、従来の分散キャッシュシステムにおける、キャッシュへのデータのロード方法の別の例について概要を示した図である。
図7の例では、
図6の例と同様に、DB110の内容をキャッシュサーバa〜j(200a〜j)の10台で分担して読み込んでキャッシュ210にそれぞれ保持する場合を示している。ここではさらに、各キャッシュサーバ200がDB110から読み込んだレコードの配置を他の複数のキャッシュサーバ200間で調整してデータ量の均一化を可能とするような構成をとっている。
【0037】
レコードの配置の均一化を可能とするため、各キャッシュサーバ200は、例えば、キャッシュ210内に
図2に示したものと同様な論理的な領域であるバケット211を1つ以上有する。各バケット211には、分散キャッシュシステム内でユニークなIDが割り振られており、ロード部220は、読み込んだレコードの値に応じて対応するバケット211にレコードを格納する。例えば、各バケット211には1から開始する整数からなる連番によりIDが割り振られており、ロード部220は、読み込んだレコードのキーのハッシュ値とバケット211の総数との剰余を算出し(値は必ず0〜バケット211の数−1の範囲となる)、その値+1と同じIDのバケット211にレコードを格納する。該当のバケット211が他のキャッシュサーバ200にあるときはレコードを転送して格納する。
【0038】
この方法の場合、バケット211の所在場所をキャッシュサーバ200間で移動させることにより、各キャッシュサーバ200で保持するデータ量を均一化することが可能である。しかし、ロード部220がどのキャッシュサーバ200にどのバケット211があるかという配置を把握しておく必要があり、バケット211を移動させることで当該情報も更新する必要があるなど、運用が煩雑となる。また、ロード部220が読み込んだレコードを他のキャッシュサーバ200に転送するための内部トラフィックが増えることになる。
【0039】
そこで上記のような課題を解消するため、本実施の形態では、キャッシュサーバ200のロード部220が自身のキャッシュ210に保持すべきレコードのみをDB110から読み込む構成をとる。
図1は、本実施の形態の分散キャッシュシステム1における、キャッシュ210へのデータのロード方法の例について概要を示した図である。
【0040】
図1の例では、
図7の例と同様にレコードの配置の均一化を可能とするため、各キャッシュサーバ200は、キャッシュ210内に、キャッシュサーバ200全体としてDB110の全データを保持するのに十分な数および容量となるバケット211を1つ以上有する。各バケット211には分散キャッシュシステム1内でユニークなIDが割り振られており、ロード部220は、読み込んだレコードの値に応じて対応するバケット211にレコードを格納する。ここでは例えば、1から開始する整数からなる連番によりIDが割り振られる。
【0041】
このとき、DB110上の各レコードには、図示するように、バケット211のIDの範囲に属する値を分類番号111として割り振っておく。
図1の例では、1〜バケット211のIDの範囲(バケット211の総数の範囲)の整数値を割り振る。具体的には例えば、各レコードのキーのハッシュ値とバケット211のIDの最大値(バケット211の総数)との剰余を算出し、これに1を加算した値を分類番号111として割り振るようにする。これにより、各レコードにバケット211のIDの値の範囲の整数値を割り振ることができる。
【0042】
各キャッシュサーバ200は、自身のキャッシュ210に有するバケット211のIDの値に一致する分類番号111を有するレコードのみを読み込んで、対応するIDのバケット211にレコードを格納する。例えば、キャッシュサーバa(200a)のロード部220は、キャッシュ210に有するバケット211のIDが“1”と“5”なので、DB110から分類番号111が“1”と“5”のレコードのみを読み込み、分類番号111が“1”のレコードはIDが“1”のバケット211に、分類番号111が“5”のレコードはIDが“5”のバケット211にそれぞれ格納する。
【0043】
これにより、上述した
図6や
図7に示した構成における課題点を解消することができる。すなわち、各キャッシュサーバ200が自身が読み込むべきレコードのみをDB110から読み込むことになるため、読み込んだレコードをキャッシュ210に格納する際に他のキャッシュサーバ200へのレコードの転送を行う必要がなく、内部トラフィックの増加を抑制することができる。また、例えばキャッシュサーバ200の台数が増減した場合でも、バケット211の配置を各キャッシュサーバ200間で調整するだけでよい。各キャッシュサーバ200は、相変わらず自身が有するバケット211のIDに対応するレコードのみを読み込めばよく、対応は容易である。
【0044】
また、個々のバケット211の大きさは均一である必要はないが、全体としてDB110のデータを保持するのに十分な数のバケット211を用意し、キャッシュサーバ200間で配置を調整することで、キャッシュサーバ200におけるデータ量の配分を均一化することができる。各バケット211のサイズおよび格納されているデータ量についてはキャッシュサーバ200が把握することができるため、データ量の配分が均一化されるような適切な配置を算出してバケット211の配置を変更する処理を自動で行うようにすることも可能である。
【0045】
また、
図1に示すような構成をとる場合、
図6や
図7に示した構成におけるような、各キャッシュサーバ200がDB110から読み込むレコードの分散数と、キャッシュサーバ200の台数との不一致という状態は生じない。また、DB110内に保持するレコードの値の範囲や特性に関わらず、キーのハッシュ値とバケット211の総数との剰余をとることで、どのような値のレコードに対しても一定範囲の値を割り当てて分類することができる。
【0046】
<データベース更新のキャッシュへの反映>
本実施の形態では、処理効率をより向上させるなどの観点から、クライアント側からのレコード(キャッシュデータ)の変更を許可しないようにして、キャッシュ210内のレコードを読み取り専用とする。その場合でも、DB110のデータが他のシステムから、もしくは管理者等の手動により変更される。
【0047】
以下では、DB110に保持する元データが他のシステム等により更新された場合に、当該更新を遅滞なくキャッシュ210内のデータに反映させる方法について説明する。ここでは、本発明の特徴を分かり易くするために、従来の技術と比較して説明する。
図8は、従来の分散キャッシュシステムにおける、データベースの更新内容をキャッシュに反映させる方法の例について概要を示した図である。
【0048】
従来は、各キャッシュサーバ200がDB110内で更新されているレコードを把握可能とするため、例えば、
図8に示すように、DB110内の各テーブルにレコードの更新時のタイムスタンプの情報を保持する更新日時112のカラムを追加していた。ここで各キャッシュサーバ200は、所定の間隔で定期的にDB110にアクセスして各テーブルの更新日時の情報をチェックし、前回のチェック時点以降に更新されたレコードを検出していた。
【0049】
しかし、この手法ではどのテーブルにどれだけ更新されたレコードがあるかが不明なので、各キャッシュサーバ200はDB110の全てのレコードについて更新日時の情報をチェックする必要がある。従って、DB110内のテーブル数やレコード数が多い場合は当該チェック処理の負荷が高くなり、DB110のレコードの更新内容を遅滞なくキャッシュサーバ200に反映させることが困難となる場合があった。そこで、本実施の形態では、DB110のレコードに対する更新内容を記録するためのテーブルを別途有する構成としている。
図3は、本実施の形態における、データベースの更新内容をキャッシュに反映させる方法の例について概要を示した図である。
【0050】
図3の例では、各テーブルに対する更新内容を記録するためのログテーブル120を有する。ログテーブル120に対しては、例えば、各テーブルのレコードが更新された際にデータベース管理ソフトウェアによって生成される更新トリガ等を利用して、DBサーバ100上の図示しないプログラム等により、
図3に示すように更新内容(追加、削除、変更等)を示す更新レコードを追加する。このとき、各レコードは、上述した分類番号111についても保持するカラムを有する。
【0051】
ここで、各キャッシュサーバ200のロード部220は、DB110のログテーブル120にアクセスし、更新レコードが新たに追加されているか否かを更新日時等によりチェックし、追加されている場合は該当する更新レコードを読み込んで、更新内容をキャッシュ210の内容に反映させる。更新レコードを読み込む際に分類番号111を参照することで、自身が読み込むべき更新レコードのみを読み込むようにすることができる。ロード部220はキャッシュサーバ200に予め設定された所定の間隔で定期的にログテーブル120にアクセスしてもよいし、更新トリガ等を利用して更新があったタイミングでログテーブル120にアクセスしてもよいが、以下ではロード部が定期的にログテーブルにアクセスする場合について説明する。
【0052】
読み込んでキャッシュ210への反映が完了した更新レコードについては、ログテーブル120から削除するようにしてもよい。この場合は、ロード部220がログテーブル120にアクセスした際に、ログテーブル120に存在する更新レコードを新たに追加された更新レコードと判断することができ、更新日時等のチェックは不要となる。
【0053】
このように、各テーブル単位ではなく全てのテーブルで共通のログテーブル120を有することにより、DB110においてテーブル数やレコード数が増大しても、各キャッシュサーバ200がチェックする対象とするのはログテーブル120だけでよく、チェック処理の負荷を大きく低減させることが可能となる。
【0054】
なお、ログテーブル120に更新レコードが追加されるタイミングが、各テーブルに対する更新処理が行われた時点であり、その後にトランザクションが完了してコミットされるという場合も生じ得る。この場合は、ログテーブル120のレコードの整合性を考慮して、各キャッシュサーバ200のロード部220は、トランザクションが完了してコミットされたタイミングの順でログテーブル120から更新レコードを読み込むものとする。
【0055】
ログテーブル120から更新レコードを読み込んだロード部220は、その更新内容をキャッシュ210の内容に反映させる。すなわち、対応するバケット211内のレコードを、更新レコードの更新内容に基づいて更新する。このとき、同一のレコードに対してDB110において複数回の更新が行われている場合は、整合性を維持するため、更新の順序に従って時系列でキャッシュ210の内容を更新する必要がある。一方、異なるレコードに対する更新については、可能な限り並列的な処理を行い、反映させるまでのタイムラグを極力小さくする必要がある。
【0056】
そこで、本実施の形態では、DB110におけるデータの更新をキャッシュサーバ200において効率的にキャッシュ210に反映させる手段を有する。
図4は、DB110におけるデータの更新を効率的にキャッシュ210に反映させるためのキャッシュサーバ200の構成例について概要を示した図である。
【0057】
キャッシュサーバ200におけるロード部220は、フィード部221と複数の処理部223とを有する。フィード部221および処理部223はそれぞれ、データの授受を行うためのキューとしてフィードキュー222および処理キュー224を有する。また、各処理部223から共通してアクセス可能なメモリ領域や変数等からなる共通作業領域225を有する。フィード部221は、DB110のログテーブル120から自身が読み込むべき更新レコードを読み込むスレッドである。処理部223は、フィード部221がDB110のログテーブル120から読み込んだ更新レコードを並列的に処理してキャッシュ210の対応するバケット211に反映させるスレッドである。
【0058】
図5は、ロード部220におけるフィード部221および処理部223の処理の例を示したフローチャートである。フィード部221は、処理を開始すると、DB110のログテーブル120の内容をチェックし(S11)、新たに追加された更新レコードのうち、自身が読み込むべき更新レコード(分類番号111の値がキャッシュ210内のバケット221のIDの値と同じもの)があるかを判定する(S12)。読み込むべき更新レコードがある場合は、それを読み込んで、フィードキュー222に挿入する(S13)。その後、予め定められた所定の時間スリープし(S14)、ステップS11に戻って一連の処理を繰り返す。なお、更新があったタイミングでロード部220がログテーブル120にアクセスする場合、スリープ時間は更新を知らせる信号を受けるまでとされる。
【0059】
一方、各処理部223は、処理を開始すると、まず自身の処理キュー224をチェックし(S21)、更新レコードがあるかを判定する(S22)。更新レコードがある場合は、そこから1件取得し、その内容に基づいてキャッシュ210への反映処理を行う(S23)。すなわち、取得した更新レコードの分類番号111の値と同じIDのバケット221の内容に、取得した更新レコードの内容を反映させる。なお、この反映処理の最中、共通作業領域225に自身が処理中のレコードを特定することが可能な情報を記録しておく。
【0060】
ステップS22において自身の処理キュー224に更新レコードがなく空である場合は、フィードキュー222から更新レコードを1件取得する(S24)。ここで共通作業領域225をチェックし、取得した更新レコードに対応するレコードに対して他の処理部223で現在反映処理が行われているかを判定する(S25)。他の処理部223で現在反映処理が行われている場合は、当該更新レコードを対象の処理部223の処理キュー224に挿入し(S26)、ステップS24に戻って、再度フィードキュー222から更新レコードを1件取得する。ステップS25においてフィードキュー222から取得した更新レコードに対応するレコードが他のいずれの処理部223においても反映処理が行われていない場合は、当該更新レコードの内容に基づいてキャッシュ210に対する反映処理を行う(S27)。その後、ステップS21に戻って、一連の処理を繰り返す。
【0061】
なお、各キャッシュサーバ200のキャッシュ210にDB110の全データを初期ロードする際に、上記の更新データを反映する方法を利用することも可能である。例えば、DBサーバ100上で、図示しないプログラム等によりDB110の各テーブルのデータ全体を読み込み、その内容で新たに各テーブルにレコードを追加したものとして、対応する処理内容からなる更新レコードをログテーブル120に書き込むなどの対応をとることができる。この場合、初期ロード時も含めてログテーブル120からデータを取得してキャッシュ210にデータを格納することになるため、各テーブルのレコードには分類番号111を割り振らず、ログテーブル120に更新レコードを追加する際に割り振るようにしてもよい。
【0062】
以上に説明したように、本発明の一実施の形態である分散キャッシュシステムによれば、DB110に保持する全てのデータを各キャッシュサーバ200のキャッシュ210上に展開し、データがパーティション化された分散キャッシュシステム1を実現することができる。
【0063】
各キャッシュサーバ200は、自身のキャッシュ210内において定義されたバケット211の構成に応じて、自身が読み込むべきレコードのみをDB110から読み込んでキャッシュ210に保持する。これにより、DB110に保持するレコードの値の分布等に影響されずに各キャッシュサーバ200間でリソースの使用量を平準化することができる。また、キャッシュサーバ200の台数の増減にも柔軟に対応可能で、内部トラフィックを低減させることが可能となる。
【0064】
さらに本実施の形態では、DB110内の各テーブルに保持するレコードが他のシステム等により更新された場合にその更新内容を示す更新レコードを保持するための、各テーブルで共通のログテーブル120を有する。これにより、DB110のテーブル数やレコード数が増えた場合でも、更新内容を遅滞なく各キャッシュサーバ200のキャッシュ210に反映させることが可能となる。
【0065】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。