(58)【調査した分野】(Int.Cl.,DB名)
前記分割工程は、前記不変テーブルおよび前記可変テーブルを用いて出力に指定されたテーブルを得る処理要求を導出し、導出した処理要求を用いて、前記所定の処理を繰り返し行う要求を含む処理要求を、前記不変テーブルと前記可変テーブルに対する処理要求に書き換えて、書き換えられた処理要求を分解して、前記不変テーブルに対する処理要求を前記第一の処理要求とし、前記可変テーブルに対する処理要求を前記第二の処理要求として分割することを特徴とする請求項1に記載の分析方法。
前記実行工程は、前記分割工程によって分割された第一の処理要求を実行し、実行結果を実体化し、該実体化された実行結果を、前記第二の処理要求の繰り返し処理において再利用することを特徴とする請求項1または2に記載の分析方法。
前記実行工程は、前記分割工程によって可変属性であると判定された属性について、処理要求を差分計算の式に展開し、繰り返し処理の間で出力に指定されたテーブルの可変属性の差分を記録し、記録した差分を差分計算の式に展開された処理要求に入力することを特徴とする請求項1に記載の分析方法。
【発明を実施するための形態】
【0011】
以下に添付図面を参照して、この発明に係る分析方法、分析装置および分析プログラムの実施形態を詳細に説明する。なお、この実施形態によりこの発明が限定されるものではない。
【0012】
[第一の実施の形態]
以下の実施の形態では、第一の実施の形態に係る分析装置の構成、および処理の流れを順に説明し、最後に第一の実施の形態による効果を説明する。
【0013】
[分析装置の構成]
まず、
図1を用いて、分析装置10の構成を説明する。
図1は、第一の実施の形態に係る分析装置の構成を示すブロック図である。
図1に示すように、分析装置10は、処理要求分割部11と、処理要求実行部12と、記憶部13とを有し、また、端末装置20と接続されている。端末装置20は、検索要求を分析装置10に対して送信し、該検索要求に対する検索結果を分析装置10から受信する。
【0014】
処理要求分割部11は、所定の処理を繰り返し行う繰り返し型の処理要求を解析し、該処理要求を、繰り返し処理において結果が変化しない不変データ処理要求と、繰り返し処理において結果が変化する可変データ処理要求とで分割する。
【0015】
具体的には、処理要求分割部11は、端末装置20から検索要求を受信し、受信した検索要求のうちの繰り返し型の処理要求を解析することで、出力に指定されたテーブルのすべての属性について、繰り返し処理の前後でカラムの値が変化しない不変属性、あるいは繰り返し処理の前後で変化する可変属性かを判定する。そして、処理要求分割部11は、出力に指定されたテーブルUを2つに分解して、主キーと全ての不変属性から成る不変テーブル、および、主キーと全ての可変属性から成る可変テーブルを得る。
【0016】
ここで、テーブルUは、主キーの等価条件を用いて不変テーブルと可変テーブルをテーブル結合するクエリによって得ることができるため、本クエリを用いることで、ユーザが入力した繰り返し型のクエリを書き換えて、テーブルUを排除する。なお、ここで、繰り返し型のクエリ(処理要求)とは、例えば、一つまたは複数のテーブルを入力として、出力結果を入力で指定されたテーブルの1つに出力するクエリであり、ユーザが、指定した一定回数回処理要求を実行するか、あるいは出力に指定されたテーブルが格納するデータが繰り返し操作の前後で変化しなくなるまで実行するかのいずれかを選択できる。
【0017】
例えば、処理要求分割部11は、不変テーブルと可変テーブルを用いて出力に指定された元テーブルを得る処理要求を導出し、導出した処理要求を用いてユーザが入力した繰り返し型の処理要求を不変テーブルと可変テーブルに対する処理要求に書き換えて、書き換えられた処理要求を分解して、不変テーブルに対する処理要求(不変データ処理要求)と,不変テーブルに対する処理要求結果および可変テーブルに対する処理要求(可変データ処理要求)とを得る。
【0018】
ここで、
図2および
図3の例を用いて、Page Rank計算を、具体例として処理要求分割部11の処理について具体的に説明する。
図2は、Page Rank計算のクエリの一例を示す図である。
図3は、更新属性の判定処理を説明する図である。
【0019】
例えば、Page Rankを処理するクエリは
図2のように記述される。ここで、Graphはテーブルであり、属性としてノードIDを示すsrc(主キー)、srcから発するリンクによって接続されるノードのIDを示す「dest」、「src」から発するリンク数を表す「count」、「src」のPage Rankスコアを表す「score」である。本クエリは、入れ子になっており、内側のクエリにおいて、dest毎にPage Rankスコアを次のように計算する。接続されるノードから伝搬されるスコアの総和を計算し(sum(n.score/n.count))、ダンピングファクタ「0.85」を乗算して、ランダムジャンプにより得られるスコア「0.15」を加算する。外側のクエリにおいて、destをsrcとするデータ構造を取得し、次の繰り返し処理の入力となるよう「Graph」テーブルを更新する。
【0020】
このようなクエリを入力として、処理要求分割部11は、
図3の(1)に記載のクエリグラフを以下のように導出する。
【0021】
図3のクエリは入れ子クエリであり、内側のクエリは、
select n.dest, 0.15+0.85*sum(n.score/n.count) as score
from Graph as n
group by n.dest
であり、上記Graph as nから
図2のGraph nを得る。
【0022】
また、上記のselect, group by句に指定されるscore, count, destから,
図6のGraph nから上位にn.sore, n.count, n.destを得る。また、上記のgroup by 句とsumの指定から,
図3のsum($1/$2)と破線で接続されるn.destを得る。
【0023】
次に、外側のクエリでは,内側のクエリ結果とGraph mをm.src=c.destを条件として結合処理しており、この部分から
図3の最上位の箇所であるc.score, c.dest, m.src, m.dest, m.countを得る。
【0024】
次に、このクエリグラフを使って,繰り返し処理の前後で変化する可変属性か変化しない不変属性かの判定を行う。クエリグラフを下側から辿って、集約演算がある場合にはその出力結果を可変属性とし、可変属性から導出される属性も可変属性である。例えば、
図3の(1)において、下側のGraph m, nから開始してグラフを上位に辿る。辿る際に集約演算sumがあるため,その出力結果c.scoreが可変属性である。
【0025】
更に繰り返し処理であるため、再度クエリグラフを下から辿って、可変属性から導出される属性も可変属性とする。例えば、
図3の(1)において、n.scoreが可変属性と分かっているため、n.scoreから導出される属性も可変属性とする。結果的に、
図3の(2)の図を得る。つまり、scoreが更新属性であり,src, dest, countが不変属性である。
【0026】
そして、処理要求分割部11は、テーブル分割処理を行い、結果として、主キーと全ての不変属性から成る不変テーブルIT(src, dest, count)および、主キーと全ての可変属性から成る可変テーブルVT(src, score)を得る。
【0027】
最後に、処理要求分割部11は、処理要求分割処理を行う。処理要求分割部11は、処理要求分割処理として、まず、不変テーブルと可変テーブルとを用いて出力に指定された元テーブルGraphを得る処理要求を、
Graph = select IT.src, IT dest, IT.count, VT.score
from IT, VT
where IT.src = VT.src
として導出する。この導出した処理要求を、ユーザが入力した繰り返し型の処理要求である
図2のGraphに代入して以下のクエリを得る。
iterate
set VT = {select n.dest, 0.15+0.85*sum(n.score/n.count) as score
from {select src, dest, count, score
from IT, VT
where IT.src = VT.src} as n
group by n.dest;}
until | new.score - old.score | /old.score < 0.01;
【0028】
また、入れ子クエリをフラット化することで以下のクエリQ1を得る。
iterate
set VT = {select IT.dest, sum(VT.score/IT.count) as score
from IT, VT
where IT.src = VT.src
group by IT.dest;}
until | new.score - old.score | /old.score < 0.01;
【0029】
本クエリにおいて不変テーブルITに関する操作を抽出して、
図4上側に記載のクエリPを不変データ処理要求として得る。そして、
図4に示すように、クエリPを用いて,先に得られたクエリQ1が書き換えられる(
図4の下側に記載のクエリ)。
【0030】
iterate
set VT = select P.dest, 0.15+ 0.85*sum(VT.score/P.count) as score
from P, VT
where P.src = VT.src
group by P.dest;
until | new.score - old.score | /old.score < 0.01;
を得る。これが可変データ処理要求である。
【0031】
処理要求実行部12は、処理要求分割部11によって分割された不変データ処理要求を実行して実行結果を記憶部13に記憶し、記憶部13に記憶された実行結果を用いて、処理要求分割部11によって分割された可変データ処理要求を繰り返し実行する。
【0032】
具体的には、処理要求実行部12は、不変データ処理要求および可変データ処理要求を処理要求分割部11から受け付けると、不変データ処理要求を実行して結果を実体化し記憶部13に格納する。そして、処理要求実行部12は、ユーザが指定した一定回数回処理要求を実行するか、あるいは出力に指定されたテーブルが格納するデータが繰り返し操作の前後で変化しなくなるまで可変データ処理要求を実行する。この実行の際に、記憶部13に格納した不変データ処理要求の実行結果を再利用する。
【0033】
つまり、処理要求実行部12は、不変データ処理要求を実行して結果を実体化し、繰り返し処理において実体化結果を再利用して可変データ処理要求を実行することで、冗長な処理である不変データ処理要求を繰り返し処理することを排除して高速な繰り返し型のクエリ処理を実現する。このため、単純に繰り返し処理を実行するだけで、繰り返し処理の間に内在する冗長な処理を排除することができる。
【0034】
記憶部13は、不変データ処理要求の実行結果を記憶する。具体的には、記憶部13は、処理要求実行部12により実行された不変データ処理要求の実行結果を記憶し、処理要求実行部12により可変データ処理要求が実行される際に、処理要求実行部12により不変データ処理要求の実行結果が読み出される。
【0035】
ここで記憶部130とは、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、又は、ハードディスク、光ディスク等の記憶装置などである。
【0036】
[分析装置による処理]
次に、
図5および
図6を用いて、第一の実施形態に係る分析装置10による処理を説明する。
図5は、第一の実施の形態に係る分析装置における処理要求分割部の処理動作を示すフローチャートである。
図6は、第一の実施の形態に係る分析装置における処理要求実行部の処理動作を示すフローチャートである。
【0037】
まず、
図5を用いて、第一の実施の形態に係る分析装置における処理要求分割部11の処理について説明する。
図5に示すように、処理要求分割部11は、ユーザが入力する繰り返し型の処理要求を解析することで、出力に指定されたテーブルのすべての属性について,繰り返し処理の前後でカラムの値が変化しない不変属性、あるいは繰り返し処理の前後で変化する可変属性かを判定する処理する処理(属性の変化特性判定処理)を行う(ステップS101)。
【0038】
そして、処理要求分割部11は、出力に指定されたテーブルを2つに分解して,主キーと全ての不変属性から成る不変テーブル、および、主キーと全ての可変属性から成る可変テーブルを得るテーブル分割処理を行う(ステップS102)。
【0039】
続いて、処理要求分割部11は、不変テーブルと可変テーブルを用いて出力に指定された元テーブルを得る処理要求を導出し、導出した処理要求を用いてユーザが入力した繰り返し型の処理要求を不変テーブルと可変テーブルに対する処理要求に書き換える。そして、処理要求分割部11は、書き換えられた処理要求を分解して、不変テーブルに対する不変データ処理要求と、不変テーブルに対する処理要求結果および可変テーブルに対する可変データ処理要求と得る処理要求分割処理を行う(ステップS103)。
【0040】
次に、
図6を用いて、第一の実施の形態に係る分析装置における処理要求実行部12の処理について説明する。
図6に示すように、処理要求実行部12は、不変データ処理要求を実行し(ステップS201)、結果を実体化し記憶部13に格納する。続いて、処理要求実行部12は、可変データ処理要求を実行する(ステップS202)。この実行の際に、ステップ201で格納した不変データ処理要求の実行結果を再利用する。
【0041】
その後、処理要求実行部12は、可変データ処理要求の実行を終了するか否かを判定する(ステップS203)。例えば、処理要求実行部12は、ユーザが指定した一定回数回処理要求を実行するか判定する。この結果、処理要求実行部12は、可変データ処理要求の実行を終了しないと判定した場合には(ステップS203否定)、ステップS202およびステップS203の処理を繰り返す。また、可変データ処理要求の実行を終了すると判定した場合には(ステップS203肯定)、処理を終了する。
【0042】
[第一の実施形態の効果]
上述してきたように、分析装置10は、所定の処理を繰り返し行う繰り返し型の処理要求を解析し、該処理要求を、繰り返し処理において結果が変化しない不変データ処理要求と、繰り返し処理において結果が変化する可変データ処理要求とで分割する。そして、分析装置10は、処理要求分割部11によって分割された不変データ処理要求を実行して実行結果を記憶部13に記憶し、記憶部13に記憶された実行結果を用いて、処理要求分割部11によって分割された可変データ処理要求を繰り返し実行する。
【0043】
このため、繰り返し処理の間で冗長な処理を不変データ処理要求として抜き出し、不変データ処理要求を1回だけ実行し、その結果を再利用することで、冗長な処理である不変データ処理要求を繰り返し処理することを排除して高速な繰り返し型のクエリ処理を実現する。これにより、繰り返し型のクエリ処理の効率化を図ることが可能である。
【0044】
[第二の実施の形態]
上述した第一の実施の形態においては、処理要求の実行処理として、不変データ処理要求を実行して結果を実体化し、繰り返し処理において実体化結果を再利用して可変データ処理要求を実行する場合を説明した。しかし、処理要求の実行処理として、出力に指定されたテーブルの属性が可変属性である属性について処理要求を差分計算の式に展開し、繰り返し処理の間で出力に指定されたテーブルの可変属性の差分を記録することで、記録した差分を差分計算の式に展開された処理要求に入力するようにしてもよい。
【0045】
そこで、以下、第二の実施の形態では、処理要求の実行処理として、出力に指定されたテーブルの属性が可変属性である属性について処理要求を差分計算の式に展開し、繰り返し処理の間で出力に指定されたテーブルの可変属性の差分を記録することで、記録した差分を差分計算の式に展開された処理要求に入力する場合について説明する。
図7は、第二の実施の形態に係る分析装置の処理動作を示すフローチャートである。
図8は、Page Rank計算を例とした処理要求を差分計算の式に展開した例を説明する図である。
【0046】
図7に示すように、第二の実施の形態に係る分析装置の処理要求実行部12では、処理要求分割部11によって判定されたテーブル可変属性である属性について、処理要求を差分計算の式に展開する(ステップS301)。ここでテーブルとは、処理要求実行部12によって得られた可変データ処理要求の出力テーブルである。
【0047】
そして、処理要求実行部12は、1回前の繰り返し処理要求の実行において記録したテーブルの変更差分を参照して繰り返し処理要求を実行する(ステップS302)。そして、処理要求実行部12は、繰り返しの処理要求の実行が完了した際に、テーブルの変更差分を計算して記憶部13に記録する(ステップS303)。
【0048】
その後、処理要求実行部12は、可変データ処理要求の実行を終了するか否かを判定する(ステップS304)。例えば、処理要求実行部12は、ユーザが指定した一定回数回処理要求を実行するか判定する。この結果、処理要求実行部12は、可変データ処理要求の実行を終了しないと判定した場合には(ステップS304否定)、ステップS302〜ステップS304の処理を繰り返す。また、可変データ処理要求の実行を終了すると判定した場合には(ステップS304肯定)、処理を終了する。
【0049】
図8を用いて、処理要求実行部12における処理をPage Rank計算の例を用いて説明する。
図7におけるステップS301では、テーブルVTの可変属性である属性scoreについて、以下のように、処理要求を差分計算の式に展開する。
「VT’(id, V.score’) = VT(id, V.score) +map ΔVT(id, V. Δscore)」
【0050】
この式の意味は,繰り返し処理において,繰り返し処理前のVT(id, V.score)テーブルに対して、更新差分ΔVT(id, V. Δscore)テーブルを記録しておくことで、各idのレコード毎に、更新後のscore‘がscore+Δscoreとして得ることができるということである。
【0051】
ここで、VTの定義は
図8の下側のクエリで与えられ、更に前述のステップS101では属性の変化特性判定処理において更新属性が「score」であることが判明しているため、scoreの更新差分をΔscoreとすると、ΔVT(id, V. Δscore)が
図8の下側のクエリ
ΔVT = select P.dest, sum(VT. Δscore/P.count) as score
From VT, P
Where P.src = VT.dest
Group by P.dest;
で与えられる。
【0052】
このように、第二の実施の形態に係る分析装置では、処理要求を差分計算の式に展開し、繰り返し処理の間で出力に指定されたテーブルの可変属性の差分を記録することで、変更差分のないレコードの処理を排除して高速な繰り返し型のクエリ処理を実現する。
【0053】
[システム構成]
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【0054】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【0055】
[プログラム]
また、上記実施形態において説明した分析装置10が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、第一の実施形態に係る分析装置10が実行する処理をコンピュータが実行可能な言語で記述したデータ検索プログラムを作成することもできる。この場合、コンピュータが分析プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかる分析プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録され分析プログラムをコンピュータに読み込ませて実行することにより上記第一の実施形態と同様の処理を実現してもよい。以下に、
図1に示した分析装置10と同様の機能を実現する分析プログラムを実行するコンピュータの一例を説明する。
【0056】
図9は、分析プログラムを実行するコンピュータ1000を示す図である。
図9に例示するように、コンピュータ1000は、例えば、メモリ1010と、CPU1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有し、これらの各部はバス1080によって接続される。
【0057】
メモリ1010は、
図9に例示するように、ROM(Read Only Memory)1011及びRAM1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、
図9に例示するように、ハードディスクドライブ1031に接続される。ディスクドライブインタフェース1040は、
図9に例示するように、ディスクドライブ1041に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ1041に挿入される。シリアルポートインタフェース1050は、
図9に例示するように、例えばマウス1051、キーボード1052に接続される。ビデオアダプタ1060は、
図9に例示するように、例えばディスプレイ1061に接続される。
【0058】
ここで、
図9に例示するように、ハードディスクドライブ1031は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093、プログラムデータ1094を記憶する。すなわち、上記の分析プログラムは、コンピュータ1000によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ1031に記憶される。
【0059】
また、上記実施形態で説明した各種データは、プログラムデータとして、例えばメモリ1010やハードディスクドライブ1031に記憶される。そして、CPU1020が、メモリ1010やハードディスクドライブ1031に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出し、テーブル作成手順、グラフ作成手順、検索手順を実行する。
【0060】
なお、分析プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1031に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ等を介してCPU1020によって読み出されてもよい。あるいは、分析プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。