JP2018081603A - Kvデータ構造変換装置、kvデータ構造変換方法、および、kvデータ構造変換プログラム - Google Patents

Kvデータ構造変換装置、kvデータ構造変換方法、および、kvデータ構造変換プログラム Download PDF

Info

Publication number
JP2018081603A
JP2018081603A JP2016224694A JP2016224694A JP2018081603A JP 2018081603 A JP2018081603 A JP 2018081603A JP 2016224694 A JP2016224694 A JP 2016224694A JP 2016224694 A JP2016224694 A JP 2016224694A JP 2018081603 A JP2018081603 A JP 2018081603A
Authority
JP
Japan
Prior art keywords
data
column
structure conversion
value
statistical information
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.)
Pending
Application number
JP2016224694A
Other languages
English (en)
Inventor
知生 海老山
Tomoo Ebiyama
知生 海老山
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
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP2016224694A priority Critical patent/JP2018081603A/ja
Publication of JP2018081603A publication Critical patent/JP2018081603A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

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

Abstract

【課題】 ユーザが実行するクエリによるキーバリューストアへのアクセス傾向が変わっても性能低下を抑制する。【解決手段】 表の行に含まれるデータであるレコードデータの各々が、当該表の第1の列の値をレンジキーとして、レンジキーの値順に所定数ずつ平衡木の各葉ノードに格納されているKVデータを記憶するKVデータ記憶手段と、クエリで指定された表の列の値が指定された範囲にあるレコードデータを、KVデータから検索して更新または参照処理を実行する問い合せ処理手段と、列対応に、当該列がクエリで指定された回数を含む統計情報を蓄積する統計情報収集手段と、回数が最大の列(以降、第2の列)を選択し、KVデータ記憶手段内のKVデータを第2の列の値をレンジキーとするKVデータへ、変換するデータ構造変換手段と、を備える。【選択図】 図1

Description

本発明は、ユーザが実行するクエリによるデータへのアクセス傾向が変わっても性能低下が抑制される、KVデータ構造変換装置、KVデータ構造変換方法、および、KVデータ構造変換プログラム、に関する。
特許文献1は、KVS(キー Value Store)に対して表形式のデータをKV(キー Value)データに変換して格納するシステムを開示する。このようなシステムは、あらかじめ表形式のデータをどのようにKVデータに変換するかをユーザに定義させる。表形式のデータをKVデータに変換する方法にはいくつかの種類があり、その中でレンジクラスタと呼ばれる構造がある。
レンジクラスタは、表形式のデータを複数のKVデータで構成されるB-Tree(平衡木とも呼ぶ)の構造で表す方法であり、B-Treeのリーフノードにレコードデータが格納される。このリーフノードに格納されるレコードデータは、ユーザが任意に決めた列の値(レンジキーと呼ぶ)によってソートされて格納される。このため、レンジキーをWHERE句に指定した参照や更新処理は、B-Tree内を効率的に探索でき、高速化されるという特徴を持っている。
特開2015-184685号公報
特許文献1が開示するようなシステムでは、ユーザが、どの列の値をレンジキーに設定するかを定義し、表形式のデータがKVデータに変換されてストレージに格納されると、そのKVデータは、後から別のKVデータに変更することができない。このため、ユーザが最初に定義したレンジキーが、ユーザが実行するワークロードに適したレンジキーでない場合に性能を十分に発揮できないという問題があった。また、運用開始時のワークロードに対しては適切なレンジキーの設定であっても、ワークロードが変わった場合に十分な性能が発揮できなくなるという問題があった。
本発明は、上記課題を解決し、ユーザが実行するクエリによるデータへのアクセス傾向が変わっても性能低下が抑制される、KVデータ構造変換装置、KVデータ構造変換方法、および、KVデータ構造変換プログラムを提供することを目的とする。
本発明の1実施の形態のKVデータ構造変換装置は、表の行に含まれるデータであるレコードデータの各々が、当該表の第1の列の値をレンジキーとして、前記レンジキーの値順に所定数ずつ平衡木の各葉ノードに格納されているKVデータを記憶するKVデータ記憶手段と、クエリで指定された前記表の前記列の値が指定された範囲にある前記レコードデータを、前記KVデータから検索して更新または参照処理を実行する問い合せ処理手段と、前記列対応に、当該列が前記クエリで指定された回数を含む統計情報を蓄積する統計情報収集手段と、前記回数が最大の前記列(以降、第2の前記列)を選択し、前記KVデータ記憶手段内の前記KVデータを、第2の前記列の値を前記レンジキーとする前記KVデータへ変換するデータ構造変換手段と、を備える。
本発明の1実施の形態のKVデータ構造変換方法は、表の行に含まれるデータであるレコードデータの各々が、当該表の第1の列の値をレンジキーとして、前記レンジキーの値順に所定数ずつ平衡木の各葉ノードに格納されているKVデータをKVデータ記憶手段に記憶し、クエリで指定された前記表の前記列の値が指定された範囲にある前記レコードデータを、前記KVデータから検索して更新または参照処理を実行し、前記列対応に、当該列が前記クエリで指定された回数を含む統計情報を蓄積し、前記回数が最大の前記列(以降、第2の前記列)を選択し、前記KVデータ記憶手段内の前記KVデータを、第2の前記列の値を前記レンジキーとする前記KVデータへ変換する。
本発明の1実施の形態のKVデータ構造変換プログラムは、表の行に含まれるデータであるレコードデータの各々が、当該表の第1の列の値をレンジキーとして、前記レンジキーの値順に所定数ずつ平衡木の各葉ノードに格納されているKVデータをKVデータ記憶手段に記憶する記憶処理と、クエリで指定された前記表の前記列の値が指定された範囲にある前記レコードデータを、前記KVデータから検索して更新または参照処理を実行する問い合せ処理と、前記列対応に、当該列が前記クエリで指定された回数を含む統計情報を蓄積する統計情報収集処理と、前記回数が最大の前記列(以降、第2の前記列)を選択し、前記KVデータ記憶手段内の前記KVデータを、第2の前記列の値を前記レンジキーとする前記KVデータへ変換するデータ構造変換処理と、をコンピュータに実行させる。
本発明にかかるKVデータ構造変換装置は、ユーザが実行するクエリによるデータへのアクセス傾向が変わっても性能低下を抑制する。
図1は、第1の実施の形態にかかるKVデータ構造変換装置100の構成を示す図である。 図2は、クライアント300からクエリが入力された際の問い合わせ処理部101の動作を説明したフローチャートである。 図3は、表形式のデータ例を示す。 図4は、図3の表形式データがレンジクラスタ構造でKVデータ群に変換された場合のKVデータ群を示す。 図5はKVデータのデータ構造が変換される際の動作を説明したフローチャートである。 図6は、統計情報記憶部204に格納されている統計情報の例を示す。 図7は、システムカタログ205に格納されている情報の例(その1)を示す。 図8は、システムカタログ205に格納されている情報の例(その2)を示す。 図9は、差分データ記憶部202に格納される更新データの例を示す。 図10は、図4で示したログID列がレンジキー列であるKVデータ群を、ログ発生時間列をレンジキー列とするKVデータ群に変換した例を示す。 図11は、第2の実施の形態にかかるKVデータ構造変換装置100の構成を示す図である。 図12は、第3の実施の形態にかかるKVデータ構造変換装置100の構成を示す図である。 図13は、第4の実施の形態にかかるKVデータ構造変換装置100の構成を示す図である。 図14は、本実施形態における構造変換計画作成部107の動作を示すフローチャートである。 図15は、システムカタログ205に格納されている変換履歴の構成を示す。 図16は、コンピュータ装置600の構成図である。 図17は、第5の実施の形態にかかるKVデータ構造変換装置100の構成を示す図である。
<第1の実施の形態>
<構成>
図1は、第1の実施の形態にかかるKVデータ構造変換装置100の構成を示す図である。KVデータ構造変換装置100は、通信網を経由して、1台以上のクライアント300と接続されている。
KVデータ構造変換装置100は、問い合わせ処理部101、統計情報収集部102、データ構造変換部103、KVデータ削除部104、KVデータ記憶部201、差分データ記憶部202、変換データ記憶部203、統計情報記憶部204、およびシステムカタログ205を備える。さらにデータ構造変換部103は、内部に構造変換判断部113およびバリュー部変更部123を備える。
問い合わせ処理部101は、クライアント300からクエリを受け付け、当該クエリを処理する部である。問い合わせ処理部101は、クライアント300からクエリが入力されると、処理対象のKV(Key Value)データをKVデータ記憶部201から取得する。
問い合わせ処理部101は、クライアント300から入力されたクエリが参照クエリ(SELECT)の場合、KVデータ記憶部201から取得したKVデータを結果としてクライアント300に返却する。クライアント300から入力されたクエリが更新クエリ(INSERT、UPDATE、DELETE)の場合、問い合わせ処理部101は、KVデータ記憶部201から取得したKVデータを更新してKVデータ記憶部201に書き戻し、処理結果をクライアント300に返却する。
また、問い合わせ処理部101は、入力されたクエリによるKVデータのアクセス傾向などを解析する為の統計情報を統計情報収集部102に渡す。
KVデータ変換処理が実行されている間は、問い合わせ処理部101は、差分データ記憶部202や変換データ記憶部203にも同様にアクセスする。差分データ記憶部202や変換データ記憶部203にアクセスする手順については後述する。
統計情報収集部102は、クライアント300から入力されたクエリによるKVデータのアクセス傾向などを解析する為の統計情報を収集する部である。収集される統計情報は、例えば、KVデータを選択するために利用されたクラスタキー値の情報や、検索対象を絞り込むために利用された属性情報や、KVデータ記憶部201から取得したKVデータの個数や、処理対象のレコードデータを含むKVデータの個数である。
統計情報収集部102で収集された統計情報は、統計情報記憶部204に書き込まれる。
データ構造変換部103は、統計情報記憶部204に記憶されている統計情報を基にKVデータ記憶部201に格納されているKVデータの構造を変換する部である。データ構造変換部103は、動作を開始すると、問い合わせ処理部101にデータ構造変換処理が実行中であることを通知する。
問い合わせ処理部101は、データ構造変換部103から通知を受け取ると、以後、更新データをKVデータ記憶部201に書き込むのではなく、差分データ記憶部202に書き込むようになる。また、データ参照時には、問い合わせ処理部101はKVデータ記憶部201と差分データ記憶部202を参照し、クライアント300に結果を返却する。
次にデータ構造変換部103は、KVデータ記憶部201から構造を変換する対象となるKVデータを抽出して構造を変換したのち、変換データ記憶部203に変換後のKVデータを格納する。このとき、統計情報に基づいてKVデータの構造を変換するかどうかを判断するのが、構造変換判断部113であり、実際にKVデータのバリュー部を変更することで構造を変換するのがバリュー部変更部123である。
KVデータ構造変換部103は、KVデータ記憶部201に格納されているKVデータ内の変換対象データをすべて変換したとき、問い合わせ処理部101にデータ構造変換処理の1段階目のフェーズが完了したことを通知する。問い合わせ処理部101は、データ構造変換部103からこの通知を受け取ると、以後、更新データを変換データ記憶部203に書き込むようになる。また、データ参照時には、問い合わせ処理部101は変換データ記憶部203と差分データ記憶部202を参照し、クライアント300に結果を返却する。
次にデータ構造変換部103は、差分データ記憶部202に記憶されている更新データを、変換データ記憶部203に格納されている変換後のKVデータに反映するためにマージ処理を行う。このマージ処理を行うものバリュー部変更部123である。
データ構造変換部103は。差分データ記憶部202内の更新データをすべてマージした後は、問い合わせ処理部101にデータ構造変換処理の2段階目のフェーズが完了したことを通知する。問い合わせ処理部101は、データ構造変換部103からの通知を受け取ると、以後、データ参照時には、変換データ記憶部203のみからデータを参照してクライアント300に結果を返却する。また、データ構造変換部103は、差分データ記憶部202内の更新データをすべてマージした後、KVデータ削除部104に変換済みのKVデータの削除を依頼する。
KVデータ削除部104は、KVデータ記憶部201から変換前のKVデータを削除し、差分データ記憶部202から更新データを削除する部である。
KVデータ記憶部201は、クライアント300から参照・更新されるKVデータを記憶する部である。ユーザが定義した表形式のデータが、KVデータの形式に変換されて格納されている。
差分データ記憶部202はデータ構造変換部103が動作を開始したのち、問い合わせ処理部101に入力された更新クエリの結果を記憶する部である。
変換データ記憶部203は、データ構造変換部103がKVデータ記憶部201に記憶されているKVデータの構造を変換した結果のKVデータを記憶する部である。
なお、KVデータ記憶部201、差分データ記憶部202、変換データ記憶部203はすべてKVS(Key Value Store)で構成されている。図1ではそれぞれ別の記憶装置として記載しているが、KVデータ記憶部201、差分データ記憶部202、変換データ記憶部203に格納されているデータはすべて1つのKVS、例えばKVデータ記憶部201、の中に入っていても良い。
このため、KVデータの構造が変換され、変換データ記憶部203に格納されたデータを、再度別のKVデータ構造に変換する場合、データ構造変換部103は、KVデータ記憶部201と変換データ記憶部203のソースとデスティネーションの役割を交互に変えて使用する。すなわち、データ構造変換部103は、変換前のKVデータが変換データ記憶部203に格納されているのではなく、KVデータ記憶部201に格納されているものと見なして同様に処理を実行することができる。
統計情報記憶部204は、統計情報収集部102が収集した統計情報を記憶する部である。
システムカタログ205は、KVデータ記憶部201や差分データ記憶部202や変換データ記憶部203に保存されているKVデータのKVデータ構造に関する情報を保存する部である。システムカタログ205には、各データベースに存在するテーブルの情報と、そのテーブルのデータがどのようにKVデータに変換されているかを示す情報と、KV構造が最後に変換された時間に関する情報とが保存されている。
ここで、KVデータ構造変換装置100の問い合わせ処理部101、統計情報収集部102、データ構造変換部103(構造変換判断部113およびバリュー部変更部123を含む)、並びに、KVデータ削除部104は、論理回路で構成される。差分データ記憶部202、変換データ記憶部203、統計情報記憶部204、および、システムカタログ205は、ディスク装置、または、半導体記憶装置等の記憶装置である。
KVデータ構造変換装置100は、コンピュータ装置600により実現されても良い。図16は、コンピュータ装置600の構成図である。コンピュータ装置600は、バス640で相互に接続された、プロセッサ610、主記憶部630、および、外部記憶装置620を備える。プロセッサ610は、バス640を経由して、主記憶部630、および、外部記憶装置620に対してデータの読み書きを行う。また、プロセッサ610は、主記憶部630に格納されているプログラム650を実行する。なお、プログラム650は、当初外部記憶装置620に格納されており、コンピュータ装置600の初期設定時に、プロセッサ610が外部記憶装置620から主記憶部630にロードしても良い。
ここで、主記憶部630は半導体メモリ装置である。外部記憶装置620はディスク装置、または、半導体記憶装置等の記憶装置である。
プロセッサ610は、プログラム650を実行することにより、問い合わせ処理部101、統計情報収集部102、データ構造変換部103(構造変換判断部113およびバリュー部変更部123を含む)、並びに、KVデータ削除部104として機能する。すなわち、プロセッサ610は、プログラム650を実行することにより、問い合わせ処理部101、統計情報収集部102、データ構造変換部103(構造変換判断部113およびバリュー部変更部123を含む)、並びに、KVデータ削除部104が行う処理を実行する。
外部記憶装置620は、差分データ記憶部202、変換データ記憶部203、統計情報記憶部204、および、システムカタログ205として使用されても良い。
<動作>
次に、KVデータ構造変換装置100の動作について説明する。図2は、クライアント300からクエリが入力された際の問い合わせ処理部101の動作を説明したフローチャートである。
まず、クエリ入力のステップS001で、クライアント300がKVデータ構造変換装置100に対してクエリを入力すると、問い合わせ処理部101が受信する。KVデータ取得のステップS002で、問い合わせ処理部101は入力されたクエリを解析した結果と、システムカタログ205から取得した情報を基にアクセス対象のKVデータを特定し、KVデータ記憶部201から処理対象データを取得する。
次に、問い合わせ処理部101はクエリの解析結果から、入力されたクエリが挿入処理を行うクエリ(INSERT)であるかどうかを判断する(ステップS003)。挿入処理を行うクエリである場合、問い合わせ処理部101は、クエリを解析した結果とシステムカタログ205から取得した情報を基にデータの挿入処理を行い(ステップS004)、挿入処理の結果をクライアント300に返却する(ステップS005)。データ挿入のステップS004で挿入されたデータは、KVデータ記憶部201に書き込まれる。
また、データ挿入のステップS004では、問い合わせ処理部101はシステムカタログ205に格納されている情報を取得し、挿入されるデータに含まれるクラスタキー値がシステムカタログ205に存在しない値の場合は、システムカタログ205の情報を更新する。システムカタログ205に格納されている情報とその情報の更新の詳細については後述する。
ここで、KVデータ記憶部201が記憶しているKVデータの構造について説明する。KVデータ構造変換装置100の、例えばデータ構造変換部103は、初期設定時に、ユーザが定義する表形式のデータをKVデータに変換してKVデータ記憶部201に格納する。表形式のデータをKVデータに変換する方法の1つにレンジクラスタと呼ばれる構造がある。
図3は、表形式のデータ例を示す。図3に示すテーブルの主キーはログID列であるとする。表形式のデータをレンジクラスタ構造に変換するためには、予めクラスタを構成するためのキー列であるクラスタキー列と、データをソートして格納するための基準となる列であるレンジキー列が設定されている。クラスタキー列やレンジキー列は、最初はユーザがテーブルごとに任意に設定する。システムカタログ205は、初期設定時に、ユーザが設定したクラスタキー列やレンジキー列の情報を記憶している。
図3に示す表形式のデータのクラスタキー列は、例えば機器名列、レンジキー列は、例えばログID列であるとする。図4は、図3の表形式データがレンジクラスタ構造でKVデータ群に変換された場合のKVデータ群を示す。
図4が示すKVデータ群は、図3が示す表形式のデータのうち、機器名列の値が機器Aである行データを、レンジクラスタ構造のKVデータに変換したものである。このようにレンジクラスタ構造は、クラスタキー列の値ごとに表形式のデータから行データを抜き出して、各行データ(レコードデータとも、呼ぶ)をB-Tree(平衡木とも呼ぶ)形式のKVデータ群に変換したデータ構造である。図4において、KVデータの各々は、長方形で表されており、B-Treeのノードを構成している。
なお、図3に示す表形式のデータの機器名列は、機器Bや機器Cといった値も含むので、図4に示すKVデータ群以外にも、機器Bに対応するB-Tree構造のKVデータ群、および、機器Cに対応するB-Tree構造のKVデータ群が存在する。以降、図4に示す機器Aに対応するKVデータ群について、詳細に説明する。
図4の一番上に記載のKVデータは、ルートノードと呼ばれるノードであって、機器Aに関連するKVデータ群にアクセスする際には必ず最初にアクセスされるKVデータである。ルートノードのキー値(図におけるkey列の値)はクラスタキー列の値となる。図4に示す例では、機器Aがルートノードのキー値となる。ルートノードのバリュー(図のValue列の値)には、下位のノードのノードIDと下位のノードが受け持つレンジキー値の範囲を、各下位のノードに関連付けて保持している。
上から二番目、すなわち深さが2の段に記載のKVデータは、中間ノードと呼ばれるノードであって、さらに下位のノードへのポインタの役割を果たすノードである。中間ノードのキー値は、システムによって割り振られたノードIDの値である。また、中間ノードのバリューには、下位のノードのノードIDと下位のノードが受け持つレンジキー値の範囲を、各下位のノードに関連付けて保持している。また、中間ノードは、ルートノードと違い、同じ段の一つ右隣のノードIDも保持している。
上から三番目、すなわち深さが3の段に記載のKVデータは、リーフノードと呼ばれるノードであって、このノードに図3に示す表形式のレコードデータに相当するデータが格納される。リーフノードのキー値は、システムによって割り振られたノードIDの値である。また、リーフノードのバリューは、表形式のレコードデータに相当するデータをいくつか包含している。またリーフノードは、中間ノードと同様に一つ右隣のノードIDを保持している。
リーフノードが保持するレコードデータの個数は、ユーザによってあらかじめ定義される。たとえば、1つのリーフノードに100個のレコードデータが格納される、とユーザが定義すると、図4のリーフノード1つに格納されるレコードデータの個数は100個となる。
次に、図4で示されるようなレンジクラスタ構造のKVデータ群に対して、問い合わせ処理部101がどのようにアクセスするのかを説明する。例えば、次のクエリ例1のようなクエリがクライアント300から問い合わせ処理部101に入力されたとする。
(クエリ例1)
SELECT * FROM table WHERE 機器名=’機器A’ AND ログID = 203

このクエリは、WHERE句に機器名=’機器A’という条件がある。従って、問い合わせ処理部101は、図4に示されるKVデータ群にアクセスする。まず、問い合わせ処理部101は、機器Aという値から、キー値が機器Aであるルートノードにアクセスする。このクエリはWHERE句の条件にレンジキー列であるログIDを含んでいるので、問い合わせ処理部101は、ルートノードのバリューに保持されているデータ範囲を調べる。
その結果、問い合わせ処理部101は、ログID=203のデータはノードID1のノードが担当していることを検出し、ノードID1をキー値に持つKVデータにアクセスする。問い合わせ処理部101は、ノードID1の中間ノードに対しても同様にバリューに保持されているデータ範囲を調べる。その結果、ログID=203のデータはノードID5のノードが担当していることが分かるので、問い合わせ処理部101は、ノードID5をキー値に持つKVデータにアクセスする。
ノードID5のノードはリーフノードなので、このノードのバリューに格納されているデータを問い合わせ処理部101は取得することになる。最終的に、問い合わせ処理部101は、バリューに含まれるレコードデータの中から、ログID=203に合致するレコードデータをクライアント300に返却する。
このように、この例では、問い合わせ処理部101は、ルートノードと、キー値がノードID1の中間ノードと、キー値がノードID5のリーフノードの3つのKVデータにアクセスすることでクライアント300に結果を返すことができる。
次に、例えば、次のクエリ例2のようなクエリが、クライアント300から問い合わせ処理部101に入力されたとする。
(クエリ例2)
SELECT * FROM table WHERE 機器名=’機器A’ AND ( 50 < ログID AND 300 > ログID )

この場合も、問い合わせ処理部101は、まずルートノードにアクセスし、WHERE句に含まれるレンジキー列であるログIDの範囲条件から、ノードID1のノードにアクセスすれば良いと判断する。次いで、問い合わせ処理部101は、ノードID1のノードにアクセスし、次に「50 < ログID」という条件から、ノードID4のノードにアクセスすれば良いと判断する。
さらに、問い合わせ処理部101は、ノードID4のノードにアクセスし、ノードID4のノードが担当するデータ範囲の最大が300より小さいことを判断し、隣のノードにもアクセスする必要があると判断する。この判断は、300 > ログID」という条件に由来する。ノードID4のノードのバリューには右隣のノードのノードID(ノードID5)が保持されているので、問い合わせ処理部101は、ノードID5のノードにアクセスすることができる。
問い合わせ処理部101は、ノードID5のノードにアクセスし、ノードID5のノードが担当するデータ範囲の最大が300より大きいことから、これ以上ノードを探索する必要がないことを判断する。結果的に、問い合わせ処理部101は、ノードID4とノードID5のノードのバリューに格納されているデータを取得する。
最終的に問い合わせ処理部101は、ノードID4とノードID5のノードのバリューに含まれるレコードデータの中から「50 < ログID AND 300」に合致するレコードデータをクライアント300に返却する。
この例では、ルートノードと、キー値がノードID1の中間ノードと、キー値がノードID4のリーフノードと、キー値がノードID5のリーフノードの4つのKVデータにアクセスすることで、問い合わせ処理部101は、クライアント300に結果を返すことができている。
最後に、例えば、次のクエリ例3のようなクエリがクライアント300から問い合わせ処理部101に入力されたとする。
(クエリ例3)
SELECT * FROM table WHERE 機器名=’機器A’ AND ポート番号=80

この場合も、問い合わせ処理部101は、まずルートノードにアクセスする。そして、問い合わせ処理部101は、WHERE句にはレンジキー列であるログIDの条件が含まれないので、ノード全体を探索する必要がある、すなわち、ノード全体を探索しないとポート番号=80を満たすレコードをすべて抽出することができないと判断する。
このため、問い合わせ処理部101は、無条件にノードID1のノードにアクセスし、その次は無条件にノードID4のノードにアクセスする。ノードID4のノードはリーフノードなので、問い合わせ処理部101は、ここからは右隣のノードに順番にアクセスしていく。この検索は、最終的に一番右端のリーフノードまで探索したところで終了となる。
問い合わせ処理部101は、全リーフノードのバリューに格納されているデータを参照して、その中からポート番号=80という条件を満たすレコードだけを抜き出してクライアント300に返却する。
この例では、問い合わせ処理部101は、ルートノードと、キー値がノードID1の中間ノードと、全リーフノードのKVデータにアクセスしないとクライアント300に結果を返すことができない。
レンジクラスタ構造では、レンジキーによってリーフノード内のレコードデータがソートされて格納されている。このため、レンジキーの値がWHERE句の条件に含まれているとき、問い合わせ処理部101は、少数のKVデータにアクセスするだけで結果をクライアント300に返却することができる。逆に、レンジキーの値がWHERE句の条件に含まれていない場合、問い合わせ処理部101は、全てのリーフノードにアクセスする必要がある。従って、後者の場合、前者と比べてクエリの処理性能(応答時間、スループット)が悪化する。
なお、図4が示す例は、ルートノード、中間ノード、リーフノードの3層で構成されるが、レコードデータの量が多くなり、中間ノードが多段になっても良い。
KVデータ記憶部201には、最初ユーザが定義したKVデータ構造に基づいて表形式のデータがレンジクラスタ構造のKVデータに変換されて格納されている。
図2の説明に戻って、クライアント300から入力されたクエリが挿入処理を行うクエリでない場合、統計情報収集のステップS006で問い合わせ処理部101が統計情報収集部102に対して統計情報を入力する。
統計情報として収集する項目は、例えば、以下のa)乃至d)項目である。
a)KVデータにアクセスするために利用されたクラスタキー値の情報
b)検索対象を絞り込むために利用された属性情報、例えば、WHERE句で指定された列と値の情報
c)処理対象となるレコードデータを含むKVデータの個数、すなわち、検索の目的となっていたKVデータの個数
d)KVデータ記憶部201から取得したKVデータの個数、すなわち、処理対象となるレコードデータを含むKVデータを取得する過程で経由したルート、中間及びリーフのノードの個数
なお、この他に有用な統計情報がある場合、統計情報として収集される項目は、それらを含んでいても良い。
統計情報収集部102は、問い合わせ処理部101から統計情報が入力されると、その情報を統計情報記憶部204に格納する。
次に、問い合わせ処理部101は、入力されたクエリが更新処理を行うクエリ(UPDATE、DELETE)であるか、参照処理を行うクエリ(SELECT)であるかを判断する(ステップS007)。問い合わせ処理部101は、更新処理を行うクエリである場合は、データの更新処理を行い(ステップS008)、更新処理の結果をクライアント300に返却する(ステップS009)。
データ更新のステップS008で更新されたデータは、KVデータ記憶部201に書き込まれる。入力されたクエリが参照処理を行うクエリである場合、問い合わせ処理部101は、ステップS002で取得したKVデータを参照処理結果としてクライアント300に返却する(ステップS010)。
図5はKVデータのデータ構造が変換される際の動作を説明したフローチャートである。図5を用いて、KVデータの構造が変換される際の動作について説明する。
まず、統計情報取得のステップS101で、データ構造変換部103は統計情報記憶部204に格納されている統計情報を取得する。
次に、システムカタログ205取得のステップS102で、データ構造変換部103はシステムカタログ205に格納されている情報を取得する。なお、データ構造変換部103が統計情報記憶部204やシステムカタログ205から情報を取得するタイミングは、ユーザが任意のタイミングで指示を出しても良いし、タイマーなどによって定期的に動作するようになっていても良い。
次に、構造変換判断部113は。ステップS101とS102で取得した情報からKVデータ構造変換対象のB-Treeを構成するKVデータ群があるかどうかを判定する(ステップS103)。構造変換判断部113は、あるKVデータ群がKVデータ構造変換の対象であるかどうかを、例えば以下のように判定する。
図6は、統計情報記憶部204に格納されている統計情報の例を示す。図6の統計情報は、処理対象となったテーブル、クラスタキーの値、KVデータにアクセスした時間、WHERE句で絞り込みに利用した属性、KVデータ記憶部201から取得したKV数、およびクエリによって処理されたレコードを含んでいるKV数を含む。統計情報収集部102は、クエリ(ただし、INSERTクエリを除く)が処理される度に、これらの統計情報を追加していく。
KVデータ記憶部201から取得したKV数として記録する統計情報は、ルートノードや中間ノードの個数を含んでいてもても良いが、図6の例では、問い合わせ処理部101は、KVデータ記憶部201から取得したKV数としてリーフノードの個数のみをカウントしている。すなわち、ルートノードや中間ノードはカウントされていない。
図7および図8はシステムカタログ205に格納されている情報の例を示す。図7に示される情報は、ユーザが最初に各表形式データ(テーブル)に対してクラスタキー列とレンジキー列を設定した際にシステムカタログ205に格納される初期情報である。図7の情報は、クラスタキー列として機種名列が、レンジキー列としてログID列が登録されていることを示す。
図8は、テーブルに含まれるクラスタキー値の情報、クラスタキー値ごとに構成されるB-Tree構造のKVデータ群のレンジキー列に関する情報、KV構造が変換された時間に関する情報がシステムカタログ205に格納されていることを表している。
なお、データが挿入される際、システムカタログ205に、それまでに記録されていないクラスタキー値を持つデータが挿入される場合がある。この時、問い合わせ処理部101は、システムカタログ205に新たな情報を追加する。テーブル情報として処理対象であるテーブル名が、クラスタキー値情報として挿入データに含まれるクラスタキー値が、レンジキー列情報として図7に示されるようなユーザが最初に設定したレンジキー列が、KV構造変換時間としてデータ挿入時間が追加される。
構造変換判断部113は図6に示すような統計情報を取得すると、各テーブルのクラスタキー値ごとに、絞り込み属性の値に応じた取得KV数と処理レコードを含むKV数を集計する。ここで「処理」は、「参照処理」もしくは「更新処理」を指す。
図6によれば、機器Aに関しては、絞り込み属性として「ログID」、「ログ発生時間」、「ポート番号」、「警告レベル」を利用して検索が行われている。レンジキー列であるログID列で検索した場合、取得KV数が少なく、処理レコードを含むKV数が取得KV数と比べて大きな差がない。これは、ログID列がレンジキー列であるためである。このため問い合わせ処理部101は、少ないKVデータにのみアクセスし、効率的に処理を行っている。
一方、ログID列以外で検索した場合、取得KV数が多くなり、さらに処理レコードを含むKV数が取得KV数と比べて少ない。これは、絞り込み属性として利用した列がレンジキー列ではないために、問い合わせ処理部101は、B-Treeを構成するすべてのKVデータにアクセスしたが、実際に処理対象となっていたKVデータは少なかったことを表している。
この例でも分かるように、レンジキーを利用しない検索では問い合わせ処理部101が、KVデータに多くアクセスすることになり、効率的な処理が行えない。
図6のデータによれば、機器Aに関して、問い合わせ処理部101は、ログID列で1回、ログ発生時間列で3回、ポート番号列で2回、警告レベル列で1回検索している。最多の絞り込み属性はログ発生時間列である。そして、ログ発生時間列で検索した場合には、取得するKV数が150であり、そのうち処理対象のレコードを含むKV数が平均で約12である。
また、図8に示す情報により、機器Aのレンジキー列はログID列であることが分かる。機器AをクラスタキーとするB-Tree構造のKVデータ群に関しては、レンジキー列ではないログ発生時間列で検索が多く行われており、KVデータに多くアクセスしていることが分かる。従って、構造変換判断部113は、機器AのKVデータを、ログ発生時間列を新たなレンジキー列とする構造に変換することを決定する。
機器Bに関しては、ログID列で3回、ポート番号列で1回検索しており、最多の絞り込み属性はログID列である。また、図8に示す情報により、機器Bのレンジキー列はログID列であることが分かる。機器Bで構成されるB-Tree構造のKVデータ群に関しては、最多の絞り込み属性がレンジキー列であるため、構造変換判断部113は、構造の変換はしなくて良いと決定する。
このように構造変換要否の決定過程で、構造変換判断部113は、まず、どの絞り込み属性が最も多く利用されているかを調べる。そして、構造変換判断部113は、その絞り込み属性を利用して検索した場合の「処理レコードを含むKV数」 / 「取得KV数」の値が一定値以下となっている場合に、その絞り込み属性を新たなレンジキー列とする構造に変換することを決定する。
構造変換判断部113がこのように判断するのは、「処理レコードを含むKV数」/「取得KV数」の値が一定以下というのは、目的のKVデータを得る為に、問い合わせ処理部101が一定割合以上に多くのKVデータを経由していることを意味するからである。決定の判断変換基準となる「処理レコードを含むKV数」と「取得KV数」との比率の閾値は、ユーザが予め構造変換判断部113に設定しておけば良い。
構造変換判断部113は、現在レンジキー列として設定されている属性を利用した検索と、変換候補となっている属性、すなわち、もっとも多く絞り込みに利用されている属性を利用した検索の利用回数の比率を構造変換要不要の判断基準として利用しても良い。
例えば、現在のレンジキー列として設定されている属性を利用した検索の回数が100回であり、変換候補となっている属性を利用した検索の回数が110回の場合、二つの属性でそれほど利用回数に差がないことなる。構造の変換は、CPU(Central Processing Unit)等のリソースを多く消費する処理であるため、それほど差がないのに構造を変換するのはリソース消費の観点からもったいない。
このため、現在レンジキー列として設定されている属性を利用した検索回数に対する、変換候補となっている属性を利用した検索の利用回数の比率または差分が一定以上になった場合にのみ、構造変換判断部113は、構造を変換するように決定しても良い。この比率の閾値は、ユーザが予め構造変換判断部113に設定しておけば良い。
なお、統計情報記憶部204にはシステム運用開始時からの統計情報がすべて格納されている。しかし、構造変換判断部113が統計情報記憶部204から収集する統計情報、つまりKVデータ構造変換決定のために利用する統計情報は、各テーブルの各クラスタキー値に対して図8に示すKV構造変換時間よりもアクセス時間が後のものだけである。
KV構造変換時間は各B-Tree構造のKVデータ群がそのKV構造に変換された時間を表している。つまり、KV構造変換時間よりも前の統計情報は、図8に示すレンジキー列で構成されるKV構造に変換される前の統計情報である、そのため、構造変換判断部113は、それらの情報を基にKVデータ構造の変換要否の決定を行わない。
なお、統計情報記憶部204に格納されている統計情報やシステムカタログ205に格納されている情報は、図6や図7や図8の例では表形式のデータとなっているが、これらのデータが表形式のデータで格納されている必要はない。
図5のステップS103でKVデータ構造変換が必要なKVデータ群が見つかった場合、処理はステップS104以降に進む。見つからなかった場合、図5の処理は終了する。
ステップS104からステップS112までの処理は、KVデータ構造変換対象のKVデータ群ごとに実行される。上記の説明例では図6に示すテーブルAの機器AをクラスタキーとするKVデータ群だけがKVデータ構造変換対象であるため、当該KVデータ群に関してステップS104からステップS112までが実行されて、図5の処理は終了する。他のKVデータ群がKVデータ構造変換対象として存在する場合は、次にそのKVデータ群に対してステップS104からステップS112までが実行される。このステップS104からステップS112まで流れが、KVデータ構造変換対象のKVデータ群がなくなるまで繰り返される。
構造変換開始通知のステップS104では、データ構造変換部103が問い合わせ処理部101に対してKV構造変換対象となったKVデータ群の情報を通知する。問い合わせ処理部101は通知を受け取ると、KVデータ構造変換対象となったKVデータ群に対する更新処理結果である更新データをKVデータ記憶部201ではなく、差分データ記憶部202に書き込むようになる。
次に、KVデータ取得のステップS105では、データ構造変換部103がKVデータ記憶部201からKVデータ変換対象のKVデータ群のKVデータをすべて取得する。
次に、KVデータ構造変換のステップS106では、バリュー部変更部123がKVデータ記憶部201から取得したKVデータに対して構造の変換を行い、変換後のKVデータを変換データ記憶部203に書き込む。
バリュー部変更部123は、この変換を、例えば、以下のような手順で行う。まず、バリュー部変更部123は、変換前のリーフノードからレコードデータを集め、表形式のデータを再構築する。次に、バリュー部変更部123は、再構築した表形式のデータのレコードデータを、新たなレンジキー列の値に基づいてソートする。そして、バリュー部変更部123は、ソートされたレコードデータを順次、所定数ずつのリーフノードに分割する。最後に、バリュー部変更部123は、所定数の下位ノードごとに、一つの上位のノードを作成していく。このとき、上位のノードのバリュー部には、下位ノードの新たなレンジキーの値の範囲が記録される。上位ノードが1つになった時点で、構造変換が終了する。
次に、第1フェーズ終了通知のステップS107では、データ構造変換部103が問い合わせ処理部101に対して、ステップS104で通知したKVデータ群で、KVデータ記憶部201に格納されているKVデータのデータ構造の変換が終了したことを通知する。問い合わせ処理部101は通知を受け取ると、データ構造変換が完了したKVデータ群に対する更新処理結果を差分データ記憶部202ではなく、変換データ記憶部203に格納されている、データ構造変換済みのB-Tree構造のKVデータ群に対して書き込むようになる。
次に、差分データ取得のステップS108では、データ構造変換部103が差分データ記憶部202からKVデータ変換対象のKVデータ群に関する更新データを取得する。
次に、差分データマージのステップS109では、バリュー部変更部123が差分データ記憶部202から取得した更新データを用いて、変換データ記憶部203に格納されている、データ構造変換済みのB-Tree構造のKVデータ群を更新する。
差分データ記憶部202に格納される更新データは、KVデータ記憶部201や変換データ記憶部203に格納されているようなB-Tree構造のKVデータである必要はない。差分データ記憶部202には、KVデータ記憶部201内のKVデータ群が変換されている間に更新処理が行われたレコードデータを表すKVデータがあれば良い。
図9は、差分データ記憶部202に格納される更新データの例を示す。更新データは、KVデータ形式のデータである。ここで、キー値は変換対象となっているKVデータ群のクラスタキー値(図9の例では機器A)であり、バリュー部は、更新後のレコードデータを格納する。バリュー部は更新後のレコードデータだけではなく、そのレコードデータに対する処理種別(update, delete, insert)と、処理が実行された時間も格納する。
バリュー部変更部123がKVデータ記憶部201に格納されているKVデータ群に対する変換処理を終了(第1フェーズが終了)した後は、問い合わせ処理部101は変換データ記憶部203に格納されているKVデータ群に対して更新を行うようになる。このため、ステップS109でデータ構造変換部103が差分データ記憶部202から取得したデータが最新のデータであるとは限らず、バリュー部変更部123は、差分データ記憶部202から取得したデータのうち、どのデータをデータ更新に適用すべきかの判断ができない。上記の問題を解決するため問い合わせ処理部101は、更新データを構成するレコードデータ部分に更新時間を付加する。
図4で示されるKVデータ群の例では、リーフノードのバリュー部分にレコードデータを表すデータが多く存在するが、問い合わせ処理部101はこれら1つ1つに更新時間を付加する。この更新時間は、問い合わせ処理部101が更新処理を行う際に付加する。
バリュー部変更部123は、差分データ記憶部202から取得したデータに含まれる処理が実行された時間と、変換データ記憶部203に格納されるKVデータ内のレコード部分の更新時間とを比較する。そして、差分データ記憶部202から取得したデータに含まれる処理が実行された時間のほうが新しい場合に、バリュー部変更部123は、当該データで変換データ記憶部203内のデータを更新する。
次に、システムカタログ205更新のステップS110では、データ構造変換部103がシステムカタログ205に格納されている情報を更新する。具体的には、データ構造変換部103が、変換対象となったKVデータ群に対するレンジキー列の値とKV構造が変換された時間を更新する。
次に、第2フェーズ終了通知のステップS111では、データ構造変換部103が、問い合わせ処理部101に対して、ステップS104で通知したKVデータ群に対するKVデータ構造の変換が終了したことを通知する。問い合わせ処理部101は通知を受け取ると、KVデータの構造変換が完了したKVデータ群に対する参照処理に関して、変換データ記憶部203だけからデータを取得するようになる。
最後に、KVデータ削除のステップS112では、データ構造変換部103がKVデータ構造変換済みのKVデータ群の情報をKVデータ削除部104に通知する。KVデータ削除部104は削除の通知を受け取ると、対象のKVデータ群に関する構造変換前のKVデータをKVデータ記憶部201から、更新データを差分データ記憶部202から削除する。
図10は、図4で示したログID列がレンジキー列であるKVデータ群を、ログ発生時間列をレンジキー列とするKVデータ群に変換した例を示す。リーフノードのバリュー部が、図4ではログID列の値でソートされているのに対し、図10ではログ発生時間列の値でソートされている。また、ルートノードや中間ノードのバリュー部に含まれるデータ範囲も、ログID列の値の範囲を表すデータではなく、新しくレンジキー列になったログ発生時間列の値の範囲を表すデータに変更されている。
次に、KVデータ記憶部201に格納されているKVデータのデータ構造を変換中に、データ構造変換対象のKVデータに対してクエリが入力された場合のクエリ処理の動作を図2のフローチャートを基に説明する。
まず、クエリ入力のステップS001でクライアント300がKVデータ構造変換装置100に対してクエリを入力する。このとき入力されるクエリが処理対象とするデータはデータ構造変換中のデータである。
次に、KVデータ取得のステップS002で、問い合わせ処理部101は、入力されたクエリを解析した結果と、システムカタログ205から取得した情報を基に、アクセス対象のKVデータを特定する。この時、アクセス対象のKVデータ群が第1フェーズの変換処理中である場合、問い合わせ処理部101は、KVデータ記憶部201と差分データ記憶部202からデータを取得する。また、第2フェーズの変換処理中である場合は、問い合わせ処理部101は、変換データ記憶部203と差分データ記憶部202からデータを取得する。
次に、問い合わせ処理部101は、クエリの解析結果から、入力されたクエリが挿入処理を行うクエリであるかどうかを判断する(ステップS003)。挿入処理を行うクエリである場合、問い合わせ処理部101はクエリを解析した結果とシステムカタログ205から取得した情報を基にデータの挿入処理を行う(ステップS004)。
この時、処理対象のKVデータ群が第1フェーズの変換処理中である場合、問い合わせ処理部101はKVデータ記憶部201ではなく、差分データ記憶部202にデータを書き込む。また、第2フェーズの変換処理中である場合は、問い合わせ処理部101はKVデータ記憶部201ではなく、変換データ記憶部203にデータを書き込む。
問い合わせ処理部101は挿入処理が完了すると、結果をクライアント300に返却する(ステップS005)。また、問い合わせ処理部101は前述したように必要に応じてシステムカタログ205の情報更新も行う。
次に、挿入クエリではなかった場合、統計情報収集のステップS006で、問い合わせ処理部101が統計情報収集部102に対して統計情報を入力する。この処理はデータ構造変換前の動作と変わらないため説明を省略する。
次に、問い合わせ処理部101は、入力されたクエリが更新処理を行うクエリであるか、参照処理を行うクエリであるかを判断する(ステップS007)。更新処理を行うクエリである場合、問い合わせ処理部101はデータの更新処理を行うが(ステップS008)、この時、処理対象のKVデータ群が第1フェーズの変換処理中である場合は、KVデータ記憶部201ではなく、差分データ記憶部202にデータを書き込む。また、第2フェーズの変換処理中である場合、問い合わせ処理部101はKVデータ記憶部201ではなく、変換データ記憶部203にデータを書き込む。問い合わせ処理部101は更新処理が完了すると、結果をクライアント300に返却する(ステップS009)。
入力されたクエリが参照処理を行うクエリである場合、問い合わせ処理部101は、ステップS002で取得したKVデータを参照処理結果としてクライアント300に返却する(ステップS010)。
なお、データ構造変換部103が第2フェーズの変換処理を実行している間は、問い合わせ処理部101は変換データ記憶部203と差分データ記憶部202からデータを取得するが、それぞれに同じレコードのデータが含まれる可能性がある。この場合、問い合わせ処理部101は変換データ記憶部203と差分データ記憶部202のそれぞれから取得したデータに含まれる更新時間情報を基に最新のデータを特定して取得する。
<効果>
本実施の形態にかかるKVデータ構造変換装置100は、ユーザが実行するクエリによるデータへのアクセス傾向が変わっても性能低下を抑制する。その理由は、データ構造変換部103が、ユーザが実行するクエリによる、KVデータへのアクセス傾向に合わせて、格納しているKVデータの構造を変換するからである。すなわち、データ構造変換部103は、使用頻度が高い列がレンジキー列となるようにKVデータの構造変換を行う。
これにより、クエリを実行する問い合わせ処理部101は、KVデータへのアクセスを減らすことができ、クエリの処理性能(TAT、スループット)を向上させることができる。
<第2の実施形態>
次に、本発明の第2の実施形態について説明する。
図11は、本実施の形態にかかるKVデータ構造変換装置100の構成を示す図である。図11に示すように、本実施形態のKVデータ構造変換装置100は、図1に示した第1の実施形態のKVデータ構造変換装置100の構成要素に加えて、リソース負荷監視部105を備える点で異なる。
本実施形態のKVデータ構造変換装置100は、データ構造変換部103はユーザからの指示やタイマーによって動作するのではなく、リソース負荷監視部105からの動作指示によって動作を開始する。
リソース負荷監視部105は、KVデータ構造変換装置100のリソースの使用量を定期的に監視する。監視されるリソースの使用量は、例えば、CPU使用率、ディスク入出力量である。リソース負荷監視部105は、KVデータ構造変換装置100のリソースの使用量が設定された閾値より少ない場合にデータ構造変換部103に動作を指示する。
変換するデータの量が多い場合、データ構造変換処理は高負荷な処理となる可能性がある。データ構造変換処理中もクライアント300からのクエリ処理は実行可能であるが、データ構造変換処理に多くのリソースが割かれている場合、クライアント300からのクエリ処理の性能が劣化することが考えられる。
このように、本実施の形態のKVデータ構造変換装置100は、リソースの負荷が低い時にデータ構造変換処理を行うことによってリソースを有効に利用することができ、クライアント300が要求するクエリ処理の性能劣化を抑えることができる。
<第3の実施形態>
次に、本発明の第3の実施形態について説明する。
図12は、本実施の形態にかかるKVデータ構造変換装置100の構成を示す図である。図12に示すように、本実施形態のKVデータ構造変換装置100は、図1に示した第1の実施形態のKVデータ構造変換装置100の構成要素に加えて、統計情報管理部106を備える点で異なる。
本実施形態のKVデータ構造変換装置100では、統計情報管理部106が、統計情報記憶部204に格納されている統計情報を定期的に削除する。削除対象の統計情報は、例えば、現在より一定時間以上過去のものとする。「一定時間」を示す値は、ユーザが予め統計情報管理部106に設定しておけば良い。この値は、システム運用中に変更することも可能である。
統計情報管理部106が、定期的に統計情報記憶部204に格納されている古い統計情報を削除することによって、統計情報記憶部204に格納されている統計情報を最新のものだけにすることができる。構造変換判断部113が、KVデータ構造を変換するかどうかを判断する場合、一定時間以上過去の統計情報を基に判断するよりも、現在の時間に近い統計情報を基に判断した方が、精度が高くなる。これは、過去のアクセス傾向よりも現在のアクセス傾向の方が、重要度が高い場合があるためである。
このように、本実施形態のKVデータ構造変換装置100は、最近の統計情報だけを利用してデータ構造を変換するかどうかを判断することができ、データ構造変換の判断をより正確に行うことができる。
<第4の実施形態>
次に、本発明の第4の実施形態について説明する。
図13は、本実施の形態にかかるKVデータ構造変換装置100の構成を示す図である。図13に示すように、本実施形態のKVデータ構造変換装置100は、図1に示した第1の実施形態のKVデータ構造変換装置100の構成要素に加えて、構造変換計画作成部107を備える点で異なる。
本実施形態のKVデータ構造変換装置100では、データ構造変換部103がユーザからの指示やタイマーによって定期的に、統計情報記憶部204に記憶されている統計情報を取得して構造変換するかどうかを判断するのではない。構造変換計画作成部107が、定期的に統計情報記憶部204に記憶されている統計情報を取得し、構造変換を実施する計画を作成して、データ構造変換部103に構造変換の指示を出す。
データベースシステムに対する問い合わせの傾向は、日付や時間帯によってある程度パターンが決まっている場合がある。例えば、週末には特定の属性値による検索が多く行われるといったパターンである。このような場合に、構造変換計画作成部107が予め特定のパターンに従った構造変換計画を作成し、その計画に基づいて構造変換処理が実行されることで、より効率的な構造変換を実施することができる。
図14は、本実施形態における構造変換計画作成部107の動作を示すフローチャートである。
まず、統計情報取得のステップS201で、構造変換計画作成部107は統計情報記憶部204に記憶されている統計情報を取得する。
次に、システムカタログ205取得のステップS202で、構造変換計画作成部107はシステムカタログ205に格納されている変換履歴を取得する。本実施の形態においてシステムカタログ205は、システム運用開始時からの構造変換履歴を格納している。
図15は、システムカタログ205に格納されている変換履歴の構成を示す。データ構造変換部103は、KVデータの構造変換をする都度、変換の対象となったKVデータのテーブル名とクラスタキー値、変換後のレンジキー列、および、構造変換実施時間の履歴をシステムカタログ205に格納する。例えば、図15の例は、テーブルAの機器Aをクラスタキー値とするKVデータ群のレンジキー列は2016/07/04 00:00から2016/07/29 00:00まではログID列であり、2016/07/29 00:00からはログ発生時間列であることを示す。
次に、構造変換計画作成のステップS203で、構造変換計画作成部107は取得した統計情報とシステムカタログ205の情報から構造変換計画を作成する。
計画を作成するパターンとしては、例えば、時間帯、曜日、日付、月などが考えられる。構造変換計画作成部107は、統計情報記憶部204に格納されている統計情報、システムカタログ205に格納されている情報、またはその両者から時間帯、曜日、日付、月ごとのアクセスパターンを解析し、構造変換計画を作成する。
構造変換計画作成部107は、例えば、システムカタログ205に格納されている構造変換履歴から、年月日、曜日、および、時間帯の何れか1つまたはその組み合わせに基づいて周期的に発生する期間と当該期間に変換されたKVデータの新しいレンジキー列を特定する。構造変換計画作成部107は、クラスタキー、特定した期間とレンジキー列の組み合わせを構造変更計画として登録する。
登録される構造変換計画は、例えば、「機器Aをクラスタキー値とするKVデータ群は土曜日の12:00から日曜日の12:00まではログ発生時間列をレンジキー列とするKVデータ構造に変換する」といったものである。あるいは、構造変換計画は、「機器Bをクラスタキー値とするKVデータ群は月末日の15:00から翌月初日の15:00まではポート番号列をレンジキー列とするKVデータ構造に変換する」といったものでも良い。
構造変換計画作成部107は、統計情報記憶部204に格納されている統計情報から、年月日、曜日、および、時間帯の何れか1つまたはその組み合わせに基づいて周期的に発生する期間と当該期間に最も多くのクエリで使用されたレンジキー列を特定しても良い。
次に、構造変換計画作成部107は、既存の計画と比較して構造変換計画を更新(まだ作成されていない場合は新規に作成)するかどうかを判断する(ステップS204)。
構造変換計画を更新(作成)するKVデータ群が存在する場合は、構造変換計画更新のステップS205で、構造変換計画作成部107は自身が保存している構造変換計画を、ステップS203で作成した構造変換計画で更新する。
構造変換計画作成部107は、自身が保存している構造変換計画に従って、登録されている周期的に発生する期間の初めに、データ構造変換部103に構造変換の指示を出す。この指示は、構造変換後に使用するレンジキー列が指定されている。データ構造変換部103は、構造変換計画作成部107からの指示に基づいてデータ構造の変換を行う。
構造変換計画作成部107は、定期的に、構造変換計画更新処理を実行すれば良い。また、構造変換計画作成部107が動作するタイミングに関しては、ユーザが構造変換計画作成部107に予め設定しておけば良い。
なお、本実施の形態にかかるKVデータ構造変換装置100において、データ構造変換部103は、構造変換計画作成部107から起動されたとき以外は、第1の実施の形態と同じ動作をする。すなわち、構造変換計画作成部107が、固定的なパターンを特定できなかった期間については、データ構造変換部103は、第1の実施形態で説明したように、直近一定期間の統計情報に基づいた構造変換を実行する。
このように、本実施の形態にかかるKVデータ構造変換装置100は、表形式のデータに対する問い合わせの傾向が固定的なパターンを持っている場合に、予めパターンに従った構造変換計画を作成し、その計画に基づいて構造変換処理を実行する。このことによって、本実施の形態にかかるKVデータ構造変換装置100は、より効果的な構造変換を実施することができる。
<第5の実施形態>
図17は、第5の実施の形態にかかるKVデータ構造変換装置100の構成を示す図である。KVデータ構造変換装置100は、問い合わせ処理部101、統計情報収集部102、データ構造変換部103、および、KVデータ記憶部201を備える。
本実施の形態において、データ構造変換部103は、第1の実施の形態における、KVデータ削除部104、構造変換判断部113、および、バリュー部変更部123を包含し、一体に構成されている。
さらに、データ構造変換部103は、第1の実施の形態と同様に動作しても良いが、KVデータ記憶部201からKVデータを得て構造変換を実施し、変換結果をKVデータ記憶部201に書き戻しても良い。すなわち、KVデータ記憶部201は、構造変換中は、変換前後の2世代のKVデータを格納しても良い。この場合、データ構造変換部103は、構造変換終了後、KVデータ記憶部201内の変換前のKVデータを削除する。
また、本実施の形態においては、問い合わせ処理部101は、第1の実施の形態と同様に動作しても良いが、構造変換中は、新たなクエリの実行を待ち合わせても良い。あるいは、クエリが実行されない時間帯、例えば深夜に、データ構造変換部103が、構造変換を実施しても良い。このような場合、KVデータ構造変換装置100は、差分データに関する処理を行わなくて良い。
本実施の形態において、KVデータ記憶部201は、表の行に含まれるデータであるレコードデータの各々が、当該表の第1の列の値をレンジキーとして、レンジキーの値順に所定数ずつ平衡木の各葉ノードに格納されているKVデータを記憶する。問い合わせ処理部101は、クエリで指定された表の列の値が指定された範囲にあるレコードデータを、KVデータから検索して更新または参照処理を実行する。
統計情報収集部102は、列対応に、当該列がクエリで指定された回数を含む統計情報を蓄積する。データ構造変換部103は、回数が最大の列(以降、第2の列)を選択し、KVデータ記憶部201内のKVデータを、第2の列の値をレンジキーとするKVデータへ変換する。
本実施の形態にかかるKVデータ構造変換装置100は、ユーザが実行するクエリによるデータへのアクセス傾向が変わっても性能低下を抑制する。その理由は、データ構造変換部103が、ユーザが実行するクエリによる、KVデータへのアクセス傾向に合わせて、格納しているKVデータの構造を変換するからである。すなわち、データ構造変換部103は、使用頻度が高い列がレンジキー列となるようにKVデータの構造変換を行う。
これにより、クエリを実行する問い合わせ処理部101は、KVデータへのアクセスを減らすことができ、クエリの処理性能(TAT、スループット)を向上させることができる。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
100 KVデータ構造変換装置
101 問い合わせ処理部
102 統計情報収集部
103 データ構造変換部
104 KVデータ削除部
105 リソース負荷監視部
106 統計情報管理部
107 構造変換計画作成部
113 構造変換判断部
123 バリュー部変更部
201 KVデータ記憶部
202 差分データ記憶部
203 変換データ記憶部
204 統計情報記憶部
205 システムカタログ
300 クライアント
600 コンピュータ装置
610 プロセッサ
620 外部記憶装置
630 主記憶部
640 バス
650 プログラム

Claims (10)

  1. 表の行に含まれるデータであるレコードデータの各々が、当該表の第1の列の値をレンジキーとして、前記レンジキーの値順に所定数ずつ平衡木の各葉ノードに格納されているKVデータを記憶するKVデータ記憶手段と、
    クエリで指定された前記表の前記列の値が指定された範囲にある前記レコードデータを、前記KVデータから検索して更新または参照処理を実行する問い合せ処理手段と、
    前記列対応に、当該列が前記クエリで指定された回数を含む統計情報を蓄積する統計情報収集手段と、
    前記回数が最大の前記列(以降、第2の前記列)を選択し、前記KVデータ記憶手段内の前記KVデータを、第2の前記列の値を前記レンジキーとする前記KVデータへ変換するデータ構造変換手段と、を備えるKVデータ構造変換装置。
  2. 前記統計情報収集手段は、さらに前記更新または参照処理の対象レコードデータを含む前記葉ノード(以降、処理レコードを含むKV)の数、および、前記処理レコード検索過程でアクセスした前記葉ノード(以降、取得したKV)の数を含む前記統計情報を取得し、
    前記データ構造変換手段は、「前記処理レコードを含むKVの数」/「前記取得KVの数」の算出値が所定値以下である場合に、前記KVデータ記憶手段内の前記KVデータを、第2の前記列の値を前記レンジキーとする前記KVデータへ変換する、請求項1のKVデータ構造変換装置。
  3. 前記データ構造変換手段は、第2の前記列対応の前記回数が、第1の前記列対応の前記回数より所定数、または、所定割合以上大きい場合、前記KVデータ記憶手段内の前記KVデータを、第2の前記列の値を前記レンジキーとする前記KVデータへ変換する、請求項1のKVデータ構造変換装置。
  4. 差分データ記憶手段を、さらに備え、
    前記データ構造変換手段が前記KVデータの変換中に、前記問い合わせ処理手段は、前記更新または参照処理において、前記レコードデータの更新要求に対して更新データを前記差分データ記憶手段に格納し、前記レコードデータの参照要求に対して変換前の前記KVデータまたは前記更新データを参照し、
    前記KVデータの変換後に、前記データ構造変換手段は、変換後の前記KVデータを前記更新データで更新し、前記問い合わせ処理手段は、前記更新または参照処理において、前記レコードデータの更新要求に対して変換後の前記KVデータを更新し、前記レコードデータの参照要求に対して変換後の前記KVデータまたは前記更新データを参照する、請求項1乃至請求項3の何れか1項のKVデータ構造変換装置。
  5. 自装置のリソース負荷を監視するリソース不可監視手段をさらに備え、
    前記データ構造変換手段は、前記リソース久負荷が所定閾値より低い場合に、前記KVデータを変換する、請求項1乃至請求項4の何れか1項のKVデータ構造変換装置。
  6. 統計情報記憶手段と、統計情報管理手段とを、さらに備え、
    前記統計情報収集手段は、取得した情報を前記統計情報管理手段に蓄積し、
    前記統計情報管理手段は、取得後、所定期間を経過した前記情報を削除する、請求項1乃至請求項5の何れか1項のKVデータ構造変換装置。
  7. 前記統計情報を格納する統計情報記憶手段と、
    前記統計情報記憶手段に蓄積された前記統計情報に基づいて、年月日、曜日、および、時間帯の何れか1つまたはその組み合わせに基づいて周期的に発生する期間と、当該期間における第2の前記列を特定して、特定した前記期間と第2の前記列を含む構造変換計画を作成する構造変換計画作成手段と、をさらに備え、
    前記統計情報収集手段は、取得した情報を前記統計情報管理手段に蓄積し、
    前記データ構造変換手段は、構造変換計画作成手段が特定した前記期間の開始時点で、前記KVデータ記憶手段内の前記KVデータを、第2の前記列の値を前記レンジキーとする前記KVデータへ変換する、請求項1乃至請求項6の何れか1項のKVデータ構造変換装置。
  8. 前記データ構造変換手段による前記KVデータの変換履歴を記憶するシステムカタログと、
    前記システムカタログに蓄積された前記変換履歴に基づいて、年月日、曜日、および、時間帯の何れか1つまたはその組み合わせに基づいて周期的に発生する期間と、当該期間における第2の前記列を特定して、特定した前記期間と第2の前記列を含む構造変換計画を作成する構造変換計画作成手段と、をさらに備え、
    前記データ構造変換手段は、構造変換計画作成手段が特定した前記期間の開始時点で、前記KVデータ記憶手段内の前記KVデータを、第2の前記列の値を前記レンジキーとする前記KVデータへ変換する、請求項1乃至請求項6の何れか1項のKVデータ構造変換装置。
  9. 表の行に含まれるデータであるレコードデータの各々が、当該表の第1の列の値をレンジキーとして、前記レンジキーの値順に所定数ずつ平衡木の各葉ノードに格納されているKVデータをKVデータ記憶手段に記憶し、
    クエリで指定された前記表の前記列の値が指定された範囲にある前記レコードデータを、前記KVデータから検索して更新または参照処理を実行し、
    前記列対応に、当該列が前記クエリで指定された回数を含む統計情報を蓄積し、
    前記回数が最大の前記列(以降、第2の前記列)を選択し、前記KVデータ記憶手段内の前記KVデータを、第2の前記列の値を前記レンジキーとする前記KVデータへ変換する、KVデータ構造変換方法。
  10. 表の行に含まれるデータであるレコードデータの各々が、当該表の第1の列の値をレンジキーとして、前記レンジキーの値順に所定数ずつ平衡木の各葉ノードに格納されているKVデータをKVデータ記憶手段に記憶する記憶処理と、
    クエリで指定された前記表の前記列の値が指定された範囲にある前記レコードデータを、前記KVデータから検索して更新または参照処理を実行する問い合せ処理と、
    前記列対応に、当該列が前記クエリで指定された回数を含む統計情報を蓄積する統計情報収集処理と、
    前記回数が最大の前記列(以降、第2の前記列)を選択し、前記KVデータ記憶手段内の前記KVデータを、第2の前記列の値を前記レンジキーとする前記KVデータへ変換するデータ構造変換処理と、をコンピュータに実行させるKVデータ構造変換プログラム。
JP2016224694A 2016-11-18 2016-11-18 Kvデータ構造変換装置、kvデータ構造変換方法、および、kvデータ構造変換プログラム Pending JP2018081603A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016224694A JP2018081603A (ja) 2016-11-18 2016-11-18 Kvデータ構造変換装置、kvデータ構造変換方法、および、kvデータ構造変換プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016224694A JP2018081603A (ja) 2016-11-18 2016-11-18 Kvデータ構造変換装置、kvデータ構造変換方法、および、kvデータ構造変換プログラム

Publications (1)

Publication Number Publication Date
JP2018081603A true JP2018081603A (ja) 2018-05-24

Family

ID=62198896

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016224694A Pending JP2018081603A (ja) 2016-11-18 2016-11-18 Kvデータ構造変換装置、kvデータ構造変換方法、および、kvデータ構造変換プログラム

Country Status (1)

Country Link
JP (1) JP2018081603A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111125156A (zh) * 2019-12-17 2020-05-08 网银在线(北京)科技有限公司 数据的查询方法、装置和电子设备

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111125156A (zh) * 2019-12-17 2020-05-08 网银在线(北京)科技有限公司 数据的查询方法、装置和电子设备
CN111125156B (zh) * 2019-12-17 2023-09-26 网银在线(北京)科技有限公司 数据的查询方法、装置和电子设备

Similar Documents

Publication Publication Date Title
JP6025149B2 (ja) データを管理するシステムおよび方法
US11232085B2 (en) Outlier detection for streaming data
JP4516306B2 (ja) ストレージネットワークの性能情報を収集する方法
JP5088668B2 (ja) 計算機負荷見積システム、計算機負荷見積方法、計算機負荷見積プログラム
US20160253402A1 (en) Adaptive data repartitioning and adaptive data replication
US20070250517A1 (en) Method and Apparatus for Autonomically Maintaining Latent Auxiliary Database Structures for Use in Executing Database Queries
US20150006509A1 (en) Incremental maintenance of range-partitioned statistics for query optimization
CN105989015B (zh) 一种数据库扩容方法和装置以及访问数据库的方法和装置
WO2018036549A1 (zh) 分布式数据库查询方法、装置及管理系统
JP5023899B2 (ja) ストリームデータ制御システム、ストリームデータ制御方法およびストリームデータ制御用プログラム
JP6982049B2 (ja) インデックスを管理するための方法、装置、設備及び記憶媒体
US8515927B2 (en) Determining indexes for improving database system performance
JPWO2017163393A1 (ja) データ処理システム
US10095737B2 (en) Information storage system
CN111708895B (zh) 一种知识图谱系统的构建方法及装置
CN116089414B (zh) 基于海量数据场景的时序数据库写入性能优化方法及装置
Malensek et al. Autonomous cloud federation for high-throughput queries over voluminous datasets
JP2018081603A (ja) Kvデータ構造変換装置、kvデータ構造変換方法、および、kvデータ構造変換プログラム
Schuh et al. AIR: adaptive index replacement in Hadoop
Gedik et al. Disk-based management of interaction graphs
CN116089487A (zh) 查询流水线执行的调度
US9158815B2 (en) Estimating a number of unique values in a list
Mullangi et al. SCISSOR: scalable and efficient reachability query processing in time-evolving hierarchies
JP6898215B2 (ja) データベース管理装置、データベース管理方法及びデータベース管理プログラム
JP5953262B2 (ja) データ索引装置、データ索引方法及びプログラム