以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。例えば、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
〔1〕一実施形態
〔1−1〕一実施形態について
図1は、第1比較例に係るデータロード及び加工処理の動作例を示すブロック図である。図1に示すように、ホスト装置300がネットワーク400経由でDB管理システム100に対してロード用SQL及び加工用SQLを発行すると(符号(1)参照)、コントローラ200がこれらのSQLを解析する(符号(2)参照)。
コントローラ200は、解析結果に基づき、図2に示すデータソース500から、例えば大容量の加工前データ510をDBテーブルの一例であるデータテーブル110にロードする(符号(3)参照)。
また、コントローラ200は、例えば、データテーブル110へのデータロードと並行して、ロード済のデータに基づき、データテーブル110全体の列指向型インデックス(以下、単に「インデックス」と表記する)120を構築する(符号(4)参照)。なお、インデックス120の構築は、データロードにおいて、例えば、一定量のレコードのロードが完了するごとに或いは一定時間ごとに実行されてよい。
データロードが完了すると、コントローラ200は、インデックス120を参照し(符号(5)参照)、データテーブル110から加工用データを抽出する(符号(6)参照)。
そして、コントローラ200は、抽出した加工用データに対して加工用SQLに基づく加工を行ない(符号(7)参照)、加工済データを加工済データテーブル130に出力する(符号(8)参照)。以上の処理により、データロード及び加工処理が終了する。なお、加工済データテーブル130は、データ活用先600(図2参照)、例えばSQL発行元であるホスト装置300によって参照され、利用される。
図3は、第1比較例に係るDB管理システム100の処理時間の内訳を示す図である。図3の(b)に示すように、インデックス120により、理想的には、インデックス120を用いない(a)の場合に比べて、加工処理におけるデータテーブル110からの加工用データの抽出処理(図1の符号(6))を高速化(処理時間を短縮)できる。なお、「理想的」とは、ロードの完了後、加工処理を行なう時点で、列指向型インデックスの構築が完了している状態を意味する。
しかし、実際には、図3の(c)に示すように、大量データのロード直後に抽出処理が行なわれると、インデックス120の構築処理が間に合わなくなる。なお、データテーブル110からのデータの参照では、全データ分に対するインデックス120が用いられる。このため、未インデックス化のデータが一定量以下である場合、コントローラ200は、抽出処理において、当該未インデックス化のデータをメモリ上でインデックス化しつつ、構築済のインデックス120と並列に、メモリ上のインデックスを参照する。一方、未インデックス化のデータが一定量よりも多い場合、コントローラ200は、インデックス120を使用しない(インデックス120が存在しないものとして扱う)。
このように、第1比較例に係る手法では、加工処理の処理時間の短縮が不十分である、或いは短縮できない場合がある。
そこで、一実施形態に係るシステムは、データロード、インデックス構築、及び加工処理を、それぞれ独立して行なうのではなく、ロードデータ及び加工処理の内容に応じてインデックス構築及び参照の手順を最適化する。これにより、インデックスを効率良く構築することができ、加工処理の処理時間を短縮させることができる。
以下、一実施形態に係るシステムについて簡単に説明する。図4及び図5は、それぞれ、ホスト装置30及びコントローラ20の動作例を示すフローチャートであり、図6は、一実施形態に係るDB管理システム1の動作例を説明するブロック図である。図6に例示するように、一実施形態に係るDB管理システム1は、コントローラ20をそなえてよく、ネットワーク40を介してホスト装置30と相互に通信可能に接続されてよい。
まず、ホスト装置30の動作例について説明する。図4に例示するように、ホスト装置30は、ロード及び加工ジョブが発生すると(ステップS1)、ネットワーク40経由で“ロード+加工用”SQLをDB管理システム1に発行する(ステップS2;図6の符号(11)参照)。
“ロード+加工”用SQLは、ロード及び加工の指示をセットにしたSQLであり、例えば、ロード及び加工を同一トランザクションにより指示するコマンドであってよい。これにより、コントローラ20では、ロードに対して、どのような加工が行なわれるかを判断することが可能となる。
なお、ホスト装置30は、ロード+加工用SQLの発行後、DB管理システム1からの応答受信を待ち合わせ(ステップS3、ステップS3でNo)、応答を受信すると(ステップS3でYes)、処理が終了する。
次に、コントローラ20の動作例について説明する。図5に例示するように、コントローラ20は、ホスト装置30からロード+加工用SQLを受信すると(ステップS11)、当該SQLを解析する(ステップS12;図6の符号(12)参照)。
ロード+加工用SQLの解析において、コントローラ20は、どのロードに対して、どのような加工が行なわれるかを解析・判断してよい。例えば、コントローラ20は、ロード+加工用SQLから、同一トランザクション内においてロード〜加工の処理で利用されるテーブル名等を特定してよい。
次いで、コントローラ20は、解析結果に基づいて、図示しないデータソースから、加工前データをデータテーブル11にロードする(ステップS13;図6の符号(13)参照)。
また、コントローラ20は、データロードと並行して、解析結果に基づいて、“列及び/又はデータ範囲”の判定を行ない(ステップS14;図6の符号(14)参照)、加工用列指向型インデックス12を構築する(ステップS15;図6の符号(15)参照)。なお、以下の説明では、「加工用列指向型インデックス」を単に「加工用インデックス」或いは「インデックス」と表記する場合がある。
“列及び/又はデータ範囲”(以下、「列/データ範囲」と表記する)の判定において、コントローラ20は、例えば、加工用SQL(例えばSELECT文)で指定される加工内容に基づき、ロード直後のデータ使用状況を判断してよい。
データ使用状況の例としては、“特定の列を使用している”、及び/又は、“Where句等で特定のデータ範囲に絞ってデータを使用している”等、列やデータ範囲ごとのロード直後のデータ使用有無が挙げられる。コントローラ20は、上記の判断結果に基づいて、ロード直後にデータを使用される列やデータ範囲にインデックス内容を限定した加工用インデックス12を構築してよい。列/データ範囲の判定処理の詳細は後述する。
このように、一実施形態では、コントローラ20は、インデックス内容が加工処理用で使用される情報に制限されたインデックス12を構築する。これにより、大量のデータロードが行なわれる場合であっても、コントローラ20は、インデックス構築のための全データ分の処理を待たずに、データロード完了後、加工処理のために即座にインデックス12を参照可能となる。
データロードが完了すると、コントローラ20は、加工用インデックス12を参照して(ステップS16;図6の符号(16)参照)、データテーブル11から加工用データを抽出する(ステップS17;図6の符号(17)参照)。
そして、コントローラ20は、抽出した加工用データに対して加工用SQLに基づく加工を行ない(ステップS18;符号(18)参照)、加工済データを加工済データテーブル13に出力する(ステップS19;符号(19)参照)。
以上の処理により、データロード及び加工処理が終了する。なお、加工済データテーブル13は、データ活用先、例えばSQL発行元であるホスト装置30によって参照され、利用される。
図7は、一実施形態に係るDB管理システム1の処理時間の内訳を示す図である。図7の(a)に示すように、第1比較例に係る手法では、コントローラ200は、全データに対してインデックス120を構築しようとするため、大量のデータロード時にはインデックス120の構築に時間がかかる。このため、第1比較例に係る手法では、データロード直後に実行される加工処理のためのデータ抽出までにインデックス120の構築が間に合わず、インデックス120が使用できない場合がある。
これに対し、図7の(a)に示すように、一実施形態に係る手法によれば、加工用インデックス12の構築に使用されるデータが、加工処理において使用されるデータ部分に制限されるため、構築時間を短縮することができる。従って、データロード直後に実行される加工処理のためのデータ抽出において、インデックス12を活用可能となる。
なお、第1比較例において、「ロード」処理と、ロードされたデータを使用する「加工+参照」処理とは、別の時間帯若しくは排他的に行なわれる。このため、第1比較例では、ロード単体、ロード後のINSERT/UPDATE/DELETEによる少量更新、インデックス120構築済状態でのSELECT、といった単位で考慮された処理ロジックになっている。このため、第1比較例では、インデックス120の構築の際に、ロードに対する加工の内容を解析しておらず、ロード対象の全データを処理対象にせざるを得ない。
一方、一実施形態においては、加工用インデックス12を構築することにより、ロードされる全データをインデックス120の対象とする第1比較例と比べて、以下の利点が得られる。
・加工処理において、データテーブル11からのデータの読み込み性能は第1比較例と変わらないため、I/O(Input / Output)性能には影響がない。
・加工処理において、データテーブル11から読み込んだデータをコントローラ20のメモリに格納するため、メモリ性能には影響がない。
・インデックス12を構築する際に、行指向から列指向への変換、及び、インデックス12の構築処理では、構築処理の対象外となった列数分だけ処理対象のデータが減少するため、CPUネックの解消及び処理の繰り返し数の削減を図ることができる。このため、ロード+加工処理の性能を向上させることができる。なお、CPUはCentral Processing Unitの略称である。
〔1−2〕一実施形態の構成例
次に、一実施形態に係るDB管理システム1の構成例を説明する。図8は一実施形態に係るDB管理システム1の機能構成例を示す図である。
DB管理システム1は、インデックス構築システムの一例であり、図8に示すように、例示的に、データベース10及びコントローラ20をそなえてよい。DB管理システム1は、ネットワーク40を介してホスト装置30と相互に通信可能に接続されてよい。
データベース10は、データベースを記憶する記憶装置の一例である。図8に例示するように、データベース10は、データテーブル11、加工用列指向型インデックス12、加工済データテーブル13、及び構築待ちデータ情報リスト(以下、単に「データ情報リスト」と表記する場合がある)14を記憶してよい。
データベース10は、1以上の記憶部によって実現されてよく、複数の記憶部によってRAID(Redundant Arrays of Inexpensive Disks)等のディスクアレイが構成されてもよい。なお、データ情報リスト14は、データベース10とは異なる記憶装置、例えばメモリ等の記憶領域に格納されてもよい。
コントローラ20は、データベース10に対する種々の制御を行なう制御装置又はコンピュータの一例である。また、コントローラ20は、一実施形態に係るインデックス12を構築するインデックス構築装置の一例であり、データをデータベースにロードして加工するデータ処理装置の一例である。
コントローラ20は、例えば、ホスト装置30からネットワーク40を介してデータベース10への参照や更新等の操作要求があった場合、コントローラ20は、データベース10に対して要求された操作を行ない、ホスト装置30に応答を返す。
なお、ホスト装置30としては、例えば業務サーバや基幹サーバ、或いはクライアントマシン等のコンピュータが挙げられる。図8には1台のホスト装置30が示されているが、2台以上のホスト装置30がDB管理システム1と相互に通信可能に接続されてもよい。
ネットワーク40としては、例えばインターネット、又は、LAN(Local Area Network)若しくはWAN(Wide Area Network)等が挙げられる。
次に、図9を参照して、図8に示すデータベース10、コントローラ20、及びホスト装置30のハードウェア構成例を説明する。データベース10、コントローラ20、及びホスト装置30は、互いに同様のハードウェア構成をそなえてよいため、以下、これらの一例としてコンピュータ50を例に挙げて、コンピュータ50のハードウェア構成例について説明する。
図9に示すように、コンピュータ50は、例示的に、プロセッサ50a、メモリ50b、記憶部50c、IF(Interface)部50d、I/O部50e、及び読取部50fをそなえてよい。
プロセッサ50aは、種々の制御や演算を行なう演算処理装置の一例である。プロセッサ50aは、コンピュータ50内の各ブロックとバスで相互に通信可能に接続されてよい。プロセッサ50aとしては、例えば、CPU、MPU、GPU、APU、DSP、ASIC、FPGA等の集積回路(IC;Integrated Circuit)が用いられてもよい。なお、MPUはMicro Processing Unitの略称である。GPUはGraphics Processing Unitの略称であり、APUはAccelerated Processing Unitの略称である。DSPはDigital Signal Processorの略称であり、ASICはApplication Specific ICの略称であり、FPGAはField-Programmable Gate Arrayの略称である。
メモリ50bは、種々のデータやプログラム等の情報を格納するハードウェアの一例である。メモリ50bとしては、例えばRAM(Random Access Memory)等の揮発性メモリが挙げられる。
記憶部50cは、種々のデータやプログラム等の情報を格納するハードウェアの一例である。記憶部50cとしては、例えばHDD(Hard Disk Drive)等の磁気ディスク装置、SSD(Solid State Drive)等の半導体ドライブ装置、不揮発性メモリ等の各種記憶装置が挙げられる。不揮発性メモリとしては、例えば、フラッシュメモリ、SCM(Storage Class Memory)、ROM(Read Only Memory)等が挙げられる。
図8に示すDB管理システム1のデータベース10は、例えば、DBサーバ等の装置が有するメモリ50b及び記憶部50cの少なくとも一方の記憶領域により実現されてよい。
なお、図8に示す例では、コントローラ20とは異なるDBサーバ等の装置によりデータベース10が実現されるが、これに限定されるものではない。例えば、データベース10は、コントローラ20のメモリ50b及び記憶部50cの少なくとも一方の記憶領域により実現されてもよい。また、図8に示すデータベース10が格納する情報は、コントローラ20とDBサーバとの間、或いは、複数のDBサーバ間、において、分散して格納されてもよい。
また、記憶部50cは、コンピュータ50の各種機能の全部若しくは一部を実現するプログラム50gを格納してよい。プロセッサ50aは、記憶部50cに格納されたプログラム50gをメモリ50bに展開して実行することにより、図8に示すデータベース10、コントローラ20、又は、ホスト装置30としての機能を実現できる。
例えば、データベース10(DBサーバ)においては、DBサーバのプロセッサ50aが、記憶部50cに格納されたプログラム50gをメモリ50bに展開して演算処理を実行することで、DBサーバの機能を実現できる。
また、コントローラ20においては、コントローラ20のプロセッサ50aが、記憶部50cに格納されたプログラム50g(インデックス構築プログラム)をメモリ50bに展開して演算処理を実行することで、DBサーバの機能を実現できる。当該機能は、後述するロード部21、判定部22、作成部23、及び加工部24の機能を含んでよい。
さらに、ホスト装置30においては、ホスト装置30のプロセッサ50aが、記憶部50cに格納されたプログラム50gをメモリ50bに展開して演算処理を実行することで、APサーバ3としての機能を実現できる。
IF部50dは、ネットワーク40との間の接続及び通信の制御等を行なう通信IFの一例である。例えば、IF部50dは、LAN、或いは、光通信(例えばFC(Fibre Channel;ファイバチャネル))等に準拠したアダプタを含んでよい。例えば、プログラム50gは、当該通信IFを介して、ネットワーク40からコンピュータ50にダウンロードされ、記憶部50cに格納されてもよい。
I/O部50eは、マウス、キーボード、又は操作ボタン等の入力部、並びに、タッチパネルディスプレイ、LCD(Liquid Crystal Display)等のモニタ、プロジェクタ、又はプリンタ等の出力部、の一方又は双方を含んでよい。
読取部50fは、記録媒体50hに記録されたデータやプログラムの情報を読み出すリーダの一例である。読取部50fは、記録媒体50hを接続可能又は挿入可能な接続端子又は装置を含んでよい。読取部50fとしては、例えば、USB(Universal Serial Bus)等に準拠したアダプタ、記録ディスクへのアクセスを行なうドライブ装置、SDカード等のフラッシュメモリへのアクセスを行なうカードリーダ等が挙げられる。なお、記録媒体50hにはプログラム50gが格納されてもよく、読取部50fが記録媒体50hからプログラム50gを読み出して記憶部50cに格納してもよい。
記録媒体50hとしては、例示的に、磁気/光ディスクやフラッシュメモリ等の非一時的な記録媒体が挙げられる。磁気/光ディスクとしては、例示的に、フレキシブルディスク、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク、HVD(Holographic Versatile Disc)等が挙げられる。フラッシュメモリとしては、例示的に、USBメモリやSDカード等が挙げられる。なお、CDとしては、例示的に、CD−ROM、CD−R、CD−RW等が挙げられる。また、DVDとしては、例示的に、DVD−ROM、DVD−RAM、DVD−R、DVD−RW、DVD+R、DVD+RW等が挙げられる。
上述したコンピュータ50のハードウェア構成は例示である。従って、コンピュータ50内でのハードウェアの増減(例えば任意のブロックの追加や削除)、分割、任意の組み合わせでの統合、又は、バスの追加若しくは削除等は適宜行なわれてもよい。
〔1−3〕コントローラの機能構成例
次に、図8に例示するコントローラ20の機能構成例を説明する。図8に示すように、コントローラ20は、例示的に、ロード部21、判定部22、作成部23、及び、加工部24をそなえてよい。
ロード部21は、ホスト装置30からSQLを受信し、受信したSQLを解析して、解析結果を判定部22に渡す解析処理を行なうとともに、解析結果に基づいて、データソースからデータテーブル11にロード対象のデータをロードするロード処理を行なう。
例えば、ロード部21は、ロード+加工用SQLを受信すると、解析処理において、SQL文に記載された内容に基づいて、同一トランザクション内でロード及び加工に使用されるデータテーブル11のテーブル名等を特定する。また、ロード部21は、ロード処理において、解析処理により特定したデータテーブル11のテーブル名に対して、データソースから読み出したデータを書き込む。
図10は、一実施形態に係るデータテーブル11、加工用列指向型インデックス12、及び構築待ちデータ情報リスト14の一例を示す図である。
図10に示すように、データテーブル11は、例示的に、TID(Tuple Identifier)、及び、複数(図10の例ではa〜eの5つ)の項目を含んでよい。TIDは、タプル(レコード;行)を識別する識別情報の一例である。項目a〜eには、レコードごとにデータソースからロードされたデータの内容が設定される。項目は、列又はカラム(column)と言い換えてもよい。
図11は、一実施形態に係るロード+加工用SQL及び加工対象の一例を示す図である。なお、図11に示す「データテーブル“tbl”」は、図10に示すデータテーブル11であるものとする。
図11のSQL文に示すように、1行目の“BEGIN;”から6行目の“COMMIT;”までのコマンドは、同一のトランザクションにより実行されるコマンドである。
SQL文の2行目の“COPY INTO tbl FROM ‘aaa.csv’ ;”は、データソースの“aaa.csv”のデータを“tbl”というデータテーブル11にコピー(ロード)することを指示する、データ格納(ロード)用のコマンドである。
SQL文の3行目〜5行目は、データ加工用のコマンド(処理要求)であり、それぞれのコマンドには、セッションを識別する識別情報の一例であるSID(Session Identifier)が割り当てられる。
例えば、3行目(SID1)は、“tbl”の項目aの値が“10”未満のレコードから、項目a及び項目bの値(データ)を抽出することを指示するコマンドである。4行目は、“tbl”の項目bの値が“100”よりも大きく、且つ、項目cの値が“200”と等しいレコードから、項目bの値(データ)を抽出することを指示するコマンドである。5行目は、“tbl”の項目aの値が“5”未満であり、且つ、項目c及び項目dの値がそれぞれ“100”よりも大きいレコードから、項目aの値、項目cの値、及び項目dの値を加算した値(データ)を抽出することを指示するコマンドである。
図11の例では、ロード部21は、解析処理において、SQL文の2〜5行目のそれぞれのコマンドで、テーブル名:“tbl”を特定してよい。また、ロード部21は、ロード処理において、SQL文の2行目に従い、“aaa.csv”のデータをデータテーブル11にロードしてよい。
判定部22は、加工用インデックス12を構築する際に、SQL文に記載された内容に基づいて、データベース10(データテーブル11)からSQL文に記載された各項目に対応するデータを予め複数の項目について特定する特定部の一例である。
例えば、判定部22は、インデックス12を構築するために、解析結果に基づいて、データ加工を指示するSQL文からデータ加工の際に使用されるデータテーブル11の列/データ範囲を判定し、判定結果を作成部23に渡す判定処理を行なう。
判定部22は、判定処理において、データ情報リスト14を生成してよい。図10に示すように、データ情報リスト14は、TIDごとに、インデックス12の構築用の管理情報が設定されたリストである。データ情報リスト14は、データテーブル11内の実データを含まなくてよい。例えば、判定部22は、ロード部21によるデータテーブル11へのデータ格納と同期して、インデックス12の構築用に管理情報をデータ情報リスト14に蓄積してよい。
図11に例示するように、データ情報リスト14に含まれる管理情報は、データテーブル11のTIDごと、且つ、項目ごとに、加工処理において(最初に)参照されるSIDが設定された情報であってよい。
例えば、判定部22は、SQL文に記載されたSID1〜SID3のそれぞれについて判定処理を行ない、ロード部21による解析結果の“tbl”に対応するデータ情報リスト14内の管理情報に以下の値を設定してよい。
(SID1)
判定部22は、管理情報に対して、WHERE句で指定される項目aのデータ範囲に合致するTID1、3、5、6のうち、SID1で使用される項目(列)a、bに、SIDの“1”を設定する。
(SID2)
判定部22は、管理情報に対して、項目b、cがWHERE句で指定されるデータ範囲に合致するTID2、5、6のうち、SID2で使用される項目(列)b、cに、SIDの“2”を設定する。
(SID3)
判定部22は、管理情報に対して、項目a、c、dがWHERE句で指定されるデータ範囲に合致するTID3、6のうち、SID3で使用される項目(列)a、c、dに、SIDの“3”を設定する。
なお、図11に例示するように、SID1に基づき特定されるTID3の項目aと、SID3に基づき特定されるTID3の項目aとの間で、インデックス12の構築に用いられるデータが重複する。この場合、判定部22は、当該重複するデータをSQL文における記載順が早い項目に対応するデータとして扱ってよい。例えば、TID3の項目aのデータは、SID1に対応するインデックス12の構築の際に、データテーブル11から抽出されてよい。この場合、SID3に対応するインデックス12の構築の際には、TID3の項目aのデータの抽出処理が(インデックス非対象のデータの抽出処理と同様に)スキップされてよい。
図11に示す、TID5の項目b、TID6の項目a、b、cも同様である。すなわち、TID5の項目b、TID6の項目a、bのデータは、それぞれ、SID1に対応するインデックス12の構築の際に、データテーブル11から抽出されてよい。また、TID6の項目cのデータは、SID2に対応するインデックス12の構築の際に、データテーブル11から抽出されてよい。
以上のように、判定部22は、SQL文を先読みして、加工処理に利用される列/データ範囲を判定し、インデックス12の構築に用いるデータ情報リスト14を生成するのである。なお、加工処理に利用されるデータ範囲としては、WHERE句で指定される特定のデータ範囲が挙げられる。また、加工処理に利用される列としては、SELECT文により選択される特定の列、及び、WHERE句で指定される列、が挙げられる。
作成部23は、SQL文に記載された各項目の記載順に応じて、項目ごとに対応するデータを含む加工用列指向型インデックス12の構築を行なう構築部の一例である。
例えば、作成部23は、判定結果に基づいて、データロード開始後に、判定部22が特定した列/データ範囲に対して、加工用列指向型インデックス12を作成する。一実施形態に係る手法によれば、作成部23は、インデックス12の構築をデータ加工前までに完了することができる。
図10に例示するように、作成部23は、データテーブル11へのデータ格納、及び、データ情報リスト14の管理情報の設定とは非同期に、インデックス12を構築してよい。例えば、作成部23は、一定量のレコードがデータテーブル11にロードされ、管理情報が設定される都度(一定量ごとに)、或いは、一定時間ごとに、インデックス12を構築してよい。
作成部23により構築されるインデックス12内の情報は、管理情報において、TIDごとに、SIDが設定された項目(図11参照)に制限されてよい。例えば、図10に示すように、インデックス12として構築される項目は、TID1では項目a、bに制限され、TID2では項目b、cに制限される。
判定部22及び作成部23の詳細については後述する。
加工部24は、ロード部21によるロード処理の完了後に、SQL文に記載された加工処理を、例えばSID1からSID3まで順次行なう。
例えば、加工部24は、加工処理において、作成部23が作成したインデックス12を参照して、SQL文に記載された加工用データをデータテーブル11から抽出し、例えばメモリ部50b等に格納する抽出処理を行なう。
また、加工部24は、加工処理において、抽出処理により抽出した加工用データに対して、SQL文に記載された加工内容に応じた加工を行ない、加工結果である加工済データを加工済データテーブル13に出力する。
なお、加工部24は、加工処理において、SID1からSID3までの加工用データの抽出処理をまとめて実行し、その後に加工用データに基づきデータ加工及び出力を行なってもよい。
〔1−4〕インデックス構築処理の動作例
次に、上述の如く構成された判定部22及び作成部23によるインデックス12の構築処理の動作例を、第1比較例及び第2比較例と比較しながら説明する。なお、以下の説明では、簡単のため、SQL文やロード対象のデータは、一実施形態に係るものと同様であるものと仮定する。
〔1−4−1〕第1比較例に係るインデックス構築処理の説明
まず、図12〜図14を参照して、第1比較例に係るインデックス120の構築処理の動作例を説明する。
図12に例示するように、第1比較例では、データロードされたデータテーブル110の全データがインデックス対象である。このため、インデックス120は、最初に実行されるSID1で利用される太実線枠内のデータ以外の部分についても、リソースが使用される。これにより、SID1実行時点で、例えば破線枠内のデータ部分についてインデックス120の構築が終わらず、インデックス120を利用できないリスクが発生し得る。
例えば、図13に示すように、インデックス120の構築開始時点では、インデックス120の構築に未使用のデータテーブル110のレコードを管理するためのデータ情報リスト140には、TID1〜6の管理情報が含まれる。また、インデックス120にはデータが設定されていない。
コントローラ200は、データ情報リスト140のセンタ等から順次、全データ分を読み出し、データテーブル110に対して、読み出したTIDに該当する部分のデータを抽出して、インデックス120を構築する。
図14に示すように、インデックス120の構築開始後、SID1開始時点までの間に、TID1〜4の全データに対するインデックス120の構築が行なわれたと仮定する。なお、コントローラ200は、インデックス120の構築が完了したTID1〜4のエントリを管理情報から削除し、構築が間に合わなかったTID5、6のエントリを残している。
コントローラ200は、データテーブル110の全データを対象としてインデックス120を構築するため、プロセッサ等の処理負荷が高い。また、構築されたインデックス120には、実際にはSID1の処理に不要なデータ(図14の太実線枠内のデータ以外の部分)も含まれている。
〔1−4−2〕第2比較例に係るインデックス構築処理の説明
次に、図15〜図19を参照して、第2比較例に係るインデックス120′の構築処理の動作例を説明する。第2比較例では、コントローラ200が、SQL文に記載された検索条件に合わせて、加工処理の実行タイミングで順次インデックス120′を構築する場合を仮定する。
図15に例示するように、コントローラ200は、データロードのタイミングではインデックス120の構築を行なわないため、データ情報リスト140′において各レコードに対する管理情報は設定されない。
図16に示すように、データロード後、SID1を受け付けると、コントローラ200は、SID1の検索条件に合致するデータをデータテーブル110から抽出し、インデックス120′の構築を開始する。
図17に示すように、SID1の開始後、SID2を受け付けるまでの間において、インデックス120′には、コントローラ200により、SID1の検索条件に合致する太実線枠内のデータが設定される。
図18に示すように、SID2の開始後、SID3を受け付けるまでの間において、インデックス120′には、コントローラ200により、SID2の検索条件に合致する太実線枠内のデータが設定される。
なお、コントローラ200は、SID1とデータ範囲が被る範囲のデータ取得のために、インデックス120′の検索(データ走査)を行なう。
例えば、コントローラ200は、SID2の検索条件に合致するデータをデータテーブル110から抽出し、インデックス120′の構築を行なう。このとき、コントローラ200は、既存のSID1用のインデックス120′で検索可能な部分についてはインデックス120′を生成しない。また、SID2はSID1よりも参照するデータ範囲が広いため、既存のインデックス120′範囲内のデータの取得の他に、当該既存のインデックス120′範囲外のデータに対する条件ヒット有無を確認するためにデータ走査を行なう。
図19に示すように、SID3の開始後、インデックス120′には、コントローラ20により、SID3の検索条件に合致する太実線枠内のデータが設定される。
なお、コントローラ200は、SID1、2とデータ範囲が被る範囲のデータ取得のために、インデックス120′の検索(データ走査)を行なう。
例えば、コントローラ200は、SID3の検索条件に合致するデータをデータテーブル110から抽出し、インデックス120′の構築を行なう。このとき、コントローラ200は、既存のSID1、2用のインデックス120′で検索可能な部分についてはインデックス120′を生成しない。また、SID3はSID1、2よりも参照するデータ範囲が広いため、既存のインデックス120′範囲内のデータの取得の他に、当該既存のインデックス120′範囲外のデータに対する条件ヒット有無を確認するためにデータ走査を行なう。
〔1−4−3〕一実施形態に係るインデックス構築処理の説明
これに対し、一実施形態に係る判定部22及び作成部23によるインデックス12の構築処理においては、以下の手順により、インデックス12の構築が行なわれる。以下、図20〜図23を参照して、インデックス12の構築処理の動作例を説明する。
判定部22は、ロード+加工用SQLのSID1〜3について分析を行ない、データ情報リスト14に対して、図20に例示するような管理情報を設定する。なお、図20に例示する管理情報は、図11に示す管理情報に対して、項目間で重複するデータをSQLでの記載順が早い項目のデータとして扱った場合を示している。また、判定部22は、図20に例示するように、SQLにおけるいずれのSIDによっても参照されないレコードであるTID4を、インデックス構築対象外のレコードとして管理情報から除外してよい。
作成部23は、データロードと並行して、SID1、2、3の順に(SQLにおける記載順に)、データ情報リスト14に基づくインデックス12の構築処理を行なう。
図21に例示するように、SID1の開始時点において、作成部23は、データ情報リスト14の先頭から順次、いずれのSIDでも参照されない部分を除く全データ分の管理情報を読み出す。図21の例では、作成部23は、SID1で参照されるTID1、3、5、6の項目a、bのデータ分の管理情報を読み出す。そして、作成部23は、データ情報リスト14のうちの参照SIDとしてSID1が設定されたTIDに該当する部分のデータを、データテーブル11から読み出すことで、インデックス12の構築を行なう。
なお、作成部23は、データ情報リスト14に対して、既にインデックス12の構築に使用したデータについて、次以降の処理で対象外にするために、使用済フラグを設定してよい。また、作成部23は、全列に使用済フラグが設定されているレコードを、インデックス12の構築が完了したとしてデータ情報リスト14から削除してよい。図21の例では、作成部23は、TID1、3、5、6の項目a、bのそれぞれに使用済フラグを設定し、全列(項目a、b)に使用済フラグが設定されているTID1をデータ情報リスト14から削除する。
このように、インデックス12の構築において、インデックス12の構築処理対象が最初に実行されるSID1のための太実線枠内のデータに制限されるため、処理負荷が軽減される。これにより、作成部23は、SID1の実行タイミングまでに、SID1に対応するインデックス12の構築を完了させることができる。
図22に例示するように、SID2の開始時点において、作成部23は、データ情報リスト14の先頭から順次、残りのデータ分の管理情報を全て読み出す。そして、作成部23は、データ情報リスト14のうちの参照SIDとしてSID2が設定されたTIDに該当する部分のデータを、データテーブル11から読み出すことで、インデックス12の構築を行なう。
なお、図22に例示するように、作成部23は、TID2の項目b、c、及び、TID5、6の項目cのそれぞれに使用済フラグを設定する。また、作成部23は、全列(項目b、c)に使用済フラグが設定されているTID2、及び、前列(項目a、b、c)に使用済フラグが設定されているTID5をデータ情報リスト14から削除する。
また、作成部23は、加工部24によるSID1の検索実行と並行して、インデックス12の構築を行なう。このように、インデックス12の構築において、インデックス12の構築処理対象がSID2のための太実線枠内のデータに制限されるため、処理負荷が軽減される。これにより、作成部23は、SID2の実行タイミングまでに、SID2に対応するインデックス12の構築を完了させることができる。
図23に例示するように、SID3の開始時点において、作成部23は、データ情報リスト14の先頭から順次、残りのデータ分の管理情報を全て読み出す。そして、作成部23は、データ情報リスト14のうちの参照SIDとしてSID3が設定されたTIDに該当する部分のデータを、データテーブル11から読み出すことで、インデックス12の構築を行なう。
なお、図23に例示するように、作成部23は、TID3の項目c、d、及び、TID6の項目dのそれぞれに使用済フラグを設定する。また、作成部23は、全列(項目a、b、c、d)に使用済フラグが設定されているTID3、6をデータ情報リスト14から削除する。これにより、全ての管理情報がデータ情報リスト14から削除される。
また、作成部23は、加工部24によるSID2の検索実行と並行して、インデックス12の構築を行なう。このように、インデックス12の構築において、インデックス12の構築処理対象がSID3のための太実線枠内のデータに制限されるため、処理負荷が軽減される。これにより、作成部23は、SID3の実行タイミングまでに、SID3に対応するインデックス12の構築を完了させることができる。
〔1−4−4〕一実施形態の変形例に係るインデックス構築処理の説明
次に、図24〜図27を参照して、一実施形態の変形例に係る判定部22及び作成部23によるインデックス12の構築処理の動作例を説明する。
図24に例示するように、変形例に係る作成部23は、インデックス12の構築を行なう際に、「列指向型インデックス」の構築の論理と同様に、列単位でまとめてインデックス12を構築することにより、効率的なデータの処理を可能とする。
例えば、作成部23は、データ情報リスト14を参照し、先に参照されるSELECT文の割合(参照する最小SIDの割合)が多い列ほど優先度を高く設定し、列ごとに、インデックス12の構築を行なう。
換言すれば、作成部23は、SQL文に記載された連続する処理要求に含まれる各項目に対応するデータにおける重複するデータの割合に応じて、連続する処理要求に含まれる項目に対応するインデックス12の構築を同時に行なってよい。例えば、作成部23は、当該連続する処理要求のうちの記載順の早い処理要求に含まれる項目に対応するインデックス12を構築する時間期間において、当該連続する処理要求に含まれる各項目に対応するインデックス12の構築を実行してよい。
参照する最小SIDの割合の一例を以下に示す。
(項目a) SID1:100%、 SID2: 0%、 SID3: 0%
(項目b) SID1: 80%、 SID2: 20%、 SID3: 0%
(項目c) SID1: 0%、 SID2: 75%、 SID3: 25%
(項目d) SID1: 0%、 SID2: 0%、 SID3:100%
上記の例によれば、列優先度として、a>b>c>dが得られる。
上記の例のように、列の参照割合に偏りがあれば、先行するSIDの開始前の時点で後続のSID用のインデックス12を同時に作成しても、対象データが少ないため、追加の処理負荷は小さく、先行のSID開始に間に合わせる上で障害となる可能性が低い。例えば、SID1の開始前から、SID2、3用のインデックス12を構築することも可能となる。
なお、列の参照割合に偏りがない場合は、インデックス12の構築の際に列ごとにデータをまとめることが困難であるため、作成部23は、一実施形態と同様に、行単位でのインデックス12の構築を行なってよい。
或いは、作成部23は、例えば、所定の記載順までのデータが、インデックス12の列に含まれるデータ数に対し所定の閾値以上である場合に、所定の記載順までのデータを含むインデックス12の構築を行なってもよい。換言すれば、変形例に係る作成部23は、列の参照割合に代えて、参照されるデータ数に基づいて、列ごとにインデックス12を構築してもよい。
作成部23は、例えば、図25に示すように、SID1の開始時点において、データ情報リスト14の先頭から順次、いずれのSIDでも参照されない部分を除く全データ分の管理情報を読み出す。図25の例では、一実施形態に係る図21の例に加えて、作成部23は、SID2で参照されるTID2の項目bのデータ分の管理情報を読み出す。すなわち、変形例に係る作成部23は、参照する最小SIDの割合が80%である(例えば、所定の閾値を超えている)項目bに対応するデータを、記載順の早い項目aに対応するデータのインデックス12の構築と同時に実行するのである。なお、所定の閾値は、予め設定されてよく、例示的に、50%等の値であってよい。
また、作成部23は、データ情報リスト14に対して、全ての行に処理済フラグが設定された列を、以降の処理でインデックス12の構築対象外に設定してよい。図25の例では、作成部23は、項目a、bを構築対象外に設定する。
このように、作成部23は、SID1の開始後に、SID1の加工処理で使用されるデータ分のインデックス12の構築に加えて、SID2以降の加工処理で使用される一点鎖線枠内のデータ分のインデックス12を構築し始める。SID2で使用されるデータ量は、図25の例ではTID2の項目bのデータ量であって少量であるため、処理負荷が小さく済む。これにより、一実施形態に係る手法よりも効率的にインデックス12を構築することができ、効率的な(例えば、より時間を短縮した)加工処理を実現できる。
図26に例示するように、作成部23は、SID2の開始時点において、データ情報リスト14の先頭から順次、残りのデータ分の管理情報を全て読み出す。図26の例では、一実施形態に係る図22の例に加えて、作成部23は、SID3で参照されるTID3の項目cのデータ分の管理情報を読み出す。すなわち、変形例に係る作成部23は、参照する最小SIDの割合が75%である(例えば、所定の閾値を超えている)項目cに対応するデータを、記載順の早い項目bに対応するデータのインデックス12の構築と同時に実行するのである。また、作成部23は、項目cを構築対象外に設定する。
このように、作成部23は、SID2の開始後に、一部のデータがSID1の開始前に構築済(図25参照)であるインデックス12の残りのデータを、加工部24によるSID1の検索実行と並行して構築する。例えば、作成部23は、SID3の加工処理で使用される一点鎖線枠内のデータ分のインデックス12を構築し始める。SID3で使用されるデータ量は、図26の例ではTID3の項目cのデータ量であって少量であるため、処理負荷が小さく済む。これにより、一実施形態に係る手法よりも効率的にインデックス12を構築することができ、効率的な(例えば、より時間を短縮した)加工処理を実現できる。
図27に例示するように、作成部23は、SID3の開始時点において、データ情報リスト14の先頭から順次、残りのデータ分の管理情報を全て読み出す。図27の例では、一実施形態に係る図22から図23への変化とは異なり、作成部23は、SID3で参照されるTID3、6の項目dのデータ分の管理情報を読み出す。また、作成部23は、項目dを構築対象外に設定する。
このように、作成部23は、SID3の開始後に、一部のデータがSID2の開始前に構築済(図26参照)であるインデックス12の残りのデータを、加工部24によるSID2の検索実行と並行して構築する。例えば、作成部23は、SID3の加工処理で使用される一点鎖線枠内のデータ分のインデックス12を構築し始める。SID3で使用される項目cは、SID2の開始後にインデックス12の構築済であるため、作成部23は、SID3の開始後に、SID3で使用される項目dのデータについてインデックス12を構築すればよい。これにより、一実施形態に係る手法よりも効率的にインデックス12を構築することができ、効率的な(例えば、より時間を短縮した)加工処理を実現できる。
〔1−5〕一実施形態に係る処理時間
次に、一実施形態に係る手法による処理時間の一例を、上述した第1比較例及び第2比較例に係る手法による処理時間の一例と比較して説明する。
図28の(a)に例示するように、第1比較例に係る手法では、コントローラ200がデータロードと並行して、データテーブル110の全体のデータに対するインデックス120を構築する(「インデックス構築あり」の場合)。この場合、SID1、2、3の加工処理は、インデックス120の構築後に実行される。なお、「インデックス構築なし」の場合、コントローラ200は、SID1、2、3の加工処理をデータロード完了後に実行するが、インデックス120を使用しないため、参照範囲の多いSID1、2の加工処理に時間がかかる。
図28の(b)に例示するように、第2比較例に係る手法では、コントローラ200がデータロードと並行して、SID1の加工処理に使用するインデックス120を構築する。そして、コントローラ200は、データロードの終了後、且つ、SID1用のインデックス120の構築後に、SID1の加工処理を行なう。SID1の加工処理の終了後、コントローラ200は、SIDごとにインデックス120を構築してから、当該SIDの加工処理を行なう。第2比較例では、第1比較例よりも、インデックス120の構築の処理負荷が低いため、合計の処理時間が短くなる。
図28の(c)に例示するように、一実施形態に係る手法では、コントローラ20は、データロードと並行して、SQLに対する列/データ範囲の判定を行ない、SID1、2、3の順に、加工処理に先行してインデックス12を構築する。このように、SID1用のインデックス12の構築直後に、SID2用、SID3用のインデックス12を構築できるため、SID1、2、3の加工処理の処理遅延を軽減させることができ、第1及び第2比較例よりも、合計の処理時間を大幅に短縮できる。
〔2〕その他
上述した一実施形態に係る技術は、以下のように変形、変更して実施することができる。
例えば、図8に示すコントローラ20の各機能ブロックは、それぞれ任意の組み合わせで併合してもよく、分割してもよい。
また、データベース10(DBサーバ)、コントローラ20、ホスト装置30の機能は、それぞれ、マルチプロセッサやマルチコアプロセッサであるプロセッサ50aによって実現されてもよい。さらに、DB管理システム1が有する機能の少なくとも一部は、例えばクラウド環境のように、複数のコンピュータに分散又は冗長化して配置されてもよい。
さらに、DB管理システム1において、コントローラ20及びデータベース10が1つのコンピュータとして併合されてもよい。
また、一実施形態では、ホスト装置30から1つのロード+加工用SQLが発行されるものとしたが、これに限定されるものではなく、複数のロード+加工用SQLが発行されてもよい。この場合、DB管理システム1は、ロード+加工用SQLごとに、上述した処理を行なえばよい。
さらに、一実施形態に係る加工用列指向型インデックス12は、ロード+加工用SQLに係る処理に特化したインデックス12であるため、コントローラ20は、当該ロード+加工用SQLに係るロード及び加工処理の完了後、インデックス12を削除してもよい。
或いは、ホスト装置30から過去に処理したロード+加工用SQLと同様のロード+加工用SQL、又は、加工用SQLが発行される場合に備えて、コントローラ20は、加工処理が完了してから所定の期間内は、インデックス12を保持してもよい。
また、コントローラ20は、加工処理の完了後、構築したインデックス12に基づいて、データテーブル11の全体の列指向型インデックスを構築してもよい。
〔3〕付記
以上の実施形態に関し、さらに以下の付記を開示する。
(付記1)
データベースからインデックスを構築するインデックス構築プログラムであって、
前記インデックスを構築する際に、SQL文に記載された内容に基づいて、前記データベースから前記SQL文に記載された各項目に対応するデータを予め複数の項目について特定し、
特定した前記データに基づき、前記SQL文に記載された各項目の記載順に応じて、項目ごとに当該項目に対応するデータを含む前記インデックスの構築を行なう、
処理をコンピュータに実行させることを特徴とする、インデックス構築プログラム。
(付記2)
前記複数の項目間で重複するデータについては記載順が早い項目に対応するデータとして前記インデックスの構築を行なう、
処理を前記コンピュータに実行させることを特徴とする、付記1に記載のインデックス構築プログラム。
(付記3)
前記インデックスの構築を行なう際に、前記SQL文に記載された連続する処理要求に含まれる各項目に対応するデータにおける重複するデータの割合に応じて、前記連続する処理要求に含まれる項目に対応するインデックスの構築を同時に行なう、
処理を前記コンピュータに実行させることを特徴とする、付記1又は付記2に記載のインデックス構築プログラム。
(付記4)
前記連続する処理要求のうちの記載順の早い処理要求に含まれる項目に対応するインデックスを構築する時間期間において、当該連続する処理要求に含まれる各項目に対応するインデックスの構築を実行する、
処理を前記コンピュータに実行させることを特徴とする、付記3に記載のインデックス構築プログラム。
(付記5)
前記インデックスの構築を行なう際に、前記SQL文における所定の記載順までのデータが前記インデックスの列に含まれるデータ数に対し所定の閾値以上である場合に、前記所定の記載順までのデータを含むインデックスの構築を行なう、
処理を前記コンピュータに実行させることを特徴とする、付記1又は付記2に記載のインデックス構築プログラム。
(付記6)
前記SQL文には、前記データベースに対するデータのロード要求と、前記データベースに対する連続する処理要求と、がセットで記載され、
前記連続する処理要求は、前記データベースの各項目に対する加工処理の要求を含む、付記1〜5のいずれか1項に記載のインデックス構築プログラム。
(付記7)
データベースからインデックスを構築するインデックス構築方法であって、
コンピュータのプロセッサが、
前記インデックスを構築する際に、SQL文に記載された内容に基づいて、前記データベースから前記SQL文に記載された各項目に対応するデータを予め複数の項目について特定し、
特定した前記データに基づき、前記SQL文に記載された各項目の記載順に応じて、項目ごとに当該項目に対応するデータを含む前記インデックスの構築を行なう、
ことを特徴とする、インデックス構築方法。
(付記8)
前記プロセッサが、前記複数の項目間で重複するデータについては記載順が早い項目に対応するデータとして前記インデックスの構築を行なう、
ことを特徴とする、付記7に記載のインデックス構築方法。
(付記9)
前記プロセッサが、前記インデックスの構築を行なう際に、前記SQL文に記載された連続する処理要求に含まれる各項目に対応するデータにおける重複するデータの割合に応じて、前記連続する処理要求に含まれる項目に対応するインデックスの構築を同時に行なう、
ことを特徴とする、付記7又は付記8に記載のインデックス構築方法。
(付記10)
前記プロセッサが、前記連続する処理要求のうちの記載順の早い処理要求に含まれる項目に対応するインデックスを構築する時間期間において、当該連続する処理要求に含まれる各項目に対応するインデックスの構築を実行する、
ことを特徴とする、付記9に記載のインデックス構築方法。
(付記11)
前記プロセッサが、前記インデックスの構築を行なう際に、前記SQL文における所定の記載順までのデータが前記インデックスの列に含まれるデータ数に対し所定の閾値以上である場合に、前記所定の記載順までのデータを含むインデックスの構築を行なう、
ことを特徴とする、付記7又は付記8に記載のインデックス構築方法。
(付記12)
前記SQL文には、前記データベースに対するデータのロード要求と、前記データベースに対する連続する処理要求と、がセットで記載され、
前記連続する処理要求は、前記データベースの各項目に対する加工処理の要求を含む、付記7〜11のいずれか1項に記載のインデックス構築方法。
(付記13)
データベースからインデックスを構築するインデックス構築装置であって、
前記インデックスを構築する際に、SQL文に記載された内容に基づいて、前記データベースから前記SQL文に記載された各項目に対応するデータを予め複数の項目について特定する特定部と、
特定した前記データに基づき、前記SQL文に記載された各項目の記載順に応じて、項目ごとに当該項目に対応するデータを含む前記インデックスの構築を行なう構築部と、をそなえる
ことを特徴とする、インデックス構築装置。
(付記14)
前記構築部が、前記複数の項目間で重複するデータについては記載順が早い項目に対応するデータとして前記インデックスの構築を行なう、
ことを特徴とする、付記13に記載のインデックス構築装置。
(付記15)
前記構築部が、前記インデックスの構築を行なう際に、前記SQL文に記載された連続する処理要求に含まれる各項目に対応するデータにおける重複するデータの割合に応じて、前記連続する処理要求に含まれる項目に対応するインデックスの構築を同時に行なう、
ことを特徴とする、付記13又は付記14に記載のインデックス構築装置。
(付記16)
前記構築部が、前記連続する処理要求のうちの記載順の早い処理要求に含まれる項目に対応するインデックスを構築する時間期間において、当該連続する処理要求に含まれる各項目に対応するインデックスの構築を実行する、
ことを特徴とする、付記15に記載のインデックス構築装置。
(付記17)
前記構築部が、前記インデックスの構築を行なう際に、前記SQL文における所定の記載順までのデータが前記インデックスの列に含まれるデータ数に対し所定の閾値以上である場合に、前記所定の記載順までのデータを含むインデックスの構築を行なう、
ことを特徴とする、付記13又は付記14に記載のインデックス構築装置。
(付記18)
前記SQL文には、前記データベースに対するデータのロード要求と、前記データベースに対する連続する処理要求と、がセットで記載され、
前記連続する処理要求は、前記データベースの各項目に対する加工処理の要求を含む、付記13〜17のいずれか1項に記載のインデックス構築装置。