JP5603843B2 - データベースの負荷分散装置 - Google Patents

データベースの負荷分散装置 Download PDF

Info

Publication number
JP5603843B2
JP5603843B2 JP2011180920A JP2011180920A JP5603843B2 JP 5603843 B2 JP5603843 B2 JP 5603843B2 JP 2011180920 A JP2011180920 A JP 2011180920A JP 2011180920 A JP2011180920 A JP 2011180920A JP 5603843 B2 JP5603843 B2 JP 5603843B2
Authority
JP
Japan
Prior art keywords
server
hash value
input query
hash
dispatcher
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2011180920A
Other languages
English (en)
Other versions
JP2013045181A (ja
Inventor
悟 近藤
安敏 宮城
雅志 金子
健 福元
清志 上田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2011180920A priority Critical patent/JP5603843B2/ja
Publication of JP2013045181A publication Critical patent/JP2013045181A/ja
Application granted granted Critical
Publication of JP5603843B2 publication Critical patent/JP5603843B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、ネットワーク上に分散配置されたサーバをクラスタ化してデータを格納するデータベースの負荷分散装置に関する。
近年、コンピュータのクラウド化に伴い、Web側でのサービス提供が多くなってきている。Web側のサービスの提供に於いては、ユーザも非常に膨大となることから、単位時間当たりのクエリ処理量に着目し、分散データベースシステムを導入する企業が増えている。特に、ボトルネックとなり易いデータベース(DB:DataBase)分野では、旧来のRelational DataBase(RDB)から、NoSQL型のデータベースシステムへの移行が増えている。
RDBの技術では、Row(行)、Column(列)からなる2次元のテーブル構造でデータを表現している。そして、SQL(Structured Query Language)言語などによるクエリによって、この二次元テーブル構造のデータに対して、JOIN(結合)や正規化などの操作を実行することにより、検索などの処理を実現するものである。
RDBでは、このようなテーブル構造をベースとした処理を行っているため、データの一貫性は保持し易い。しかし、サーバの台数を増加させてスループットなどの性能を高める、いわゆるスケーラビリティの効果を得にくいという問題がある。
NoSQL型のデータベースシステムは、スケーラビリティを享受することを最大の目標としている。NoSQL型のデータベースシステムは、ハッシュ関数と相性が良いKey Value Store(KVS)形式のインタフェースが多い。KVS形式のインタフェースは、検索対象のValueにKeyを予め設定し、そのKeyに対してハッシュ関数を適用して検索を行うことで、O(1)またはO(log(N))の計算量でのvalue検索を可能としている。KVS形式のインタフェースを有するNoSQL型のデータベースシステムでは、RDBのようにテーブル構造のデータを持っていない。
非特許文献1には、コンシステントハッシュを利用したNoSQL型のデータベースシステムの発明が記載されている。
Giuseppe DeCandia, Deniz Hastorun, Madan Jampani, Gunavardhan Kakulapati, Avinash Lakshman,Alex Pilchin, Swaminathan Sivasubramanian, Peter Vosshall, and Werner Vogels、"Dynamo: Amazon’s Highly Available Key-value Store"、SOSP’07、October 14-17, 2007、[平成23年8月2日検索]、インターネット(URL:http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf)
NoSQL型のデータベースシステムでは、クエリのアクセス毎に、そのアクセスを、データの在処であるサーバに振り分けているだけである。そのため、同一のデータに集中的にアクセスが発生する場合には処理が分散できずにタイムアウトが発生し、見かけの処理能力が低くなる虞がある。
たとえば、NoSQL型のデータベースシステムを、公衆電話網システムに於ける電話番号の検索に適用した場合、チケット予約センタのように、いわゆる企画型輻輳が発生し易い電話番号のkeyにアクセスが集中する虞がある。このアクセスの集中により、この電話番号を格納している特定サーバの処理能力の限界を超えてしまう虞がある。これは、従来のNoSQL型のデータベースシステムが、同じkeyに対しては、単一のハッシュ値しか与えないことに起因している。
分散データベースシステムでは、冗長化のため、多重に同一の複製データを保持している。しかし、これらの複製データが使用されるのは故障時だけであり、それ以外はアクセスされることはない。
そこで、本発明は、この冗長化のための複製データにアクセス可能とし、処理能力を増大させるデータベースの負荷分散装置を提供することを課題とする。
前記した課題を解決するため、請求項1に記載の発明では、複数のサーバと通信する負荷分散装置であって、当該負荷分散装置は、複数の異なるハッシュ値計算部を備えた処理部と、通信部とを備えており、前記処理部は、読み取り入力クエリを受信した際、前記読み取り入力クエリのキーを取得し、前記複数の異なるハッシュ値計算部のいずれかを決定し、前記決定したハッシュ値計算部により、前記読み取り入力クエリのキーから第1のハッシュ値を計算し、前記通信部によって前記第1のハッシュ値に対応する第1のサーバをロックし、前記読み取り入力クエリを送信したのち、前記第1のサーバのロックを解除する、ことを特徴とするデータベースの負荷分散装置とした。
このようにすることで、本発明によれば、データの読み取りの際には、冗長化のための複製データを格納しているいずれかのサーバを決定し、アクセスを分散させている。これにより、特定のデータにアクセスが集中する場合でも、このアクセスを分散させることができ、システム全体として高いスループットを維持することができる。
請求項2に記載の発明では、前記処理部は更に、乱数計算部を備えており、前記処理部は、前記複数の異なるハッシュ値計算部のいずれかを、前記乱数計算部が出力する乱数によって決定する、ことを特徴とする請求項1に記載のデータベースの負荷分散装置とした。
このようにすることで、本発明によれば、データの読み取りの際には、複数の異なるハッシュ値計算部のうちいずれかを乱数で決定している。そして、決定したハッシュ値計算部のハッシュ値hによって、冗長化のための複製データを格納しているいずれかのサーバを決定している。これにより、乱数でアクセスを分散させることができ、自動アクセスソフトウェア(いわゆるロボット)などによる繰り返しのアクセスが同一のサーバに集中することを抑止することができる。
請求項3に記載の発明では、前記通信部は、前記第1のサーバを同期でロックしたのち、非同期で前記読み取り入力クエリを送信し、非同期で前記第1のサーバのロックを解除する、ことを特徴とする請求項1または請求項2に記載のデータベースの負荷分散装置とした。
このようにすることで、本発明によれば、データの読み取りの際には、対象サーバを同期でロックしたのち、非同期で入力クエリをサーバに送信したのち、非同期でサーバ群のロックを解除している。これにより、各サーバからの応答を待たずにサーバ群に入力クエリを送信できるので、高速に処理することができる。
請求項4に記載の発明では、前記処理部は、書き込み入力クエリを受信した際、前記書き込み入力クエリのキーを取得し、前記複数の異なるハッシュ値計算部により、前記書き込み入力クエリのキーに基づく第2のハッシュ値配列を計算し、前記通信部によって前記第2のハッシュ値配列の各要素に対応する第2のサーバ群を順番にロックし、前記書き込み入力クエリを送信したのち、前記第2のサーバ群のロックを解除する、ことを特徴とする請求項1ないし請求項3のいずれか1項に記載のデータベースの負荷分散装置とした。
このようにすることで、本発明によれば、データの書き込みの際には、データを複製して複数のサーバに格納している。これにより、耐障害性を高めることができる。
更に、データの書き込みの際には、このデータのキーを複数のハッシュ関数によって複数のハッシュ値hを計算し、これらハッシュ値hに基いて第2のサーバ群と当該第2のサーバ群の順番を決定し、決定した第2のサーバ群をロックしている。これにより、データの読み取りと競合した場合のデータの不整合を抑止することができる。
複数のハッシュ関数の順番は、全ての負荷分散装置に於いて同一である。どの負荷分散装置であっても、同一のキーを有するデータの書き込みの際に、同一の順番で同一の第2のサーバ群をロックする。これにより、複数の負荷分散装置が、互いに異なるサーバをロックし、相手がロックしているサーバのロック解除を両方で待っている状態、いわゆるデッドロック状態が発生することを抑止することができる。
請求項5に記載の発明では、前記通信部は、前記第2のサーバ群を順番に同期でロックしたのち、非同期で前記書き込み入力クエリを送信し、非同期で前記第2のサーバ群のロックを解除する、ことを特徴とする請求項4に記載のデータベースの負荷分散装置とした。
このようにすることで、本発明によれば、データの書き込みの際には、第2のサーバ群を同期でロックしたのち、非同期で入力クエリを第2のサーバ群に送信したのち、非同期で第2のサーバ群のロックを解除している。これにより、各サーバからの応答を待たずに第2のサーバ群に入力クエリを送信できるので、高速に処理することができる。
請求項6に記載の発明では、前記処理部は更に、コンシステントハッシュ計算部を備えており、前記第1のハッシュ値を計算した際、前記コンシステントハッシュ計算部により、前記第1のハッシュ値をコンシステントハッシュの環に配置して前記第1のサーバを決定し、前記通信部によって前記第1のサーバをロックし、前記読み取り入力クエリを送信したのち、前記第1のサーバのロックを解除し、前記第2のハッシュ値配列を計算した際、前記コンシステントハッシュ計算部により、前記第2のハッシュ値配列をコンシステントハッシュの環に配置して前記第2のサーバ群と当該第2のサーバ群の順番とを決定し、前記通信部によって前記第のサーバ群を順番にロックし、前記書き込み入力クエリを送信したのち、前記第2のサーバ群のロックを解除する、ことを特徴とする請求項4または請求項5に記載のデータベースの負荷分散装置とした。
このようにすることで、本発明によれば、データの読み取りと書込みの際には、ハッシュ関数によってハッシュ値hを計算し、このハッシュ値hをコンシステントハッシュの環に配置して、対象サーバ(第1のサーバまたは第2のサーバ群)を決定している。これにより、サーバの増設と減設の際に、どのサーバにどのデータを移動すればよいかを、コンシステントハッシュの環に基いて容易に決定することができる。
請求項7に記載の発明では、前記処理部は更に、前記第のハッシュ値配列を計算した際、前記第2のハッシュ値配列をソートし、前記コンシステントハッシュ計算部により、ソートした前記第2のハッシュ値配列をコンシステントハッシュの環に配置して第3のサーバ群と当該第3のサーバ群の順番を決定し、前記通信部によって前記第3のサーバ群を順番にロックし、前記書き込み入力クエリを送信したのち、前記第3のサーバ群のロックを解除する、ことを特徴とする請求項6に記載のデータベースの負荷分散装置とした。
このようにすることで、本発明によれば、全てのハッシュ値hをソートし、このソートした順番のハッシュ値hに対応する第3のサーバ群にアクセスしている。これにより、データの複製に限られず、如何なるデータ集合の更新においても、第3のサーバ群へのアクセス順番を一意に決定し、デッドロックを回避することができる。
本発明に係るデータベースの負荷分散装置によれば、この冗長化のための複製データにアクセス可能となるので、処理能力を増大させることができる。
第1の実施形態に於けるデータベースクラスタシステムの概要を示す図である。 第1の実施形態に於けるデータベースクラスタシステムを示す構成図である。 第1の実施形態に於けるディスパッチャを示す概略の構成図である。 第1の実施形態に於けるハッシュ関数とコンシステントハッシュの環を示す図である。 第1の実施形態に於ける入出力データの例を示す図である。 第1の実施形態に於ける書き込みの際の動作例を示す図である。 第1の実施形態に於ける読み取りの際の動作例を示す図である。 第1の実施形態に於ける書き込みの例を示すシーケンス図である。 第1の実施形態に於ける書き込みの競合の例を示すシーケンス図である。 第1の実施形態に於ける書き込みと読み取りの競合の例を示すシーケンス図である。 第1の実施形態に於けるディスパッチャの動作を示すフローチャートである。 第2の実施形態に於けるディスパッチャの動作を示すフローチャートである。
以降、本発明を実施するための形態を、図を参照して詳細に説明する。
(第1の実施形態の構成)
図1は、第1の実施形態に於けるデータベースクラスタシステムの概要を示す図である。
データベースクラスタシステム10は、ネットワーク100を介して、外部システム90であるオペレータシステム、または、入出力端末80と接続されている。
データベースクラスタシステム10は、外部システム90や入出力端末80からの入力データ(入力クエリ)を受け取る。そして、この入力データ(入力クエリ)に基いてデータの保存、更新、検索などを行い、その結果を出力データ(応答)として、外部システム90や入出力端末80に送信する。
図2は、第1の実施形態に於けるデータベースクラスタシステムを示す構成図である。
データベースクラスタシステム10は、図面に於いて「B」と表記されているロードバランサ(Balancer)13と、図面に於いて「D」と表記されている複数のディスパッチャ(Dispatcher)14−n(nは自然数)と、複数のサーバ15−nとを有している。例えば、サーバ15−1は、図面に於いて「P」と表記されているプロセッサ(Processor)16−1と、図面に於いて「S」と表記されているストレージ(Storage)17−1とを有している。他のサーバ15−2,15−3なども同様の構成を有している。データベースクラスタシステム10は更に、後述する図6に示すように、サーバ15−0,15−4,15−5,15−6と、ディスパッチャ14−0,14−4,14−5,14−6とを有している。
この図2では、そのうち、サーバ15−1〜15−3と、ディスパッチャ14−1〜14−3とを図示し、それ以外の図示を省略している。
ロードバランサ13は、入力装置11から入力データ(入力クエリ)を取得し、出力データ(応答)を出力装置12に送信する。また、ロードバランサ13は、ラウンドロビンなどにより、入力クエリを複数のディスパッチャ14−0〜14−6のいずれかに振り分ける。ここで、入力装置11および出力装置12は、前述した図1に示す外部システム90や入出力端末80のことをいう。データベースクラスタシステム10に対する入力クエリとは、例えば、SQLのクエリやXCAP(XML Configuration Access Protocol)のような、データベースからデータを取得するための要求のことである。
負荷分散装置であるディスパッチャ14−1は、それぞれ複数のプロセッサ16−0〜16−6と接続されており、ロードバランサ13から取得した書き込み入力クエリと読み取り入力クエリを、サーバ15−0(プロセッサ16−0)〜サーバ15−6(プロセッサ16−6)のいずれかに振り分ける。このディスパッチャ14−1は、入力クエリを解析してキーを取得し、複数のハッシュ関数によりハッシュ値hを計算し、コンシステントハッシュの環を適用してデータの格納先であるサーバ15−nを決定し、その入力クエリを送信する。他のディスパッチャ14−2,14−3なども同様に構成されている。なお、ディスパッチャ14−nの詳細な構成を処理については、ディスパッチャ14−1を例として、後述する図3で詳細に説明する。
プロセッサ16−1は、複数のディスパッチャ14−nおよび自身が制御するストレージ17−1と接続されており、ディスパッチャ14−nから入力クエリを受信し、その入力クエリに従い、ストレージ17−1に新規に入力データを保存し、既存データを更新し、既存データを検索する制御を実行する。他のプロセッサ16−2,16−3などもプロセッサ16−1と同様に構成されている。
ストレージ17−1は、実際にデータを保存する記憶手段であり、第1の実施形態では、各データがXML(Extensible Markup Language)ファイルで保存されている。他のストレージ17−2,17−3などもストレージ17−1と同様に構成されている。第1の実施形態に於いて、このプロセッサ16−nとストレージ17−nの組を、1つのサーバ15−nとして説明する。
図3は、第1の実施形態に於けるディスパッチャを示す概略の構成図である。ここでは、ディスパッチャ14−1を例に説明する。
ディスパッチャ14−1は、処理部21と、記憶部22と、通信部23とを備えている。ディスパッチャ14−1は、ロードバランサ13(図2)および複数のプロセッサ16−n(図2)と通信可能に接続され、ロードバランサ13(図2)から取得した入力クエリを、プロセッサ16−n(図2)のいずれかに振り分ける負荷分散装置である。
通信部23は、通信回線を介して情報を送受信する通信インタフェースによって構成され、内部バスなどを介して処理部21に接続されている。
通信部23は、ロードバランサ13(図2)や、各プロセッサ16−n(図2)との間の情報の送受信を行う。例えば、通信部23は、ロードバランサ13(図2)が送信した入力クエリを受信し、各プロセッサ16−n(図2)に対し、その入力クエリを送信する。また、通信部23は、ストレージ17−n(図2)に保存されていたデータなどの検索結果をプロセッサ16−n(図2)から受信し、ロードバランサ13(図2)に対して送信する。
処理部21は、クエリ解析部24と、サーバ決定処理部25とを備えており、ディスパッチャ14−1全体を制御する。この処理部21は、例えば、ディスパッチャ14−1の記憶部22に格納されたプログラムをCPU(Central Processing Unit)が記憶部22のRAM(Random Access Memory)に展開して実行することによって実現される。
記憶部22は、ハードディスク、フラッシュメモリ、RAMなどの記憶装置からなり、各サーバ15−n(図2)のIDなどを記憶している。サーバ15−n(図2)のIDは、このサーバ15−n(図2)を一意に識別可能な情報であり、第1の実施形態では、0〜6の数字が用いられている。しかし、これに限られず、このサーバ15−n(図2)のIP(Internet Protocol)アドレス、または、MAC(Media Access Control address)アドレスなどを用いてもよい。
クエリ解析部24は、通信部23から入力クエリを受け取り、そのクエリの内容を構文解析する。例えば、クエリ解析部24は、その入力クエリが、ストレージ17−n(図2)に格納されたデータに対する読み取り要求(GET)、新規のデータの書き込み要求(PUT)、既存データの更新要求(UPDATE)のいずれであるかを解析する。当該入力クエリがGETであるときには更に、(a)keyの完全一致検索、(b)keyの範囲検索、(c)valueの完全一致検索、(d)valueの範囲検索のいずれであるかを解析する。クエリ解析部24は、これらの解析結果を、サーバ決定処理部25に引き渡す。
サーバ決定処理部25は、乱数計算部26と、複数の異なるハッシュ値計算部である第1ハッシュ値計算部27−1〜第3ハッシュ値計算部27−3と、コンシステントハッシュ計算部28とを備えている。しかし、これに限られず、このサーバ決定処理部25は、振り分け対象サーバ数に対応するM個のハッシュ関数計算部を有していてもよい。なお、振り分け対象サーバ数Mは、2以上かつサーバ15−n(図2)の台数以下である。
サーバ決定処理部25は、クエリ解析部24から取得した解析結果に基き、ハッシュ関数のうちいずれかを選択し、コンシステントハッシュの環を適用して、振り分け先となるサーバ15−nを決定する。
乱数計算部26は、このサーバ決定処理部25が有している3個のハッシュ関数を選択するため、0以上かつ3未満の乱数rを出力する。しかし、これに限られず、このサーバ決定処理部25がM個のハッシュ関数を有しているとき、乱数計算部26は、これらを選択するため、0以上かつM未満の乱数rを出力してもよい。
第1ハッシュ値計算部27−1〜第3ハッシュ値計算部27−3は、それぞれ別のハッシュ関数によってハッシュ値hを計算する。第1ハッシュ値計算部27−1は、全てのディスパッチャ14−1〜14−3に於いて、同一の入力値xに対して同一の出力値(ハッシュ値h)を計算する。これにより、どのディスパッチャ14−1〜14−3の第1ハッシュ値計算部27−1で計算しても、入力クエリのキーに基いて、一意にサーバ15−nを決定することができる。第2ハッシュ値計算部27−2、第3ハッシュ値計算部27−3も、第1ハッシュ値計算部27−1と同様である。
コンシステントハッシュ計算部28は、前述したハッシュ値hをコンシステントハッシュの環に適用し、ハッシュ値hに対応したサーバ15−nを決定する。
図4(a),(b)は、第1の実施形態に於けるハッシュ関数とコンシステントハッシュの環を示す図である。
図4(a)は、例えば、第1ハッシュ値計算部27−1(図3)が有しているハッシュ関数の入力値xと出力値であるハッシュ値hとの関係を示す図である。縦軸は出力値であるハッシュ値hを示し、横軸は入力値xを示している。
このハッシュ関数によれば、入力値xに対して、出力値であるハッシュ値hは離散的な値となる。つまり、入力クエリが有するキーを入力値xとして計算したとき、ハッシュ値hは離散的な値となる。このハッシュ値hを基に、サーバ15−nを決定する。これにより、2つの入力クエリのキーがそれぞれ異なると、ハッシュ値hはそれぞれ飛び離れた値となる。これらハッシュ値hに対応したサーバに、それぞれの入力クエリの処理を行わせる。これにより、それぞれの入力クエリのキーの処理を、各サーバ15−nに分散することができる。
図4(b)は、コンシステントハッシュの環を示す図である。時計まわりの矢印は、前述したハッシュ値hを示し、環上の点の番号nは、サーバ15−0〜15−6(図6)のIDを0から6の番号で示している。
ハッシュ値hを、コンシステントハッシュの環に適用して配置する。このコンシステントハッシュの環状領域には、ノードと呼ばれる担当領域が決まっている。ハッシュ値hが与えられたとき、どこのノード(担当領域)に入るかによって、対象サーバが決定される。
ハッシュ値hが、n=0の点に配置されていたとき、および、n=0の点からn=1の点の間に配置されていたときには、IDが0のサーバ15−0(図6)を対象サーバに決定する。
ハッシュ値hが、n=1の点に配置されていたとき、および、n=1の点からn=2の点の間に配置されていたときには、IDが1のサーバ15−1(図6)を対象サーバに決定する。
ハッシュ値hが、n=2の点に配置されていたとき、および、n=2の点からn=3の点の間に配置されていたときには、IDが2のサーバ15−2(図6)を対象サーバに決定する。
ハッシュ値hが、n=3の点に配置されていたとき、および、n=3の点からn=4の点の間に配置されていたときには、IDが3のサーバ15−3(図6)を対象サーバに決定する。
ハッシュ値hが、n=4の点に配置されていたとき、および、n=4の点からn=5の点の間に配置されていたときには、IDが4のサーバ15−4(図6)を対象サーバに決定する。
ハッシュ値hが、n=5の点に配置されていたとき、および、n=5の点からn=6の点の間に配置されていたときには、IDが5のサーバ15−5(図6)を対象サーバに決定する。
ハッシュ値hが、n=6の点に配置されていたとき、および、n=6の点からn=0の点の間に配置されていたときには、IDが5のサーバ15−6(図6)を対象サーバに決定する。
図5は、第1の実施形態に於ける入出力データの例を示す図である。
入出力ファイル200は、XML形式で記載されており、keyとvalueの4つのタグ要素(name,location,phone,charge)を有している。
Keyは、「a0123」が付与されている。
Valueのnameタグには「ono」が格納されている。Valueのlocationタグには「tokyo」が格納されている。Valueのphoneタグには「0333331111」が格納されている。Valueのchargeタグには「3500」が格納されている。
(第1の実施形態の動作)
図6は、第1の実施形態に於ける書き込みの際の動作例を示す図である。
データベースクラスタシステム10は、7台のサーバ15−0〜15−6を備えている。このサーバ15−0〜15−6は、それぞれ、ディスパッチャ14−0〜14−6と、プロセッサ16−0〜16−6と、ストレージ17−0〜17−6とを備えている。サーバ15−0のIDは0であり、以降、サーバ15−1〜15−6のIDは、1〜6である。
書き込みの際、ロードバランサ13は、前述した外部システム90(図1)または入出力端末80(図1)から「PUT」の入力クエリ(書き込み入力クエリ)を受信する。このロードバランサ13は、ラウンドロビンなどの処理によりディスパッチャ14−0〜14−6のいずれかを選択し、選択したディスパッチャ14−nに、この「PUT」の入力クエリを送信する。図6では、ディスパッチャ14−3に送信している。
ディスパッチャ14−3は、ロードバランサ13から「PUT」の入力クエリを受信すると、クエリ解析部24によって、当該入力クエリを解析する。この解析結果に基き、サーバ決定処理部25(図3)によってサーバ15−1(プロセッサ16−1)、サーバ15−3(プロセッサ16−3)、サーバ15−6(プロセッサ16−6)と、その順番を決定して、この「PUT」の入力クエリを送信する。
サーバ15−1のプロセッサ16−1は、ディスパッチャ14−3から「PUT」の入力クエリを受信すると、その「PUT」の入力クエリに従い、ストレージ17−1に、新規データである入出力ファイル200を保存する。そののち、ストレージ17−1は、プロセッサ16−1に応答を送信する。プロセッサ16−1は、ディスパッチャ14−3に応答を送信する。
サーバ15−3のプロセッサ16−3とサーバ15−6のプロセッサ16−6も、前述したサーバ15−1のプロセッサ16−1と同様に動作する。
ディスパッチャ14−3は、プロセッサ16−1,16−3,16−6の全てから応答を受信したならば、ロードバランサ13に応答を送信する。ロードバランサ13は、この「PUT」の入力クエリを送信した外部システム90(図1)または入出力端末80(図1)に、新規データを保存した旨の応答を送信する。これにより、データベースクラスタシステム10は、データの書き込み処理を行うことができる。
図7は、第1の実施形態に於ける読み取りの際の動作例を示す図である。
データベースクラスタシステム10は、7台のサーバ15−0〜15−6を備えている。このサーバ15−0〜15−6は、それぞれディスパッチャ14−0〜14−6を備えている。ストレージ17−1,17−3,17−6には、入出力ファイル200が格納されている。
読み取りの際に、ロードバランサ13は、前述した外部システム90(図1)または入出力端末80(図1)から「GET」の入力クエリ(読み取り入力クエリ)を受信する。このロードバランサ13は、この「GET」の入力クエリをディスパッチャ14−0〜14−6のいずれかに送信する。図7の左側の例では、ディスパッチャ14−2に「GET」の入力クエリを送信している。図7の中央の例では、ディスパッチャ14−4に「GET」の入力クエリを送信している。図7の右側の例では、ディスパッチャ14−6に「GET」の入力クエリを送信している。
図7の左側の例に於いて、ディスパッチャ14−2は、ロードバランサ13から「GET」の入力クエリを受信すると、クエリ解析部24によって、当該入力クエリを解析する。この解析結果に基き、サーバ決定処理部25(図3)によって、この「GET」の入力クエリのキーに対応するサーバ15−1,15−6,15−3からサーバ15−1を決定し、この「GET」の入力クエリを送信する。
サーバ15−1のプロセッサ16−1は、ディスパッチャ14−2から「GET」の入力クエリを受信すると、その「GET」の入力クエリに従い、ストレージ17−1から入出力ファイル200を読み取る。プロセッサ16−1は、ディスパッチャ14−2に入出力ファイル200を含んだ応答を送信する。
ディスパッチャ14−2は、プロセッサ16−1から、入出力ファイル200を含んだ応答を受信したならば、この応答をロードバランサ13に送信する。ロードバランサ13は、この「GET」の入力クエリを送信した外部システム90(図1)または入出力端末80(図1)に、入出力ファイル200を含んだ応答を送信する。
図7の中央の例に於いて、ディスパッチャ14−4は、ロードバランサ13から「GET」の入力クエリを受信すると、クエリ解析部24によって、当該入力クエリを解析する。この解析結果に基き、サーバ決定処理部25(図3)によって、この「GET」の入力クエリのキーに対応するサーバ15−1,15−6,15−3からサーバ15−3(プロセッサ16−3)を決定し、この「GET」の入力クエリを送信する。
サーバ15−3のプロセッサ16−3は、ディスパッチャ14−4から「GET」の入力クエリを受信すると、その「GET」の入力クエリに従い、ストレージ17−3から入出力ファイル200を読み取る。プロセッサ16−3は、ディスパッチャ14−4に入出力ファイル200を含んだ応答を送信する。
ディスパッチャ14−4は、プロセッサ16−3から、入出力ファイル200を含んだ応答を受信したならば、この応答をロードバランサ13に送信する。ロードバランサ13は、この「GET」の入力クエリを送信した外部システム90(図1)または入出力端末80(図1)に、入出力ファイル200を含んだ応答を送信する。
図7の右側の例に於いて、ディスパッチャ14−6は、ロードバランサ13から「GET」の入力クエリを受信すると、クエリ解析部24によって、当該入力クエリを解析する。この解析結果に基き、サーバ決定処理部25(図3)によって、この「GET」の入力クエリのキーに対応するサーバ15−1,15−6,15−3からサーバ15−6を決定し、この「GET」の入力クエリを送信する。
サーバ15−6のプロセッサ16−6は、ディスパッチャ14−6から「GET」の入力クエリを受信すると、その「GET」の入力クエリに従い、ストレージ17−6から入出力ファイル200を読み取る。プロセッサ16−6は、ディスパッチャ14−6に入出力ファイル200を含んだ応答を送信する。
ディスパッチャ14−6は、プロセッサ16−6から、入出力ファイル200を含んだ応答を受信したならば、この応答をロードバランサ13に送信する。ロードバランサ13は、この「GET」の入力クエリを送信した外部システム90(図1)または入出力端末80(図1)に、入出力ファイル200を含んだ応答を送信する。
図8は、第1の実施形態に於ける書き込みの例を示すシーケンス図である。
処理を開始すると、シーケンスQ10に於いて、入出力端末80は、ロードバランサ13に対して、「PUT」の入力クエリを送信する。この入力クエリは、書き込みクエリであることを示す「PUT」の情報と、入力ファイルのキーである「a0123」の情報と、入力ファイル「a0123.xml」のファイル本体の情報とを含んでいる。
シーケンスQ11に於いて、ロードバランサ13は、例えば、ディスパッチャ14−1に対して、当該「PUT」の入力クエリを送信する。ディスパッチャ14−1は、当該「PUT」の入力クエリを受信すると、第1ハッシュ値計算部27−1〜第3ハッシュ値計算部27−3(図3)により、キーである「a0123」の情報に基き、それぞれのハッシュ値を計算する。ここで計算された3つのハッシュ値は、第2のハッシュ値配列である。
シーケンスQ12に於いて、ディスパッチャ14−1の通信部23(図3)は、サーバ15−1に対して、ロック取得コマンドを同期で送信する。サーバ15−1は、第2のハッシュ値配列の最初の要素に対応するサーバである。
ここで、「ロック取得コマンドを同期で送信する」とは、ロック取得コマンドの送信側(ディスパッチャ14−1)が、このロック取得コマンドの応答を待ってから、自身の作業を続行することを言う。
シーケンスQ13に於いて、サーバ15−1は、ディスパッチャ14−1に対して、ロック取得コマンドに対する応答を送信する。以降、サーバ15−1は、ディスパッチャ14−1が、この取得したロックを解除するまで、新たなロック取得コマンドには応答しなくなる。
シーケンスQ14に於いて、ディスパッチャ14−1の通信部23(図3)は、サーバ15−6に対して、ロック取得コマンドを同期で送信する。サーバ15−6は、第2のハッシュ値配列の2番目の要素に対応するサーバである。
シーケンスQ15に於いて、サーバ15−3は、ディスパッチャ14−1に対して、ロック取得コマンドに対する応答を送信する。以降、サーバ15−6は、ディスパッチャ14−1が、この取得したロックを解除するまで、新たなロック取得コマンドには応答しなくなる。
シーケンスQ16に於いて、ディスパッチャ14−1の通信部23(図3)は、サーバ15−3に対して、ロック取得コマンドを同期で送信する。サーバ15−3は、第2のハッシュ値配列の3番目の要素に対応するサーバである。すなわち、第2のハッシュ値配列の各要素に対応する第2のサーバ群は、サーバ15−1,15−6,15−3である。
シーケンスQ17に於いて、サーバ15−3は、ディスパッチャ14−1に対して、ロック取得コマンドに対する応答を送信する。以降、サーバ15−3は、ディスパッチャ14−1が、この取得したロックを解除するまで、新たなロック取得コマンドには応答しなくなる。
シーケンスQ18に於いて、ディスパッチャ14−1の通信部23(図3)は、サーバ15−1に対して、入力クエリを非同期で送信する。サーバ15−1のプロセッサ16−1は、ストレージ17−1に、この入力クエリが含んでいる入力ファイル「a0123.xml」を書き込む。
ここで、「入力クエリを非同期で送信する」とは、入力クエリの送信側(ディスパッチャ14−1)が、この入力クエリの応答を待つことなく、自身の作業を続行することを言う。
シーケンスQ19に於いて、ディスパッチャ14−1の通信部23(図3)は、サーバ15−3に対して、入力クエリを非同期で送信する。サーバ15−3のプロセッサ16−3は、ストレージ17−3に、この入力クエリが含んでいる入力ファイル「a0123.xml」を書き込む。
シーケンスQ20に於いて、ディスパッチャ14−1の通信部23(図3)は、サーバ15−6に対して、入力クエリを非同期で送信する。サーバ15−6のプロセッサ16−6は、ストレージ17−6に、この入力クエリが含んでいる入力ファイル「a0123.xml」を書き込む。
シーケンスQ21に於いて、サーバ15−1は、ディスパッチャ14−1に対して、入力クエリに対する応答を送信する。
シーケンスQ22に於いて、サーバ15−3は、ディスパッチャ14−1に対して、入力クエリに対する応答を送信する。
シーケンスQ23に於いて、サーバ15−6は、ディスパッチャ14−1に対して、入力クエリに対する応答を送信する。
シーケンスQ24に於いて、ディスパッチャ14−1の通信部23(図3)は、サーバ15−1に対して、ロック解除コマンドを非同期で送信する。サーバ15−1は、ロックを解除し、新たなロック取得コマンドに応答可能な状態となる。
シーケンスQ25に於いて、ディスパッチャ14−1の通信部23(図3)は、サーバ15−3に対して、ロック解除コマンドを非同期で送信する。サーバ15−3は、ロックを解除し、新たなロック取得コマンドに応答可能な状態となる。
シーケンスQ26に於いて、ディスパッチャ14−1の通信部23(図3)は、サーバ15−6に対して、ロック解除コマンドを非同期で送信する。サーバ15−6は、ロックを解除し、新たなロック取得コマンドに応答可能な状態となる。
シーケンスQ27に於いて、サーバ15−1は、ディスパッチャ14−1に対して、ロック解除コマンドに対する応答を送信する。
シーケンスQ28に於いて、サーバ15−3は、ディスパッチャ14−1に対して、ロック解除コマンドに対する応答を送信する。
シーケンスQ29に於いて、サーバ15−6は、ディスパッチャ14−1に対して、ロック解除コマンドに対する応答を送信する。
シーケンスQ30に於いて、ディスパッチャ14−1の通信部23(図3)は、ロードバランサ13に対して、入力クエリの完了通知を送信する。
シーケンスQ31に於いて、ロードバランサ13は、入出力端末80に対して、入力クエリの完了通知を送信する。
以上のシーケンスにより、入出力端末80から、データベースクラスタシステム10に対して、データを書き込むことができる。
図9は、第1の実施形態に於ける書き込みの競合の例を示すシーケンス図である。図8に示すシーケンスと同一の要素には同一の符号を付与している。
この図9に於いて、右側のロードバランサ13と左側のロードバランサ13とは、同一のものを示している。更に、右側の入出力端末80と左側の入出力端末80とは、異なるものを示している。
シーケンスQ10〜Q31は、図8に示すシーケンスと同様である。
シーケンスQ40に於いて、右側の入出力端末80は、ロードバランサ13に対して、「PUT」の入力クエリを同期で送信する。この入力クエリは、シーケンスQ10(図8)と同様に、書き込み入力クエリであることを示す「PUT」の情報と、ファイルのキーである「a0123」の情報と、入力ファイルである「a0123.xml」の情報とを含んでいる。
シーケンスQ41に於いて、ロードバランサ13は、ディスパッチャ14−3に対して、当該「PUT」の入力クエリを同期で送信する。ディスパッチャ14−3の通信部23(図3)は、当該「PUT」の入力クエリを受信すると、第1ハッシュ値計算部27−1〜第3ハッシュ値計算部27−3(図3)により、キーである「a0123」の情報に基き、第2のハッシュ値配列を計算する。
シーケンスQ42に於いて、ディスパッチャ14−3の通信部23(図3)は、サーバ15−1に対して、ロック取得コマンドを同期で送信する。サーバ15−1は、第2のハッシュ値配列の最初の要素に対応するサーバである。しかし、サーバ15−1は、既にロックされているので、このロック取得コマンドに対する応答は、ロックが解除されるまで待たされる。
前述したシーケンスQ27に於いて、サーバ15−1はロックが解除され、新たなロックに応答するようなる。こののち、シーケンスQ43に於いて、サーバ15−1は、ディスパッチャ14−3に対して、ロック取得コマンドに対する応答を送信する。以降、サーバ15−1は、ディスパッチャ14−3が、この取得したロックを解除するまで、新たなロック取得コマンドには応答しなくなる。
以降、シーケンスQ44〜Q61の処理は、シーケンスQ14〜Q31の処理と同様である。
このように、サーバをロックして入力クエリを送信し、そののちにロックを解除しているので、ほぼ同時に書込み処理が行われた場合であっても、データの不整合が発生しなくなる。
図10は、第1の実施形態に於ける書き込みと読み取りの競合の例を示すシーケンス図である。図8に示すシーケンスと同一の要素には同一の符号を付与している。
この図10に於いて、右側のロードバランサ13と左側のロードバランサ13とは、同一のものを示している。
シーケンスQ10〜Q31は、図8に示すシーケンスと同様である。
シーケンスQ70〜Q79は、読み取りのシーケンス例を示している。
シーケンスQ70に於いて、右側の入出力端末80は、ロードバランサ13に対して、「GET」の入力クエリを同期で送信する。この入力クエリは、読み取り入力クエリであることを示す「GET」の情報と、ファイルのキーである「a0123」の情報とを含んでいる。
シーケンスQ71に於いて、ロードバランサ13は、ディスパッチャ14−3に対して、当該「GET」の入力クエリを同期で送信する。
シーケンスQ72に於いて、ディスパッチャ14−3の通信部23(図3)は、サーバ15−3に対して、ロック取得コマンドを同期で送信する。サーバ15−3は、ハッシュ値hに対応するサーバである。
シーケンスQ73に於いて、サーバ15−3は、ディスパッチャ14−3に対して、ロック取得コマンドに対する応答を送信する。以降、サーバ15−3は、ディスパッチャ14−3が、この取得したロックを解除するまで、新たなロック取得コマンドには応答しなくなる。
シーケンスQ74に於いて、ディスパッチャ14−3の通信部23(図3)は、サーバ15−3に対して、この入力クエリを非同期で送信する。サーバ15−3のプロセッサ16−3は、ストレージ17−3から、この入力クエリが含んでいるキー「a0123」に対応する入力ファイル「a0123.xml」を読み取る。
シーケンスQ75に於いて、サーバ15−3は、ディスパッチャ14−3に対して、入力クエリに対する応答を送信する。この応答は、出力ファイル「a0123.xml」を含んでいる。
シーケンスQ76に於いて、ディスパッチャ14−3の通信部23(図3)は、サーバ15−3に対して、ロック解除コマンドを非同期で送信する。サーバ15−3は、ロックを解除し、新たなロック取得コマンドに応答可能な状態となる。
シーケンスQ77に於いて、サーバ15−3は、ディスパッチャ14−3に対して、ロック解除コマンドに対する応答を送信する。
シーケンスQ78に於いて、ディスパッチャ14−3の通信部23(図3)は、ロードバランサ13に対して、出力ファイル「a0123.xml」を含んだ完了通知を送信する。
シーケンスQ79に於いて、ロードバランサ13は、図10右側の入出力端末80に対して、出力ファイル「a0123.xml」を含んだ完了通知を送信する。
シーケンスQ80〜Q89は、書き込みと読み取りの競合シーケンス例を示している。
シーケンスQ80に於いて、右側の入出力端末80は、ロードバランサ13に対して、「GET」の入力クエリを同期で送信する。この入力クエリは、読み取り入力クエリであることを示す「GET」の情報と、ファイルのキーである「a0123」の情報とを含んでいる。
シーケンスQ81に於いて、ロードバランサ13は、ディスパッチャ14−3に対して、当該「GET」の入力クエリを同期で送信する。
シーケンスQ82に於いて、ディスパッチャ14−3の通信部23(図3)は、サーバ15−3に対して、ロック取得コマンドを同期で送信する。サーバ15−3は、ハッシュ値hに対応するサーバである。しかし、サーバ15−3は、既にロックされているので、このロック取得コマンドに対する応答は、ロックが解除されるまで待たされる。
前述したシーケンスQ28に於いて、サーバ15−3はロックが解除され、新たなロックに応答するようなる。こののち、シーケンスQ83に於いて、サーバ15−3は、ディスパッチャ14−3に対して、ロック取得コマンドに対する応答を送信する。以降、サーバ15−3は、ディスパッチャ14−3が、この取得したロックを解除するまで、新たなロック取得コマンドには応答しなくなる。
以降、シーケンスQ84〜Q89の処理は、シーケンスQ74〜Q79の処理と同様である。
このように、サーバをロックして入力クエリを送信し、そののちにロックを解除しているので、複数のサーバから、ほぼ同時に書き込み処理と読み取り処理が行われた場合であっても、データの不整合が発生しなくなる。
図11は、第1の実施形態に於けるディスパッチャの動作を示すフローチャートである。
ここでは例として、ディスパッチャ14−1がロードバランサ13から入力クエリを受信したときの処理を示している。
処理を開始すると、ステップS10に於いて、ディスパッチャ14−1のクエリ解析部24(図3)は、入力クエリを解析してキーを抽出し、これをハッシュ関数の入力値xする。
ステップS11に於いて、ディスパッチャ14−1の処理部21(図3)は、入力クエリの種類を判定する。入力クエリの種類が「PUT」であったならば、ステップS12の処理を行う。入力クエリの種類が「GET」であったならば、ステップS20の処理を行う。
ステップS12〜S17は、書き込みの際の処理である。
ステップS12に於いて、ディスパッチャ14−1のサーバ決定処理部25(図3)は、入力クエリのキーの値をハッシュ関数の入力値xとして、全てのハッシュ関数である第1ハッシュ値計算部27−1〜第3ハッシュ値計算部27−3(図3)により、全てのハッシュ値hを計算する。すなわち、書き込み入力クエリのキーに基づく第2のハッシュ値配列を計算する。
ステップS13に於いて、ディスパッチャ14−1のコンシステントハッシュ計算部28(図3)は、全てのハッシュ値hを、コンシステントハッシュの環に適用する。すなわち、第2のハッシュ値配列を、コンシステントハッシュの環のいずれかの位置に配置する。
ステップS14に於いて、ディスパッチャ14−1のコンシステントハッシュ計算部28(図3)は、コンシステントハッシュの環を基に、対象サーバと順番を決定する。すなわち、第2のハッシュ値配列の各要素に対応する第2のサーバ群と、それら第2のサーバ群の通信順番を決定する。
ステップS15に於いて、ディスパッチャ14−1の通信部23(図3)は、同期で、各対象サーバを順番にロックする。すなわち、第2のサーバ群を順番に同期でロックする。
ステップS16に於いて、ディスパッチャ14−1の通信部23(図3)は、非同期で、各対象サーバに入力クエリを送信して、データを更新する。すなわち、非同期で第2のサーバ群に書き込み入力クエリを送信している。
ステップS17に於いて、ディスパッチャ14−1の通信部23(図3)は、非同期で、各対象サーバのロックを解除する。すなわち、非同期で第2のサーバ群のロックを解除している。ステップS17の処理が終了すると、図11の処理を終了する。
以下のステップS20〜S27は、読み取りの際の処理である。
ステップS20に於いて、ディスパッチャ14−1のサーバ決定処理部25(図3)は、乱数計算部26(図3)により、対象サーバ数Mの範囲で生成される乱数rを算出する。すなわち、ハッシュ値計算部の数をMとしたとき、0以上かつM未満となる乱数rを算出する。第1の実施形態では、0〜2の乱数rを算出する。
ステップS21に於いて、ディスパッチャ14−1のサーバ決定処理部25(図3)は、乱数rに基いて、ハッシュ関数のいずれかを選択する。すなわち、第1ハッシュ値計算部27−1〜第3ハッシュ値計算部27−3(図3)のいずれかを選択する。
ステップS22に於いて、ディスパッチャ14−1のサーバ決定処理部25(図3)は、入力ファイルのキーの値をハッシュ関数の入力値xとして、選択したハッシュ関数でハッシュ値hを計算する。このハッシュ値hは、読み取り入力クエリのキーから計算した第1のハッシュ値である。
ステップS23に於いて、ディスパッチャ14−1のコンシステントハッシュ計算部28(図3)は、ハッシュ値hを、コンシステントハッシュの環に適用する。
ステップS24に於いて、ディスパッチャ14−1のサーバ決定処理部25(図3)は、コンシステントハッシュの環を基に、対象サーバを決定する。この対象サーバは、第1のハッシュ値に対応する第1のサーバである。
ステップS25に於いて、ディスパッチャ14−1の通信部23(図3)は、同期で、1台の対象サーバをロックする。すなわち、この第1のサーバを同期でロックする。
ステップS26に於いて、ディスパッチャ14−1の通信部23(図3)は、非同期で、1台の対象サーバのデータを読み取る。すなわち、この第1のサーバに非同期で読み取り入力クエリを送信する。
ステップS27に於いて、ディスパッチャ14−1の通信部23(図3)は、非同期で、1台の対象サーバのロックを解除する。すなわち、非同期で、この第1のサーバのロックを解除する。ステップS27の処理が終了すると、図11の処理を終了する。
(第1の実施形態の効果)
以上説明した第1の実施形態では、次の(A)〜(H)のような効果がある。
(A) データの読み取りの際には、冗長化のための複製データを格納しているいずれかのサーバを決定し、アクセスを分散させている。これにより、特定のデータにアクセスが集中する場合でも、このアクセスを分散させることができ、システム全体として高いスループットを維持することができる。
(B) データの読み取りの際には、複数の異なるハッシュ値計算部のうちいずれかを乱数rで決定し、決定したハッシュ値計算部のハッシュ値hによって、冗長化のための複製データを格納しているいずれかのサーバを決定している。これにより、乱数rでアクセスを分散させることができ、自動アクセスソフトウェア(ロボット)などによる繰り返しのアクセスが同一のサーバに集中することを抑止することができる。
(C) データの読み取りの際には、対象サーバを同期でロックし、非同期で入力クエリをサーバに送信したのち、非同期でサーバ群のロックを解除する。これにより、各サーバからの応答を待たずにサーバ群に入力クエリを送信できるので、高速に処理することができる。
(D) データの書き込みの際には、データを複製して複数のサーバに格納している。これにより、耐障害性を高めることができる。
(E) データの書き込みの際には、このデータのキーを複数のハッシュ関数によって複数のハッシュ値hを計算し、これらハッシュ値hに基いて第2のサーバ群と当該第2のサーバ群の順番を決定し、決定した第2のサーバ群をロックする。これにより、データの読み取りと競合した場合のデータの不整合を抑止することができる。
(F) 複数のハッシュ関数の順番は、全てのディスパッチャ14−nに於いて同一である。どのディスパッチャ14−nであっても、同一のキーを有するデータの書き込みの際に、同一の順番で同一の第2のサーバ群をロックする。これにより、複数のディスパッチャ14−nが、互いに異なるサーバをロックし、相手がロックしているサーバのロック解除を両方で待っている状態、いわゆるデッドロック状態が発生することを抑止することができる。
(G) データの書き込みの際には、対象サーバ群を同期でロックしたのち、非同期で入力クエリを対象サーバ群に送信したのち、非同期で対象サーバ群のロックを解除する。これにより、各対象サーバからの応答を待たずに対象サーバ群に入力クエリを送信できるので、高速に処理することができる。
(H) データの読み取りと書込みの際には、ハッシュ関数によってハッシュ値hを計算し、このハッシュ値hをコンシステントハッシュの環に配置して、対象サーバを決定する。これにより、サーバの増設と減設の際に、どのサーバにどのデータを移動すればよいかを、コンシステントハッシュの環に基いて容易に決定することができる。例えば、図4(b)に示す例に於いて、サーバIDが1のサーバを減設する際には、この減設するサーバに格納されているデータを、サーバIDが0のサーバに移動すればよい。サーバIDが7のサーバを増設する場合、n=6からn=0の間に新たにn=7のノードを設け、サーバIDが6のサーバから、このn=7のノードに対応するデータを増設するサーバに移動すればよい。
(第2の実施形態の構成)
第2の実施形態のデータベースクラスタシステム10の特徴は、複数のハッシュ関数で計算した複数のハッシュ値hをソートすることにより、デッドロックを発生しにくくすることである。
第1の実施形態のデータベースクラスタシステム10は、ハッシュ関数自身の順番に依存してサーバのアクセス順番を決定している。しかし、キーを経ない更新、例えば、既にハッシュ値hだけが分かっている複数のデータの更新などでは、順番を決めることができず、デッドロックを抑制することができない。これは、ハッシュ関数が基本的に逆関数を持たないことによる。そこで、第2の実施形態では、ハッシュ関数の順番に依存しないサーバのアクセス順番の決定方法を提供する。
第2の実施形態のデータベースクラスタシステム10は、第1の実施形態のデータベースクラスタシステム10(図2)と同様の構成を有している。
(第2の実施形態の動作)
図12は、第2の実施形態に於けるディスパッチャの動作を示すフローチャートである。図11に示す第1の実施形態のフローチャートと同一の要素には同一の符号を付与している。
ここでは例として、ディスパッチャ14−1がロードバランサ13から入力クエリを受信したときの処理を示している。
処理を開始したのち、ステップS10〜S12の処理は、図11に示す第1の実施形態のステップS10〜S12の処理と同様である。
ステップS12Aに於いて、ディスパッチャ14−1のサーバ決定処理部25(図3)は、計算した全てのハッシュ値hをソートする。第2の実施形態では、全てのディスパッチャ14−nは、昇順にソートしている。しかし、これに限られず、全てのディスパッチャ14−nは、一意の順番となるようにソートすればよく、例えば、全て降順でソートしてもよい。
ステップS13Aに於いて、ディスパッチャ14−1のコンシステントハッシュ計算部28(図3)は、全てのソートしたハッシュ値hを、コンシステントハッシュの環に適用する。
以降、ステップS14〜S17の処理は、図11に示す第1の実施形態のステップS14〜S17の処理と同様である。これにより、ステップS14に於いて、対象サーバと当該対象サーバの順番とを決定可能である。この対象サーバは、第3のサーバ群である。
また、ステップS20〜S27の処理は、図11に示す第1の実施形態のステップS20〜S27の処理と同様である。
(第2の実施形態の効果)
以上説明した第2の実施形態では、次の(I)のような効果がある。
(I) 全てのハッシュ値hをソートし、これらソートした順番のハッシュ値hに対応する第3のサーバ群にアクセスする。これにより、データの複製に限られず、如何なるデータ集合の更新においても、第3のサーバ群へのアクセス順番を一意に決定し、デッドロックを回避することができる。
(変形例)
本発明は、上記実施形態に限定されることなく、本発明の趣旨を逸脱しない範囲で、変更実施が可能である。この利用形態や変形例としては、例えば、次の(a)〜(f)のようなものがある。
(a) 第1の実施形態および第2の実施形態のディスパッチャ14−nでは、各対象サーバであるサーバ15−nに非同期でクエリを送信している。しかし、これに限られず、同期でクエリを送信してもよい。
(b) 第1の実施形態および第2の実施形態のディスパッチャ14−nでは、各対象サーバであるサーバ15−nを非同期でロック解除している。しかし、これに限られず、同期でロック解除してもよい。
(c) 第1の実施形態および第2の実施形態のデータベースクラスタシステム10は、ロードバランサ13と、複数のディスパッチャ14−nとを備えている。しかし、これに限られず、ロードバランサ13を有さず、かつ単一のディスパッチャ14−1のみを備えていてもよい。
(d) 第1の実施形態および第2の実施形態のデータベースクラスタシステム10は、サーバ15−nは、ディスパッチャ14−nと、プロセッサ16−nと、ストレージ17−nとを有している。しかし、これに限られず、ディスパッチャ14−nは、プロセッサ16−nとは別のサーバに格納されていてもよい。
(e) 第1の実施形態および第2の実施形態のディスパッチャ14−nは、コンシステントハッシュ計算部28を有している。しかし、これに限られず、ディスパッチャ14−nは、ハッシュ値hから対象サーバを決定できる関数を備えていればよい。
(f) 第1の実施形態および第2の実施形態のディスパッチャ14−nは、乱数計算部26を有し、この乱数計算部26が生成する乱数rによって、複数の異なるハッシュ値計算部のいずれかを決定している。しかし、これに限られず、ディスパッチャ14−nは、複数の異なるハッシュ値計算部のいずれかを決定可能であればよい。例えば、複数の異なるハッシュ値計算部のいずれかを、ラウンドロビンで決定してもよい。
10 データベースクラスタシステム
13 ロードバランサ
14−0〜14−6 ディスパッチャ (負荷分散装置)
15−0〜15−6 サーバ
16−0〜16−6 プロセッサ
17−0〜17−6 ストレージ
21 処理部
22 記憶部
23 通信部
24 クエリ解析部
25 サーバ決定処理部
26 乱数計算部
27−1〜27−3 第1〜第3ハッシュ値計算部 (複数の異なるハッシュ値計算部)
28 コンシステントハッシュ計算部
80 入出力端末
90 外部システム
100 ネットワーク
200 入出力ファイル

Claims (7)

  1. 複数のサーバと通信する負荷分散装置であって、
    当該負荷分散装置は、複数の異なるハッシュ値計算部を備えた処理部と、通信部とを備えており、
    前記処理部は、読み取り入力クエリを受信した際、前記読み取り入力クエリのキーを取得し、
    前記複数の異なるハッシュ値計算部のいずれかを決定し、前記決定したハッシュ値計算部により、前記読み取り入力クエリのキーから第1のハッシュ値を計算し、
    前記通信部によって前記第1のハッシュ値に対応する第1のサーバをロックし、前記読み取り入力クエリを送信したのち、前記第1のサーバのロックを解除する、
    ことを特徴とするデータベースの負荷分散装置。
  2. 前記処理部は更に、乱数計算部を備えており、
    前記処理部は、前記複数の異なるハッシュ値計算部のいずれかを、前記乱数計算部が出力する乱数によって決定する、
    ことを特徴とする請求項1に記載のデータベースの負荷分散装置。
  3. 前記通信部は、
    前記第1のサーバを同期でロックしたのち、非同期で前記読み取り入力クエリを送信し、非同期で前記第1のサーバのロックを解除する、
    ことを特徴とする請求項1または請求項2に記載のデータベースの負荷分散装置。
  4. 前記処理部は、書き込み入力クエリを受信した際、前記書き込み入力クエリのキーを取得し、
    前記複数の異なるハッシュ値計算部により、前記書き込み入力クエリのキーに基づく第2のハッシュ値配列を計算し、
    前記通信部によって前記第2のハッシュ値配列の各要素に対応する第2のサーバ群を順番にロックし、前記書き込み入力クエリを送信したのち、前記第2のサーバ群のロックを解除する、
    ことを特徴とする請求項1ないし請求項3のいずれか1項に記載のデータベースの負荷分散装置。
  5. 前記通信部は、
    前記第2のサーバ群を順番に同期でロックしたのち、非同期で前記書き込み入力クエリを送信し、非同期で前記第2のサーバ群のロックを解除する、
    ことを特徴とする請求項4に記載のデータベースの負荷分散装置。
  6. 前記処理部は更に、コンシステントハッシュ計算部を備えており、
    前記第1のハッシュ値を計算した際、
    前記コンシステントハッシュ計算部により、前記第1のハッシュ値をコンシステントハッシュの環に配置して前記第1のサーバを決定し、前記通信部によって前記第1のサーバをロックし、前記読み取り入力クエリを送信したのち、前記第1のサーバのロックを解除し、
    前記第2のハッシュ値配列を計算した際、
    前記コンシステントハッシュ計算部により、前記第2のハッシュ値配列をコンシステントハッシュの環に配置して前記第2のサーバ群と当該第2のサーバ群の順番とを決定し、前記通信部によって前記第のサーバ群を順番にロックし、前記書き込み入力クエリを送信したのち、前記第2のサーバ群のロックを解除する、
    ことを特徴とする請求項4または請求項5に記載のデータベースの負荷分散装置。
  7. 前記処理部は更に、
    前記第のハッシュ値配列を計算した際、前記第2のハッシュ値配列をソートし、
    前記コンシステントハッシュ計算部により、ソートした前記第2のハッシュ値配列をコンシステントハッシュの環に配置して第3のサーバ群と当該第3のサーバ群の順番を決定し、前記通信部によって前記第3のサーバ群を順番にロックし、前記書き込み入力クエリを送信したのち、前記第3のサーバ群のロックを解除する、
    ことを特徴とする請求項6に記載のデータベースの負荷分散装置。
JP2011180920A 2011-08-22 2011-08-22 データベースの負荷分散装置 Expired - Fee Related JP5603843B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011180920A JP5603843B2 (ja) 2011-08-22 2011-08-22 データベースの負荷分散装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011180920A JP5603843B2 (ja) 2011-08-22 2011-08-22 データベースの負荷分散装置

Publications (2)

Publication Number Publication Date
JP2013045181A JP2013045181A (ja) 2013-03-04
JP5603843B2 true JP5603843B2 (ja) 2014-10-08

Family

ID=48009065

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011180920A Expired - Fee Related JP5603843B2 (ja) 2011-08-22 2011-08-22 データベースの負荷分散装置

Country Status (1)

Country Link
JP (1) JP5603843B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014203329A (ja) * 2013-04-08 2014-10-27 日本電気株式会社 ストレージシステム、ノード装置及びデータ管理方法
JP6076882B2 (ja) * 2013-11-14 2017-02-08 日本電信電話株式会社 情報処理システム、管理装置及びキー割当プログラム
JP6529180B2 (ja) * 2016-03-29 2019-06-12 日本電信電話株式会社 信号振り分けシステム及び信号振り分け方法
US20190034427A1 (en) * 2017-12-28 2019-01-31 Intel Corporation Data management system employing a hash-based and tree-based key-value data structure
US10768998B2 (en) * 2018-04-05 2020-09-08 International Business Machines Corporation Workload management with data access awareness in a computing cluster
KR102388458B1 (ko) * 2019-10-31 2022-04-21 울산과학기술원 데이터 키 값 변환 방법 및 장치

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4068473B2 (ja) * 2003-02-19 2008-03-26 株式会社東芝 ストレージ装置、分担範囲決定方法及びプログラム
JP5396848B2 (ja) * 2008-12-16 2014-01-22 富士通株式会社 データ処理プログラム、サーバ装置およびデータ処理方法

Also Published As

Publication number Publication date
JP2013045181A (ja) 2013-03-04

Similar Documents

Publication Publication Date Title
US10719510B2 (en) Tiering with pluggable storage system for parallel query engines
US11120006B2 (en) Ordering transaction requests in a distributed database according to an independently assigned sequence
JP5603843B2 (ja) データベースの負荷分散装置
US11012806B2 (en) Multi-adapter support in the cloud
US20170185326A1 (en) Consistent transition from asynchronous to synchronous replication in hash-based storage systems
CN111352902A (zh) 日志处理方法、装置、终端设备及存储介质
KR20170010844A (ko) 원격 데이터베이스에 대한 뮤테이션들의 프로세싱
US11288254B2 (en) Method of and system for processing request in distributed database
JP6479186B2 (ja) 計算機システム及びデータベース管理方法
CN110597852B (zh) 数据处理方法、装置、终端及存储介质
US20200301855A1 (en) Intents and locks with intent
US10134067B2 (en) Autocomplete of searches for data stored in multi-tenant architecture
US7529750B2 (en) Accessing information on a network
US11048547B2 (en) Method and system for routing and executing transactions
CN107783728B (zh) 数据存储方法、装置和设备
CN110837499B (zh) 数据访问处理方法、装置、电子设备和存储介质
CN113986921A (zh) 一种黑名单查询方法、系统、电子设备及存储介质
US11789922B1 (en) Admitting for performance ordered operations of atomic transactions across a distributed database
CN105653566B (zh) 一种实现数据库写访问的方法及装置
CN112988874A (zh) 一种数据处理方法、系统、计算设备及可读存储介质
CN111767060A (zh) 多阶段灰度验证方法、装置、电子设备及介质
CN109815295A (zh) 分布式集群数据导入方法及装置
US10313438B1 (en) Partitioned key-value store with one-sided communications for secondary global key lookup by range-knowledgeable clients
US11144236B2 (en) Information processing apparatus, information processing method, and non-transitory computer-readable storage medium for storing program
US20230230080A1 (en) Storing and retrieving data associated with an asset

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130201

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130904

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20140502

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140522

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20140528

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140617

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140724

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140819

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140822

R150 Certificate of patent or registration of utility model

Ref document number: 5603843

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees