(57)【要約】事前に算出した統計値を効率的に再利用し、統計処理を高速化する。情報処理装置であって、データの集合へのアクセス頻度を記憶して管理するアクセス頻度管理手段と、前記アクセス頻度管理手段が管理するアクセス頻度に基づいて、アクセス頻度が第１所定値以上の前記集合を少なくとも２つに分割した部分集合を生成する分割手段と、前記分割手段によって分割した前記部分集合ごとに統計値を算出する算出手段と、を備えた。
2016178313.tif 000002
【特許請求の範囲】
【請求項１】
データの集合へのアクセス頻度を記憶して管理するアクセス頻度管理手段と、
前記アクセス頻度が第１所定値以上の前記集合を少なくとも２つの部分集合に分割する分割手段と、
分割された前記部分集合ごとに統計値を算出する算出手段と、
を備えた情報処理装置。
【請求項２】
前記分割手段は、分割された前記部分集合のアクセス頻度を初期化する、請求項１に記載の情報処理装置。
【請求項３】
前記分割手段は、前記統計値にアクセスがあったときに分割を実行する、請求項１または２に記載の情報処理装置。
【請求項４】
前記部分集合に含まれる前記統計値を木構造として管理する管理手段をさらに備えた、請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記統計値の全体サイズが所定の最大値を超えた場合に、少なくとも２つの前記部分集合を併合する併合手段をさらに備えた、請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記併合手段は、前記アクセス頻度が最小の部分集合を、該部分集合以外の少なくとも１つの部分集合と併合する、請求項５に記載の情報処理装置。
【請求項７】
前記併合手段は、前記アクセス頻度が最小の部分集合を、該部分集合に隣接する部分集合と併合する、請求項６に記載の情報処理装置。
【請求項８】
前記併合手段は、前記隣接する部分集合が２つある場合、前記アクセス頻度が小さい方の前記隣接する部分集合と併合する、請求項７に記載の情報処理装置。
【請求項９】
データの集合へのアクセス頻度を記憶して管理し、
前記アクセス頻度が第１所定値以上の前記集合を少なくとも２つの部分集合に分割し、
分割された前記部分集合ごとに統計値を算出する、
情報処理方法。
【請求項１０】
データの集合へのアクセス頻度を記憶して管理するアクセス頻度管理処理と、
前記アクセス頻度が第１所定値以上の前記集合を少なくとも２つの部分集合に分割する分割処理と、
分割された前記部分集合ごとに統計値を算出する算出処理と、
をコンピュータに実行させる情報処理プログラムを記憶する記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法および情報処理プログラムに関する。
【背景技術】
【０００２】
上記技術分野において、非特許文献１には、データを管理するとき、統計処理の際に事前計算したブロックごとの統計値を再利用することで、レコードのスキャンを省いてＩ／Ｏ（Input/Output）量と計算量を削減し、統計処理を高速化する技術が開示されている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】小山田など、「データの部分集約による高速かつ正確なデータ集計処理の実現」、データベース・システム研究会報告2014-DBS-160(19)、 pp．1-7、２０１５年 (http://ci.nii.ac.jp/naid/110009842514)
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記文献に記載の技術では、事前に設定したブロック単位でなくてはブロック単位で事前に計算した統計値を効率的に再利用することができず、統計処理を高速化することができなかった。【０００５】
本発明の目的は、上述の課題を解決する技術を提供することにある。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明に係る情報処理装置は、
データの集合へのアクセス頻度を記憶して管理するアクセス頻度管理手段と、
前記アクセス頻度が第１所定値以上の前記集合を少なくとも２つの部分集合に分割する分割手段と、
分割された前記部分集合ごとに統計値を算出する算出手段と、を備えた。【０００７】
上記目的を達成するため、本発明に係る情報処理方法は、
データの集合へのアクセス頻度を記憶して管理するアクセス頻度管理ステップと、
前記アクセス頻度が第１所定値以上の前記集合を少なくとも２つの部分集合に分割する分割ステップと、
分割された前記部分集合ごとに統計値を算出する算出ステップと、を含む。【０００８】
上記目的を達成するため、本発明に係る記録媒体は、
データの集合へのアクセス頻度を記憶して管理するアクセス頻度管理ステップと、
前記アクセス頻度が第１所定値以上の前記集合を少なくとも２つの部分集合に分割する分割ステップと、
分割された前記部分集合ごとに統計値を算出する算出ステップと、をコンピュータに実行させる情報処理プログラムを記憶する。
【発明の効果】
【０００９】
本発明によれば、事前に算出した統計値を効率的に再利用することができ、統計処理を高速化することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の第１実施形態に係る情報処理装置の構成を示すブロック図である。
【図２Ａ】本発明の第２実施形態に係る情報処理装置による部分集約木の構築を説明する図である。
【図２Ｂ】本発明の第２実施形態に係る情報処理装置による部分集約木におけるリーフノードの分割手順を説明する図である。
【図３】本発明の第２実施形態に係る情報処理装置の機能構成を示すブロック図である。
【図４】本発明の第２実施形態に係る情報処理装置のファイル保持部の保持内容を説明する図である。
【図５】本発明の第２実施形態に係る情報処理装置の部分集約木保持部の保持内容を説明する図である。
【図６】本発明の第２実施形態に係る情報処理装置のハードウェア構成を示すブロック図である。
【図７】本発明の第２実施形態に係る情報処理装置においてデータを入力した際に実行される処理の流れを例示するフローチャートである。
【図８Ａ】本発明の第２実施形態に係る情報処理装置において問合せ実行時の処理の流れを例示するフローチャートである。
【図８Ｂ】本発明の第２実施形態に係る情報処理装置によるリーフノードの分割処理手順を説明するフローチャートである。
【図９Ａ】本発明の第３実施形態に係る情報処理装置による部分集約木におけるリーフノードの併合手順を説明する図である。
【図９Ｂ】本発明の第３実施形態に係る情報処理装置による部分集約木におけるリーフノードの併合手順を説明する図である。
【図１０】本発明の第３実施形態に係る情報処理装置の機能構成を示すブロック図である。
【図１１】本発明の第３実施形態に係る情報処理装置のハードウェア構成を示すブロック図である。
【図１２Ａ】本発明の第３実施形態に係る情報処理装置において問合せの実行時の処理の流れを例示するフローチャートである。
【図１２Ｂ】本発明の第３実施形態に係る情報処理装置による部分集約木におけるリーフノードの併合処理手順を説明するフローチャートである。
【発明を実施するための形態】
【００１１】
以下に、図面を参照して、本発明の実施の形態について例示的に詳しく説明する。ただし、以下の実施の形態に記載されている構成要素はあくまで例示であり、本発明の技術範囲をそれらのみに限定する趣旨のものではない。
【００１２】
［第１実施形態］
本発明の第１実施形態としての情報処理装置１００について、図１を用いて説明する。
情報処理装置１００は、アクセス頻度管理部１０１と分割部１０２と統計値算出部１０３とを含む。
【００１３】
アクセス頻度管理部１０１は、データの集合へのアクセス頻度を記憶して管理する。
【００１４】
分割部１０２は、アクセス頻度管理部１０１が管理するアクセス頻度に基づいて、アクセス頻度が第１所定値以上の集合を少なくとも２つに分割した部分集合を生成する。
【００１５】
統計値算出部１０３は、分割した部分集合ごとに統計値を算出する。
【００１６】
本実施形態によれば、アクセス頻度に応じて分割された部分集合が自動的に生成され、生成された部分集合の統計値が自動的に算出される。これにより、事前に設定したブロック単位（部分集合単位）でなくても、事前に計算した統計値を効率的に再利用することができ、統計処理を高速化することができる。
【００１７】
［第２実施形態］
次に本発明の第２実施形態に係る情報処理装置について、図２Ａ〜図８Ｂを参照して説明する。なお、全ての図面において、同様な構成要素には同様の符号を付し、適宜説明を省略する。
【００１８】
《前提技術》
関係データベースシステム（Relational DataBase Management System）は、関係モデルにもとづく表形式のデータ（以下テーブル）を保持し、ユーザにデータの効率的な検索と更新とを提供する。テーブル内の行はレコードと呼ばれ、ひとつのデータを表わす。データはいくつかの属性を持つことができ、テーブル内の列が各属性に対応する。そのテーブルに含まれる列の＜列名、データ型＞一覧を、そのテーブルのスキーマと呼ぶ。
【００１９】
関係データベースシステムのユーザは、テーブルに対する検索処理および更新処理をプログラミング言語によって関係データベースシステムに対して指示する。この指示は問合せ（Query）と呼ばれる。問合せを記述するためには、ＳＱＬ（Structured Query Language）というプログラミング言語が標準的に用いられている。ＳＱＬを用いると、テーブルの中から条件にあてはまるレコードを簡便かつ効率的に取り出すことができる。また、列名を指定することで、レコードの中から必要な属性のみを取り出すこともできる。
【００２０】
関係データベースシステムにおいて頻繁におこなわれる処理のひとつに、属性の統計処理がある。属性の統計処理とは、テーブルの所定の属性の値群から何らかの統計値を計算するものであり、統計値の例としては最大値、最小値、平均値、標準偏差などがある。
【００２１】
属性の統計処理はテーブル内の全てないし大部分のレコードに関しておこなわれることが多い。そのため、テーブルが巨大であった場合には大量のレコードをスキャンすることとなり、多量のＩ／Ｏ処理と計算処理が発生して処理速度が長大となる。
【００２２】
《本実施形態の説明》
本実施形態では、データの集合を分割し、分割した部分集合ごとに統計値を算出しておき、問合せがあった際に統計値を用いて計算することにより計算速度を高速化している。
また、本実施形態では、分割する際に部分集約木構造を用いている。
【００２３】
図２Ａは、例えば年齢(age)、体重(weight)、および身長(height)の３つの属性を持つデータの集合について、年齢（age）をキー属性として高さが１（分割を一段階おこなう意味）の部分集約木を示す図である。図中、楕円は部分集約木のノード２０１、２０２、２０３を表わし、矩形は分割された実際のデータ（部分集合）２０４、２０５を表わす。各ノード２０１、２０２、２０３はキー属性の値域を二分割し、最下部のノード２０２、２０３（リーフノード）は実際のデータ２０４、２０５へのポインタと、その区分に対して計算した統計値を保持する。これにより、部分集合となるデータ２０４、２０５とリーフノード２０２、２０３とが対応付けられる。また、キー属性となる年齢(age)の値域であるデータが０歳から４９歳のデータ２０４と５０歳から１００歳のデータ２０５の二つへ区切られている。また、それぞれの区間において残りの属性（体重:weight、身長:height）の統計値（最大値:max、最小値:min、平均値:mean、合計値:sum、データ数:count）が計算されている。
【００２４】
さらに、アクセス頻度が所定の閾値を超えたリーフノードに対して、リーフノード２０２、２０３の分割処理を繰り返しおこなうほど木は成長し、より細かな単位で統計値が計算されてゆく。これによって統計値を再利用できる確率は高まる。つまり、リーフノードの分割処理は、あるリーフノードが担当するキー属性値の領域を二分割し、元のリーフノードの管轄下にあったデータ群を各領域に分配した上で、それらの統計値を再計算し、新たなリーフノードを生成する。例えば図２Ａの部分集約木において、［０，４９］の年齢を担当するリーフノード２０２を分割すると、図２Ｂのように［０，２４］の年齢を担当するリーフノード２０６と、［２５，４９］の年齢を担当するリーフノード２０７の二つが生成される。各リーフノード２０６、２０７に対応してデータ（部分集合）２０８、２０９が生成される。
【００２５】
なお、図２Ａ、２Ｂにおいては、アクセス頻度をaccess count [count: x]と表わしている。また、リーフノードを分割した際、新たに生成されたリーフノードのアクセス頻度（access count [count: x]）は初期化されて０になる。
【００２６】
《本実施形態の機能構成》
図３は、本実施形態に係る情報処理装置の機能構成を説明するためのブロック図である。図３において、各ブロックは、ハードウェア単位の構成ではなく、機能単位の構成を表している。
【００２７】
情報処理装置３００は、データ入力部３０１、ファイル操作部３０２、ファイル保持部３０３、部分集約木管理部３０４、部分集約木保持部３０５、問合せ受付部３０６、および問合せ実行部３０７を有する。以下、それぞれについて説明する。
【００２８】
《データ入力部》
データ入力部３０１は、情報処理装置３００の処理対象となるデータを入力する。データ形式の例は、関係データベースシステムにおけるテーブルデータである。テーブルデータは表形式のデータであり、表の行はひとつのレコード（例：職員の情報）、表の各列はレコードの属性値（例：職員の年齢、身長、性別など）となる。
【００２９】
データ入力部３０１がデータを取得する方法は様々である。例えばデータ入力部３０１は、外部の装置から入力されるデータを取得する。その他にも例えば、データ入力部３０１は、手動でデータを入力する。さらにデータ入力部３０１は、外部の装置に対して通信などによってアクセスして、データを入力してもよい。
【００３０】
《ファイル操作部》
ファイル操作部３０２は、ファイルの生成処理とファイルの読み込み処理をおこなう。
ファイルの生成処理は、データ入力部３０１から入力されたデータを主記憶装置や二次記憶装置などの記憶装置に記憶するためにファイル化し、ファイル保持部３０３へ保持する処理である。ファイル操作部３０２は、ファイルの読み込み処理において、問合せ実行部３０７から、データが保持されているファイル名、読み込みを開始するオフセット値、そして読み込むデータのサイズを受け取る。さらに、ファイル操作部３０２は、ファイル読み込み処理において、対応するデータをファイル保持部３０３から取得して、問合せ実行部３０７へ返却する。
【００３１】
《ファイル保持部》
ファイル保持部３０３は、ファイル操作部３０２の生成したファイルを記憶装置に保持する。記憶装置は主記憶装置であってもよいし、二次記憶装置であってもよい。
【００３２】
《部分集約木保持部》
部分集約木保持部３０５は、ファイル保持部３０３が保持するデータに対して部分的に統計値を計算し、その結果を保持する。ここでは統計値の保持につかわれるデータ構造を部分集約木（Partial Aggregation Tree）と称する。部分集約木は二分木（Binary Tree）にもとづくデータ構造であり、非特許文献１に記載の「統計値処理において事前計算した統計値を再利用する処理」を高速化するために用いられる。
【００３３】
部分集約木は、少なくとも２つの属性を持つデータ（例：年齢、体重、身長）に対しデータを部分的に区切って統計値を計算した上で、保持するデータ構造である。部分集約木は任意の属性値をデータの分割に利用する。分割に利用される属性値をキー属性と称する。
【００３４】
部分集約木はキー属性の範囲を順に二分割していき、各範囲に対応するデータ群の部分的な統計値を計算して保持する。分割数を増やすこと、すなわち部分集約木の高さを大きくすることによって、より細かく統計値を計算することが可能となり、非特許文献１に記載の技術による統計値の再利用もおこないやすくなる。
【００３５】
《部分集約木管理部》
部分集約木管理部３０４は、部分集約木操作部３４１と分割指示部３４２とアクセス頻度管理部３４３とを含む。
【００３６】
部分集約木操作部３４１は、データ集合を２つ以上の部分集合に分割し、分割した部分集合ごとにデータの統計値を算出する。
【００３７】
分割指示部３４２は、アクセス頻度管理部３４３が管理するアクセス頻度に基づいて、アクセス頻度の高い部分集合に関して、さらに分割した部分集合を生成するように部分集約木操作部３４１に指示する。
【００３８】
アクセス頻度管理部３４３は、各部分集合へのアクセス頻度を記憶して管理する。なお、アクセス頻度管理部３４３が管理するアクセス頻度としては、例えば所定時間内におけるアクセス数がある。
【００３９】
部分集約木管理部３０４は、問合せ実行部３０７の問合せに基づいて、部分集約木保持部３０５に保持されている部分集約木の操作を部分集約木操作部３４１を用いて行なう。
さらに、部分集約木管理部３０４は、アクセス頻度管理部３４３を用いて、問合せ実行部３０７からの問合せ対象となるデータを含む部分集合へのアクセス数を計数してその計数値を管理する。
【００４０】
部分集約木操作部３４１が行なう操作には、リーフノードの分割、リーフノードの併合、そして統計処理の実行がある。
【００４１】
《問合せ受付部》
問合せ受付部３０６は、ファイル保持部３０３に保持されているデータに対する処理の指示を取得する。指示の記述に使われる方式の例としては、データに対する問合せを記述するプログラミング言語の一種であるＳＱＬ（Structured Query Language）がある。
【００４２】
問合せの例としては、データから最大値、最小値、平均値、および標準偏差などの統計値を集計する処理や、関係データベースで用いられる選択、結合、射影処理、およびこれらの処理の組み合わせによる複雑な情報処理などがある。
【００４３】
《問合せ実行部》
問合せ実行部３０７は、問合せ受付部３０６が取得した問合せを実行する。この際、問合せ実行部３０７は部分集約木管理部３０４を通じて、問合せの中で事前に計算した統計値が問合せ範囲によっては再利用できるか否かの情報、および再利用可能であった場合は範囲における統計値を取得する。統計値が再利用できない範囲については、ファイル操作部３０２を通じてファイル保持部３０３内のデータへアクセスし、統計値を計算する。そして、各範囲の統計値を併合することにより、問合せ実行部３０７は最終的な問合せ結果を構築する。
【００４４】
《ファイル保持部の保持内容》
次に、ファイル保持部３０３の保持内容について図４を参照して説明する。
【００４５】
図４に示すように、ファイル保持部３０３は例えばテーブル４００を保持し、このテーブル４００は、個々の要素の識別子（ＩＤ：Identifier）４０１、データ４０２、および属するブロックの識別子（ＩＤ）４０３を含む。データ４０２としては、上記の例のように年齢、身長、および体重などのデータを有する。
【００４６】
《部分集約木保持部の保持内容》
次に、部分集約木保持部３０５の保持内容について図５を参照して説明する。
【００４７】
図５に示すように、部分集約木保持部３０５はテーブル５００を保持し、このテーブル５００は、ブロックＩＤ５０１、アクティブフラグ５０２、要素数５０３、統計値５０４、高さ（分割レベル）５０５、親ブロックＩＤ５０６、およびアクセスカウント数５０７を有する。
【００４８】
《ハードウェア構成の一例》
次に、本実施形態に係る情報処理装置のハードウェア構成の一例を図６を参照して説明する。
【００４９】
図に示すように、情報処理装置３００は、ＣＰＵ(Central Processing Unit)６０１、ＲＯＭ(Read Only Memory)６０２、通信制御部６０３、およびＲＡＭ(Random Access Memory)６０４を備えている。さらに、情報処理部３００は、ストレージ６０５、出力インタフェース６０６、表示部６０７、プリンタ６０８、および入力部６１０を備えている。ＣＰＵ６０１は中央処理部であって、様々なプログラムを実行することにより情報処理装置３００全体を制御する。
【００５０】
ＲＯＭ６０２は、リードオンリメモリであり、ＣＰＵ６０１が最初に実行すべきブートプログラムの他、各種パラメータ等を記憶している。また、通信制御部６０３は、ネットワークを介した各種装置との通信を制御する。ＲＡＭ６０４は、ランダムアクセスメモリであり、入力データ６４１、分割対象ブロックノード（集約木）６４２、分割済みブロック（リーフノード）６４３、統計値６４４、問合せ情報６４５、応答情報６４６、入出力データ６４７、および送受信データ６４８を含む。
【００５１】
また、ストレージ６０５は、部分集約木保持部３０５とファイル保持部３０３とを有している。さらに、ストレージ６０５は、データ入力モジュール６５１、問合せ受付モジュール６５２、アクセス頻度管理モジュール６５３、およびファイル操作モジュール６５４を有する。さらにまたストレージ６０５は、問合せ実行モジュール６５５、部分集約木操作モジュール６５６、分割指示モジュール６５７、およびデータ出力モジュール６５８等を有している。
【００５２】
また、入力部６１０は、リーダ６１１、キーパッド６１２、タッチパネル６１３およびこれらからの入力をＣＰＵ６０１に渡す入力インタフェース６１５を含む。ここではリーダ６１１は、一例としてバーコードリーダとするが、ＲＦＩＤ(Radio Frequency Identifier)タグリーダなどでもよい。
【００５３】
一方、入力部６１０或いは通信制御部６０３を介して問合せ受付モジュール６５２が受け付けた問合せに対する回答は、通信制御部６０３を介して外部装置に送信される。或いは出力インタフェース６０６を介して表示部６０７やプリンタ６０８に出力される。
【００５４】
なお、データ入力部３０１は、ＣＰＵ６０１、ＲＯＭ６０２、通信制御部６０３、ＲＡＭ６０４、入力部６１０、およびデータ入力モジュール６５１によって構成される。
【００５５】
ファイル操作部３０２は、ＣＰＵ６０１、ＲＯＭ６０２、ＲＡＭ６０４、およびファイル操作モジュール６５４によって構成される。
【００５６】
部分集約木管理部３０４は、ＣＰＵ６０１、ＲＯＭ６０２、ＲＡＭ６０４、アクセス頻度管理モジュール６５３、部分集約木操作モジュール６５６、および分割指示モジュール６５７によって構成される。
【００５７】
問合せ受付部３０６は、ＣＰＵ６０１、ＲＯＭ６０２、通信制御部６０３、ＲＡＭ６０４、入力部６１０、および問合せ受付モジュール６５２によって構成される。
【００５８】
問合せ実行部３０７は、ＣＰＵ６０１、ＲＯＭ６０２、ＲＡＭ６０４、および問合せ実行モジュール６５５によって構成される。
【００５９】
《処理の流れ》
図７は、本実施形態の情報処理装置３００において、データを入力した際に実行される処理の流れを例示するフローチャートである。ステップＳ７０１において、データ入力部３０１はデータを取得する。ステップＳ７０３において、ファイル操作部３０２はデータをファイル化する。ステップＳ７０５においてファイル操作部３０２はファイル保持部３０３へファイルを保存する。
【００６０】
図８Ａは、本実施形態の情報処理装置３００において、問合せの実行時の処理の流れを例示するフローチャートである。ステップＳ８０１において、問合せ受付部３０６は問合せを取得する。ステップＳ８０３において、問合せ受付部３０６から指示を受けた問合せ実行部３０７は、部分集約木管理部３０４を通じて問合せのあった部分集約木を探索する。さらに、ステップＳ８０５において、問合せ実行部３０７は、探索によって得られた部分集約木の統計処理で事前計算した統計値が再利用可能か否かを判定する。
【００６１】
この判定の結果、もし再利用が可能であれば、ステップＳ８０７において、問合せ実行部３０７は部分集約木保持部３０５から事前計算した統計値を取得する。もし再利用が可能でなければ、ステップＳ８０９において、問合せ実行部３０７は、今後その問合せで再利用が可能になるように、部分集約木管理部３０４に指示し、リーフノードを分割して木の成長処理をおこなう。これにより、問合せ実行部３０７は、このリーフノードに対応するデータ集合を２つ以上の部分集合に分割して木を成長させる。
【００６２】
こうして問合せ実行部３０７は、問合せの実行に必要な統計値を取得し終えると、ステップＳ８１１において、それらの統計値を統合して問合せ結果を算出する。その後、ステップＳ８１３において、問合せ実行部３０７は部分集約木管理部３０４を通じて部分集約木のリーフノードに記録されているアクセス頻度を更新する。
【００６３】
次に、ステップＳ８０９の処理の詳細を図８Ｂを参照して説明する。
【００６４】
ステップ８２１において、問合せ実行部３０７が、リーフノードに対応するデータ集合を２つ以上の部分集合に分割する際、問合せ実行部３０７はリーフノードのアクセス頻度（アクセス数のカウント値）を取得する。次に、ステップＳ８２３において、問合せ実行部３０７はいずれかのリーフノードのカウント値が所定の閾値αを超えているか否かを判定する。この判定の結果、カウント値が閾値αを超えているときは、ステップＳ８２５において、問合せ実行部３０７はカウント値が閾値αを超えているリーフノードを分割する。次いで、ステップＳ８２７において、問合せ実行部３０７は、分割により新たに生成したリーフノードの統計値を算出し、ステップＳ８１１の処理に移行する。
【００６５】
また、ステップＳ８２３の判定の結果、カウント値が閾値αを超えていないときは、問合せ実行部３０７は、ステップＳ８１１の処理に移行する。
【００６６】
本実施形態の情報処理装置３００によれば、アクセス頻度の高い統計値を有するデータの部分集合を自動的に検出すると共にアクセス頻度の高い部分集合を分割し、分割して得た部分集合ごとに新たに統計値を算出し保持している。このため、統計処理において事前に計算した統計値を再利用できる確率が高まり、統計処理の性能が向上する。さらに、事前に設定したブロック単位すなわち事前に設定したデータの部分集合単位でなくても、事前に自動計算した統計値を再利用することができ、レコードのスキャンを省いてＩ／Ｏ量と計算量を削減し、属性の統計処理を高速化することができる。
【００６７】
なお、本実施形態ではデータ集合とこのデータ集合を分割した部分集合とのそれぞれにノードを割り当てた木構造として情報処理を行なったが、これに限定されることはない。
例えば、木構造を用いないで情報処理するようにしても同様の効果を得られることは言うまでもない。
【００６８】
また、本実施形態では所定時間内のアクセス数をアクセス頻度とし、アクセス頻度の高い統計値を有する部分集合を分割したが、部分集合へのアクセス数があらかじめ設定した閾値を超えたときにアクセス頻度が高いと判定してこの部分集合を分割してもよい。
【００６９】
また、本実施形態ではアクセス頻度が高い部分集合を二分割するようにしたが、３つ以上に分割するようにしてもよい。
【００７０】
［第３実施形態］
次に本発明の第３実施形態に係る情報処理装置について、図９Ａ〜図１２Ｂを参照して説明する。本実施形態に係る情報処理装置は、上記第２実施形態と比べると、アクセス数のカウント値が最小のリーフノードを他のリーフノードと併合する処理を行なう点で異なる。その他の構成および動作は、第２実施形態と同様であるため、同じ構成および動作については同じ符号を付してその詳しい説明を省略する。
【００７１】
例えば第２実施形態と同様に年齢(age)、体重(weight)、および身長(height)の３つの属性を持つデータの集合について、年齢（age）をキー属性として図９Ａに示す部分集約木が構築されていたとする。このときアクセス数が最小であるリーフノード９０４は、アクセス数が最小から２番目のリーフノード９０３と併合される。つまり、図９Ａでは、［０，２４］の年齢を担当するリーフノード９０４と、［２５，４９］の年齢を担当するリーフノード９０５と［５０，１００］の年齢を担当するリーフノード９０３とが存在する。リーフノード９０４のアクセス数は８、リーフノード９０３のアクセス数は１０、リーフノード９０５のアクセス数は５０である。したがって、リーフノード９０４のアクセス数が最小であり、リーフノード９０３のアクセス数が最小から２番目となる。したがってリーフノード９０３とリーフノード９０４とが併合され、図９Ｂの部分集約木が構築される。なお、リーフノードを併合した際、新たに生成されたリーフノードのアクセス数（access count [count: x]）は初期化されて０になる。
【００７２】
このようにアクセス数（アクセス頻度）が小さいリーフノードを併合することで、統計値の数を減らすことができ、統計値を保持しておく記憶領域（統計値全体の保持サイズ）を減らすことができる。
【００７３】
《本実施形態の機能構成》
図１０は、本実施形態に係る情報処理装置の構成を説明するための機能ブロック図である。本実施形態に係る情報処理装置１０００は、上記第２実施形態と比べると、部分集約木操作部１０４１と併合指示部１０４４とを備えた部分集約木管理部１００１を有する点で異なる。その他の構成および動作は、第２実施形態と同様であるため、同じ構成および動作については同じ符号を付してその詳しい説明を省略する。
【００７４】
部分集約木操作部１０４１は、分割指示部３４２の指示に基づいて、データ集合を２つ以上の部分集合に分割し、分割した部分集合ごとにデータの統計値を算出する。さらに、部分集約木操作部１０４１は、併合指示部１０４４の指示に基づいて、２つ以上の部分集合を１つに併合し、併合して得られた部分集合の統計値を算出する。ここでは、リーフノードおよびこのリーフノードのデータを部分集合と称している。
【００７５】
併合指示部１０４４は、アクセス頻度管理部３４３が管理するアクセス頻度に基づいて、アクセス頻度が最小の部分集合に関して、他のアクセス頻度の低い部分集合と併合した部分集合を生成するように部分集約木操作部１０４１に指示する。なお、隣接する部分集のどちらもアクセス頻度が低いときはこれらを併合する。また、アクセス頻度が最小の部分集合に隣接する部分集合のアクセス頻度が所定値Ｒよりも大きい場合、アクセス頻度が最小の部分集合と隣接しない部分集合と併合する。この際、アクセス頻度が最小の部分集合を、アクセス頻度が所定値Ｑ（＜Ｒ）以下の部分集合と併合する。また、併合する部分集合の数は３つ以上であってもよい。
【００７６】
《本実施形態のハードウェア構成》
図１１は本実施形態に係る情報処理装置１０００のハードウェア構成を説明するためのブロック図である。本実施形態に係る情報処理装置１０００は、上記第２実施形態と比べると、ＲＡＭ６０４に閾値１１４１を有するとともにストレージ６０５に併合指示モジュール１１５１有する点で異なる。その他の構成および動作は、第２実施形態と同様であるため、同じ構成および動作については同じ符号を付してその詳しい説明を省略する。
【００７７】
《処理の流れ》
本実施形態の情報処理装置１０００における問合せ受け入れ時の処理は、リーフノードの併合処理が加わる点において第２実施形態と異なる。図１２Ａに本実施形態における問合せ受け入れ時の処理のフローチャートを示して説明する。なお、第２実施形態における処理と同一部分は同一符号をもって表わし、その説明を省略する。本実施形態の処理と第２実施形態の処理では、ステップＳ８０９とステップＳ８１１の間にステップＳ１２０１、およびＳ１２０２の処理が加わった点において異なる。すなわち、ステップＳ８０９の処理の後、ステップＳ１２０１において、問合せ実行部３０７は、部分集約木管理部１００１を通じて、保持する統計値の数すなわちリーフノードの数が、事前に入力部６１０を介して設定された許容最大数を超過するか否かを判定する。
【００７８】
この判定の結果、もし統計値の数が許容最大数以下であれば、ステップＳ８１１に移行する。また、ステップＳ１２０１の判定の結果、もし統計値の数が許容最大数を超過するようであれば、ステップＳ１２０２において、部分集約木管理部１００１は、リーフノードに記録されている部分集合へのアクセス頻度を確認し、アクセス頻度が所定値以下のリーフノードを併合する。このようにすることで、統計値の数を減らして許容最大数内に収まるように木を縮退する。ここで、木の縮退とはリーフノードの数を減らすことである。
こうして問合せの実行に必要な統計値を取得し終えると、ステップＳ８１１において、問合せ実行部３０７はそれらの統計値を統合して問合せ結果を算出する。
【００７９】
次に、ステップ１２０２の処理の詳細を図１２Ｂを参照して説明する。
【００８０】
ステップ１２２１において、問合せ実行部３０７が、アクセス数が最小のリーフノードに対応する部分集合を他のリーフノードの部分集合と併合する際、問合せ実行部３０７はリーフノードのアクセス頻度（アクセス数のカウント値）を取得する。次に、ステップＳ１２２３において、問合せ実行部３０７は、最小のアクセスカウント値のノードを選択する。ステップＳ１２２５において、問合せ実行部３０７は、このカウント値が最小のノードの両隣のノードのカウント値を取得する。さらに、ステップＳ１２２７において、問合せ実行部３０７は、両隣のノードのうちアクセスカウント値が小さい方のノードと併合して新たなリーフノードおよびデータを生成する。次いで、ステップＳ１２２９において、問合せ実行部３０７は、併合によって得られたリーフノードのデータの統計値を算出する。この後、問合せ実行部３０７は、ステップＳ１０１５の処理に移行する。
【００８１】
上記第２実施形態においては、リーフノードの分割処理を繰り返し行なうほど木は成長し、より細かな単位で統計値が計算されていく。これによって統計値を再利用できる確率は高まる。しかし、データ集合を分割するたびに統計値の数が増えるため、部分集約木のデータサイズが肥大化しうる。そのため、本実施形態では、部分集約木が保持する統計値の最大許容数を設定し、リーフノードの分割後に統計値数がその最大許容数を超えた場合は、適切なリーフノードを併合することで、統計値数がその最大許容数を超えないよう保つようにしている。つまり、あまり参照されないデータ領域を含む部分集合については細かな単位で統計値を保つ必要がない。このため、部分集約木はリーフノードに対応するデータの部分集合に対する利用者のアクセス頻度を記憶し、「最も参照されないリーフノード」に対応するデータの部分集合を、隣接する少なくとも１つの部分集合との併合の対象に選ぶ。この際、併合対象となる２つもしくは３つのアクセス頻度の平均値を算出し、この平均値が所定値以下のときに併合を行なう。これにより、アクセス頻度の低い部分集合と、アクセス頻度の高い部分集合との併合を回避することができる。尚、隣接する部分集合のうちのアクセス頻度が小さい方の部分集合と併合しても良い。また、隣接する部分集合のアクセス頻度が所定の閾値以上であるときは、アクセス頻度が所定の閾値以下であれば、隣接しない部分集合同士を併合しても良い。また、併合する部分集合の数は３つ以上であっても良い。
【００８２】
なお、アクセス頻度の管理には単純なＬＲＵ（Least Recently Used）アルゴリズム(http://en.wikipedia.org/wiki/Page_replacement_algorithm#Least_recently_used)を用いてもよい。また、その軽量な代替アルゴリズムであるＣｌｏｃｋ(http://en.wikipedia.org/wiki/Page_replacement_algorithm#Clock)を用いてもよい。
【００８３】
部分集約木管理部１００１におけるリーフノードの併合処理は、同じ親ノードを持つ２つの隣接するリーフノードが担当する領域を併合して新たなリーフノードを生成し、親ノードを新たなリーフノードで置き換える。この際、新たなリーフノードの統計値を計算する必要があるが、これは元々の２つのリーフノードの持つ統計値を併合することで、実施可能である。すなわち、実際のデータをもう一度スキャンして統計値を再計算する必要はない。例えば左のリーフノードが最大値７０を有し、右のリーフノードが最大値１５０を持っていた場合、併合されたリーフノードの最大値はＭａｘ（７０，１５０）に基づいて１５０であることがわかる。
【００８４】
次に、具体的な一例を説明する。ここでは、部分集約木を利用して統計処理をおこなうアルゴリズムについて述べる。まず、次の関数compare(range, query)を考える。
function compare(range, query) {
if (query.min ＜ range.min) {
if (query.max ＜ range.min) return OUTSIDE_QUERY;
if (query.max ＜ range.max) return PART_DATA_IN_QUERY;
return ALL_DATA_IN_QUERY;
}
if (query.min === range.min && range.max ＜= query.max) return ALL_DATA_IN_QUERY;
if (query.min ＜= range.max) return PART_DATA_IN_QUERY;
return OUTSIDE_QUERY;
}
関数compare(range, query) は、あるノードのキー属性の範囲 [range.min, range.max] と、問合せ内のキー属性に関する絞り込み条件 [query.min, query.max] を受け取ると、そのノードの管理下にあるデータについて、「全てのデータが問合せの範囲外 (OUTSIDE_QUERY)」、「いくつかのデータが問合せの範囲内 (PART_DATA_IN_QUERY)」、「全てのデータが問合せの範囲内 (ALL_DATA_IN_QUERY)」のどれかの値を返す。
【００８５】
そして、木の探索関数computeAggregation(node, query)は、次のようになる。
function computeAggregation(node, query) {
// この node 下のデータが query の範囲内または範囲外にあるのかを
// compare関数をつかって確認する
answer = compare(node.range, query);
if (answer == OUTSIDE_QUERY) {
// node 下のデータは query の範囲外なので、それ以上の探索はしない
return null;
}
if (answer == ALL_DATA_IN_QUERY) {
// node 下の全てのデータが query の範囲内なので、事前に計算した統計値を使いまわす
return node.getPrecomputedAggregations();
}
if (answer == PART_DATA_IN_QUERY) {
if (node instanceof LeafNode) {
// リーフノードまで探索したが、再利用はできなかった
// 今後、この区間で再利用ができるように、ノードを分割し
// データをデータ保持部から読み込んで統計値を計算
node.split(query);
}
// 自身の子の統計値を再利用するために探索
var leftAggregations = computeAggregation(node.leftChild, query);
var rightAggregations = computeAggregation(node.leftChild, query);
// 両方の子から得た統計値を併合して返却
return leftAggregations.merge(rightAggregations);
}
}
この関数は、部分集約木を再帰的に探索し、各ノードが「全てのデータが問合せの範囲外(OUTSIDE_QUERY)」、「いくつかのデータが問合せの範囲内(PART_DATA_IN_QUERY)」、「全てのデータが問合せの範囲内(ALL_DATA_IN_QUERY)」のどれになるかを判定する。
【００８６】
そして、
もし「全てのデータが問合せの範囲外 (OUTSIDE_QUERY)」であれば、そのノード以下のノードは問合せの対象外であり、探索しても無駄であるため、そのノードよりも下位のノードの探索を打ち切る。
【００８７】
もし「いくつかのデータが問合せの範囲内 (PART_DATA_IN_QUERY)」であれば、そのノードの粒度では統計値の再利用はできない。しかし、下位のノードはより細粒度に統計値を計算しており再利用できる場合があるため、下位ノードについて再帰的に探索を続ける。そのノードが子供を持たない場合は、将来同じ問合せが来た場合に統計値が再利用できるように、そのノードを分割する。
【００８８】
もし「全てのデータが問合せの範囲内 (ALL_DATA_IN_QUERY)」であれば、そのノードに関するデータは全て問合せの対象となっているため、事前に計算した統計値を使いまわす、ということをおこなう。あとは、各ノードから統計値が得られていた場合、統計値の統合処理をおこない、最終的な問合せ結果を算出する。
【００８９】
なお、本実施形態ではデータ集合とこのデータ集合を分割した部分集合とのそれぞれにノードを割り当てた木構造として情報処理を行なった。しかし、これに限定されることはなく、木構造を用いないで情報処理するようにしても同様の効果を得られることは言うまでもない。
【００９０】
また、本実施形態では所定時間内のアクセス数をアクセス頻度とし、アクセス頻度の高い統計値を有する部分集合を分割したが、部分集合へのアクセス数があらかじめ設定した閾値を超えたときにアクセス頻度が高いと判定してこの部分集合を分割してもよい。
【００９１】
また、本実施形態ではアクセス頻度が高い部分集合を二分割するようにしたが、３つ以上に分割するようにしてもよい。
【００９２】
本実施形態によれば、統計処理において事前に計算した統計値を再利用できる確率が高まり、統計処理の性能が向上する。さらに、事前に設定した部分集合単位でなくても、事前に自動計算した統計値を再利用することができ、レコードのスキャンを省いてＩ／Ｏ量と計算量を削減し、属性の統計処理を高速化することができる。さらにまた、アクセス頻度が低いデータ領域を含む部分集合は、自動的に隣接する少なくとも１つの部分集合と併合され、統計値の数が常に最大許容数以下に保たれるので、データサイズの肥大化を防止でき、データ検索効率の低下を防止することができる。
【００９３】
［他の実施形態］
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。また、それぞれの実施形態に含まれる別々の特徴を如何様に組み合わせたシステムまたは装置も、本発明の範疇に含まれる。
【００９４】
また、本発明は、複数の機器から構成されるシステムに適用されてもよいし、単体の装置に適用されてもよい。さらに、本発明は、実施形態の機能を実現する情報処理プログラムが、システムあるいは装置に直接あるいは遠隔から供給される場合にも適用可能である。したがって、本発明の機能をコンピュータで実現するために、コンピュータにインストールされるプログラム、あるいはそのプログラムを格納した媒体、そのプログラムをダウンロードさせるＷＷＷ(World Wide Web)サーバも、本発明の範疇に含まれる。特に、少なくとも、上述した実施形態に含まれる処理ステップをコンピュータに実行させるプログラムを格納した非一時的コンピュータ可読媒体（non-transitory computer readable medium）は本発明の範疇に含まれる。
【００９５】
［実施形態の他の表現］
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
データの集合へのアクセス頻度を記憶して管理するアクセス頻度管理手段と、
前記アクセス頻度が第１所定値以上の前記集合を少なくとも２つの部分集合に分割する分割手段と、
分割された前記部分集合ごとに統計値を算出する算出手段と、
を備えた情報処理装置。
（付記２）
前記分割手段は、分割された前記部分集合のアクセス頻度を初期化する、付記１に記載の情報処理装置。
（付記３）
前記分割手段は、前記統計値にアクセスがあったときに分割を実行する、付記１または２に記載の情報処理装置。
（付記４）
前記部分集合に含まれる前記統計値を木構造として管理する管理手段をさらに備えた、付記１乃至３のいずれか１項に記載の情報処理装置。
（付記５）
前記統計値の全体サイズが所定の最大値を超えた場合に、少なくとも２つの前記部分集合を併合する併合手段をさらに備えた、付記１乃至４のいずれか１項に記載の情報処理装置。
（付記６）
前記アクセス頻度が最小の部分集合を、該部分集合以外の少なくとも１つの部分集合と併合する併合手段をさらに備えた付記１乃至３のいずれか１項に記載の情報処理装置。
（付記７）
前記併合手段は、前記アクセス頻度が最小の部分集合を、該部分集合に隣接する部分集合と併合する、付記４に記載の情報処理装置。
（付記８）
前記併合手段は、前記隣接する部分集合が２つある場合、前記アクセス頻度が小さい方の前記隣接する部分集合と併合する、付記５に記載の情報処理装置。
（付記９）
前記併合手段は、前記アクセス頻度が最小の部分集合を、該部分集合に隣接する部分集合のアクセス頻度が第２所定値よりも大きい場合、該部分集合と隣接しない部分集合と併合する、付記６に記載の情報処理装置。
（付記１０）
前記併合手段は、前記アクセス頻度が最小の部分集合を、前記アクセス頻度が第３所定値以下の部分集合と併合する、付記６に記載の情報処理装置。
（付記１１）
前記併合手段は、前記アクセス頻度が最小の部分集合を、前記アクセス頻度が最小の次に小さい部分集合と併合する、付記１０に記載の情報処理装置。
（付記１２）
前記最大値を設定する設定手段をさらに備えた、付記５に記載の情報処理装置。
（付記１３）
データの集合へのアクセス頻度を記憶して管理するアクセス頻度管理ステップと、
前記アクセス頻度が第１所定値以上の前記集合を少なくとも２つの部分集合に分割する分割ステップと、
分割された前記部分集合ごとに統計値を算出する算出ステップと、
を含む情報処理方法。
（付記１４）
データの集合へのアクセス頻度を記憶して管理するアクセス頻度管理ステップと、
前記アクセス頻度が第１所定値以上の前記集合を少なくとも２つの部分集合に分割する分割ステップと、
分割された前記部分集合ごとに統計値を算出する算出ステップと、
をコンピュータに実行させる情報処理プログラム。
【００９６】
この出願は、２０１５年５月７日に出願された日本出願特願２０１５−０９４６２５を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
2016178313.tif 000003
【図２Ａ】
2016178313.tif 000004
【図２Ｂ】
2016178313.tif 000005
【図３】
2016178313.tif 000006
【図４】
2016178313.tif 000007
【図５】
2016178313.tif 000008
【図６】
2016178313.tif 000009
【図７】
2016178313.tif 000010
【図８Ａ】
2016178313.tif 000011
【図８Ｂ】
2016178313.tif 000012
【図９Ａ】
2016178313.tif 000013
【図９Ｂ】
2016178313.tif 000014
【図１０】
2016178313.tif 000015
【図１１】
2016178313.tif 000016
【図１２Ａ】
2016178313.tif 000017
【図１２Ｂ】
2016178313.tif 000018
【手続補正書】
【提出日】平成29年11月1日(2017.11.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データの集合へのアクセス頻度を記憶して管理するアクセス頻度管理手段と、
前記アクセス頻度が第１所定値以上の前記集合を少なくとも２つの部分集合に分割する分割手段と、
分割された前記部分集合ごとに統計値を算出する算出手段と、
を備えた情報処理装置。
【請求項２】
前記分割手段は、分割された前記部分集合のアクセス頻度を初期化する、請求項１に記載の情報処理装置。
【請求項３】
前記分割手段は、前記統計値にアクセスがあったときに分割を実行する、請求項１または２に記載の情報処理装置。
【請求項４】
前記部分集合に含まれる前記統計値を木構造として管理する管理手段をさらに備えた、請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記統計値の全体サイズが所定の最大値を超えた場合に、少なくとも２つの前記部分集合を併合する併合手段をさらに備えた、請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記併合手段は、前記アクセス頻度が最小の部分集合を、該部分集合以外の少なくとも１つの部分集合と併合する、請求項５に記載の情報処理装置。
【請求項７】
前記併合手段は、前記アクセス頻度が最小の部分集合を、該部分集合に隣接する部分集合と併合する、請求項６に記載の情報処理装置。
【請求項８】
前記併合手段は、前記隣接する部分集合が２つある場合、前記アクセス頻度が小さい方の前記隣接する部分集合と併合する、請求項７に記載の情報処理装置。
【請求項９】
データの集合へのアクセス頻度を記憶して管理し、
前記アクセス頻度が第１所定値以上の前記集合を少なくとも２つの部分集合に分割し、
分割された前記部分集合ごとに統計値を算出する、
情報処理方法。
【請求項１０】
データの集合へのアクセス頻度を記憶して管理するアクセス頻度管理処理と、
前記アクセス頻度が第１所定値以上の前記集合を少なくとも２つの部分集合に分割する分割処理と、
分割された前記部分集合ごとに統計値を算出する算出処理と、
をコンピュータに実行させる情報処理プログラム。
【国際調査報告】
2016178313.tif 000019
2016178313.tif 000020