(57)【要約】【課題】インデックスを効率良く構築する。【解決手段】データベースからインデックス１２を構築するインデックス構築プログラムであって、前記インデックス１２を構築する際に、ＳＱＬ文に記載された内容に基づいて、前記データベースから前記ＳＱＬ文に記載された各項目に対応するデータを予め複数の項目について特定し、特定した前記データに基づき、前記ＳＱＬ文に記載された各項目の記載順に応じて、項目ごとに当該項目に対応するデータを含む前記インデックス１２の構築を行なう。【選択図】図６
2019197309.tif 000002
【特許請求の範囲】
【請求項１】
データベースからインデックスを構築するインデックス構築プログラムであって、
前記インデックスを構築する際に、ＳＱＬ文に記載された内容に基づいて、前記データベースから前記ＳＱＬ文に記載された各項目に対応するデータを予め複数の項目について特定し、
特定した前記データに基づき、前記ＳＱＬ文に記載された各項目の記載順に応じて、項目ごとに当該項目に対応するデータを含む前記インデックスの構築を行なう、
処理をコンピュータに実行させることを特徴とする、インデックス構築プログラム。
【請求項２】
前記複数の項目間で重複するデータについては記載順が早い項目に対応するデータとして前記インデックスの構築を行なう、
処理を前記コンピュータに実行させることを特徴とする、請求項１に記載のインデックス構築プログラム。
【請求項３】
前記インデックスの構築を行なう際に、前記ＳＱＬ文に記載された連続する処理要求に含まれる各項目に対応するデータにおける重複するデータの割合に応じて、前記連続する処理要求に含まれる項目に対応するインデックスの構築を同時に行なう、
処理を前記コンピュータに実行させることを特徴とする、請求項１又は請求項２に記載のインデックス構築プログラム。
【請求項４】
前記連続する処理要求のうちの記載順の早い処理要求に含まれる項目に対応するインデックスを構築する時間期間において、当該連続する処理要求に含まれる各項目に対応するインデックスの構築を実行する、
処理を前記コンピュータに実行させることを特徴とする、請求項３に記載のインデックス構築プログラム。
【請求項５】
前記インデックスの構築を行なう際に、前記ＳＱＬ文における所定の記載順までのデータが前記インデックスの列に含まれるデータ数に対し所定の閾値以上である場合に、前記所定の記載順までのデータを含むインデックスの構築を行なう、
処理を前記コンピュータに実行させることを特徴とする、請求項１又は請求項２に記載のインデックス構築プログラム。
【請求項６】
前記ＳＱＬ文には、前記データベースに対するデータのロード要求と、前記データベースに対する連続する処理要求と、がセットで記載され、
前記連続する処理要求は、前記データベースの各項目に対する加工処理の要求を含む、請求項１〜５のいずれか１項に記載のインデックス構築プログラム。
【請求項７】
データベースからインデックスを構築するインデックス構築方法であって、
コンピュータのプロセッサが、
前記インデックスを構築する際に、ＳＱＬ文に記載された内容に基づいて、前記データベースから前記ＳＱＬ文に記載された各項目に対応するデータを予め複数の項目について特定し、
特定した前記データに基づき、前記ＳＱＬ文に記載された各項目の記載順に応じて、項目ごとに当該項目に対応するデータを含む前記インデックスの構築を行なう、
ことを特徴とする、インデックス構築方法。
【請求項８】
データベースからインデックスを構築するインデックス構築装置であって、
前記インデックスを構築する際に、ＳＱＬ文に記載された内容に基づいて、前記データベースから前記ＳＱＬ文に記載された各項目に対応するデータを予め複数の項目について特定する特定部と、
特定した前記データに基づき、前記ＳＱＬ文に記載された各項目の記載順に応じて、項目ごとに当該項目に対応するデータを含む前記インデックスの構築を行なう構築部と、をそなえる
ことを特徴とする、インデックス構築装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インデックス構築プログラム、インデックス構築方法、及びインデックス構築装置に関する。
【背景技術】
【０００２】
リレーショナルデータベース（ＲＤＢＭＳ）等のＤＢ（Database）管理システムでは、複数のレコードを集めたＤＢテーブルに対してレコードの挿入・削除や検索等の操作が実行される。ＤＢテーブルとしては、ストレージ上にレコード単位でデータが格納される行指向型のテーブルが挙げられる。
【０００３】
ところで、ＤＢ管理システムでは、例えば、巨大なデータを加工する際に、データをＤＢにロードしてから加工するというシステム運用が行なわれることがある。
【０００４】
このようなシステム運用が行なわれる理由としては、例えば、ＳＱＬが広く知られており柔軟な加工も可能である点や、入力データ、中間データ、及び／又は、出力データをＤＢテーブル上に置くことでデータ管理が容易となり活用し易い点、等が挙げられる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−２５９４４２号公報
【特許文献２】特開２００１−６７３６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
データの加工処理が、例えば、バッチ処理やリアルタイム処理等のように所定の時間内に行なう処理、換言すれば、時間制限のある処理である場合、「ロード＋加工」処理の高速化が重要となる。
【０００７】
なお、行指向型のＤＢテーブルに対する参照等の操作の高速化のために、列指向型インデックスが用いられることがある。列指向型インデックスによれば、参照処理、例えば、レコード内の全属性のうちの特定の数の属性を読み出す処理等において、高速にデータを抽出することができる。
【０００８】
例えば、ＤＢ管理システムは、データをＤＢテーブルにロードするのと並行してロード済のデータに基づき列指向型インデックスを生成（設定）し、列指向型インデックスに基づいて加工処理を行なうことで、加工処理を高速化することも考えられる。
【０００９】
しかし、大量なデータのロード直後に加工のための抽出を行なう場合、インデックスの構築完了が間に合わず、ＤＢ管理システムにより、インデックスがないものとして扱われることがある。
【００１０】
１つの側面では、本発明は、インデックスを効率良く構築することを目的とする。
【００１１】
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の１つとして位置付けることができる。
【課題を解決するための手段】
【００１２】
１つの側面では、データベースからインデックスを構築するインデックス構築プログラムは、以下の処理をコンピュータに実行させてよい。前記処理は、前記インデックスを構築する際に、ＳＱＬ文に記載された内容に基づいて、前記データベースから前記ＳＱＬ文に記載された各項目に対応するデータを予め複数の項目について特定する処理を含んでよい。前記処理は、特定した前記データに基づき、前記ＳＱＬ文に記載された各項目の記載順に応じて、項目ごとに当該項目に対応するデータを含む前記インデックスの構築を行なう処理を含んでよい。
【発明の効果】
【００１３】
１つの側面では、インデックスを効率良く構築することができる。
【図面の簡単な説明】
【００１４】
【図１】第１比較例に係るデータロード及び加工処理の動作例を示すブロック図である。
【図２】第１比較例に係る処理の流れを説明する図である。
【図３】第１比較例に係る処理時間を説明する図である。
【図４】一実施形態に係るホスト装置の動作例を示すフローチャートである。
【図５】一実施形態に係るコントローラの動作例を示すフローチャートである。
【図６】一実施形態に係るデータロード及び加工処理の動作例を示すブロック図である。
【図７】一実施形態に係る処理時間の一例を説明する図である。
【図８】一実施形態に係るＤＢ管理システムの構成例を示すブロック図である。
【図９】図８に示すコントローラ及びホスト装置のハードウェア構成例を示すブロック図である。
【図１０】図８に示すデータテーブル、加工用列指向型インデックス、及び構築待ちデータ情報リストの一例をそれぞれ示す図である。
【図１１】一実施形態に係るロード＋加工用ＳＱＬ及び加工対象の一例を示す図である。
【図１２】第１比較例に係る列指向型インデックス構築を説明する図である。
【図１３】第１比較例に係る列指向型インデックス構築開始時の状態例を示す図である。
【図１４】第１比較例に係るＳＩＤ（Session Identifier）１開始時の状態例を示す図である。
【図１５】第２比較例に係る列指向型インデックス構築開始時の状態例を示す図である。
【図１６】第２比較例に係るＳＩＤ１受付時の状態例を示す図である。
【図１７】第２比較例に係るＳＩＤ１開始からＳＩＤ２受付までの状態例を示す図である。
【図１８】第２比較例に係るＳＩＤ２開始からＳＩＤ３受付までの状態例を示す図である。
【図１９】第２比較例に係るＳＩＤ３開始時の状態例を示す図である。
【図２０】一実施形態に係る列指向型インデックス構築開始時の状態例を示す図である。
【図２１】一実施形態に係るＳＩＤ１開始時の状態例を示す図である。
【図２２】一実施形態に係るＳＩＤ２開始時の状態例を示す図である。
【図２３】一実施形態に係るＳＩＤ３開始時の状態例を示す図である。
【図２４】一実施形態の変形例に係る列指向型インデックス構築開始時の状態を示す図である。
【図２５】一実施形態の変形例に係るＳＩＤ１開始時の状態を示す図である。
【図２６】一実施形態の変形例に係るＳＩＤ２開始時の状態を示す図である。
【図２７】一実施形態の変形例に係るＳＩＤ３開始時の状態を示す図である。
【図２８】第１比較例、第２比較例、及び一実施形態に係るそれぞれの手法による処理時間の一例を示す図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。例えば、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
【００１６】
〔１〕一実施形態
〔１−１〕一実施形態について
図１は、第１比較例に係るデータロード及び加工処理の動作例を示すブロック図である。図１に示すように、ホスト装置３００がネットワーク４００経由でＤＢ管理システム１００に対してロード用ＳＱＬ及び加工用ＳＱＬを発行すると（符号（１）参照）、コントローラ２００がこれらのＳＱＬを解析する（符号（２）参照）。
【００１７】
コントローラ２００は、解析結果に基づき、図２に示すデータソース５００から、例えば大容量の加工前データ５１０をＤＢテーブルの一例であるデータテーブル１１０にロードする（符号（３）参照）。
【００１８】
また、コントローラ２００は、例えば、データテーブル１１０へのデータロードと並行して、ロード済のデータに基づき、データテーブル１１０全体の列指向型インデックス（以下、単に「インデックス」と表記する）１２０を構築する（符号（４）参照）。なお、インデックス１２０の構築は、データロードにおいて、例えば、一定量のレコードのロードが完了するごとに或いは一定時間ごとに実行されてよい。
【００１９】
データロードが完了すると、コントローラ２００は、インデックス１２０を参照し（符号（５）参照）、データテーブル１１０から加工用データを抽出する（符号（６）参照）。
【００２０】
そして、コントローラ２００は、抽出した加工用データに対して加工用ＳＱＬに基づく加工を行ない（符号（７）参照）、加工済データを加工済データテーブル１３０に出力する（符号（８）参照）。以上の処理により、データロード及び加工処理が終了する。なお、加工済データテーブル１３０は、データ活用先６００（図２参照）、例えばＳＱＬ発行元であるホスト装置３００によって参照され、利用される。
【００２１】
図３は、第１比較例に係るＤＢ管理システム１００の処理時間の内訳を示す図である。図３の（ｂ）に示すように、インデックス１２０により、理想的には、インデックス１２０を用いない（ａ）の場合に比べて、加工処理におけるデータテーブル１１０からの加工用データの抽出処理（図１の符号（６））を高速化（処理時間を短縮）できる。なお、「理想的」とは、ロードの完了後、加工処理を行なう時点で、列指向型インデックスの構築が完了している状態を意味する。
【００２２】
しかし、実際には、図３の（ｃ）に示すように、大量データのロード直後に抽出処理が行なわれると、インデックス１２０の構築処理が間に合わなくなる。なお、データテーブル１１０からのデータの参照では、全データ分に対するインデックス１２０が用いられる。このため、未インデックス化のデータが一定量以下である場合、コントローラ２００は、抽出処理において、当該未インデックス化のデータをメモリ上でインデックス化しつつ、構築済のインデックス１２０と並列に、メモリ上のインデックスを参照する。一方、未インデックス化のデータが一定量よりも多い場合、コントローラ２００は、インデックス１２０を使用しない（インデックス１２０が存在しないものとして扱う）。
【００２３】
このように、第１比較例に係る手法では、加工処理の処理時間の短縮が不十分である、或いは短縮できない場合がある。
【００２４】
そこで、一実施形態に係るシステムは、データロード、インデックス構築、及び加工処理を、それぞれ独立して行なうのではなく、ロードデータ及び加工処理の内容に応じてインデックス構築及び参照の手順を最適化する。これにより、インデックスを効率良く構築することができ、加工処理の処理時間を短縮させることができる。
【００２５】
以下、一実施形態に係るシステムについて簡単に説明する。図４及び図５は、それぞれ、ホスト装置３０及びコントローラ２０の動作例を示すフローチャートであり、図６は、一実施形態に係るＤＢ管理システム１の動作例を説明するブロック図である。図６に例示するように、一実施形態に係るＤＢ管理システム１は、コントローラ２０をそなえてよく、ネットワーク４０を介してホスト装置３０と相互に通信可能に接続されてよい。
【００２６】
まず、ホスト装置３０の動作例について説明する。図４に例示するように、ホスト装置３０は、ロード及び加工ジョブが発生すると（ステップＳ１）、ネットワーク４０経由で“ロード＋加工用”ＳＱＬをＤＢ管理システム１に発行する（ステップＳ２；図６の符号（１１）参照）。
【００２７】
“ロード＋加工”用ＳＱＬは、ロード及び加工の指示をセットにしたＳＱＬであり、例えば、ロード及び加工を同一トランザクションにより指示するコマンドであってよい。これにより、コントローラ２０では、ロードに対して、どのような加工が行なわれるかを判断することが可能となる。
【００２８】
なお、ホスト装置３０は、ロード＋加工用ＳＱＬの発行後、ＤＢ管理システム１からの応答受信を待ち合わせ（ステップＳ３、ステップＳ３でＮｏ）、応答を受信すると（ステップＳ３でＹｅｓ）、処理が終了する。
【００２９】
次に、コントローラ２０の動作例について説明する。図５に例示するように、コントローラ２０は、ホスト装置３０からロード＋加工用ＳＱＬを受信すると（ステップＳ１１）、当該ＳＱＬを解析する（ステップＳ１２；図６の符号（１２）参照）。
【００３０】
ロード＋加工用ＳＱＬの解析において、コントローラ２０は、どのロードに対して、どのような加工が行なわれるかを解析・判断してよい。例えば、コントローラ２０は、ロード＋加工用ＳＱＬから、同一トランザクション内においてロード〜加工の処理で利用されるテーブル名等を特定してよい。
【００３１】
次いで、コントローラ２０は、解析結果に基づいて、図示しないデータソースから、加工前データをデータテーブル１１にロードする（ステップＳ１３；図６の符号（１３）参照）。
【００３２】
また、コントローラ２０は、データロードと並行して、解析結果に基づいて、“列及び／又はデータ範囲”の判定を行ない（ステップＳ１４；図６の符号（１４）参照）、加工用列指向型インデックス１２を構築する（ステップＳ１５；図６の符号（１５）参照）。なお、以下の説明では、「加工用列指向型インデックス」を単に「加工用インデックス」或いは「インデックス」と表記する場合がある。
【００３３】
“列及び／又はデータ範囲”（以下、「列／データ範囲」と表記する）の判定において、コントローラ２０は、例えば、加工用ＳＱＬ（例えばＳＥＬＥＣＴ文）で指定される加工内容に基づき、ロード直後のデータ使用状況を判断してよい。
【００３４】
データ使用状況の例としては、“特定の列を使用している”、及び／又は、“Ｗｈｅｒｅ句等で特定のデータ範囲に絞ってデータを使用している”等、列やデータ範囲ごとのロード直後のデータ使用有無が挙げられる。コントローラ２０は、上記の判断結果に基づいて、ロード直後にデータを使用される列やデータ範囲にインデックス内容を限定した加工用インデックス１２を構築してよい。列／データ範囲の判定処理の詳細は後述する。
【００３５】
このように、一実施形態では、コントローラ２０は、インデックス内容が加工処理用で使用される情報に制限されたインデックス１２を構築する。これにより、大量のデータロードが行なわれる場合であっても、コントローラ２０は、インデックス構築のための全データ分の処理を待たずに、データロード完了後、加工処理のために即座にインデックス１２を参照可能となる。
【００３６】
データロードが完了すると、コントローラ２０は、加工用インデックス１２を参照して（ステップＳ１６；図６の符号（１６）参照）、データテーブル１１から加工用データを抽出する（ステップＳ１７；図６の符号（１７）参照）。
【００３７】
そして、コントローラ２０は、抽出した加工用データに対して加工用ＳＱＬに基づく加工を行ない（ステップＳ１８；符号（１８）参照）、加工済データを加工済データテーブル１３に出力する（ステップＳ１９；符号（１９）参照）。
【００３８】
以上の処理により、データロード及び加工処理が終了する。なお、加工済データテーブル１３は、データ活用先、例えばＳＱＬ発行元であるホスト装置３０によって参照され、利用される。
【００３９】
図７は、一実施形態に係るＤＢ管理システム１の処理時間の内訳を示す図である。図７の（ａ）に示すように、第１比較例に係る手法では、コントローラ２００は、全データに対してインデックス１２０を構築しようとするため、大量のデータロード時にはインデックス１２０の構築に時間がかかる。このため、第１比較例に係る手法では、データロード直後に実行される加工処理のためのデータ抽出までにインデックス１２０の構築が間に合わず、インデックス１２０が使用できない場合がある。
【００４０】
これに対し、図７の（ａ）に示すように、一実施形態に係る手法によれば、加工用インデックス１２の構築に使用されるデータが、加工処理において使用されるデータ部分に制限されるため、構築時間を短縮することができる。従って、データロード直後に実行される加工処理のためのデータ抽出において、インデックス１２を活用可能となる。
【００４１】
なお、第１比較例において、「ロード」処理と、ロードされたデータを使用する「加工＋参照」処理とは、別の時間帯若しくは排他的に行なわれる。このため、第１比較例では、ロード単体、ロード後のＩＮＳＥＲＴ／ＵＰＤＡＴＥ／ＤＥＬＥＴＥによる少量更新、インデックス１２０構築済状態でのＳＥＬＥＣＴ、といった単位で考慮された処理ロジックになっている。このため、第１比較例では、インデックス１２０の構築の際に、ロードに対する加工の内容を解析しておらず、ロード対象の全データを処理対象にせざるを得ない。
【００４２】
一方、一実施形態においては、加工用インデックス１２を構築することにより、ロードされる全データをインデックス１２０の対象とする第１比較例と比べて、以下の利点が得られる。
【００４３】
・加工処理において、データテーブル１１からのデータの読み込み性能は第１比較例と変わらないため、Ｉ／Ｏ（Input / Output）性能には影響がない。
【００４４】
・加工処理において、データテーブル１１から読み込んだデータをコントローラ２０のメモリに格納するため、メモリ性能には影響がない。
【００４５】
・インデックス１２を構築する際に、行指向から列指向への変換、及び、インデックス１２の構築処理では、構築処理の対象外となった列数分だけ処理対象のデータが減少するため、ＣＰＵネックの解消及び処理の繰り返し数の削減を図ることができる。このため、ロード＋加工処理の性能を向上させることができる。なお、ＣＰＵはCentral Processing Unitの略称である。
【００４６】
〔１−２〕一実施形態の構成例
次に、一実施形態に係るＤＢ管理システム１の構成例を説明する。図８は一実施形態に係るＤＢ管理システム１の機能構成例を示す図である。
【００４７】
ＤＢ管理システム１は、インデックス構築システムの一例であり、図８に示すように、例示的に、データベース１０及びコントローラ２０をそなえてよい。ＤＢ管理システム１は、ネットワーク４０を介してホスト装置３０と相互に通信可能に接続されてよい。
【００４８】
データベース１０は、データベースを記憶する記憶装置の一例である。図８に例示するように、データベース１０は、データテーブル１１、加工用列指向型インデックス１２、加工済データテーブル１３、及び構築待ちデータ情報リスト（以下、単に「データ情報リスト」と表記する場合がある）１４を記憶してよい。
【００４９】
データベース１０は、１以上の記憶部によって実現されてよく、複数の記憶部によってＲＡＩＤ（Redundant Arrays of Inexpensive Disks）等のディスクアレイが構成されてもよい。なお、データ情報リスト１４は、データベース１０とは異なる記憶装置、例えばメモリ等の記憶領域に格納されてもよい。
【００５０】
コントローラ２０は、データベース１０に対する種々の制御を行なう制御装置又はコンピュータの一例である。また、コントローラ２０は、一実施形態に係るインデックス１２を構築するインデックス構築装置の一例であり、データをデータベースにロードして加工するデータ処理装置の一例である。
【００５１】
コントローラ２０は、例えば、ホスト装置３０からネットワーク４０を介してデータベース１０への参照や更新等の操作要求があった場合、コントローラ２０は、データベース１０に対して要求された操作を行ない、ホスト装置３０に応答を返す。
【００５２】
なお、ホスト装置３０としては、例えば業務サーバや基幹サーバ、或いはクライアントマシン等のコンピュータが挙げられる。図８には１台のホスト装置３０が示されているが、２台以上のホスト装置３０がＤＢ管理システム１と相互に通信可能に接続されてもよい。
【００５３】
ネットワーク４０としては、例えばインターネット、又は、ＬＡＮ（Local Area Network）若しくはＷＡＮ（Wide Area Network）等が挙げられる。
【００５４】
次に、図９を参照して、図８に示すデータベース１０、コントローラ２０、及びホスト装置３０のハードウェア構成例を説明する。データベース１０、コントローラ２０、及びホスト装置３０は、互いに同様のハードウェア構成をそなえてよいため、以下、これらの一例としてコンピュータ５０を例に挙げて、コンピュータ５０のハードウェア構成例について説明する。
【００５５】
図９に示すように、コンピュータ５０は、例示的に、プロセッサ５０ａ、メモリ５０ｂ、記憶部５０ｃ、ＩＦ（Interface）部５０ｄ、Ｉ／Ｏ部５０ｅ、及び読取部５０ｆをそなえてよい。
【００５６】
プロセッサ５０ａは、種々の制御や演算を行なう演算処理装置の一例である。プロセッサ５０ａは、コンピュータ５０内の各ブロックとバスで相互に通信可能に接続されてよい。プロセッサ５０ａとしては、例えば、ＣＰＵ、ＭＰＵ、ＧＰＵ、ＡＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡ等の集積回路（ＩＣ；Integrated Circuit）が用いられてもよい。なお、ＭＰＵはMicro Processing Unitの略称である。ＧＰＵはGraphics Processing Unitの略称であり、ＡＰＵはAccelerated Processing Unitの略称である。ＤＳＰはDigital Signal Processorの略称であり、ＡＳＩＣはApplication Specific ICの略称であり、ＦＰＧＡはField-Programmable Gate Arrayの略称である。
【００５７】
メモリ５０ｂは、種々のデータやプログラム等の情報を格納するハードウェアの一例である。メモリ５０ｂとしては、例えばＲＡＭ（Random Access Memory）等の揮発性メモリが挙げられる。
【００５８】
記憶部５０ｃは、種々のデータやプログラム等の情報を格納するハードウェアの一例である。記憶部５０ｃとしては、例えばＨＤＤ（Hard Disk Drive）等の磁気ディスク装置、ＳＳＤ（Solid State Drive）等の半導体ドライブ装置、不揮発性メモリ等の各種記憶装置が挙げられる。不揮発性メモリとしては、例えば、フラッシュメモリ、ＳＣＭ（Storage Class Memory）、ＲＯＭ（Read Only Memory）等が挙げられる。
【００５９】
図８に示すＤＢ管理システム１のデータベース１０は、例えば、ＤＢサーバ等の装置が有するメモリ５０ｂ及び記憶部５０ｃの少なくとも一方の記憶領域により実現されてよい。
【００６０】
なお、図８に示す例では、コントローラ２０とは異なるＤＢサーバ等の装置によりデータベース１０が実現されるが、これに限定されるものではない。例えば、データベース１０は、コントローラ２０のメモリ５０ｂ及び記憶部５０ｃの少なくとも一方の記憶領域により実現されてもよい。また、図８に示すデータベース１０が格納する情報は、コントローラ２０とＤＢサーバとの間、或いは、複数のＤＢサーバ間、において、分散して格納されてもよい。
【００６１】
また、記憶部５０ｃは、コンピュータ５０の各種機能の全部若しくは一部を実現するプログラム５０ｇを格納してよい。プロセッサ５０ａは、記憶部５０ｃに格納されたプログラム５０ｇをメモリ５０ｂに展開して実行することにより、図８に示すデータベース１０、コントローラ２０、又は、ホスト装置３０としての機能を実現できる。
【００６２】
例えば、データベース１０（ＤＢサーバ）においては、ＤＢサーバのプロセッサ５０ａが、記憶部５０ｃに格納されたプログラム５０ｇをメモリ５０ｂに展開して演算処理を実行することで、ＤＢサーバの機能を実現できる。
【００６３】
また、コントローラ２０においては、コントローラ２０のプロセッサ５０ａが、記憶部５０ｃに格納されたプログラム５０ｇ（インデックス構築プログラム）をメモリ５０ｂに展開して演算処理を実行することで、ＤＢサーバの機能を実現できる。当該機能は、後述するロード部２１、判定部２２、作成部２３、及び加工部２４の機能を含んでよい。
【００６４】
さらに、ホスト装置３０においては、ホスト装置３０のプロセッサ５０ａが、記憶部５０ｃに格納されたプログラム５０ｇをメモリ５０ｂに展開して演算処理を実行することで、ＡＰサーバ３としての機能を実現できる。
【００６５】
ＩＦ部５０ｄは、ネットワーク４０との間の接続及び通信の制御等を行なう通信ＩＦの一例である。例えば、ＩＦ部５０ｄは、ＬＡＮ、或いは、光通信（例えばＦＣ（Fibre Channel；ファイバチャネル））等に準拠したアダプタを含んでよい。例えば、プログラム５０ｇは、当該通信ＩＦを介して、ネットワーク４０からコンピュータ５０にダウンロードされ、記憶部５０ｃに格納されてもよい。
【００６６】
Ｉ／Ｏ部５０ｅは、マウス、キーボード、又は操作ボタン等の入力部、並びに、タッチパネルディスプレイ、ＬＣＤ（Liquid Crystal Display）等のモニタ、プロジェクタ、又はプリンタ等の出力部、の一方又は双方を含んでよい。
【００６７】
読取部５０ｆは、記録媒体５０ｈに記録されたデータやプログラムの情報を読み出すリーダの一例である。読取部５０ｆは、記録媒体５０ｈを接続可能又は挿入可能な接続端子又は装置を含んでよい。読取部５０ｆとしては、例えば、ＵＳＢ（Universal Serial Bus）等に準拠したアダプタ、記録ディスクへのアクセスを行なうドライブ装置、ＳＤカード等のフラッシュメモリへのアクセスを行なうカードリーダ等が挙げられる。なお、記録媒体５０ｈにはプログラム５０ｇが格納されてもよく、読取部５０ｆが記録媒体５０ｈからプログラム５０ｇを読み出して記憶部５０ｃに格納してもよい。
【００６８】
記録媒体５０ｈとしては、例示的に、磁気／光ディスクやフラッシュメモリ等の非一時的な記録媒体が挙げられる。磁気／光ディスクとしては、例示的に、フレキシブルディスク、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ブルーレイディスク、ＨＶＤ（Holographic Versatile Disc）等が挙げられる。フラッシュメモリとしては、例示的に、ＵＳＢメモリやＳＤカード等が挙げられる。なお、ＣＤとしては、例示的に、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ等が挙げられる。また、ＤＶＤとしては、例示的に、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等が挙げられる。
【００６９】
上述したコンピュータ５０のハードウェア構成は例示である。従って、コンピュータ５０内でのハードウェアの増減（例えば任意のブロックの追加や削除）、分割、任意の組み合わせでの統合、又は、バスの追加若しくは削除等は適宜行なわれてもよい。
【００７０】
〔１−３〕コントローラの機能構成例
次に、図８に例示するコントローラ２０の機能構成例を説明する。図８に示すように、コントローラ２０は、例示的に、ロード部２１、判定部２２、作成部２３、及び、加工部２４をそなえてよい。
【００７１】
ロード部２１は、ホスト装置３０からＳＱＬを受信し、受信したＳＱＬを解析して、解析結果を判定部２２に渡す解析処理を行なうとともに、解析結果に基づいて、データソースからデータテーブル１１にロード対象のデータをロードするロード処理を行なう。
【００７２】
例えば、ロード部２１は、ロード＋加工用ＳＱＬを受信すると、解析処理において、ＳＱＬ文に記載された内容に基づいて、同一トランザクション内でロード及び加工に使用されるデータテーブル１１のテーブル名等を特定する。また、ロード部２１は、ロード処理において、解析処理により特定したデータテーブル１１のテーブル名に対して、データソースから読み出したデータを書き込む。
【００７３】
図１０は、一実施形態に係るデータテーブル１１、加工用列指向型インデックス１２、及び構築待ちデータ情報リスト１４の一例を示す図である。
【００７４】
図１０に示すように、データテーブル１１は、例示的に、ＴＩＤ（Tuple Identifier）、及び、複数（図１０の例ではａ〜ｅの５つ）の項目を含んでよい。ＴＩＤは、タプル（レコード；行）を識別する識別情報の一例である。項目ａ〜ｅには、レコードごとにデータソースからロードされたデータの内容が設定される。項目は、列又はカラム（column）と言い換えてもよい。
【００７５】
図１１は、一実施形態に係るロード＋加工用ＳＱＬ及び加工対象の一例を示す図である。なお、図１１に示す「データテーブル“tbl”」は、図１０に示すデータテーブル１１であるものとする。
【００７６】
図１１のＳＱＬ文に示すように、１行目の“BEGIN;”から６行目の“COMMIT;”までのコマンドは、同一のトランザクションにより実行されるコマンドである。
【００７７】
ＳＱＬ文の２行目の“COPY INTO tbl FROM ‘aaa.csv’ ;”は、データソースの“aaa.csv”のデータを“tbl”というデータテーブル１１にコピー（ロード）することを指示する、データ格納（ロード）用のコマンドである。
【００７８】
ＳＱＬ文の３行目〜５行目は、データ加工用のコマンド（処理要求）であり、それぞれのコマンドには、セッションを識別する識別情報の一例であるＳＩＤ（Session Identifier）が割り当てられる。
【００７９】
例えば、３行目（ＳＩＤ１）は、“tbl”の項目ａの値が“10”未満のレコードから、項目ａ及び項目ｂの値（データ）を抽出することを指示するコマンドである。４行目は、“tbl”の項目ｂの値が“100”よりも大きく、且つ、項目ｃの値が“200”と等しいレコードから、項目ｂの値（データ）を抽出することを指示するコマンドである。５行目は、“tbl”の項目ａの値が“5”未満であり、且つ、項目ｃ及び項目ｄの値がそれぞれ“100”よりも大きいレコードから、項目ａの値、項目ｃの値、及び項目ｄの値を加算した値（データ）を抽出することを指示するコマンドである。
【００８０】
図１１の例では、ロード部２１は、解析処理において、ＳＱＬ文の２〜５行目のそれぞれのコマンドで、テーブル名：“tbl”を特定してよい。また、ロード部２１は、ロード処理において、ＳＱＬ文の２行目に従い、“aaa.csv”のデータをデータテーブル１１にロードしてよい。
【００８１】
判定部２２は、加工用インデックス１２を構築する際に、ＳＱＬ文に記載された内容に基づいて、データベース１０（データテーブル１１）からＳＱＬ文に記載された各項目に対応するデータを予め複数の項目について特定する特定部の一例である。
【００８２】
例えば、判定部２２は、インデックス１２を構築するために、解析結果に基づいて、データ加工を指示するＳＱＬ文からデータ加工の際に使用されるデータテーブル１１の列／データ範囲を判定し、判定結果を作成部２３に渡す判定処理を行なう。
【００８３】
判定部２２は、判定処理において、データ情報リスト１４を生成してよい。図１０に示すように、データ情報リスト１４は、ＴＩＤごとに、インデックス１２の構築用の管理情報が設定されたリストである。データ情報リスト１４は、データテーブル１１内の実データを含まなくてよい。例えば、判定部２２は、ロード部２１によるデータテーブル１１へのデータ格納と同期して、インデックス１２の構築用に管理情報をデータ情報リスト１４に蓄積してよい。
【００８４】
図１１に例示するように、データ情報リスト１４に含まれる管理情報は、データテーブル１１のＴＩＤごと、且つ、項目ごとに、加工処理において（最初に）参照されるＳＩＤが設定された情報であってよい。
【００８５】
例えば、判定部２２は、ＳＱＬ文に記載されたＳＩＤ１〜ＳＩＤ３のそれぞれについて判定処理を行ない、ロード部２１による解析結果の“tbl”に対応するデータ情報リスト１４内の管理情報に以下の値を設定してよい。
【００８６】
（ＳＩＤ１）
判定部２２は、管理情報に対して、ＷＨＥＲＥ句で指定される項目ａのデータ範囲に合致するＴＩＤ１、３、５、６のうち、ＳＩＤ１で使用される項目（列）ａ、ｂに、ＳＩＤの“１”を設定する。
【００８７】
（ＳＩＤ２）
判定部２２は、管理情報に対して、項目ｂ、ｃがＷＨＥＲＥ句で指定されるデータ範囲に合致するＴＩＤ２、５、６のうち、ＳＩＤ２で使用される項目（列）ｂ、ｃに、ＳＩＤの“２”を設定する。
【００８８】
（ＳＩＤ３）
判定部２２は、管理情報に対して、項目ａ、ｃ、ｄがＷＨＥＲＥ句で指定されるデータ範囲に合致するＴＩＤ３、６のうち、ＳＩＤ３で使用される項目（列）ａ、ｃ、ｄに、ＳＩＤの“３”を設定する。
【００８９】
なお、図１１に例示するように、ＳＩＤ１に基づき特定されるＴＩＤ３の項目ａと、ＳＩＤ３に基づき特定されるＴＩＤ３の項目ａとの間で、インデックス１２の構築に用いられるデータが重複する。この場合、判定部２２は、当該重複するデータをＳＱＬ文における記載順が早い項目に対応するデータとして扱ってよい。例えば、ＴＩＤ３の項目ａのデータは、ＳＩＤ１に対応するインデックス１２の構築の際に、データテーブル１１から抽出されてよい。この場合、ＳＩＤ３に対応するインデックス１２の構築の際には、ＴＩＤ３の項目ａのデータの抽出処理が（インデックス非対象のデータの抽出処理と同様に）スキップされてよい。
【００９０】
図１１に示す、ＴＩＤ５の項目ｂ、ＴＩＤ６の項目ａ、ｂ、ｃも同様である。すなわち、ＴＩＤ５の項目ｂ、ＴＩＤ６の項目ａ、ｂのデータは、それぞれ、ＳＩＤ１に対応するインデックス１２の構築の際に、データテーブル１１から抽出されてよい。また、ＴＩＤ６の項目ｃのデータは、ＳＩＤ２に対応するインデックス１２の構築の際に、データテーブル１１から抽出されてよい。
【００９１】
以上のように、判定部２２は、ＳＱＬ文を先読みして、加工処理に利用される列／データ範囲を判定し、インデックス１２の構築に用いるデータ情報リスト１４を生成するのである。なお、加工処理に利用されるデータ範囲としては、ＷＨＥＲＥ句で指定される特定のデータ範囲が挙げられる。また、加工処理に利用される列としては、ＳＥＬＥＣＴ文により選択される特定の列、及び、ＷＨＥＲＥ句で指定される列、が挙げられる。
【００９２】
作成部２３は、ＳＱＬ文に記載された各項目の記載順に応じて、項目ごとに対応するデータを含む加工用列指向型インデックス１２の構築を行なう構築部の一例である。
【００９３】
例えば、作成部２３は、判定結果に基づいて、データロード開始後に、判定部２２が特定した列／データ範囲に対して、加工用列指向型インデックス１２を作成する。一実施形態に係る手法によれば、作成部２３は、インデックス１２の構築をデータ加工前までに完了することができる。
【００９４】
図１０に例示するように、作成部２３は、データテーブル１１へのデータ格納、及び、データ情報リスト１４の管理情報の設定とは非同期に、インデックス１２を構築してよい。例えば、作成部２３は、一定量のレコードがデータテーブル１１にロードされ、管理情報が設定される都度（一定量ごとに）、或いは、一定時間ごとに、インデックス１２を構築してよい。
【００９５】
作成部２３により構築されるインデックス１２内の情報は、管理情報において、ＴＩＤごとに、ＳＩＤが設定された項目（図１１参照）に制限されてよい。例えば、図１０に示すように、インデックス１２として構築される項目は、ＴＩＤ１では項目ａ、ｂに制限され、ＴＩＤ２では項目ｂ、ｃに制限される。
【００９６】
判定部２２及び作成部２３の詳細については後述する。
【００９７】
加工部２４は、ロード部２１によるロード処理の完了後に、ＳＱＬ文に記載された加工処理を、例えばＳＩＤ１からＳＩＤ３まで順次行なう。
【００９８】
例えば、加工部２４は、加工処理において、作成部２３が作成したインデックス１２を参照して、ＳＱＬ文に記載された加工用データをデータテーブル１１から抽出し、例えばメモリ部５０ｂ等に格納する抽出処理を行なう。
【００９９】
また、加工部２４は、加工処理において、抽出処理により抽出した加工用データに対して、ＳＱＬ文に記載された加工内容に応じた加工を行ない、加工結果である加工済データを加工済データテーブル１３に出力する。
【０１００】
なお、加工部２４は、加工処理において、ＳＩＤ１からＳＩＤ３までの加工用データの抽出処理をまとめて実行し、その後に加工用データに基づきデータ加工及び出力を行なってもよい。
【０１０１】
〔１−４〕インデックス構築処理の動作例
次に、上述の如く構成された判定部２２及び作成部２３によるインデックス１２の構築処理の動作例を、第１比較例及び第２比較例と比較しながら説明する。なお、以下の説明では、簡単のため、ＳＱＬ文やロード対象のデータは、一実施形態に係るものと同様であるものと仮定する。
【０１０２】
〔１−４−１〕第１比較例に係るインデックス構築処理の説明
まず、図１２〜図１４を参照して、第１比較例に係るインデックス１２０の構築処理の動作例を説明する。
【０１０３】
図１２に例示するように、第１比較例では、データロードされたデータテーブル１１０の全データがインデックス対象である。このため、インデックス１２０は、最初に実行されるＳＩＤ１で利用される太実線枠内のデータ以外の部分についても、リソースが使用される。これにより、ＳＩＤ１実行時点で、例えば破線枠内のデータ部分についてインデックス１２０の構築が終わらず、インデックス１２０を利用できないリスクが発生し得る。
【０１０４】
例えば、図１３に示すように、インデックス１２０の構築開始時点では、インデックス１２０の構築に未使用のデータテーブル１１０のレコードを管理するためのデータ情報リスト１４０には、ＴＩＤ１〜６の管理情報が含まれる。また、インデックス１２０にはデータが設定されていない。
【０１０５】
コントローラ２００は、データ情報リスト１４０のセンタ等から順次、全データ分を読み出し、データテーブル１１０に対して、読み出したＴＩＤに該当する部分のデータを抽出して、インデックス１２０を構築する。
【０１０６】
図１４に示すように、インデックス１２０の構築開始後、ＳＩＤ１開始時点までの間に、ＴＩＤ１〜４の全データに対するインデックス１２０の構築が行なわれたと仮定する。なお、コントローラ２００は、インデックス１２０の構築が完了したＴＩＤ１〜４のエントリを管理情報から削除し、構築が間に合わなかったＴＩＤ５、６のエントリを残している。
【０１０７】
コントローラ２００は、データテーブル１１０の全データを対象としてインデックス１２０を構築するため、プロセッサ等の処理負荷が高い。また、構築されたインデックス１２０には、実際にはＳＩＤ１の処理に不要なデータ（図１４の太実線枠内のデータ以外の部分）も含まれている。
【０１０８】
〔１−４−２〕第２比較例に係るインデックス構築処理の説明
次に、図１５〜図１９を参照して、第２比較例に係るインデックス１２０′の構築処理の動作例を説明する。第２比較例では、コントローラ２００が、ＳＱＬ文に記載された検索条件に合わせて、加工処理の実行タイミングで順次インデックス１２０′を構築する場合を仮定する。
【０１０９】
図１５に例示するように、コントローラ２００は、データロードのタイミングではインデックス１２０の構築を行なわないため、データ情報リスト１４０′において各レコードに対する管理情報は設定されない。
【０１１０】
図１６に示すように、データロード後、ＳＩＤ１を受け付けると、コントローラ２００は、ＳＩＤ１の検索条件に合致するデータをデータテーブル１１０から抽出し、インデックス１２０′の構築を開始する。
【０１１１】
図１７に示すように、ＳＩＤ１の開始後、ＳＩＤ２を受け付けるまでの間において、インデックス１２０′には、コントローラ２００により、ＳＩＤ１の検索条件に合致する太実線枠内のデータが設定される。
【０１１２】
図１８に示すように、ＳＩＤ２の開始後、ＳＩＤ３を受け付けるまでの間において、インデックス１２０′には、コントローラ２００により、ＳＩＤ２の検索条件に合致する太実線枠内のデータが設定される。
【０１１３】
なお、コントローラ２００は、ＳＩＤ１とデータ範囲が被る範囲のデータ取得のために、インデックス１２０′の検索（データ走査）を行なう。
【０１１４】
例えば、コントローラ２００は、ＳＩＤ２の検索条件に合致するデータをデータテーブル１１０から抽出し、インデックス１２０′の構築を行なう。このとき、コントローラ２００は、既存のＳＩＤ１用のインデックス１２０′で検索可能な部分についてはインデックス１２０′を生成しない。また、ＳＩＤ２はＳＩＤ１よりも参照するデータ範囲が広いため、既存のインデックス１２０′範囲内のデータの取得の他に、当該既存のインデックス１２０′範囲外のデータに対する条件ヒット有無を確認するためにデータ走査を行なう。
【０１１５】
図１９に示すように、ＳＩＤ３の開始後、インデックス１２０′には、コントローラ２０により、ＳＩＤ３の検索条件に合致する太実線枠内のデータが設定される。
【０１１６】
なお、コントローラ２００は、ＳＩＤ１、２とデータ範囲が被る範囲のデータ取得のために、インデックス１２０′の検索（データ走査）を行なう。
【０１１７】
例えば、コントローラ２００は、ＳＩＤ３の検索条件に合致するデータをデータテーブル１１０から抽出し、インデックス１２０′の構築を行なう。このとき、コントローラ２００は、既存のＳＩＤ１、２用のインデックス１２０′で検索可能な部分についてはインデックス１２０′を生成しない。また、ＳＩＤ３はＳＩＤ１、２よりも参照するデータ範囲が広いため、既存のインデックス１２０′範囲内のデータの取得の他に、当該既存のインデックス１２０′範囲外のデータに対する条件ヒット有無を確認するためにデータ走査を行なう。
【０１１８】
〔１−４−３〕一実施形態に係るインデックス構築処理の説明
これに対し、一実施形態に係る判定部２２及び作成部２３によるインデックス１２の構築処理においては、以下の手順により、インデックス１２の構築が行なわれる。以下、図２０〜図２３を参照して、インデックス１２の構築処理の動作例を説明する。
【０１１９】
判定部２２は、ロード＋加工用ＳＱＬのＳＩＤ１〜３について分析を行ない、データ情報リスト１４に対して、図２０に例示するような管理情報を設定する。なお、図２０に例示する管理情報は、図１１に示す管理情報に対して、項目間で重複するデータをＳＱＬでの記載順が早い項目のデータとして扱った場合を示している。また、判定部２２は、図２０に例示するように、ＳＱＬにおけるいずれのＳＩＤによっても参照されないレコードであるＴＩＤ４を、インデックス構築対象外のレコードとして管理情報から除外してよい。
【０１２０】
作成部２３は、データロードと並行して、ＳＩＤ１、２、３の順に（ＳＱＬにおける記載順に）、データ情報リスト１４に基づくインデックス１２の構築処理を行なう。
【０１２１】
図２１に例示するように、ＳＩＤ１の開始時点において、作成部２３は、データ情報リスト１４の先頭から順次、いずれのＳＩＤでも参照されない部分を除く全データ分の管理情報を読み出す。図２１の例では、作成部２３は、ＳＩＤ１で参照されるＴＩＤ１、３、５、６の項目ａ、ｂのデータ分の管理情報を読み出す。そして、作成部２３は、データ情報リスト１４のうちの参照ＳＩＤとしてＳＩＤ１が設定されたＴＩＤに該当する部分のデータを、データテーブル１１から読み出すことで、インデックス１２の構築を行なう。
【０１２２】
なお、作成部２３は、データ情報リスト１４に対して、既にインデックス１２の構築に使用したデータについて、次以降の処理で対象外にするために、使用済フラグを設定してよい。また、作成部２３は、全列に使用済フラグが設定されているレコードを、インデックス１２の構築が完了したとしてデータ情報リスト１４から削除してよい。図２１の例では、作成部２３は、ＴＩＤ１、３、５、６の項目ａ、ｂのそれぞれに使用済フラグを設定し、全列（項目ａ、ｂ）に使用済フラグが設定されているＴＩＤ１をデータ情報リスト１４から削除する。
【０１２３】
このように、インデックス１２の構築において、インデックス１２の構築処理対象が最初に実行されるＳＩＤ１のための太実線枠内のデータに制限されるため、処理負荷が軽減される。これにより、作成部２３は、ＳＩＤ１の実行タイミングまでに、ＳＩＤ１に対応するインデックス１２の構築を完了させることができる。
【０１２４】
図２２に例示するように、ＳＩＤ２の開始時点において、作成部２３は、データ情報リスト１４の先頭から順次、残りのデータ分の管理情報を全て読み出す。そして、作成部２３は、データ情報リスト１４のうちの参照ＳＩＤとしてＳＩＤ２が設定されたＴＩＤに該当する部分のデータを、データテーブル１１から読み出すことで、インデックス１２の構築を行なう。
【０１２５】
なお、図２２に例示するように、作成部２３は、ＴＩＤ２の項目ｂ、ｃ、及び、ＴＩＤ５、６の項目ｃのそれぞれに使用済フラグを設定する。また、作成部２３は、全列（項目ｂ、ｃ）に使用済フラグが設定されているＴＩＤ２、及び、前列（項目ａ、ｂ、ｃ）に使用済フラグが設定されているＴＩＤ５をデータ情報リスト１４から削除する。
【０１２６】
また、作成部２３は、加工部２４によるＳＩＤ１の検索実行と並行して、インデックス１２の構築を行なう。このように、インデックス１２の構築において、インデックス１２の構築処理対象がＳＩＤ２のための太実線枠内のデータに制限されるため、処理負荷が軽減される。これにより、作成部２３は、ＳＩＤ２の実行タイミングまでに、ＳＩＤ２に対応するインデックス１２の構築を完了させることができる。
【０１２７】
図２３に例示するように、ＳＩＤ３の開始時点において、作成部２３は、データ情報リスト１４の先頭から順次、残りのデータ分の管理情報を全て読み出す。そして、作成部２３は、データ情報リスト１４のうちの参照ＳＩＤとしてＳＩＤ３が設定されたＴＩＤに該当する部分のデータを、データテーブル１１から読み出すことで、インデックス１２の構築を行なう。
【０１２８】
なお、図２３に例示するように、作成部２３は、ＴＩＤ３の項目ｃ、ｄ、及び、ＴＩＤ６の項目ｄのそれぞれに使用済フラグを設定する。また、作成部２３は、全列（項目ａ、ｂ、ｃ、ｄ）に使用済フラグが設定されているＴＩＤ３、６をデータ情報リスト１４から削除する。これにより、全ての管理情報がデータ情報リスト１４から削除される。
【０１２９】
また、作成部２３は、加工部２４によるＳＩＤ２の検索実行と並行して、インデックス１２の構築を行なう。このように、インデックス１２の構築において、インデックス１２の構築処理対象がＳＩＤ３のための太実線枠内のデータに制限されるため、処理負荷が軽減される。これにより、作成部２３は、ＳＩＤ３の実行タイミングまでに、ＳＩＤ３に対応するインデックス１２の構築を完了させることができる。
【０１３０】
〔１−４−４〕一実施形態の変形例に係るインデックス構築処理の説明
次に、図２４〜図２７を参照して、一実施形態の変形例に係る判定部２２及び作成部２３によるインデックス１２の構築処理の動作例を説明する。
【０１３１】
図２４に例示するように、変形例に係る作成部２３は、インデックス１２の構築を行なう際に、「列指向型インデックス」の構築の論理と同様に、列単位でまとめてインデックス１２を構築することにより、効率的なデータの処理を可能とする。
【０１３２】
例えば、作成部２３は、データ情報リスト１４を参照し、先に参照されるＳＥＬＥＣＴ文の割合（参照する最小ＳＩＤの割合）が多い列ほど優先度を高く設定し、列ごとに、インデックス１２の構築を行なう。
【０１３３】
換言すれば、作成部２３は、ＳＱＬ文に記載された連続する処理要求に含まれる各項目に対応するデータにおける重複するデータの割合に応じて、連続する処理要求に含まれる項目に対応するインデックス１２の構築を同時に行なってよい。例えば、作成部２３は、当該連続する処理要求のうちの記載順の早い処理要求に含まれる項目に対応するインデックス１２を構築する時間期間において、当該連続する処理要求に含まれる各項目に対応するインデックス１２の構築を実行してよい。
【０１３４】
参照する最小ＳＩＤの割合の一例を以下に示す。
（項目ａ）  ＳＩＤ１：１００％、    ＳＩＤ２：    ０％、    ＳＩＤ３：    ０％
（項目ｂ）  ＳＩＤ１：  ８０％、    ＳＩＤ２：  ２０％、    ＳＩＤ３：    ０％
（項目ｃ）  ＳＩＤ１：    ０％、    ＳＩＤ２：  ７５％、    ＳＩＤ３：  ２５％
（項目ｄ）  ＳＩＤ１：    ０％、    ＳＩＤ２：    ０％、    ＳＩＤ３：１００％
【０１３５】
上記の例によれば、列優先度として、ａ＞ｂ＞ｃ＞ｄが得られる。
【０１３６】
上記の例のように、列の参照割合に偏りがあれば、先行するＳＩＤの開始前の時点で後続のＳＩＤ用のインデックス１２を同時に作成しても、対象データが少ないため、追加の処理負荷は小さく、先行のＳＩＤ開始に間に合わせる上で障害となる可能性が低い。例えば、ＳＩＤ１の開始前から、ＳＩＤ２、３用のインデックス１２を構築することも可能となる。
【０１３７】
なお、列の参照割合に偏りがない場合は、インデックス１２の構築の際に列ごとにデータをまとめることが困難であるため、作成部２３は、一実施形態と同様に、行単位でのインデックス１２の構築を行なってよい。
【０１３８】
或いは、作成部２３は、例えば、所定の記載順までのデータが、インデックス１２の列に含まれるデータ数に対し所定の閾値以上である場合に、所定の記載順までのデータを含むインデックス１２の構築を行なってもよい。換言すれば、変形例に係る作成部２３は、列の参照割合に代えて、参照されるデータ数に基づいて、列ごとにインデックス１２を構築してもよい。
【０１３９】
作成部２３は、例えば、図２５に示すように、ＳＩＤ１の開始時点において、データ情報リスト１４の先頭から順次、いずれのＳＩＤでも参照されない部分を除く全データ分の管理情報を読み出す。図２５の例では、一実施形態に係る図２１の例に加えて、作成部２３は、ＳＩＤ２で参照されるＴＩＤ２の項目ｂのデータ分の管理情報を読み出す。すなわち、変形例に係る作成部２３は、参照する最小ＳＩＤの割合が８０％である（例えば、所定の閾値を超えている）項目ｂに対応するデータを、記載順の早い項目ａに対応するデータのインデックス１２の構築と同時に実行するのである。なお、所定の閾値は、予め設定されてよく、例示的に、５０％等の値であってよい。
【０１４０】
また、作成部２３は、データ情報リスト１４に対して、全ての行に処理済フラグが設定された列を、以降の処理でインデックス１２の構築対象外に設定してよい。図２５の例では、作成部２３は、項目ａ、ｂを構築対象外に設定する。
【０１４１】
このように、作成部２３は、ＳＩＤ１の開始後に、ＳＩＤ１の加工処理で使用されるデータ分のインデックス１２の構築に加えて、ＳＩＤ２以降の加工処理で使用される一点鎖線枠内のデータ分のインデックス１２を構築し始める。ＳＩＤ２で使用されるデータ量は、図２５の例ではＴＩＤ２の項目ｂのデータ量であって少量であるため、処理負荷が小さく済む。これにより、一実施形態に係る手法よりも効率的にインデックス１２を構築することができ、効率的な（例えば、より時間を短縮した）加工処理を実現できる。
【０１４２】
図２６に例示するように、作成部２３は、ＳＩＤ２の開始時点において、データ情報リスト１４の先頭から順次、残りのデータ分の管理情報を全て読み出す。図２６の例では、一実施形態に係る図２２の例に加えて、作成部２３は、ＳＩＤ３で参照されるＴＩＤ３の項目ｃのデータ分の管理情報を読み出す。すなわち、変形例に係る作成部２３は、参照する最小ＳＩＤの割合が７５％である（例えば、所定の閾値を超えている）項目ｃに対応するデータを、記載順の早い項目ｂに対応するデータのインデックス１２の構築と同時に実行するのである。また、作成部２３は、項目ｃを構築対象外に設定する。
【０１４３】
このように、作成部２３は、ＳＩＤ２の開始後に、一部のデータがＳＩＤ１の開始前に構築済（図２５参照）であるインデックス１２の残りのデータを、加工部２４によるＳＩＤ１の検索実行と並行して構築する。例えば、作成部２３は、ＳＩＤ３の加工処理で使用される一点鎖線枠内のデータ分のインデックス１２を構築し始める。ＳＩＤ３で使用されるデータ量は、図２６の例ではＴＩＤ３の項目ｃのデータ量であって少量であるため、処理負荷が小さく済む。これにより、一実施形態に係る手法よりも効率的にインデックス１２を構築することができ、効率的な（例えば、より時間を短縮した）加工処理を実現できる。
【０１４４】
図２７に例示するように、作成部２３は、ＳＩＤ３の開始時点において、データ情報リスト１４の先頭から順次、残りのデータ分の管理情報を全て読み出す。図２７の例では、一実施形態に係る図２２から図２３への変化とは異なり、作成部２３は、ＳＩＤ３で参照されるＴＩＤ３、６の項目ｄのデータ分の管理情報を読み出す。また、作成部２３は、項目ｄを構築対象外に設定する。
【０１４５】
このように、作成部２３は、ＳＩＤ３の開始後に、一部のデータがＳＩＤ２の開始前に構築済（図２６参照）であるインデックス１２の残りのデータを、加工部２４によるＳＩＤ２の検索実行と並行して構築する。例えば、作成部２３は、ＳＩＤ３の加工処理で使用される一点鎖線枠内のデータ分のインデックス１２を構築し始める。ＳＩＤ３で使用される項目ｃは、ＳＩＤ２の開始後にインデックス１２の構築済であるため、作成部２３は、ＳＩＤ３の開始後に、ＳＩＤ３で使用される項目ｄのデータについてインデックス１２を構築すればよい。これにより、一実施形態に係る手法よりも効率的にインデックス１２を構築することができ、効率的な（例えば、より時間を短縮した）加工処理を実現できる。
【０１４６】
〔１−５〕一実施形態に係る処理時間
次に、一実施形態に係る手法による処理時間の一例を、上述した第１比較例及び第２比較例に係る手法による処理時間の一例と比較して説明する。
【０１４７】
図２８の（ａ）に例示するように、第１比較例に係る手法では、コントローラ２００がデータロードと並行して、データテーブル１１０の全体のデータに対するインデックス１２０を構築する（「インデックス構築あり」の場合）。この場合、ＳＩＤ１、２、３の加工処理は、インデックス１２０の構築後に実行される。なお、「インデックス構築なし」の場合、コントローラ２００は、ＳＩＤ１、２、３の加工処理をデータロード完了後に実行するが、インデックス１２０を使用しないため、参照範囲の多いＳＩＤ１、２の加工処理に時間がかかる。
【０１４８】
図２８の（ｂ）に例示するように、第２比較例に係る手法では、コントローラ２００がデータロードと並行して、ＳＩＤ１の加工処理に使用するインデックス１２０を構築する。そして、コントローラ２００は、データロードの終了後、且つ、ＳＩＤ１用のインデックス１２０の構築後に、ＳＩＤ１の加工処理を行なう。ＳＩＤ１の加工処理の終了後、コントローラ２００は、ＳＩＤごとにインデックス１２０を構築してから、当該ＳＩＤの加工処理を行なう。第２比較例では、第１比較例よりも、インデックス１２０の構築の処理負荷が低いため、合計の処理時間が短くなる。
【０１４９】
図２８の（ｃ）に例示するように、一実施形態に係る手法では、コントローラ２０は、データロードと並行して、ＳＱＬに対する列／データ範囲の判定を行ない、ＳＩＤ１、２、３の順に、加工処理に先行してインデックス１２を構築する。このように、ＳＩＤ１用のインデックス１２の構築直後に、ＳＩＤ２用、ＳＩＤ３用のインデックス１２を構築できるため、ＳＩＤ１、２、３の加工処理の処理遅延を軽減させることができ、第１及び第２比較例よりも、合計の処理時間を大幅に短縮できる。
【０１５０】
〔２〕その他
上述した一実施形態に係る技術は、以下のように変形、変更して実施することができる。
【０１５１】
例えば、図８に示すコントローラ２０の各機能ブロックは、それぞれ任意の組み合わせで併合してもよく、分割してもよい。
【０１５２】
また、データベース１０（ＤＢサーバ）、コントローラ２０、ホスト装置３０の機能は、それぞれ、マルチプロセッサやマルチコアプロセッサであるプロセッサ５０ａによって実現されてもよい。さらに、ＤＢ管理システム１が有する機能の少なくとも一部は、例えばクラウド環境のように、複数のコンピュータに分散又は冗長化して配置されてもよい。
【０１５３】
さらに、ＤＢ管理システム１において、コントローラ２０及びデータベース１０が１つのコンピュータとして併合されてもよい。
【０１５４】
また、一実施形態では、ホスト装置３０から１つのロード＋加工用ＳＱＬが発行されるものとしたが、これに限定されるものではなく、複数のロード＋加工用ＳＱＬが発行されてもよい。この場合、ＤＢ管理システム１は、ロード＋加工用ＳＱＬごとに、上述した処理を行なえばよい。
【０１５５】
さらに、一実施形態に係る加工用列指向型インデックス１２は、ロード＋加工用ＳＱＬに係る処理に特化したインデックス１２であるため、コントローラ２０は、当該ロード＋加工用ＳＱＬに係るロード及び加工処理の完了後、インデックス１２を削除してもよい。
【０１５６】
或いは、ホスト装置３０から過去に処理したロード＋加工用ＳＱＬと同様のロード＋加工用ＳＱＬ、又は、加工用ＳＱＬが発行される場合に備えて、コントローラ２０は、加工処理が完了してから所定の期間内は、インデックス１２を保持してもよい。
【０１５７】
また、コントローラ２０は、加工処理の完了後、構築したインデックス１２に基づいて、データテーブル１１の全体の列指向型インデックスを構築してもよい。
【０１５８】
〔３〕付記
以上の実施形態に関し、さらに以下の付記を開示する。
【０１５９】
（付記１）
データベースからインデックスを構築するインデックス構築プログラムであって、
前記インデックスを構築する際に、ＳＱＬ文に記載された内容に基づいて、前記データベースから前記ＳＱＬ文に記載された各項目に対応するデータを予め複数の項目について特定し、
特定した前記データに基づき、前記ＳＱＬ文に記載された各項目の記載順に応じて、項目ごとに当該項目に対応するデータを含む前記インデックスの構築を行なう、
処理をコンピュータに実行させることを特徴とする、インデックス構築プログラム。
【０１６０】
（付記２）
前記複数の項目間で重複するデータについては記載順が早い項目に対応するデータとして前記インデックスの構築を行なう、
処理を前記コンピュータに実行させることを特徴とする、付記１に記載のインデックス構築プログラム。
【０１６１】
（付記３）
前記インデックスの構築を行なう際に、前記ＳＱＬ文に記載された連続する処理要求に含まれる各項目に対応するデータにおける重複するデータの割合に応じて、前記連続する処理要求に含まれる項目に対応するインデックスの構築を同時に行なう、
処理を前記コンピュータに実行させることを特徴とする、付記１又は付記２に記載のインデックス構築プログラム。
【０１６２】
（付記４）
前記連続する処理要求のうちの記載順の早い処理要求に含まれる項目に対応するインデックスを構築する時間期間において、当該連続する処理要求に含まれる各項目に対応するインデックスの構築を実行する、
処理を前記コンピュータに実行させることを特徴とする、付記３に記載のインデックス構築プログラム。
【０１６３】
（付記５）
前記インデックスの構築を行なう際に、前記ＳＱＬ文における所定の記載順までのデータが前記インデックスの列に含まれるデータ数に対し所定の閾値以上である場合に、前記所定の記載順までのデータを含むインデックスの構築を行なう、
処理を前記コンピュータに実行させることを特徴とする、付記１又は付記２に記載のインデックス構築プログラム。
【０１６４】
（付記６）
前記ＳＱＬ文には、前記データベースに対するデータのロード要求と、前記データベースに対する連続する処理要求と、がセットで記載され、
前記連続する処理要求は、前記データベースの各項目に対する加工処理の要求を含む、付記１〜５のいずれか１項に記載のインデックス構築プログラム。
【０１６５】
（付記７）
データベースからインデックスを構築するインデックス構築方法であって、
コンピュータのプロセッサが、
前記インデックスを構築する際に、ＳＱＬ文に記載された内容に基づいて、前記データベースから前記ＳＱＬ文に記載された各項目に対応するデータを予め複数の項目について特定し、
特定した前記データに基づき、前記ＳＱＬ文に記載された各項目の記載順に応じて、項目ごとに当該項目に対応するデータを含む前記インデックスの構築を行なう、
ことを特徴とする、インデックス構築方法。
【０１６６】
（付記８）
前記プロセッサが、前記複数の項目間で重複するデータについては記載順が早い項目に対応するデータとして前記インデックスの構築を行なう、
ことを特徴とする、付記７に記載のインデックス構築方法。
【０１６７】
（付記９）
前記プロセッサが、前記インデックスの構築を行なう際に、前記ＳＱＬ文に記載された連続する処理要求に含まれる各項目に対応するデータにおける重複するデータの割合に応じて、前記連続する処理要求に含まれる項目に対応するインデックスの構築を同時に行なう、
ことを特徴とする、付記７又は付記８に記載のインデックス構築方法。
【０１６８】
（付記１０）
前記プロセッサが、前記連続する処理要求のうちの記載順の早い処理要求に含まれる項目に対応するインデックスを構築する時間期間において、当該連続する処理要求に含まれる各項目に対応するインデックスの構築を実行する、
ことを特徴とする、付記９に記載のインデックス構築方法。
【０１６９】
（付記１１）
前記プロセッサが、前記インデックスの構築を行なう際に、前記ＳＱＬ文における所定の記載順までのデータが前記インデックスの列に含まれるデータ数に対し所定の閾値以上である場合に、前記所定の記載順までのデータを含むインデックスの構築を行なう、
ことを特徴とする、付記７又は付記８に記載のインデックス構築方法。
【０１７０】
（付記１２）
前記ＳＱＬ文には、前記データベースに対するデータのロード要求と、前記データベースに対する連続する処理要求と、がセットで記載され、
前記連続する処理要求は、前記データベースの各項目に対する加工処理の要求を含む、付記７〜１１のいずれか１項に記載のインデックス構築方法。
【０１７１】
（付記１３）
データベースからインデックスを構築するインデックス構築装置であって、
前記インデックスを構築する際に、ＳＱＬ文に記載された内容に基づいて、前記データベースから前記ＳＱＬ文に記載された各項目に対応するデータを予め複数の項目について特定する特定部と、
特定した前記データに基づき、前記ＳＱＬ文に記載された各項目の記載順に応じて、項目ごとに当該項目に対応するデータを含む前記インデックスの構築を行なう構築部と、をそなえる
ことを特徴とする、インデックス構築装置。
【０１７２】
（付記１４）
前記構築部が、前記複数の項目間で重複するデータについては記載順が早い項目に対応するデータとして前記インデックスの構築を行なう、
ことを特徴とする、付記１３に記載のインデックス構築装置。
【０１７３】
（付記１５）
前記構築部が、前記インデックスの構築を行なう際に、前記ＳＱＬ文に記載された連続する処理要求に含まれる各項目に対応するデータにおける重複するデータの割合に応じて、前記連続する処理要求に含まれる項目に対応するインデックスの構築を同時に行なう、
ことを特徴とする、付記１３又は付記１４に記載のインデックス構築装置。
【０１７４】
（付記１６）
前記構築部が、前記連続する処理要求のうちの記載順の早い処理要求に含まれる項目に対応するインデックスを構築する時間期間において、当該連続する処理要求に含まれる各項目に対応するインデックスの構築を実行する、
ことを特徴とする、付記１５に記載のインデックス構築装置。
【０１７５】
（付記１７）
前記構築部が、前記インデックスの構築を行なう際に、前記ＳＱＬ文における所定の記載順までのデータが前記インデックスの列に含まれるデータ数に対し所定の閾値以上である場合に、前記所定の記載順までのデータを含むインデックスの構築を行なう、
ことを特徴とする、付記１３又は付記１４に記載のインデックス構築装置。
【０１７６】
（付記１８）
前記ＳＱＬ文には、前記データベースに対するデータのロード要求と、前記データベースに対する連続する処理要求と、がセットで記載され、
前記連続する処理要求は、前記データベースの各項目に対する加工処理の要求を含む、付記１３〜１７のいずれか１項に記載のインデックス構築装置。
【符号の説明】
【０１７７】
１    ＤＢ管理システム
１０    データベース
１１    データテーブル
１２    加工用列指向型インデックス
１３    加工済データテーブル
１４    構築待ちデータ情報リスト
２０    コントローラ
２１    ロード部
２２    判定部
２３    作成部
２４    加工部
３０    ホスト装置
４０    ネットワーク
５０    コンピュータ
【図１】
2019197309.tif 000003
【図２】
2019197309.tif 000004
【図３】
2019197309.tif 000005
【図４】
2019197309.tif 000006
【図５】
2019197309.tif 000007
【図６】
2019197309.tif 000008
【図７】
2019197309.tif 000009
【図８】
2019197309.tif 000010
【図９】
2019197309.tif 000011
【図１０】
2019197309.tif 000012
【図１１】
2019197309.tif 000013
【図１２】
2019197309.tif 000014
【図１３】
2019197309.tif 000015
【図１４】
2019197309.tif 000016
【図１５】
2019197309.tif 000017
【図１６】
2019197309.tif 000018
【図１７】
2019197309.tif 000019
【図１８】
2019197309.tif 000020
【図１９】
2019197309.tif 000021
【図２０】
2019197309.tif 000022
【図２１】
2019197309.tif 000023
【図２２】
2019197309.tif 000024
【図２３】
2019197309.tif 000025
【図２４】
2019197309.tif 000026
【図２５】
2019197309.tif 000027
【図２６】
2019197309.tif 000028
【図２７】
2019197309.tif 000029
【図２８】
2019197309.tif 000030