JP6160958B2 - 負荷分散システム、負荷分散方法および負荷分散プログラム - Google Patents

負荷分散システム、負荷分散方法および負荷分散プログラム Download PDF

Info

Publication number
JP6160958B2
JP6160958B2 JP2013207404A JP2013207404A JP6160958B2 JP 6160958 B2 JP6160958 B2 JP 6160958B2 JP 2013207404 A JP2013207404 A JP 2013207404A JP 2013207404 A JP2013207404 A JP 2013207404A JP 6160958 B2 JP6160958 B2 JP 6160958B2
Authority
JP
Japan
Prior art keywords
index
key
syntax tree
store
value
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.)
Active
Application number
JP2013207404A
Other languages
English (en)
Other versions
JP2015072563A (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.)
NEC Corp
NEC Solutions Innovators Ltd
Original Assignee
NEC Corp
NEC Solutions Innovators Ltd
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 NEC Corp, NEC Solutions Innovators Ltd filed Critical NEC Corp
Priority to JP2013207404A priority Critical patent/JP6160958B2/ja
Publication of JP2015072563A publication Critical patent/JP2015072563A/ja
Application granted granted Critical
Publication of JP6160958B2 publication Critical patent/JP6160958B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

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

Description

本発明は、複数の装置にデータが分散して格納されている場合に各装置の負荷を分散する負荷分散システム、負荷分散方法および負荷分散プログラムに関する。
データの保存および管理を行う方式として、キーバリューストアが知られている。キーバリューストアでは、キーとバリューのペアが格納される。ここで、バリューは、検索対象とする文字列等のデータであり、キーは、バリューを特定するために用いられる情報である。すなわち、キーバリューストアは、キーを指定するとバリューを取得できる単純な方式により実現される。また、キーバリューストアの中でも、複数のサーバや記憶装置などに分散してデータを保存する方式は、分散キーバリューストアと呼ばれている。
特許文献1には、キーバリューストアによる制限を課せずにデータを扱う分散型データベースシステムが記載されている。特許文献1に記載された分散型データベースシステムでは、クライアントノードが、キー情報とデータのペアおよびキー情報とプログラム情報のペアを、キー情報に基づいて特定されるデータベースノードへ送信する。データベースノードは、キー情報とペアで格納されているデータに対して、プログラム情報に従ってプログラムを実行し、その実行結果をクライアントノードへ送信する。
特開2012−108889号公報
単純なキーバリューストアは、キーを指定してバリューを取得する機能を有する。一方、単純なキーバリューストアでは、全件検索や範囲検索などの機能は提供されない。なお、データ構造を変更して範囲検索を実現するキーバリューストアも想定されるが、以下の説明では、キーを指定して、そのキーに対応するバリューを取得する方式をキーバリューストアと定義する。
このようなキーバリューストアで全件検索や範囲検索を行おうとする場合、複数のキーを特定するための構造として、インデックスを用いることがある。以下、全件検索や範囲検索を実現するためのデータ構造のことも、インデックスと記すことがある。
図8は、分散キーバリューストアにおいてインデックスを用いて範囲検索を行う方法の例を示す説明図である。クライアント60は、ユーザから検索の指示を受信すると、その検索の対象からインデックス(図8に示す例では、index1)を特定し、インデックスが格納されたストア61に、そのインデックスに対応するキーの取得を依頼する。
ストア61から検索結果を受け取ると、クライアント60は、その検索結果のバリュー解析を行い、複数のキー(図8に示す例では、key1,key2,key3)を抽出する。そして、クライアント60は、抽出したキーが格納されたストア(ストア61,ストア62)を特定して、キーごとに特定されるストアに、対応するバリューの取得を依頼する。
しかし、図8に例示する方法の場合、クライアント60は、全てのキーについて、バリューの検索を対応するストアに指示する必要がある。そのため、アプリケーションを実行するクライアント60に、CPU(Central Processing Unit )負荷が集中してしまうという問題がある。
また、特許文献1に記載された分散型データベースシステムでは、データベースノードにプログラム情報を送信してプログラムを実行させることにより、クライアントノードの負荷を軽減させている。しかし、特許文献1に記載された分散型データベースシステムも、キー情報ごとにデータベースノードに対する処理を実行する必要があるため、クライアント側の負荷を十分分散できているとは言い難い。
そこで、本発明は、分散キーバリューストアで用いられる各装置の負荷を分散できる負荷分散システム、負荷分散方法および負荷分散プログラムを提供することを目的とする。
本発明による負荷分散システムは、検索命令を処理するクライアントノードと、キーバリュー形式でデータを格納するストレージから、キーに対応するバリューを検索する1以上のストアノードとを備え、クライアントノードが、バリューに対応するデータとしてストレージに格納された1つ以上のキーまたは1つ以上のインデックスの特定に用いられるインデックスからストアノードを特定し、検索命令を構造化した構文木およびインデックスを、特定されたストアノードに送信するインデックス送信手段を含み、ストアノードが、キーに対応するバリュー、または、インデックスに対応する1つ以上のキーまたは1つ以上のインデックスを検索する検索手段と、受信した構文木に基づいて命令を実行する命令実行手段とを含み、命令実行手段が、キーまたはインデックスを受信したときにそのキーまたはインデックスを検索手段に送信して対応するキーまたはインデックスを検索させ、キーまたはインデックスに対応するバリューの取得命令が受信した構文木に含まれている場合、そのキーまたはインデックスから特定されるストアノードにキーまたはインデックスと構文木とを送信することを特徴とする。
本発明による他の負荷分散システムは、キーバリュー形式でデータを格納するストレージから、キーに対応するバリューを検索する1以上のストアノードを備え、ストアノードが、バリューに対応するデータとしてストレージに格納された1つ以上のキーまたは1つ以上のインデックスの特定に用いられるインデックスからストアノードを特定し、検索命令を構造化した構文木およびインデックスを、特定されたストアノードに送信する送信手段と、受信した構文木に基づいて命令を実行する命令実行手段と、インデックスに対応する1つ以上のキーまたは1つ以上のインデックスを検索する検索手段とを含み、送信手段が、キーに対応するバリューの取得命令が受信した構文木に含まれている場合、キーまたはインデックスから特定されるストアノードにキーまたはインデックスと構文木とを送信し、命令実行手段が、キーまたはインデックスを受信したときにそのキーまたはインデックスを検索手段に送信し、検索手段は、キーまたはインデックスに対応するバリューを検索することを特徴とする。
本発明による負荷分散方法は、キーバリュー形式でデータを格納するストレージから、キーに対応するバリューを検索する1以上のストアノードに対する検索命令を処理するクライアントノードが、バリューに対応するデータとしてストレージに格納された1つ以上のキーまたは1つ以上のインデックスの特定に用いられるインデックスからストアノードを特定し、クライアントノードが、検索命令を構造化した構文木およびインデックスを、特定されたストアノードに送信し、ストアノードが、インデックスに対応する1つ以上のキーまたは1つ以上のインデックスを検索し、ストアノードが、キーまたはインデックスに対応するバリューの取得命令が受信した構文木に含まれている場合、そのキーまたはインデックスから特定されるストアノードにキーまたはインデックスと構文木とを送信し、ストアノードが、キーまたはインデックスを受信したときにそのキーまたはインデックスに対応するバリューを検索することを特徴とする。
本発明による他の負荷分散方法は、キーバリュー形式でデータを格納するストレージからキーに対応するバリューを検索する1以上のストアノードが、バリューに対応するデータとしてストレージに格納された1つ以上のキーまたは1つ以上のインデックスの特定に用いられるインデックスからストアノードを特定し、ストアノードが、検索命令を構造化した構文木およびインデックスを、特定されたストアノードに送信し、ストアノードが、インデックスに対応する1つ以上のキーまたは1つ以上のインデックスを検索し、ストアノードが、キーに対応するバリューの取得命令が受信した構文木に含まれている場合、キーまたはインデックスから特定されるストアノードにキーまたはインデックスと構文木とを送信し、ストアノードが、キーまたはインデックスを受信したときにそのキーまたはインデックスに対応するバリューを検索することを特徴とする。
本発明による負荷分散プログラムは、キーバリュー形式でデータを格納するストレージからキーに対応するバリューを検索するコンピュータに適用される負荷分散プログラムであって、コンピュータに、バリューに対応するデータとしてストレージに格納された1つ以上のキーまたは1つ以上のインデックスの特定に用いられるインデックスからコンピュータを特定し、検索命令を構造化した構文木およびインデックスを、特定されたコンピュータに送信する送信処理、および、インデックスに対応する1つ以上のキーまたは1つ以上のインデックスを検索する検索処理を実行させ、送信処理で、キーに対応するバリューの取得命令が受信した構文木に含まれている場合、キーまたはインデックスから特定されるコンピュータにキーまたはインデックスと構文木とを送信させ、検索処理で、キーまたはインデックスを受信したときにそのキーまたはインデックスに対応するバリューを検索させることを特徴とする。
本発明によれば、分散キーバリューストアで用いられる各装置の負荷を分散できる。
本発明による負荷分散システムの一実施形態を示すブロック図である。 構文木の一例である。 負荷分散システムの動作例を示すフローチャートである。 負荷分散システムの動作の具体例を示す説明図である。 本発明による負荷分散システムの変形例を示すブロック図である。 本発明による負荷分散システムの概要を示すブロック図である。 本発明による負荷分散システムの他の概要を示すブロック図である。 分散キーバリューストアにおいてインデックスを用いて範囲検索を行う方法の例を示す説明図である。
以下、本発明の実施形態を図面を参照して説明する。
図1は、本発明による負荷分散システムの一実施形態を示すブロック図である。本実施形態の負荷分散システムは、クライアント10と、ストア211〜21nとを備えている。ストア211〜21nは、それぞれ、データ記憶部311〜31nに接続される装置である。データ記憶部311〜31nは、それぞれストア211〜21nに含まれていてもよいし、通信ネットワークを介して接続された他の装置に備えられていてもよい。
本実施形態のデータ記憶部311〜31nは、キーバリュー形式のデータを格納する。具体的には、データ記憶部311〜31nは、検索対象の値(バリュー)を、その値に割り当てられるキーと対応付けて記憶する。さらに、データ記憶部311〜31nは、1つ以上のキーを、そのキー群に割り当てられるインデックスと対応付けて記憶する。さらに、データ記憶部311〜31nは、1つ以上のインデックスを、そのインデックス群に割り当てられる他のインデックスと対応付けて記憶してもよい。言い換えると、データ記憶部311〜31nは、1つ以上のキーの集合をバリューとして格納し、そのキーの集合を特定するキーとして、インデックスが対応づけられる。さらに、データ記憶部311〜31nは、1つ以上のインデックスの集合をバリューとして格納し、そのインデックスの集合を特定するキーとして、他のインデックスが対応づけられていてもよい。
例えば、キーバリュー形式のデータを[key][value]と表わすとする。このとき、データ記憶部311〜31nは、以下に例示するデータを記憶してもよい。
[index1][index1−1 index1−2 index1−3]
[index1−1][key1 key2]
[index1−2][key3 key4]
[index1−3][key5 key6]
[key1][value1]
[key2][value2]
[key3][value3]
[key4][value4]
[key5][value5]
[key6][value6]
ここで、key1〜key6は、それぞれ、バリューであるvalue1〜value6に対して割り当てられたキーである。また、index1−1〜3は、それぞれ、バリューに相当するkey1とkey2、key3とkey4、および、key5とkey6に対して割り当てられたキーに相当するインデックスである。また、index1は、バリューに相当するindex1−1〜3に対して割り当てられたキーに相当するインデックスである。このように、インデックスであっても、キーバリュー形式のデータとして格納される場合には、データとして扱うことができる。以下の説明では、インデックスのことをインデックス情報と記すこともある。
ストア211〜21nが、データ記憶部311〜31nを含んでいる場合、ストア211〜21nがキーバリュー形式のデータを格納しているということもできる。また、この場合、ストア211〜21nは、キーバリュー形式のデータを格納するストレージということもできる。
上述するように、検索対象の値(バリュー)ごとにキーが割り当てられる。ストア211〜21n(具体的には、データ記憶部311〜31n)は、キーに基づいて定められる規則に従って値(バリュー)を格納する。そのため、各装置は、キーをもとにストアを特定することで、特定したストアに対して値(バリュー)の取得を指示できる。キーを格納するための規則は任意であり、例えば、hash関数を用いた規則が挙げられる。
同様に、複数のキーに対してインデックスが割り当てられる。具体的には、データ記憶部311〜31nは、インデックス構造自体を、キーバリューストア上の1レコードとして管理する。この構造は、例えば、各レコードへの参照(すなわち、キー)を並べたリストにより実現される。ストア211〜21n(具体的には、データ記憶部311〜31n)は、インデックス情報に基づいて定められる規則に従って複数のキーを格納する。そのため、各装置は、インデックス情報をもとにストアを特定することで、特定したストアに対して複数のキーの取得を指示できる。
また、複数のインデックスに対して他のインデックスが割り当てられてもよい。複数のキーに対してインデックスが割り当てられる場合と同様に、データ記憶部311〜31nは、インデックス構造自体を、キーバリューストア上の1レコードとして管理すればよい。
なお、図1に示す例では、負荷分散システムが、ストアおよびデータ記憶部を、それぞれ2つずつ備えている場合を例示しているが、ストアおよびデータ記憶部の数は2つに限定されず、3つ以上であってもよい。また、各データ記憶部が、インデックスを記憶していてもよい。
クライアント10は、ユーザ等からの検索指示を受け付け、最終的な検索結果を提示する装置である。クライアント10は、構文解析部11と、命令実行部12とを含む。
構文解析部11は、検索命令を解析して構文木を生成する。ここで、構文木とは、値(バリュー)の検索に用いられる命令を構造化した情報である。以下の説明では、複数のキーを特定するためのインデックス情報は、ユーザの検索指示に基づいて予め生成されているものとする。なお、構文解析部11が、ユーザからの検索指示を解析して、検索命令とインデックス情報とを生成してもよい。
以下、構文解析部11が構文解析を行う一例を説明する。ここでは、ユーザの検索指示に対するインデックス情報(index1)は特定されているものとする。また、インデックス情報からは、複数のキーが特定されるものとする。まず、解析に用いられる命令が定義される。ここでは、命令は、以下に例示する内容を示すものとする。
(戻り値1,…,戻り値N):オペレーション名(引数1,…,引数N)
本例では、以下の3つの命令(1)〜(3)が予め定義される。
(1) data:get(data)
(2) (data1, ..., dataN):split(data)
(3) (data1, ..., dataN):loop(operation1, data1, ..., dataN)
命令(1)は、引数に指定されたdataをもとに、対応するdataを取得することを示している。なお、本実施形態において、引数に指定されたdataがキーに相当し、取得するdataが値(バリュー)に相当する。この命令は、キーまたはインデックス情報に基づいてバリューを取得する命令であり、以下の説明では、この命令のことをデータ取得命令またはget オペレーションと記すこともある。
命令(2)は、dataを一定の規則に基づいて、複数のdataに変換することを示している。変換するための一定の規則は任意であり、ここでは詳細な説明は省略する。
命令(3)は、operation1で指定された命令を、引数をdata1 からdataN まで変えて実行することを示している。
構文解析部11は、上記で定義された命令(1)〜(3)を与えられると、対応する構文木を生成する。例えば、index1で特定されるデータを全て取得する場合、以下の命令が与えられる。
loop(get,split(get("index1")))
そのため、構文解析部11は、この命令を解析して構文木を生成する。図2は、構文解析部11が生成する構文木の一例である。本例では、構文解析部11は、図2に例示する構文木を生成する。
ただし、構文解析部11が行う構文解析の方法は、上記方法に限定されない。構文解析部11は、ユーザから広く知られた他の方法を用いて構文木を生成してもよい。また、上記説明では、インデックス情報から、複数のキーが特定されるものとしているが、インデックス情報から、複数のインデックス情報が特定される場合、各インデックス情報について、複数のキーを特定する上記命令を繰り返せばよい。
命令実行部12は、構文解析部11が検索命令を解析することにより生成された構文木に従って命令を実行する。具体的には、命令実行部12は、まず、インデックス情報に基づいてストア211〜21nから、一のストアを特定する。命令実行部12は、構文木に、例えば図2に例示するget オペレーションが含まれている場合に、そのget オペレーションの引数に与えられたdataに基づいて、処理を依頼するストアを特定する。
例えば、図1に例示する各ストアに、それぞれ互いに独立した自然数が0からN(Nは、ストア数−1)まで付与されており、クライアント10(具体的には、命令実行部12)は、その付与された値を知っているとする。この場合、命令実行部12は、「hash(引数) mod ストア数」を計算した結果の値と一致するストアにデータが格納されていると判断し、そのストアにdataを送信してもよい。ただし、ストアの特定方法は、この方法に限定されない。なお、命令実行部12は、上述するsplit やloopなどの命令も、上記定義に従い、一般的な方法に従って実行すればよい。
そして、命令実行部12は、特定したストアに対して、構文木とインデックス情報とを送信する。命令実行部12は、インデックス情報が格納される規則に基づいてストアを特定すればよい。以下の説明では、命令実行部12が構文木およびインデックス情報を送信するストアを、ストア211として説明する。
ここで、命令実行部12は、構文木およびインデックス情報をストア211に送信する際、構文解析部11によって生成された構文木のうち、get オペレーションより上位に存在する構文木と、引数(data)とをストア211に送信する。すなわち、命令実行部12は、送信するインデックスの取得命令を除いた構文木をストア211に送信する。
ストア211〜21nは、それぞれ、命令実行部22と、データ取得部23とを含む。
命令実行部22は、キーまたはインデックス情報を他の装置から受信すると、そのキーまたはインデックス情報を、同一ストア内のデータ取得部23に送信する。また、命令実行部22は、受信した構文木と、データ取得部23が取得した情報とに基づいて、後続の処理を実行する。そして、命令実行部22は、構文木を送信した装置に処理結果(具体的には、検索結果)を返信する。
データ取得部23は、命令実行部22からキーを受信すると、対応する値(バリュー)をデータ記憶部311から取得する。そして、データ取得部23は、取得した値(バリュー)を命令実行部22に送信する。また、データ取得部23は、命令実行部22からインデックス情報を受信すると、対応する複数のキーをデータ記憶部311から取得し、命令実行部22に送信する。
また、命令実行部22は、受信した構文木に、キーに対応する値(バリュー)の取得命令(get オペレーション)が含まれている場合、そのキーから特定されるストアに構文木およびキーを送信する。なお、命令実行部22が受信するキーには、キーまたはインデックス情報が含まれる。キーまたはインデックス情報からストアを特定する方法は、命令実行部12がストアを特定する方法と同様である。なお、そのキーまたはインデックス情報が自身のストアに格納されている場合、命令実行部22は、キーまたはインデックス情報と構文木とをデータ取得部23に送信すればよい。
例えば、一般的な構成では、各ストアは、構文木を他のストアに送信する処理を行う命令実行部22を備えていない。すなわち、一般的な構成では、クライアント10のみが命令実行部12を備えている。そのため、構文木にget オペレーションが含まれている場合、命令実行部12が、各ストアのデータ取得部23にdataを送信して、データの検索指示を行っていた。
しかし、本実施形態では、クライアント10は、構文解析部11による処理と、命令実行部12によるストアの特定処理およびデータの送信処理とを実行すればよいため、クライアント10の負荷を低減できる。また、本実施形態では、命令実行部22がキーまたはインデックス情報から特定されるストアにキーまたはインデックス情報と構文木とを送信する。そのため、1つのストアに処理負荷が集中することを抑制できるため、負荷分散を実現できる。
なお、本実施形態では、構文木とインデックス情報とが命令実行部12からストア211に送信されるが、送信される構文木には、インデックス情報の取得命令は除かれている。そのため、ストア211の命令実行部22は、そのインデックス情報に対応する複数のキーまたはインデックス情報の取得指示を、同一ストア内のデータ取得部23にすることになる。
次に、本実施形態の負荷分散システムの動作を説明する。図3は、本実施形態の負荷分散システムの動作例を示すフローチャートである。図3に示す例では、検索指示から対象とする複数のキーを特定するためのインデックス情報は特定されているものとする。
まず、構文解析部11は、検索命令から構文木を生成する(ステップS11)。命令実行部12は、インデックス情報が格納されているストアを、そのインデックス情報から特定し(ステップS12)、構文木とインデックス情報とを、特定したストア211に送信する(ステップS13)。
次に、ストア211の命令実行部22は、受信したインデックス情報をデータ取得部23に送信し、データ取得部23は、インデックス情報に対応する複数のキーを取得する(ステップS14)。命令実行部22は、取得した複数のキーを構文木に基づいて順に処理する。
具体的には、命令実行部22は、取得したキーの取得命令が構文木に存在する場合(ステップS15におけるYes)、そのキーから特定されるストアに、そのキーおよび構文木を送信する(ステップS16)。なお、このとき、そのキーを取得する取得命令より上位に存在する構文木を送信する。キーおよびその構文木を受信したストアのデータ取得部23は、キーに対応する値(バリュー)を取得し、構文木を送信した装置(ストア)に値を返信する(ステップS17)。以下、ステップS15以降の処理が繰り返される。
一方、取得したキーの取得命令が構文木に存在しない場合(ステップS15におけるNo)、命令実行部22は、取得した値(バリュー)を、クライアント10(具体的には、命令実行部12)に返信する(ステップS18)。
なお、ステップS14において、データ取得部23が複数のキーの代わりに複数のインデックス情報を取得した場合、命令実行部22は、取得した複数のインデックスについて、ステップS13以降の処理を繰り返せばよい。
次に、本実施形態の具体例を説明する。図4は、本実施形態の負荷分散システムの動作の具体例を示す説明図である。図4に示す例では、検索対象の値に対応するキーを特定するためのインデックス「index1」が、ストア211に格納されているものとする。
クライアント10の命令実行部12は、構文解析部11が解析した構文木とindex1とを、ストア211に送信する(ステップS21)。ストア211の命令実行部22は、自身のデータ取得部23に受信したindex1を送信し、データ取得部23は、index1に対応する複数のキー「key1,key2,key3」を取得する(ステップS22)。
ストア211の命令実行部22は、key1、key2およびkey3で特定される値(バリュー)の取得処理を行う。ここで、key1に対応する値(バリュー)は、ストア212に格納され、key2に対応する値(バリュー)は、ストア211に格納され、key3に対応する値(バリュー)は、ストア213に格納されているものとする。
このとき、命令実行部22は、構文木およびkey1をストア212に送信する(ステップS23)。同様に、命令実行部22は、構文木およびkey3をストア213に送信する(ステップS24)。なお、key2は、自身のストアに格納されているため、命令実行部22は、構文木およびkey2を自身のデータ取得部23に送信すればよい。
ストア211の命令実行部22は、自身のデータ取得部23にkey2を送信し、データ取得部23は、key2に対応する値(バリュー)「value2」を取得する(ステップS25)。
また、ストア212の命令実行部22は、受信したkey1を自身のデータ取得部23に送信し、データ取得部23は、key1に対応する値(バリュー)「value1」を取得する(ステップS26)。そして、ストア212の命令実行部22は、取得された「value1」をストア211の命令実行部22に返信する。
同様に、ストア213の命令実行部22は、受信したkey3を自身のデータ取得部23に送信し、データ取得部23は、key3に対応する値(バリュー)「value3」を取得する(ステップS27)。そして、ストア213の命令実行部22は、取得された「value3」をストア211の命令実行部22に返信する。
ストア211の命令実行部22は、各ストアから返信されたバリュー「value1,value2,value3」をクライアント10の命令実行部12に返信する(ステップS28)。
なお、図5に示す例では、index1に複数のキー「key1,key2,key3」が対応付けられている場合を例示した。例えば、index1に複数のインデックス情報「index1−1,index1−2,index1−3」が対応付けられているとする。この場合、ストア211の命令実行部22は、クライアント10の命令実行部12と同様に、各インデックスが格納されているストアを特定し、そのストアにそれぞれインデックス情報を送信し、そのインデックス情報に対応するキーの検索を依頼すればよい。
以上に示すように、クライアントとストアとで、処理が分散して行われるため、処理負荷を分散させることが可能になる。すなわち、本実施形態によれば、クライアント10の命令実行部12が、インデックス情報からストアを特定し、特定したストアに構文木およびインデックス情報を送信する。ストア211の命令実行部22が、インデックス情報に対応する1つ以上のキーまたは1つ以上のインデックス情報をデータ記憶部311から検索する。また、命令実行部22は、キーまたはインデックス情報に対応するバリューの取得命令が受信した構文木に含まれている場合、キーまたはインデックス情報から特定されるストアにキーまたはインデックス情報と構文木とを送信し、受信したストアの命令実行部22が、受信したキーまたはインデックス情報に対応するバリューを検索する。よって、分散キーバリューストアで用いられる各装置の負荷を分散できる。
次に、本実施形態の変形例を説明する。
上記実施形態では、クライアント10の命令実行部12とストア211〜21nの命令実行部22とが、それぞれ有すべき機能について説明したが、命令実行部12と命令実行部22が、同じ機能を有していてもよい。
図5は、本実施形態の負荷分散システムの変形例を示すブロック図である。本変形例の負荷分散システムは、複数のデータ検索装置411〜41nを備えている。
各データ検索装置411〜41nは、構文解析部42と、命令実行部43と、データ取得部44と、データ記憶部511〜51nとを備えている。なお、データ記憶部511〜51nは、他の装置に含まれていてもよい。データ取得部44とデータ記憶部511〜51nは、それぞれ、上記実施形態のデータ取得部23と、データ記憶部311〜31nに対応する。
構文解析部42の内容は、上記実施形態の構文解析部11と同様である。具体的には、各データ検索装置411〜41nのうち、検索命令を受信したデータ検索装置の構文解析部42が、上記実施形態の構文解析部11と同様の処理を行えばよい。すなわち、構文解析部42は、構文木と、インデックス情報またはキーを命令実行部43に送信する。
命令実行部43は、上記実施形態の命令実行部12または命令実行部22と同様である。すなわち、命令実行部43は、構文解析部42からインデックス情報を受信すると、そのインデックス情報に基づいて送信先のストアを特定し、インデックス情報と構文木とを、その特定したストアに送信する。
また、命令実行部43は、他のストアの命令実行部43からキーまたはインデックス情報と、構文木を受信すると、受信したキーまたはインデックス情報をデータ取得部44に送信する。データ取得部44は、受信したキーまたはインデックス情報から、対応する値(バリュー)または、複数のキーを取得する。
さらに、命令実行部43は、受信した構文木に、キーまたはインデックス情報に対応する値(バリュー)の取得命令(get オペレーション)が含まれている場合、そのキーまたはインデックス情報から特定されるストアに、キーまたはインデックス情報と構文木とを送信する。なお、命令実行部43は、上記実施形態と同様に、get オペレーション以外の命令も実行する。
構文解析部42と、命令実行部43と、データ取得部44とは、プログラム(負荷分散プログラム)に従って動作するコンピュータのCPUによって実現される。例えば、プログラムは、データ検索装置411〜41nの記憶部(図示せず)に記憶され、CPUは、そのプログラムを読み込み、プログラムに従って、構文解析部42、命令実行部43およびデータ取得部44として動作してもよい。
また、構文解析部42と、命令実行部43と、データ取得部44とは、それぞれが専用のハードウェアで実現されていてもよい。
このような構成であっても、1つのデータ検索装置に負荷が集中することを抑制できるため、分散キーバリューストアで用いられる各装置の負荷を分散できる。
次に、本発明の概要を説明する。図6は、本発明による負荷分散システムの概要を示すブロック図である。図6に例示する負荷分散システムは、検索命令を処理するクライアントノード80(例えば、クライアント10)と、キーバリュー形式のデータを格納するストレージ(例えば、データ記憶部311〜31n)から、キーに対応するバリューを検索する1以上のストアノード90(例えば、ストア211〜21n)とを備えている。
クライアントノード80は、バリューに対応するデータとしてストレージに格納された1つ以上のキーまたは1つ以上のインデックスの特定に用いられるインデックス(例えば、インデックス情報)から(例えば、hash関数等を用いて)ストアノード90を特定し、検索命令を構造化した構文木およびインデックスを、特定されたストアノード90に送信するインデックス送信手段81(例えば、命令実行部12)を含む。
ストアノード90は、キーに対応するバリュー、または、インデックスに対応する1つ以上のキーまたは1つ以上のインデックスを検索する検索手段91(例えば、データ取得部23)と、受信した構文木に基づいて命令を実行する命令実行手段92(例えば、命令実行部22)とを含む。
命令実行手段92は、キーまたはインデックスを受信したときにそのキーまたはインデックスを検索手段91に送信して対応するキーまたはインデックスを検索させる。また、命令実行手段92は、キーまたはインデックスに対応するバリューの取得命令(例えば、get オペレーション)が受信した構文木に含まれている場合、そのキーまたはインデックスから特定されるストアノード90にキーまたはインデックスと構文木とを送信する。
以上のような構成により、分散キーバリューストアで用いられる各装置の負荷を分散できる。
また、インデックス送信手段81は、送信するインデックスに対応するデータの取得命令を除いた構文木およびそのインデックスを送信し、命令実行手段92は、キーまたはインデックスから特定されるストアノード90に、そのキーまたはインデックスに対応するデータの取得命令を除いた構文木およびそのキーまたはインデックスを送信してもよい。
また、命令実行手段92は、構文木を送信した装置に処理結果を送信してもよい。
また、クライアントノード80は、キーに対応するバリューの取得命令を含む構文木を検索命令から生成する構文解析手段(例えば、構文解析部11)を含んでいてもよい。
また、図7は、本発明による負荷分散システムの他の概要を示すブロック図である。図7に例示する負荷分散システムは、キーバリュー形式でデータを格納するストレージ(例えば、データ記憶部511〜51n)から、キーに対応するバリューを検索する1以上のストアノード70(例えば、データ検索装置411〜41n)を備えている。
ストアノード70は、バリューに対応するデータとしてストレージに格納された1つ以上のキーまたは1つ以上のインデックスの特定に用いられるインデックスからストアノード70を特定し、検索命令を構造化した構文木およびインデックスを、特定されたストアノードに送信する送信手段71(例えば、命令実行部43)と、受信した構文木に基づいて命令を実行する命令実行手段72(例えば、命令実行部43)と、インデックスに対応する1つ以上のキーまたは1つ以上のインデックスを検索する検索手段73(例えば、データ取得部44)とを含む。
送信手段71は、キーに対応するバリューの取得命令が受信した構文木に含まれている場合、キーまたはインデックスから特定されるストアノード70に、キーまたはインデックスと構文木とを送信し、命令実行手段72は、キーまたはインデックスを受信したときに、そのキーまたはインデックスを検索手段73に送信し、検索手段73は、キーまたはインデックスに対応するバリュー(例えば、キーまたはインデックス)を検索する。
以上のような構成であっても、分散キーバリューストアで用いられる各装置の負荷を分散できる。
また、送信手段71は、送信するインデックスに対応するデータの取得命令を除いた構文木およびそのインデックスを送信し、キーまたはインデックスから特定されるストアノードに、そのキーまたはインデックスに対応するデータの取得命令を除いた構文木およびそのキーまたはインデックスを送信してもよい。
10 クライアント
11 構文解析部
12 命令実行部
211〜21n ストア
22 命令実行部
23 データ取得部
311〜31n データ記憶部
411〜41n データ検索装置
42 構文解析部
43 命令実行部
44 データ取得部
511〜51n データ記憶部

Claims (12)

  1. 検索命令を処理するクライアントノードと、
    キーバリュー形式でデータを格納するストレージから、キーに対応するバリューを検索する1以上のストアノードとを備え、
    前記クライアントノードは、
    前記バリューに対応するデータとして前記ストレージに格納された1つ以上のキーまたは1つ以上のインデックスの特定に用いられるインデックスから前記ストアノードを特定し、前記検索命令を構造化した構文木および前記インデックスを、特定されたストアノードに送信するインデックス送信手段を含み、
    前記ストアノードは、
    キーに対応するバリュー、または、前記インデックスに対応する1つ以上のキーまたは1つ以上のインデックスを検索する検索手段と、
    受信した構文木に基づいて前記命令を実行する命令実行手段とを含み、
    前記命令実行手段は、キーまたはインデックスを受信したときに当該キーまたはインデックスを前記検索手段に送信して対応するキーまたはインデックスを検索させ、キーまたはインデックスに対応するバリューの取得命令が受信した構文木に含まれている場合、当該キーまたはインデックスから特定されるストアノードにキーまたはインデックスと前記構文木とを送信する
    ことを特徴とする負荷分散システム。
  2. インデックス送信手段は、送信するインデックスに対応するデータの取得命令を除いた構文木および当該インデックスを送信し、
    命令実行手段は、キーまたはインデックスから特定されるストアノードに、当該キーまたはインデックスに対応するデータの取得命令を除いた構文木および当該キーまたはインデックスを送信する
    請求項1記載の負荷分散システム。
  3. 命令実行手段は、構文木を送信した装置に処理結果を送信する
    請求項1または請求項2記載の負荷分散システム。
  4. クライアントノードは、
    キーに対応するバリューの取得命令を含む構文木を検索命令から生成する構文解析手段を含む
    請求項1から請求項3のうちのいずれか1項に記載の負荷分散システム。
  5. キーバリュー形式でデータを格納するストレージから、キーに対応するバリューを検索する1以上のストアノードを備え、
    前記ストアノードは、
    前記バリューに対応するデータとして前記ストレージに格納された1つ以上のキーまたは1つ以上のインデックスの特定に用いられるインデックスから前記ストアノードを特定し、検索命令を構造化した構文木および前記インデックスを、特定されたストアノードに送信する送信手段と、
    受信した構文木に基づいて前記命令を実行する命令実行手段と、
    前記インデックスに対応する1つ以上のキーまたは1つ以上のインデックスを検索する検索手段とを含み、
    前記送信手段は、キーに対応するバリューの取得命令が受信した構文木に含まれている場合、キーまたはインデックスから特定されるストアノードにキーまたはインデックスと前記構文木とを送信し、
    前記命令実行手段は、前記キーまたはインデックスを受信したときに当該キーまたはインデックスを前記検索手段に送信し、
    前記検索手段は、前記キーまたはインデックスに対応するバリューを検索する
    ことを特徴とする負荷分散システム。
  6. 送信手段は、送信するインデックスに対応するデータの取得命令を除いた構文木および当該インデックスを送信し、キーまたはインデックスから特定されるストアノードに、当該キーまたはインデックスに対応するデータの取得命令を除いた構文木および当該キーまたはインデックスを送信する
    請求項5記載の負荷分散システム。
  7. キーバリュー形式でデータを格納するストレージから、キーに対応するバリューを検索する1以上のストアノードに対する検索命令を処理するクライアントノードが、前記バリューに対応するデータとして前記ストレージに格納された1つ以上のキーまたは1つ以上のインデックスの特定に用いられるインデックスから前記ストアノードを特定し、
    前記クライアントノードが、前記検索命令を構造化した構文木および前記インデックスを、特定されたストアノードに送信し、
    前記ストアノードが、前記インデックスに対応する1つ以上のキーまたは1つ以上のインデックスを検索し、
    前記ストアノードが、キーまたはインデックスに対応するバリューの取得命令が受信した構文木に含まれている場合、当該キーまたはインデックスから特定されるストアノードにキーまたはインデックスと前記構文木とを送信し、
    前記ストアノードが、前記キーまたはインデックスを受信したときに当該キーまたはインデックスに対応するバリューを検索する
    ことを特徴とする負荷分散方法。
  8. クライアントノードが、送信するインデックスに対応するデータの取得命令を除いた構文木および当該インデックスを送信し、
    ストアノードが、キーまたはインデックスから特定されるストアノードに、当該キーまたはインデックスに対応するデータの取得命令を除いた構文木および当該キーまたはインデックスを送信する
    請求項7記載の負荷分散方法。
  9. キーバリュー形式でデータを格納するストレージからキーに対応するバリューを検索する1以上のストアノードが、前記バリューに対応するデータとして前記ストレージに格納された1つ以上のキーまたは1つ以上のインデックスの特定に用いられるインデックスから前記ストアノードを特定し、
    前記ストアノードが、検索命令を構造化した構文木および前記インデックスを、特定されたストアノードに送信し、
    前記ストアノードが、前記インデックスに対応する1つ以上のキーまたは1つ以上のインデックスを検索し、
    前記ストアノードが、キーに対応するバリューの取得命令が受信した構文木に含まれている場合、キーまたはインデックスから特定されるストアノードにキーまたはインデックスと前記構文木とを送信し、
    前記ストアノードが、前記キーまたはインデックスを受信したときに当該キーまたはインデックスに対応するバリューを検索する
    ことを特徴とする負荷分散方法。
  10. ストアノードが、送信するインデックスに対応するデータの取得命令を除いた構文木および当該インデックスを送信し、キーまたはインデックスから特定されるストアノードに、当該キーまたはインデックスに対応するデータの取得命令を除いた構文木および当該キーまたはインデックスを送信する
    請求項9記載の負荷分散方法。
  11. キーバリュー形式でデータを格納するストレージからキーに対応するバリューを検索するコンピュータに適用される負荷分散プログラムであって、
    前記コンピュータに、
    前記バリューに対応するデータとして前記ストレージに格納された1つ以上のキーまたは1つ以上のインデックスの特定に用いられるインデックスから前記コンピュータを特定し、検索命令を構造化した構文木および前記インデックスを、特定された前記コンピュータに送信する送信処理、および、
    前記インデックスに対応する1つ以上のキーまたは1つ以上のインデックスを検索する検索処理を実行させ、
    前記送信処理で、キーに対応するバリューの取得命令が受信した構文木に含まれている場合、キーまたはインデックスから特定される前記コンピュータにキーまたはインデックスと前記構文木とを送信させ、
    前記検索処理で、前記キーまたはインデックスを受信したときに当該キーまたはインデックスに対応するバリューを検索させる
    ための負荷分散プログラム。
  12. コンピュータに、
    送信処理で、送信するインデックスに対応するデータの取得命令を除いた構文木および当該インデックスを送信させ、キーまたはインデックスから特定されるコンピュータに、当該キーまたはインデックスに対応するデータの取得命令を除いた構文木および当該キーまたはインデックスを送信させる
    請求項11記載の負荷分散プログラム。
JP2013207404A 2013-10-02 2013-10-02 負荷分散システム、負荷分散方法および負荷分散プログラム Active JP6160958B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013207404A JP6160958B2 (ja) 2013-10-02 2013-10-02 負荷分散システム、負荷分散方法および負荷分散プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013207404A JP6160958B2 (ja) 2013-10-02 2013-10-02 負荷分散システム、負荷分散方法および負荷分散プログラム

Publications (2)

Publication Number Publication Date
JP2015072563A JP2015072563A (ja) 2015-04-16
JP6160958B2 true JP6160958B2 (ja) 2017-07-12

Family

ID=53014894

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013207404A Active JP6160958B2 (ja) 2013-10-02 2013-10-02 負荷分散システム、負荷分散方法および負荷分散プログラム

Country Status (1)

Country Link
JP (1) JP6160958B2 (ja)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06266761A (ja) * 1993-03-15 1994-09-22 Lion Corp 分散型コンピュータシステム
JP5072871B2 (ja) * 2009-01-28 2012-11-14 株式会社東芝 構造化文書検索システム、装置、及び方法
WO2010098034A1 (ja) * 2009-02-24 2010-09-02 日本電気株式会社 分散データベース管理システムおよび分散データベース管理方法
JP5321682B2 (ja) * 2009-03-31 2013-10-23 日本電気株式会社 ストレージシステムとストレージアクセス方法とプログラム
JP2012168781A (ja) * 2011-02-15 2012-09-06 Nippon Telegr & Teleph Corp <Ntt> 分散型データストアシステム及び分散型データストアシステムにおけるレコード管理方法
US20140222873A1 (en) * 2011-09-27 2014-08-07 Nec Corporation Information system, management apparatus, method for processing data, data structure, program, and recording medium

Also Published As

Publication number Publication date
JP2015072563A (ja) 2015-04-16

Similar Documents

Publication Publication Date Title
US10666527B2 (en) Generating specifications for microservices implementations of an application
US10733055B1 (en) Methods and apparatus related to graph transformation and synchronization
US9372891B2 (en) System and method for querying hybrid multi data sources
US11157473B2 (en) Multisource semantic partitioning
US9639575B2 (en) Method and system for processing data queries
US9177021B2 (en) Relational query planning for non-relational data sources
US8392465B2 (en) Dependency graphs for multiple domains
CA2977042A1 (en) System and method for generating an effective test data set for testing big data applications
US9424311B2 (en) Query routing based on complexity class determination
Nagib et al. SIGHTED: a framework for semantic integration of heterogeneous sensor data on the internet of things
US11238046B2 (en) Information management device, information management method, and information management program
US20150254474A1 (en) Generation of analysis reports using trusted and public distributed file systems
CN108228229B (zh) 一种Maven依赖的管理方法以及系统
JP2009181546A (ja) コーディネータサーバ、データ割当方法及びプログラム
JP6457903B2 (ja) Api変換テーブル生成装置
US11461333B2 (en) Vertical union of feature-based datasets
JP5844895B2 (ja) データの分散検索システム、データの分散検索方法及び管理計算機
GB2537670A (en) A query mediator, a method of querying a polyglot data tier and a computer program executable to carry out a method of querying a polyglot data tier
JP3874706B2 (ja) アプリケーションプログラムプラン生成装置、アプリケーションプログラムプラン生成方法、プログラム及び記録媒体
El Kaed et al. Forte: A federated ontology and timeseries query engine
JP6160958B2 (ja) 負荷分散システム、負荷分散方法および負荷分散プログラム
US8538935B2 (en) One-to-one and one-to-many relationships in databases
US20120102025A1 (en) Searching apparatus, searching method, and computer program product
KR20120085375A (ko) 로그데이터 분석시스템
US20120078923A1 (en) Scripting using new ordering algorithm

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160902

TRDD Decision of grant or rejection written
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170421

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170509

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170602

R150 Certificate of patent or registration of utility model

Ref document number: 6160958

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150