[実施の形態1]
図1を用いて、本技術の第1の実施の形態に係るシステムの概要を説明する。例えば企業内ネットワークであるネットワーク1には、複数の業務システム(図1では業務システムA乃至C)と、複数の分析システム(図1では分析システムA及びB)と、本実施の形態における主要な処理を実施するDB管理システム100とが接続されている。業務システムA乃至Cは、例えばXML文書データである帳票データを生成してDB管理システム100に登録したり、参照する。また、分析システムA及びBは、DB管理システム100に登録されている帳票データを分析する処理を実施する。DB管理システム100は、1又は複数のコンピュータを含む。
DB管理システム100は、記録管理部110と、第1データベース(DB)120と、データ移動処理部130と、第2DB140と、検索処理部150とを有する。記録管理部110は、業務システムA乃至Cから送られてくる帳票データを第1DB120に格納する。第1DB120は、例えば1日分、1週間分、1ヶ月分といった直近所定期間内に生成された帳票データを格納する。典型的には、データ移動処理部130は、帳票発生順に、第1DB120に格納する。また、データ移動処理部130は、第1DB120に格納されていた帳票データを、1日、1週間、1ヶ月といった所定期間分まとめて第2DB140に格納するための処理を実施する。検索処理部150は、例えば分析システムA及びBからの検索要求を受信し、検索要求に対応する処理を第2DB140に対して実施して、検索結果を要求元の分析システムに返信する。第2DB140には、1日単位、1週間単位、1ヶ月単位といった所定期間単位でデータが蓄積される。
図2に、データ移動処理部130の機能ブロック図を示す。データ移動処理部130は、データ抽出部131と、抽出データ格納部132と、タグビットマップ生成部133と、タグ変換表格納部134と、ソート処理部135と、データ格納処理部136と、タグジャッジ格納部137と、圧縮バッファ138とを有する。
データ抽出部131は、第1DB120から第2DB140に格納すべきデータレコードを抽出し、抽出データ格納部132に格納する。タグビットマップ生成部133は、抽出データ格納部132に格納されているデータからタグ変換表を生成してタグ変換表格納部134に格納し、タグビットマップを生成し、データレコードと連結して抽出データ格納部132に格納する。また、ソート処理部135は、タグビットマップを含むレコードを当該タグビットマップに従ってソートして、ソート結果を抽出データ格納部132に格納する。
データ格納処理部136は、抽出データ格納部132に格納されているソート結果に従って、検索のための索引データであるタグジャッジ(TagJudge)を生成してタグジャッジ格納部137に格納し、処理途中のレコードについては圧縮バッファ138に蓄積する。さらに、データ格納処理部136は、圧縮後のデータ、タグジャッジデータ格納部137に格納されているタグジャッジのデータ及びタグ変換表格納部134に格納されているデータを、第2DB140に格納する。
図3に、検索処理部150の機能ブロック図を示す。検索処理部150は、インターフェース部151と、検索式処理部152と、データ抽出部153と、データ格納部154と、検索部155とを有する。
インターフェース部151は、分析システム等から検索要求を受信すると、当該検索要求に含まれる検索式を検索式処理部152に出力する。検索式処理部152は、第2DB140に格納されているタグ変換表から検索式に関連するビットマップを生成してデータ抽出部153に出力する。データ抽出部153は、検索式処理部152が生成したビットマップと、第2DB140に格納されているタグジャッジとから、該当する圧縮データを特定して第2DB140から読み出して、解凍処理を実施し、解凍後のデータをデータ格納部154に格納する。また、検索式処理部152は、第2DB140に格納されているタグ変換表に基づき検索式をタグ変換表に含まれるタグID表記の検索式に変換して、変換後の検索式を検索部155に出力する。検索部155は、変換後の検索式で、データ格納部154に格納されるレコード(帳票データを含む)を検索して、該当する帳票データをインターフェース部151に出力する。インターフェース部151は、該当する帳票データを、検索要求元の分析システムなどに送信する。
次に、図4乃至図25を用いて、第1の実施の形態に係る処理についてその概要を説明しておく。例えば第1DB120には、図4に示すようなデータが格納されている。図4の例では、第1のカラムには日付(例えば「201101150101」)が、第2のカラムには付随データ(図4では「A」)が、第3のカラムには帳票データ(ここではXML文書のデータ)が登録されるようになっている。帳票データには、営業状況のデータ、出勤情報、売上のデータなどが含まれる。このように1つのXML文書のデータブロックが1データレコードとして登録されている。
図5Aは、営業状況を表す帳票データの一例を示しており、この例には、部門タグと、状況タグと、個数タグとが含まれている。図5Bは、出勤情報の一例を示しており、この例には、部門タグと、申請タグと、出勤日数タグとが含まれている。図5Cは、売上データの帳票データの一例を示しており、この例には、部門タグと、売上タグと、商品タグと、価格タグと、個数タグとが含まれている。
このようなデータを第2DB140に格納する場合には、例えば図6に示すようなタグ変換表を新たな種類のタグ出現毎に生成しつつ処理を行う。図6の例では、タグ変換表には、タグ識別番号(タグIDと呼ぶ)と、タグ名とが対応付けて登録されている。
そして、図7に模式的に示すような処理を実施する。すなわち、タグ変換表から、タグ圧縮処理を実施する。タグ圧縮処理では、タグの文字列をタグIDに置換して、タグ圧縮文書(タグ圧縮帳票データとも呼ぶ)を生成する。例えば、図5Aの帳票データは、タグ圧縮文書1001に変換される。部門タグはタグID「0」に、状況タグはタグID「1」に、個数タグはタグID「2」に置換されている。図5Bの帳票データは、タグ圧縮文書1002に変換される。部門タグはタグID「0」に、申請タグはタグID「3」に、出勤日数タグがタグID「4」に置換されている。図5Cの帳票データは、タグ圧縮文書1003に変換される。部門タグはタグID「0」に、状況タグはタグID「2」に、売上タグはタグID「5」に、商品タグはタグID「6」に、価格タグはタグID「7」に置換されている。
そして、各タグ圧縮文書(すなわち各帳票データブロック)についてタグビットマップ(TagBmp)も生成する。具体的には、タグIDは、タグビットマップのビット位置に対応しており、タグID「0」はビット位置「0」に、タグID「1」はビット位置「1」に、タグID「2」はビット位置「2」に、といったように対応付けがなされている。ここではタグIDの小さい方がタグビットマップの上位ビットとなっている。
タグ圧縮文書1001には、タグID「0」「1」及び「2」のタグが含まれているので、タグビットマップにおけるビット位置「0」「1」及び「2」には「1」にセットされ、それ以外のビット位置には「0」がセットされる。すなわち、タグビットマップ1001tが生成される。同様に、タグ圧縮文書1002には、タグID「0」「3」及び「4」のタグが含まれているので、タグビットマップにおけるビット位置「0」「3」及び「4」には「1」がセットされ、それ以外のビット位置には「0」がセットされる。すなわち、タグビットマップ1002tが生成される。さらに、タグ圧縮文書1003には、タグID「0」「2」「5」「6」及び「7」のタグが含まれているので、タグビットマップにおけるビット位置「0」「2」「5」「6」及び「7」には「1」がセットされ、それ以外のビット位置には「0」がセットされる。すなわち、タグビットマップ1003tが生成される。
図7には、その他の帳票データブロック(タグ圧縮文書)についてのタグビットマップも示されているが、全ての帳票データブロックについてタグビットマップが生成される。
このように生成されたタグビットマップを、図8に示すように、第1DB120から抽出したデータレコードと連結して、タグビットマップ部分をキーにしてソート処理を実施する。図8に示したように6レコードを処理する場合には、図9に示すようにソートされる。そして、本実施の形態では、タグビットマップの種別毎に、該当するレコードのデータを圧縮する。すなわち、同一タグビットマップが得られた1又は複数のレコードのデータをまとめて圧縮して圧縮ブロックを生成して、第2DB140に格納する。図9の例では、タグビットマップ「10011000」が生成されたレコードは1レコードであるが、このレコードのデータを圧縮して、圧縮ブロックBlk1を生成し、第2DB140の所定位置に格納する。また、タグビットマップ「10100111」が生成されたレコードは2レコードであるが、これらのレコードのデータを纏めて圧縮して、圧縮ブロックBlk2を生成し、第2DB140の所定位置に格納する。さらに、タグビットマップ「11100000」が生成されたレコードは3レコードであるが、これらのレコードのデータを纏めて圧縮して、圧縮ブロックBlk3及びBlk4を生成し、第2DB140の所定位置に格納する。なお、圧縮ブロックのサイズの上限が設定されている場合には、同じタグビットマップが生成されたレコード群について2以上の圧縮ブロックが生成される。また、1度に第1DB120から抽出されたレコード群については、第2DB140における同一のパーティション等に格納するものとする。
さらに、分析システムなどからの検索要求に対応するために、文書構造索引であるタグジャッジ(TagJudge)も生成される。この例では、図10に示すようなタグジャッジが生成される。具体的には、タグビットマップの種別毎に、対応する圧縮ブロックへのポインタが登録される。この例では、タグビットマップ「10011000」については圧縮ブロックBlk1へのポインタptrが登録され、タグビットマップ「10100111」については圧縮ブロックBlk2へのポインタptrが登録され、タグビットマップ「11100000」については圧縮ブロックBlk3及びBlk4へのポインタptrが登録されている。
図6に示したタグ変換表及び図10に示したタグジャッジについては、第2DB140に登録しておき、検索処理部150による検索処理で用いる。
このような処理を実施すれば、タグ変換表及びタグジャッジは自動的に生成されるので業務の変更による帳票の変更に対して人手による設計変更が不要となる。また、タグビットマップによって帳票データブロックをクラスタリングすることで、同一種類の帳票データブロックが纏めて圧縮されることが期待される。すなわち、高圧縮率となることが期待され、データ保持コスト(ハードウエアコスト)を削減することができる。
次に、図11及び図12を用いて、検索時の処理について概要を説明する。例えば検索式「XQUERY(売上/商品=テレビ)」を含む検索要求を受信した場合を例に説明する。具体的には、売上タグ又は商品タグについてテレビのデータを含む帳票データブロックを抽出することを要求する検索要求を処理する。
従って、検索式に含まれる条件である「売上」及び「商品」について、タグ変換表から該当するタグIDを読み出す。この例では「5」及び「6」が特定される。そうすると、ビット位置「5」及び「6」が「1」にセットされている検索式のビットマップ1101が生成される。図11の例では「00000110」が得られる。そして、この検索式のビットマップ1101と、タグジャッジにおける各レコードに含まれるタグビットマップについてビットAND演算を実施する。そして、いずれかのビット位置に「1」が生じる、タグジャッジ内のレコードを特定する。この例では、ビット位置「5」又は「6」に「1」がセットされているレコードは2行目のレコードであり、このレコードが特定される。そうすると、対応する圧縮ブロックBlk2へのポインタptrが得られるので、第2DB140に格納されている圧縮ブロックBlk2を読み出すことになる。
次に、図12に示すように、圧縮ブロックBlk2に対して解凍処理を実施して、元のデータレコードを復元する。なお、帳票データブロック内においてはタグ圧縮されているので、検索式についてもタグ圧縮してから検索処理を実施する。すなわち、タグ変換表から、検索式は「XQUERY(5/6=テレビ)」に変換され、解凍処理によって復元されたデータレコードについて検索処理を実施する。この検索処理において条件に合致する帳票データブロックが存在する場合には、当該帳票データブロックを出力する。
このように、タグジャッジによって、解凍する圧縮ブロックの範囲が局所化されるので、検索時における計算コストが低減される。また、並列アクセスによる高速化のための複数ディスク装置の設置や当該複数ディスク装置へのデータ配分についての設計なども不要となる。
次に、図13乃至図25を用いて具体的な処理内容について説明する。まず、第2DB140にデータを格納する処理について図13乃至図23を用いて説明する。
データ抽出部131は、所定のタイミングで第1DB120から、第2DB140に格納すべきデータレコードを1件抽出し、抽出データ格納部132に格納する(図13:ステップS1)。そして、タグビットマップ生成部133は、抽出されたデータレコードに対してタグビットマップ生成処理を実施する(ステップS5)。タグビットマップ生成処理については、図14乃至図16を用いて説明する。
タグビットマップ生成部133は、抽出されたデータレコードに含まれるXML文書(帳票データブロック)において未処理のタグを1つ特定し、変数_tに設定する(図14:ステップS11)。そして、タグビットマップ生成部133は、タグ変換表格納部134においてタグ変換表が生成済みであるか判断する(ステップS13)。タグ変換表が未生成である場合には、タグビットマップ生成部133は、タグ変換表格納部134においてタグ変換表のための領域を確保する(ステップS15)。そしてステップS17に移行する。
既にタグ変換表が生成済みである場合又はステップS15の後に、タグビットマップ生成部133は、_tがタグ変換表に既に登録済みであるかを判断する(ステップS17)。タグ名の欄に_tのタグ名が含まれているかを確認する。_tがタグ変換表に未登録である場合には、タグビットマップ生成部133は、未使用のタグIDを発行し、当該タグIDと_tをタグ変換表に登録する(ステップS19)。そしてステップS21に移行する。
既に_tがタグ変換表に登録済みである場合又はステップS19の後に、タグビットマップ生成部133は、タグ変換表から_tに対応するタグIDを取得する(ステップS21)。そして、処理は端子Bを介して図15の処理に移行する。
図15の処理の説明に移行して、タグビットマップ生成部133は、抽出されたデータレコードについてのタグビットマップにおいて、タグIDに対応するビット位置を「1」にセットする(ステップS23)。なお、タグビットマップのビット長は出現すると予測されるタグの種類数に応じて予め定められた固定長とする。例えば図16に示すように、先頭に長さLLのデータに、ビットマップが付加されたフォーマットを有している。但し、ビットマップ長は、なくてもよい。
そして、タグビットマップ生成部133は、タグ圧縮処理として、抽出されたデータレコードに含まれるXML文書において、特定されたタグをタグIDで置換する(ステップS25)。図5Aを図7の1001に変換する処理に相当する。
その後、タグビットマップ生成部133は、抽出されたデータレコードに含まれるXML文書において未処理のタグが存在しているか判断する(ステップS27)。未処理のタグが存在している場合には、端子Cを介して図14のステップS11に戻る。一方、未処理のタグが存在していない場合には、呼び出し元の処理に戻る。
このような処理を実施すれば、図7のタグビットマップ1001tのようなタグビットマップが生成される。すなわち、データレコードに含まれるXML文書におけるタグについての特徴がタグビットマップとして表されることになる。
図13の処理の説明に戻って、タグビットマップ生成部133は、生成したタグビットマップ及び抽出されたデータレコードを連結したレコードを、ソート処理部135に投入して、ソート処理部135に、タグビットマップ全体をキーとしたソート処理を実施させる(ステップS7)。なお、ソート処理自体はよく知られた処理なので説明は省略する。なお、ソート処理部135は、ソート結果を、抽出データ格納部132に格納する。
そして、データ抽出部131は、未処理のデータレコードが第1DB120に存在しているか判断する(ステップS9)。未処理のデータレコードが存在していない場合には、処理は端子Aを介して図17の処理に移行する。一方、未処理のデータレコードが存在している場合にはステップS1に戻る。
図17の処理の説明に移行して、データ格納処理部136は、抽出データ格納部132に格納されているソート処理結果のうち未処理のレコードを1つ特定する(ステップS33)。そして、データ格納処理部136は、データ格納処理を実施する(ステップS35)。データ格納処理については、図18乃至図22を用いて説明する。
データ格納処理部136は、データ量を格納する変数_len及び処理に係る直前のタグビットマップを保管する変数_otbを0で初期化する(図18:ステップS41)。そして、データ格納処理部136は、ステップS33で特定されたレコードを読み込む(ステップS43)。その後、データ格納処理部136は、読み込んだレコードに含まれるタグビットマップを変数_ctbに設定する(ステップS45)。
さらに、データ格納処理部136は、特定されたレコードが最初のレコードであるか又は_ctb=_otbであるか判断する(ステップS47)。特定されたレコードが最初のレコードである場合又は_ctb=_otbである(直前のタグビットマップと同一のタグビットマップが特定された場合)場合には、データ格納処理部136は、_lenに、読み込まれたレコードのレコード長を加算すると最大サイズ(例えば5MByets)を超えるか判断する(ステップS59)。_lenに、読み込まれたレコードのレコード長を加算しても最大サイズを超えない場合には、端子Dを介して図22の処理に移行する。一方、_lenに、読み込まれたレコードのレコード長を加算すると最大サイズを超えた場合には、ステップS51に移行する。
ステップS47で、最初のレコードでもなく_ctb=_otbでもない、すなわち直前のタグビットマップと異なるタグビットマップが検出された場合、データ格納処理部136は、圧縮バッファ138に蓄積されたレコードが存在するか判断する(ステップS49)。データ格納処理部136は、圧縮バッファ138に蓄積されたレコードが存在しない場合には、端子Dを介して図22の処理に移行する。一方、圧縮バッファ138に蓄積されたレコードが存在する場合には、データ格納処理部136は、圧縮バッファ138に格納されているレコード群を、所定の方式で圧縮して圧縮ブロックを生成する(ステップS51)。そして、データ格納処理部136は、圧縮ブロックを第2DB140に格納し、第2DB140における格納位置を取得する(ステップS53)。
図19に、1ファイルにおける圧縮ブロックのデータ構造の一例を示す。このように、圧縮ブロックにブロック長を付加した形で格納する。なお、図19では、圧縮ブロックを連続して1ファイルに格納する例を示している。なお、格納位置としては、ファイル識別子(ID)と、当該ファイル内におけるオフセット(ブロックオフセットとも呼ぶ)とで特定される。図19では、圧縮ブロックBlk3についてのオフセットを例示している。
さらに、データ格納処理部136は、タグジャッジ(TagJudge)登録処理を実施する(ステップS55)。TagJudge登録処理については、図20及び図21を用いて説明する。
まず、データ格納処理部136は、_ctbがタグジャッジ(TagJudge)に登録済みであるか判断する(図20:ステップS61)。_ctbがTagJudgeに登録済みである場合には、ステップS65に移行する。一方、_ctbがTagJudgeに未登録である場合には、データ格納処理部136は、_ctbを例えばタグジャッジ格納部137内のTagJudgeに一旦登録する(ステップS63)。そしてステップS65に移行する。
図21に、タグジャッジ格納部137におけるTagJudgeのデータ構造の一例を示す。図21の例では、タグビットマップ(TagBmp)の種別毎に、圧縮ブロックへのポインタの数(BlkPtr数)と、圧縮ブロックの格納位置へのポインタ(Ptr)とが登録されるようになっている。圧縮ブロックの格納位置については、ファイルIDとブロックオフセットとの組み合わせで示される。以下で述べるように、1つのタグビットマップについて多数のレコードが存在する場合には、最大サイズを超えないようにレコードを纏めて圧縮するようになっているため、複数の圧縮ブロックが生成される場合がある。そのため、ポインタ数を管理するようになっている。
_ctbがTagJudgeに登録済みであるかステップS63の後に、データ格納処理部136は、TagJudgeにおいて、該当タグビットマップに対応付けて、ステップS53で取得された格納位置を登録する(ステップS65)。なお、この際、ポインタ数を1インクリメントする。そして、呼び出し元の処理に戻る。
このようにして、タグビットマップの種別毎に、該当する圧縮ブロックを参照するためのデータ構造を用意することができるようになる。
図18の処理の説明に戻って、データ格納処理部136は、変数_lenを0に初期化する(ステップS57)。そして端子Dを介して図22の処理に移行する。
図22の処理の説明に移行して、データ格納処理部136は、ステップS43で読み出したレコードを圧縮バッファ138に蓄積する(ステップS71)。そして、データ格納処理部136は、変数_lenに、圧縮バッファ138に格納したレコードのレコード長を加算する(ステップS73)。さらに、データ格納処理部136は、変数_otbにタグビットマップを設定する(ステップS75)。そして呼び出し元の処理に戻る。
このような処理を繰り返すことによって、レコードが圧縮されて第2DB140に蓄積されると共に、検索のための索引構造データであるTagJudgeが構築されるようになる。
図17の処理の説明に戻って、データ格納処理部136は、未処理のレコードが存在しているか判断する(ステップS37)。未処理のレコードが存在している場合には、ステップS33に戻る。一方、未処理のレコードが存在しない場合には、データ格納処理部136は、データ格納終了処理を実施する(ステップS38)。すなわち、圧縮バッファに残っているレコードについての処理を実施する。具体的には、最後に変数_ctbに代入されたタグビットマップについて、ステップS51乃至S55を実施する。
その後、データ格納処理部136は、タグジャッジ格納部137におけるTagJudge及びタグ変換表格納部134に格納されているタグ変換表を、纏めて第2DB140に格納する(ステップS39)。第2DB140は、圧縮ブロックを含むファイルに加えて、図23に示すようなデータが格納されるようになる。すなわち、タグ変換表とTagJudgeとを含む、検索のための索引構造データが格納される。
次に、検索時の処理について図24及び図25を用いて説明する。検索処理部150のインターフェース部151は、分析システムなどから検索式を含む検索要求を受信する(図24:ステップS81)。そうすると、インターフェース部151は、検索式のデータを、検索式処理部152に出力する。検索式処理部152は、検索要求の検索式に含まれる未処理のタグを1つ特定し、変数_tに設定する(ステップS83)。そして、検索式処理部152は、第2DB140に格納されているタグ変換表から、_tに対応するタグIDを取得する(ステップS85)。
その後、検索式処理部152は、検索式におけるタグをタグIDに置換する(ステップS87)。また、検索式処理部152は、ビットマップ_stbにおいて、タグIDに対応するビット位置の値を「1」にセットする(ステップS89)。その後、検索式処理部152は、未処理のタグが検索式に存在しているか判断する(ステップS91)。未処理のタグが存在する場合にはステップS83に戻る。一方、未処理のタグが存在しない場合には、検索式処理部152は、ビットマップ_stbをデータ抽出部153に出力し、置換処理後の検索式のデータを検索部155に出力する。そして、処理は端子Eを介して図25の処理に移行する。
図25の処理の説明に移行して、データ抽出部153は、第2DB140に格納されているTagJudgeにおける未処理のタグビットマップを1つ_ttbに設定する(ステップS93)。そして、データ抽出部153は、ビットマップ_stbと読み出したタグビットマップ_ttbとのビットANDを計算する(ステップS95)。そして、データ抽出部153は、いずれかのビット位置の値が「1」になっているか判断する(ステップS97)。いずれのビット位置の値も「0」であれば、検索式でヒットするような帳票データは含まれないことになるので、ステップS101に移行する。
一方、いずれかのビット位置の値が「1」になっていれば、データ抽出部153は、読み出したタグビットマップに対応付けて格納されているポインタを読み出して、当該ポインタが指している圧縮ブロックを第2DB140から読み出し、圧縮処理の逆処理である解凍処理を実施し、データ格納部154に格納する(ステップS99)。
その後、データ抽出部153は、TagJudgeに未処理のタグビットマップが存在するか判断する(ステップS101)。未処理のタグビットマップがTagJudgeに存在する場合には、処理はステップS93に戻る。一方、未処理のタグビットマップがTagJudgeに存在しない場合には、検索部155は、データ格納部154に格納されているデータに対して、タグをタグIDに置換した後の検索式で、解凍後のデータブロックを検索して、検索式の条件を満たす帳票データ(すなわちXML文書)を抽出する(ステップS103)。検索部155は、条件を満たす帳票データが存在すれば当該帳票データを、条件を満たす帳票データが存在しない場合にはその旨を、インターフェース部151に出力する。インターフェース部151は、検索結果を、検索要求の送信元の分析システム等に返信する(ステップS105)。
以上のような処理を実施することで、タグビットマップにより元のデータレコードがクラスタリングされるので、タグビットマップを用いた検索時にもアクセス先が局所化される。特にデータを圧縮して保持する場合には、このアクセス先の局所化は、解凍処理するデータを削減するように作用するので、検索要求に対するレスポンスの高速化がなされ、処理負荷も下げられる。また、ディスク容量を少なくしてアクセス先も局所化できれば、ディスク装置の管理などにかかる人件費なども削減できる。さらに、タグビットマップの元となるタグ変換表も、タグの出現順にその都度生成されるので、人手による設計を省くことができ、人件費などを削減することができる。
なお、上で述べた実施の形態ではタグ圧縮を実施する例を示したが、場合によってはタグ圧縮を省略するようにしても良い。さらに、場合によってはデータ圧縮自体も行わない場合もある。
さらに、TagJudge及びタグ変換表などのフォーマットについては上で述べた例に限定されず、保管場所についても第2DB140ではなく、他のデータ格納部である場合もある。
[実施の形態2]
第1の実施の形態では、タグビットマップ全体をソートキーとしてソート処理を実施するので、タグの種類数が多くなるとソートキーのビット長も長くなってしまい、ソート処理にかかる時間が長くなる。タグの種類数は、環境によっても変化するが、数千から数万種類存在する場合もある。従って、本実施の形態では、ソート処理の処理時間を抑えるために、ソートキーのビット長をタグビットマップのビット長より短くする。但し、単純にソートキーのビット長を短くして、さらに第1の実施の形態のように単純に出現順にタグ変換表を生成してしまうと、頻繁に検索に用いられるタグについてソート処理が行われないという現象が生じる可能性がある。このような場合には、多数の圧縮ブロックに、頻繁に検索に用いられるタグを含むデータが散在することになり、検索時のアクセス局所化の効果を得られなくなる。従って、以下に述べるような処理を実施することで、ソートキーのビット長を短くする場合であっても、検索処理への影響を抑えるようにする。
本実施の形態の処理の概要を図26乃至図46を用いて説明する。本実施の形態は、検索処理において検索に頻繁に用いられたタグほどタグビットマップにおける上位ビットになるようにタグ変換表を生成する。さらに、新たに出現したタグについては、検索に用いられたタグよりも下位のビット位置を割り当てる。
図26に示すように、例えば2011年3月の検索結果などから2011年4月の月初のタグ変換表を生成する。本実施の形態では、タグ変換表は、検索式からビットマップを生成する際に用いるタグIDであるタグIDaと、検索式に含まれるタグをタグ置換する場合に用いるタグIDであるタグIDbと、タグ名と、参照回数のカウンタとを含む。2011年4月の月初では、タグIDa=タグIDbであるものとして、参照回数のカウンタは「0」である。
その後、2011年4月に1ヶ月間、2011年3月分のデータを検索処理において利用した後、例えば2011年4月月末の状態になったものとする。参照回数は、降順で「個数」「状況」「申請」「出勤日数」「部門」の順番になる。そうすると、2011年5月月初のタグ変換表は、この参照回数の順番に従ってタグIDが決定される。すなわち、「個数」「状況」「申請」「出勤日数」「部門」の順番に、タグIDa及びタグIDbが割り振られる。その後、2011年5月に1ヶ月間、2011年4月分のデータを検索処理において利用した後、例えば2011年5月月末の状態になったものとする。なお、2011年4月に生成されたデータにおいては、出現するタグの種類に変化がなかった場合の例である。
次に、2011年6月月初のタグ変換表を生成する場合には、図26右下に示したような参照回数に基づき、図27で示すような参照順位作業表を生成する。すなわち、参照回数に基づきタグ名を降順に並べた表を参照順位作業表として生成する。この例では参照回数0であっても参照順位作業表に登録する。次に、2011年5月に生成されたデータを第2DB140に格納する場合には、出現するタグの種類が変化したものとする。例えば、「申請」及び「出勤日数」タグが出現せず、「売上」「商品」「価格」タグが新たに出現したものとする。
このような場合には、「状況」「個数」「申請」「部門」「出勤日数」の各タグのタグID及びビット位置は確保しておき、これらのタグのうち2011年5月に生成されたデータにおいて出現が確認されたタグについては、図28に示すようにタグ変換ワーク表においてそのビット位置で有効化する。上で述べたように、「申請」及び「出勤日数」タグについては2011年5月に生成されたデータについては出現しないので、(空き)となる。そして、新たに出現した「売上」「商品」「価格」タグについては、タグID「5」「6」「7」が出現順で割り当てられる。このように未使用のタグIDが発生してしまうが、タグ変換ワーク表生成を並行してタグビットマップは生成されてしまうので、図29に示すように、(空き)部分を詰めた形で元のタグIDをタグIDbとして採用する。さらに、TagJudgeについても未使用ビット位置を詰めてデータ量を削減するので、TagJudgeとの対応付けのために配列順を表すタグIDaを設定する。
タグ変換表の生成方法は上で述べたように第1の実施の形態とは異なるが、タグ変換表の基となるタグ変換ワーク表を基に、各XML文書についてタグビットマップを生成するという処理内容は同じである。具体的には、XML文書に含まれるタグのタグID(タグ変換表のタグIDb)をタグ変換ワーク表から特定し、当該タグIDに対応するビット位置をオン(例えば「1」)にセットする。例えばタグID「0」「1」「3」のビット位置がオンになっていると、図30の第1行目のように「110100000」が生成される。他のXML文書についても同様である。
このように生成されたタグビットマップを、図30に示すように、第1DB120から抽出したデータレコードと連結して、タグビットマップ部分のうち予め定められたソートキー長のビット群(例えば6ビット)をキーにしてソート処理を実施する。このソートキー長が、第1の実施の形態と比較すると短くなっている。
図30に示したように6レコードを処理する場合には、図31に示すようにソートされる。本実施の形態では、先頭6ビットでのみソートされるので、下位3ビットの違いは無視される。従って、本来は3つにクラスタリング(グルーピングとも呼ぶ)されるべきであるが、図31に示すように2つにクラスタリングされる。このように上位ソートキー長は一致するがその他は不一致の類似するタグビットマップも、同一のクラスタに分類される。そして、クラスタ毎に、所属するレコードのデータを圧縮する。すなわち、同一クラスタに分類された1又は複数のレコードのデータをまとめて圧縮して圧縮ブロックを生成して、第2DB140に格納する。図31の例では、タグビットマップ「001110000」が生成されたレコードは1レコードであるが、このレコードのデータを圧縮して、圧縮ブロックBlk1を生成し、第2DB140の所定位置に格納する。また、タグビットマップ「110100000」と「110100111」については上位6ビットが「110100」となる類似タグビットマップであり、これら5レコードのうち4レコードを纏めて圧縮して、圧縮ブロックBlk2を生成し、第2DB140の所定位置に格納する。なお、最後の1レコードについても上位6ビットが「110100」で一致するがデータ量が5レコードで閾値を超えてしまうので、最後の1レコードだけ別に圧縮して、圧縮ブロックBlk3を生成し、第2DB140の所定位置に格納する。また、1度に第1DB120から抽出されたレコード群については、第2DB140における同一のパーティション等に格納するものとする。
さらに、分析システムなどからの検索要求に対応するために、文書構造索引であるタグジャッジ(TagJudge)も生成される。この例では、図32に示すようなタグジャッジが生成される。具体的には、タグビットマップの種別毎に、対応する圧縮ブロックへのポインタが登録される。この例では、タグビットマップ「001110000」については圧縮ブロックBlk1へのポインタptrが登録され、タグビットマップ「110100000」については圧縮ブロックBlk2へのポインタptrが登録され、タグビットマップ「110100111」については圧縮ブロックBlk2及びBlk3へのポインタptrが登録されている。
さらに、本実施の形態では上で述べたようにタグ変換ワーク表からタグ変換表を生成すると共に、上で生成したTagJudgeの変形をも行う。図26乃至図29に示した例とは異なっているが、図33に示すように、タグ変換ワーク表においてタグID「5」のタグ名が処理したXML文書には出現しなかった場合、その部分を上にシフトさせる。そして、タグ変換表における配列番号であり且つ検索処理時に検索式からビットマップを生成する際に用いるタグIDであるタグIDaを付加する。従って、タグIDaについては、シリアルに番号が付与されるが、タグIDbについては、検索式に含まれるタグをタグ置換する場合に用いるので、出現しなかったタグID「5」を欠番にして並べられる。すなわち、タグ変換ワーク表のタグIDがそのまま用いられる。さらに、検索処理時に参照回数をカウントするための列も設けられている。
また、本実施の形態ではタグ変換表の変形に合わせて、TagJudgeについても図34に示すような変形を行う。タグID「5」に対応するビット位置(上位から6ビット目)を削除して左詰にする。これによってTagJudgeのデータ量を削減することができる。
次に、図35及び図36を用いて、検索時の処理について概要を説明する。例えば検索式「XQUERY(売上/商品=テレビ)」を含む検索要求を受信した場合を例に説明する。具体的には、売上タグ又は商品タグについてテレビのデータを含む帳票データブロックを抽出することを要求する検索要求を処理する。
従って、検索式に含まれる条件である「売上」及び「商品」について、タグ変換表から該当するタグIDaを読み出す。この例では「5」及び「6」が特定される。そうすると、ビット位置「5」及び「6」が「1」にセットされている検索式のビットマップ3101が生成される。図35の例では「00000110」が得られる。そして、この検索式のビットマップ3101と、タグジャッジにおける各レコードに含まれるタグビットマップについてビットAND演算を実施する。そして、いずれかのビット位置に「1」が生じる、タグジャッジ内のレコードを特定する。この例では、ビット位置「5」又は「6」に「1」がセットされているレコードは3行目のレコードであり、このレコードが特定される。そうすると、対応する圧縮ブロックBlk2及びBlk3へのポインタptrが得られるので、第2DB140に格納されている圧縮ブロックBlk2及びBlk3を読み出すことになる。
また、タグ変換表においては、タグIDaが「5」及び「6」のレコードについて参照回数のカウント値を1インクリメントさせる。
次に、図36に示すように、圧縮ブロックBlk2及びBlk3に対して解凍処理を実施して、元のデータレコードを復元する。なお、帳票データブロック内においてはタグ圧縮されているので、検索式についてもタグIDbの方を用いてタグ圧縮してから検索処理を実施する。すなわち、タグ変換表から、検索式は「XQUERY(6/7=テレビ)」に変換され、解凍処理によって復元されたデータレコードについて検索処理を実施する。この検索処理において条件に合致する帳票データブロックが存在する場合には、当該帳票データブロックを出力する。
このように、タグジャッジによって、解凍する圧縮ブロックの範囲が局所化されるので、検索時における計算コストが低減される。また、並列アクセスによる高速化のための複数ディスク装置の設置や当該複数ディスク装置へのデータ配分についての設計なども不要となる。また、第2DB140へのデータ格納時に行われるソート処理を高速化することもできる。
なお、上で述べた例では参照回数0であっても次のタグ変換ワーク表では上位にタグIDが割り振られるが、参照回数0又は予め定められた閾値以下のタグについては上位のタグIDを割り振ることなく、例えば今回データ格納を行うXML文書に出現した場合には、新たに下位ビットに追加するような変形を行っても良い。
このような処理を実施するデータ移動処理部130及び検索処理部150の構成は、動作は異なるが図2及び図3に示したものと同様である。従って、構成の説明自体は省略する。
図37乃至図46を用いて本実施の形態に係る処理内容を説明する。
データ抽出部131は、所定のタイミングで第1DB120から、第2DB140に格納すべきデータレコードを1件抽出し、抽出データ格納部132に格納する(図37:ステップS201)。そして、タグビットマップ生成部133は、抽出されたデータレコードに対して第2タグビットマップ生成処理を実施する(ステップS203)。第2タグビットマップ生成処理については、図38及び図39を用いて説明する。
タグビットマップ生成部133は、抽出されたデータレコードに含まれるXML文書(帳票データブロック)において未処理のタグを1つ特定し、変数_tに設定する(図38:ステップS221)。そして、タグビットマップ生成部133は、タグ変換表格納部134においてタグ変換ワーク表が生成済みであるか判断する(ステップS223)。タグ変換ワーク表が未生成である場合には、タグビットマップ生成部133は、例えばタグ変換表格納部134においてタグ変換ワーク表のための領域を確保する(ステップS225)。さらに、タグビットマップ生成部133は、第2DB140に格納されている前回のタグ変換表から、参照順位作業表(図27)を生成して、タグ変換表格納部134に格納する(ステップS227)。具体的には、参照回数が多い順にタグを並び替え、その順番で上位のタグIDを付与する。そしてステップS229に移行する。
既にタグ変換ワーク表が生成済みである場合又はステップS227の後に、タグビットマップ生成部133は、_tがタグ変換ワーク表に既に登録済みであるかを判断する(ステップS229)。タグ名の欄に_tのタグ名が含まれているかを確認する。_tがタグ変換ワーク表に未登録である場合には、タグビットマップ生成部133は、参照順位作業表を_tで検索して登録済みであるか否かを判断し、登録済みであれば参照順位作業表におけるタグIDを特定し、参照順位作業表に未登録である場合には新規に最下位のタグIDを発行する(ステップS231)。参照順位作業表に既に登録済みのタグの場合には、参照順位作業表におけるタグIDを維持し、それ以外の場合には新たに下位のタグIDを発行する。そして、タグビットマップ生成部133は、タグIDと_tをタグ変換ワーク表に登録する(ステップS233)。そしてステップS235に移行する。
既に_tがタグ変換ワーク表に登録済みである場合又はステップS233の後に、タグビットマップ生成部133は、タグ変換ワーク表から_tに対応するタグIDを取得する(ステップS235)。そして、処理は端子Fを介して図39の処理に移行する。
図39の処理の説明に移行して、タグビットマップ生成部133は、抽出されたデータレコードについてのタグビットマップにおいて、タグIDに対応するビット位置を「1」にセットする(ステップS237)。なお、タグビットマップのビット長は出現すると予測されるタグの種類数に応じて予め定められた固定長とする。例えば図16に示すように、先頭に長さLLのデータに、ビットマップが付加されたフォーマットを有している。但し、ビットマップ長は、なくてもよい。
そして、タグビットマップ生成部133は、タグ圧縮処理として、抽出されたデータレコードに含まれるXML文書において、特定されたタグをタグIDで置換する(ステップS239)。図5Aを図7の1001に変換する処理に相当する。
その後、タグビットマップ生成部133は、抽出されたデータレコードに含まれるXML文書において未処理のタグが存在しているか判断する(ステップS241)。未処理のタグが存在している場合には、端子Gを介して図38のステップS221に戻る。一方、未処理のタグが存在していない場合には、呼び出し元の処理に戻る。
このような処理を実施すれば、図7のタグビットマップ1001tのようなタグビットマップが生成される。すなわち、データレコードに含まれるXML文書におけるタグについての特徴がタグビットマップとして表されることになる。生成されるタグビットマップは、第1の実施の形態と同じであるが、生成されるタグ変換ワーク表は第1の実施の形態におけるタグ変換表とは異なる。
図37の処理の説明に戻って、タグビットマップ生成部133は、生成したタグビットマップ及び抽出されたデータレコードを連結したレコードを、ソート処理部135に投入して、ソート処理部135に、予め定められたソートキー長だけでソート処理を実施させる(ステップS205)。なお、ソート処理自体はよく知られた処理なので説明は省略する。なお、ソート処理部135は、ソート結果を、抽出データ格納部132に格納する。第1の実施の形態とは異なり、タグビットマップ長より短いソートキー長が採用されている。ソートキー長は、ソート処理のパフォーマンスなどに基づき決定される。
そして、データ抽出部131は、未処理のデータレコードが第1DB120に存在しているか判断する(ステップS207)。未処理のデータレコードが存在している場合には、ステップS201に戻る。
一方、未処理のデータレコードが存在していない場合には、データ格納処理部136は、第2データ格納部処理を実施する(ステップS209)。第2データ格納部処理については、図40乃至図44を用いて説明する。
データ格納処理部136は、データ量を格納する変数_len及び処理に係る直前のタグビットマップを保管する変数_otbを0で初期化する(図40:ステップS251)。また、データ格納処理部136は、圧縮バッファ138に格納されているレコードに対応するタグビットマップを一時保管するためのWkTagBmp一覧を初期化する(ステップS253)。WkTagBmp一覧は、例えばメインメモリなどの記憶装置に格納する。
そして、タグ格納処理部136は、抽出データ格納部132に格納されているソート後のデータレコードのうち未処理のレコードを読み込む(ステップS255)。その後、タグ格納処理部136は、読み込んだレコードに含まれるタグビットマップの上位ソートキー長のビット列を変数_ctbに設定する(ステップS257)。
その後、タグ格納処理部136は、読み込まれたレコードが最初のレコードであるか又は_ctb=_otbであるか判断する(ステップS259)。読み込まれたレコードが最初のレコードである場合又は_ctb=_otbである(直前のタグビットマップ(ソートキー長分)と同一のタグビットマップ(ソートキー長分)が特定された場合)場合には、データ格納処理部136は、_lenに、読み込まれたレコードのレコード長を加算すると最大サイズ(例えば5MByets)を超えるか判断する(ステップS267)。_lenに、読み込まれたレコードのレコード長を加算しても最大サイズを超える場合には、ステップS263に移行する。一方、_lenに、読み込まれたレコードのレコード長を加算すると最大サイズを超えない場合には、データ格納処理部136は、WkTagBmp一覧登録処理を実施する(ステップS269)。このWkTagBmp一覧登録処理については、図41を用いて説明する。なお、ステップS269が完了すると、端子Hを介して図44の処理に移行する。
まず、データ格納処理部136は、読み込まれたレコードに含まれるタグビットマップがWkTagBmp一覧に登録済みであるか判断する(図41:ステップS243)。登録済みであれば、呼び出し元の処理に戻る。一方、未登録である場合、データ格納処理部136は、このタグビットマップ全体をWkTagBmp一覧に登録する(ステップS245)。例えば、図31の2行目乃至5行目を処理する場合には、2行目だけがWkTagBmp一覧に登録される。なお、WkTagBmp一覧に登録されたタグビットマップをWkTagBmpと呼ぶことにする。その後、呼び出し元の処理に戻る。
図40の処理の説明に戻って、ステップS259で、最初のレコードでもなく_ctb=_otbでもない、すなわち直前のタグビットマップ(ソートキー長分)と異なるタグビットマップ(ソートキー長分)が検出された場合、データ格納処理部136は、圧縮バッファ138に蓄積されたレコードが存在するか判断する(ステップS261)。データ格納処理部136は、圧縮バッファ138に蓄積されたレコードが存在しない場合には、ステップS269に移行する。一方、圧縮バッファ138に蓄積されたレコードが存在する場合には、データ格納処理部136は、圧縮処理を実施する(ステップS263)。圧縮処理については、図42を用いて説明する。
まず、データ格納処理部136は、圧縮バッファ138に格納されているレコード群を、所定の方式で圧縮して圧縮ブロックを生成する(図42:ステップS271)。そして、データ格納処理部136は、圧縮ブロックを第2DB140に格納し、第2DB140における格納位置を取得する(ステップS273)。この処理は、第1の実施の形態と同様である。
さらに、データ格納処理部136は、第2タグジャッジ(TagJudge)登録処理を実施する(ステップS275)。第2TagJudge登録処理については、図43を用いて説明する。なお、この処理が完了すると、図40の処理に戻る。
例えば、図31の2行目から5行目までが圧縮バッファ138に格納されており、2行目及び5行目のタグビットマップがWkTagBmp一覧に登録されているものとする。
まず、データ格納処理部136は、WkTagBmp一覧から未処理のWkTagBmpを1つ読み出す(図43:ステップS281)。そして、データ格納処理部136は、WkTagBmpがTagJudgeに登録済みであるか判断する(ステップS283)。未登録である場合には、データ格納処理部136は、読み出されたWkTagBmpをTagJudgeに登録する(ステップS285)。そして、ステップS287に移行する。
WkTagBmpがTagJudgeに登録されている場合又はステップS285の後に、データ格納処理部136は、タグジャッジ格納部137内のTagJudgeにおいて、該当WkTagBmpに対応付けて、ステップS273で取得された格納位置を登録する(ステップS287)。TagJudgeのデータ構造は図21に示したものとこの段階では同じである。
このようにして、WkTagBmp(タグビットマップ)の種別毎に、該当する圧縮ブロックを参照するためのデータ構造を用意することができるようになる。
その後、データ格納処理部136は、未処理のWkTagBmpがWkTagBmp一覧に存在するか判断する(ステップS289)。未処理のWkTagBmpが存在する場合には、ステップS281に戻る。一方、未処理のWkTagBmpが存在しない場合には、データ格納処理部136は、WkTagBmp一覧を初期化する(ステップS291)。そして呼び出し元の処理に戻る。
圧縮バッファ138には、複数の種類のタグビットマップに係るレコードが蓄積されるので、WkTagBmp一覧にその複数種類のタグビットマップを登録しておき、TagJudgeに反映させている。
図42を介して図40の処理の説明に戻って、データ格納処理部136は、変数_lenを0に初期化する(ステップS265)。そしてステップS269に移行する。
ステップS269の処理の後、図44の処理に移行する。
図44の処理の説明に移行して、データ格納処理部136は、ステップS255で読み出したレコードを圧縮バッファ138に蓄積する(ステップS301)。そして、データ格納処理部136は、変数_lenに、圧縮バッファ138に格納したレコードのレコード長を加算する(ステップS303)。さらに、データ格納処理部136は、変数_otbに_ctbを設定する(ステップS305)。
その後、データ格納処理部136は、抽出データ格納部132においてソート後のレコード群において未処理のレコードが存在しているか判断する(ステップS307)。未処理のレコードが存在している場合には、端子Iを介して図40のステップS255に戻る。未処理のレコードが存在しない場合には、データ格納処理部136は、圧縮バッファ138が空であるか判断する(ステップS309)。空でない場合には、データ格納処理部136は、圧縮処理を実施する(ステップS311)。ステップS263と同じ処理を実施する。これによって圧縮バッファ138に残っていたデータを処理することができる。そしてステップS313に移行する。一方、圧縮バッファ138がちょうど空であればステップS313に移行する。
このような処理を実施することで、レコードが圧縮されて第2DB140に蓄積されると共に、検索のための索引構造データである初期段階のTagJudgeが構築されるようになる。
その後、データ格納処理部136は、タグ変換表格納部134に格納されているタグ変換ワーク表から、タグ変換表を生成する(ステップS313)。図33に示すように、タグ名の列にタグ名が登録されていない行を上にシフトさせて、シリアルにタグIDaを上位タグIDから付与する。さらに、参照回数を登録する列を設ける。このようにしてタグ変換表が生成される。
さらに、タグ変換ワーク表においてタグ名が登録されていないタグIDに対応するビット位置はTagJudge(タグビットマップ部分)における未使用ビットとなるので、データ格納処理部136は、未使用ビットを前方シフトさせて、変更後のTagJudgeを生成する(ステップS315)。そして、呼び出し元の処理に戻る。
このような処理を実施することで、タグ変換表及びTagJudgeが完成することになる。
図37の処理の説明に戻って、データ格納処理部136は、タグジャッジ格納部137におけるTagJudge及びタグ変換表格納部134に格納されているタグ変換表を、纏めて第2DB140に格納する(ステップS211)。第2DB140は、圧縮ブロックを含むファイルに加えて、図23に示すようなデータが格納されるようになる。すなわち、タグ変換表とTagJudgeとを含む、検索のための索引構造データが格納される。但し、タグ変換表の構造は第1の実施の形態とは異なっている。また、TagJudgeにおけるタグビットマップ(TagBmp)も、未使用ビットをシフトさせているので長さが異なっている。
次に、検索時の処理について図45及び図46を用いて説明する。検索処理部150のインターフェース部151は、分析システムなどから検索式を含む検索要求を受信する(図45:ステップS321)。そうすると、インターフェース部151は、検索式のデータを、検索式処理部152に出力する。検索式処理部152は、検索要求の検索式に含まれる未処理のタグを1つ特定し、変数_tに設定する(ステップS323)。そして、検索式処理部152は、第2DB140に格納されているタグ変換表から、_tに対応するタグIDa及びタグIDbを取得する(ステップS325)。図36に示したような処理を行うためである。
その後、検索式処理部152は、検索式におけるタグをタグIDbに置換する(ステップS327)。また、検索式処理部152は、タグ変換表において_tの参照回数を1インクリメントする(ステップS329)。
さらに、検索式処理部152は、ビットマップ_stbにおいて、タグIDaに対応するビット位置の値を「1」にセットする(ステップS331)。図35に示したようなビットマップ3101を生成するための処理である。
その後、検索式処理部152は、未処理のタグが検索式に存在しているか判断する(ステップS333)。未処理のタグが存在する場合にはステップS323に戻る。一方、未処理のタグが存在しない場合には、検索式処理部152は、ビットマップ_stbをデータ抽出部153に出力し、置換処理後の検索式のデータを検索部155に出力する。そして、処理は端子Jを介して図46の処理に移行する。
図46の処理の説明に移行して、データ抽出部153は、第2DB140に格納されているTagJudgeにおける未処理のタグビットマップを1つ_ttbに設定する(ステップS335)。そして、データ抽出部153は、ビットマップ_stbと読み出したタグビットマップ_ttbとのビットANDを計算する(ステップS337)。そして、データ抽出部153は、いずれかのビット位置の値が「1」になっているか判断する(ステップS339)。いずれのビット位置の値も「0」であれば、検索式でヒットするような帳票データは含まれないことになるので、ステップS343に移行する。
一方、いずれかのビット位置の値が「1」になっていれば、データ抽出部153は、読み出したタグビットマップに対応付けて格納されているポインタを読み出して、当該ポインタが指している圧縮ブロックを第2DB140から読み出し、圧縮処理の逆処理である解凍処理を実施し、データ格納部154に格納する(ステップS341)。
その後、データ抽出部153は、TagJudgeに未処理のタグビットマップが存在するか判断する(ステップS343)。未処理のタグビットマップがTagJudgeに存在する場合には、処理はステップS335に戻る。一方、未処理のタグビットマップがTagJudgeに存在しない場合には、検索部155は、データ格納部154に格納されているデータに対して、タグをタグIDに置換した後の検索式で、解凍後のデータブロックを検索して、検索式の条件を満たす帳票データ(すなわちXML文書)を抽出する(ステップS345)。検索部155は、条件を満たす帳票データが存在すれば当該帳票データを、条件を満たす帳票データが存在しない場合にはその旨を、インターフェース部151に出力する。インターフェース部151は、検索結果を、検索要求の送信元の分析システム等に返信する(ステップS347)。
以上のような処理を実施することで、タグビットマップにより元のデータレコードがクラスタリングされるので、タグビットマップを用いた検索時にもアクセス先が局所化される。特にデータを圧縮して保持する場合には、このアクセス先の局所化は、解凍処理するデータを削減するように作用するので、検索要求に対するレスポンスの高速化がなされ、処理負荷も下げられる。また、ディスク容量を少なくしてアクセス先も局所化できれば、ディスク装置の管理などにかかる人件費なども削減できる。さらに、タグビットマップの元となるタグ変換表も、タグの出現順にその都度生成されるので、人手による設計を省くことができ、人件費などを削減することができる。
なお、上で述べた実施の形態ではタグ圧縮を実施する例を示したが、場合によってはタグ圧縮を省略するようにしても良い。さらに、場合によってはデータ圧縮自体も行わない場合もある。
さらに、TagJudge及びタグ変換表などのフォーマットについては上で述べた例に限定されず、保管場所についても第2DB140ではなく、他のデータ格納部である場合もある。
また、第2の実施の形態では、タグの種類が多くなってもソート処理の速度を高速化できるため、データ格納処理の処理時間を短縮することができる。
以上本技術に係る実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、上で述べた機能ブロック図は一例であり、必ずしも実際のプログラムモジュールと一致しない場合もある。さらに、処理フローについても、処理結果が変わらない限り、処理順番を入れ替えたり、並列実行するようにしても良い。
以上本技術の実施の形態について説明したが、本技術はこれに限定されるものではない。例えば、図2及び図3の機能ブロック図は一例であって、必ずしも実際のプログラムモジュール構成と一致しない。また、処理フローについても、処理結果が変わらない限り、ステップの順番を入れ替えたり、並列に実行しても良い場合もある。
また、第2の実施の形態で図33や図34で示す処理を省略するようにしても良い。
さらに、図1に示したシステムは、1台のコンピュータで実現されるものもあれば、複数台のコンピュータで実現される場合もある。
なお、上で述べたDB管理システムは、コンピュータ装置であって、図47に示すように、メモリ2501とCPU(Central Processing Unit)2503とハードディスク・ドライブ(HDD:Hard Disk Drive)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本実施の形態をまとめると、以下のようになる。
実施の形態の第1の態様に係る情報処理方法は、(A)格納すべき複数のデータブロックから当該複数のデータブロックの各々に含まれる1又は複数のタグを抽出して、当該タグの種類に対応するビット位置がオンにセットされたビット列を生成する第1のステップと、(B)複数のデータブロックについて生成された複数のビット列を同一の又は一部一致するビット列に基づき複数のグループに分類する第2のステップと、(C)複数のグループのうち各グループについて、当該グループに属するビット列に対応するデータブロックのデータを、当該グループに属するビット列の種類に対応付けてデータ格納部に格納する第3のステップとを含む。
このようにデータブロックを、そのデータブロックに出現するタグの種類を表すビット列によって特徴付け、当該ビット列に基づきデータブロックをグループ化(又はクラスタリング)して、ビット列の種類に対応付けてデータ格納部に格納すると、タグベースの検索時に適切なデータブロックを効率的に読み出すことができるようになる。
また、上で述べた第1のステップは、データブロックから新たな種類のタグが抽出された場合には、当該タグに未使用の識別番号を割り当て、当該タグの種類と割り当てられた識別番号とを対応付けて第2のデータ格納部に格納するステップを含むようにしてもよい。この際、ビット位置は識別番号と対応付けられている。このようにすれば、格納すべきデータブロックに応じて自動的にビット列生成のルールが生成されるので、格納すべきデータブロックの種類などが変化しても、人手でシステム変更を行わずに済む。
さらに、上で述べた第1のステップは、第2のデータ格納部に格納されており且つタグの検索利用頻度に応じて生成される、タグと当該タグの識別番号との第1の対応付けデータに含まれないタグが、データブロックから抽出された場合には、当該タグに未使用の識別番号を割り当て、当該タグと割り当てられた識別番号との対応付けデータを第2のデータ格納部に格納するステップを含むようにしても良い。このようにすれば、検索利用頻度の高いタグほどビット列において上位のビットを割り当てるといったことも可能になる。そうすれば、例えばビット列のうち上位の一部のビットだけを見てグループ化しても、検索時の効率の低下を最小限に抑えることができるようになる。
また、上で述べた第2のステップが、ビット列のビット長又は当該ビット長よりも短く且つ予め定められた第2のビット長で、複数のビット列をソートするステップを含むようにしても良い。分類処理についてはこのような処理で実装される場合もある。
さらに、上で述べた第3の処理が、グループに属するビット列に対応するデータブロック又は当該データブロックに含まれるタグが当該タグの識別番号で置換されたデータブロックを圧縮するステップを含むようにしても良い。このように圧縮すれば、ディスク容量を削減することができる。
本実施の形態の第2の態様に係る情報処理方法は、(A)指定されたタグについて検索することを要求する検索要求を受信する第1のステップと、(B)タグと識別番号との第1の対応付けデータから、上記指定されたタグに対応する識別番号を特定し、特定された識別番号に対応するビット位置をオンにしたビット列を生成する第2のステップと、(C)ビット列と当該ビット列においてオンとなっているビット位置に対応する識別番号が対応付けられているタグを含むデータブロックのデータとの第2の対応付けデータにおいて、生成されたビット列においてオンにセットされたビット位置の少なくともいずれかがオンとなっているビット列を特定し、特定されたビット列に対応付けられているデータブロックを、複数のデータブロックを格納するデータ格納部から読み出す第3のステップと、(D)読み出したデータブロックを検索要求に従って検索する第4のステップとを含む。
このようにすれば、検索要求に含まれるタグを含むデータブロックを効率的に読み出すことができるようになる。
本実施の形態の第2の態様に係る情報処理方法においては、第1の対応付けデータに関連して各タグの検索利用頻度を管理している場合もある。その際には、本情報処理方法は、指定されたタグについての検索利用頻度を増加させるステップをさらに含むようにしても良い。このようにすれば、第1の対応付けデータ及び第2の対応付けデータを、検索実態に合わせて生成することができるようになる。
さらに、本実施の形態の第3の態様に係る情報処理装置(図48)は、(A)格納すべき複数のデータブロックから当該複数のデータブロックの各々に含まれる1又は複数のタグを抽出して、当該タグの種類に対応するビット位置がオンにセットされたビット列を生成する第1の処理部(3010)と、(B)複数のデータブロックについて生成された複数のビット列を同一の又は一部一致するビット列に基づき複数のグループに分類する第2の処理部(3020)と、(C)複数のグループのうち各グループについて、当該グループに属するビット列に対応するデータブロックのデータを、当該グループに属するビット列の種類に対応付けてデータ格納部(3040)に格納する第3の処理部(3030)とを有する。
また、本実施の形態の第4の態様に係る情報処理装置(図49)は、(A)指定されたタグについて検索することを要求する検索要求を受信する受信部(3510)と、(B)タグと識別番号との第1の対応付けデータから、上記指定されたタグに対応する識別番号を特定し、特定された識別番号に対応するビット位置をオンにしたビット列を生成する処理部(3520)と、(C)ビット列と当該ビット列においてオンとなっているビット位置に対応する識別番号が対応付けられているタグを含むデータブロックのデータとの第2の対応付けデータにおいて、生成されたビット列においてオンにセットされたビット位置の少なくともいずれかがオンとなっているビット列を特定し、特定されたビット列に対応付けられているデータブロックを、複数のデータブロックを格納するデータ格納部(3540)から読み出すデータ抽出部(3530)と、(D)読み出したデータブロックを検索要求に従って検索する検索部(3550)とを有する。
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROMなどの光ディスク、光磁気ディスク、半導体メモリ(例えばROM)、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、RAM等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
コンピュータに、
複数のデータのうちの所定種類のタグを含むデータ群を圧縮して、圧縮ファイルを生成し、
生成した前記圧縮ファイルを、前記所定の種類のタグを識別可能な識別情報と関連付けて記憶部に格納する、
ことを実行させることを特徴とする記憶制御プログラム。
(付記2)
前記データ群が、前記複数のデータのうち所定の複数種類のタグを含むデータ群であり、
前記識別情報が、前記所定の複数種類のタグを識別可能な識別情報である、
ことを特徴とする付記1記載の記憶制御プログラム。
(付記3)
コンピュータに、
複数のデータブロックから前記複数のデータブロックの各々に含まれる1又は複数のタグを抽出して、抽出された前記タグの種類に対応するビット位置がオンにセットされたビット列を生成する第1の処理と、
前記複数のデータブロックについて生成された複数のビット列を同一の又は一部一致するビット列に基づき複数のグループに分類する第2の処理と、
分類して得られた前記複数のグループのうちの各グループについて、当該グループに属するビット列に対応するデータブロックのデータを、当該グループに属するビット列の種類に対応付けてデータ格納部に格納する第3の処理と、
を実行させることを特徴とするプログラム。
(付記4)
前記第1の処理は、
前記データブロックから新たな種類のタグが抽出された場合には、当該タグに未使用の識別番号を割り当て、当該タグの種類と割り当てられた識別番号とを対応付けてデータ記憶部に格納する処理を含み、
前記ビット位置は前記識別番号と対応付けられている
付記3記載のプログラム。
(付記5)
前記第1の処理は、
データ記憶部に格納されている、タグと当該タグの識別番号とを対応付けたデータに含まれないタグが、前記データブロックから抽出された場合には、当該タグに未使用の識別番号を割り当て、当該タグと割り当てられた識別番号とを対応付けたデータを前記データ記憶部に格納する処理
を含む付記3記載のプログラム。
(付記6)
前記第2の処理が、
前記ビット列が同一であるか、又は前記ビット列のうちの前記ビット列のビット長よりも短い所定のビット長の一部分が一致するかに基づいて、前記複数のグループに分類する処理
であることを特徴とする付記3乃至5のいずれか1つ記載のプログラム。
(付記7)
前記第3の処理が、
前記グループに属するビット列に対応するデータブロックを圧縮する処理
を含む付記3乃至6のいずれか1つ記載のプログラム。
(付記8)
コンピュータに、
あるタグについての検索要求を受信した場合に、データを圧縮して得られる圧縮データを、前記データ内に含まれるタグを識別可能な識別情報と関連付けて格納する格納部から、前記あるタグの識別情報と関連付けられた圧縮データを特定し、
特定した前記圧縮データを伸張し、
伸張して得られたデータに対して前記あるタグについての検索処理を行う、
ことを実行させることを特徴とする検索制御プログラム。
(付記9)
指定されたタグについて検索することを要求する検索要求を受信する第1の処理と、
タグと識別番号との第1の対応付けデータから、前記指定されたタグに対応する識別番号を特定し、特定された識別番号に対応するビット位置をオンにしたビット列を生成する第2の処理と、
ビット列と当該ビット列においてオンとなっているビット位置に対応する識別番号が対応付けられているタグを含むデータブロックのデータとの第2の対応付けデータにおいて、生成されたビット列においてオンにセットされたビット位置の少なくともいずれかがオンとなっているビット列を特定し、特定されたビット列に対応付けられているデータブロックを、複数のデータブロックを格納するデータ格納部から読み出す第3の処理と、
読み出したデータブロックを前記検索要求に従って検索する第4の処理と、
を、コンピュータに実行させるためのプログラム。
(付記10)
前記第1の対応付けデータに関連して各タグの検索利用頻度を管理しており、
前記指定されたタグについての検索利用頻度を増加させる処理
を、さらに前記コンピュータに実行させるための付記9記載のプログラム。
(付記11)
複数のデータブロックから前記複数のデータブロックの各々に含まれる1又は複数のタグを抽出して、抽出された前記タグの種類に対応するビット位置がオンにセットされたビット列を生成する第1の処理と、
前記複数のデータブロックについて生成された複数のビット列を同一の又は一部一致するビット列に基づき複数のグループに分類する第2の処理と、
分類して得られた前記複数のグループのうちの各グループについて、当該グループに属するビット列に対応するデータブロックのデータを、当該グループに属するビット列の種類に対応付けてデータ格納部に格納する第3の処理と、
を、コンピュータが実行する情報処理方法。
(付記12)
指定されたタグについて検索することを要求する検索要求を受信する第1の処理と、
タグと識別番号との第1の対応付けデータから、前記指定されたタグに対応する識別番号を特定し、特定された識別番号に対応するビット位置をオンにしたビット列を生成する第2の処理と、
ビット列と当該ビット列においてオンとなっているビット位置に対応する識別番号が対応付けられているタグを含むデータブロックのデータとの第2の対応付けデータにおいて、生成されたビット列においてオンにセットされたビット位置の少なくともいずれかがオンとなっているビット列を特定し、特定されたビット列に対応付けられているデータブロックを、複数のデータブロックを格納するデータ格納部から読み出す第3の処理と、
読み出したデータブロックを前記検索要求に従って検索する第4の処理と、
を、コンピュータが実行する情報処理方法。
(付記13)
複数のデータブロックから前記複数のデータブロックの各々に含まれる1又は複数のタグを抽出して、抽出された前記タグの種類に対応するビット位置がオンにセットされたビット列を生成する第1の処理部と、
前記複数のデータブロックについて生成された複数のビット列を同一の又は一部一致するビット列に基づき複数のグループに分類する第2の処理部と、
分類して得られた前記複数のグループのうちの各グループについて、当該グループに属するビット列に対応するデータブロックのデータを、当該グループに属するビット列の種類に対応付けてデータ格納部に格納する第3の処理部と、
を有する情報処理装置。
(付記14)
指定されたタグについて検索することを要求する検索要求を受信する受信部と、
タグと識別番号との第1の対応付けデータから、前記指定されたタグに対応する識別番号を特定し、特定された識別番号に対応するビット位置をオンにしたビット列を生成する処理部と、
ビット列と当該ビット列においてオンとなっているビット位置に対応する識別番号が対応付けられているタグを含むデータブロックのデータとの第2の対応付けデータにおいて、生成されたビット列においてオンにセットされたビット位置の少なくともいずれかがオンとなっているビット列を特定し、特定されたビット列に対応付けられているデータブロックを、複数のデータブロックを格納するデータ格納部から読み出すデータ抽出部と、
読み出したデータブロックを前記検索要求に従って検索する検索部と、
を有する情報処理装置。
(付記15)
コンピュータが、
複数のデータのうちの所定種類のタグを含むデータ群を圧縮して、圧縮ファイルを生成し、
生成した前記圧縮ファイルを、前記所定の種類のタグを識別可能な識別情報と関連付けて記憶部に格納する、
ことを実行することを特徴とする記憶制御プログラム。
(付記16)
複数のデータのうちの所定種類のタグを含むデータ群を圧縮して、圧縮ファイルを生成する生成部と、
生成した前記圧縮ファイルを、前記所定の種類のタグを識別可能な識別情報と関連付けて記憶部に記憶する記憶処理部と、
を含むことを特徴とする記憶制御装置。
(付記17)
コンピュータが、
あるタグについての検索要求を受信した場合に、データを圧縮して得られる圧縮データを、前記データ内に含まれるタグを識別可能な識別情報と関連付けて格納する格納部から、前記あるタグの識別情報と関連付けられた圧縮データを特定し、
特定した前記圧縮データを伸張し、
伸張して得られたデータに対して前記あるタグについての検索処理を行う、
ことを実行することを特徴とする検索制御方法。
(付記18)
あるタグについての検索要求を受信した場合に、データを圧縮して得られる圧縮データを、前記データ内に含まれるタグを識別可能な識別情報と関連付けて格納する格納部から、前記あるタグの識別情報と関連付けられた圧縮データを特定する特定部と、
特定した前記圧縮データを伸張する伸張部と、
伸張して得られたデータに対して前記あるタグについての検索処理を行う検索部と、
を含むことを特徴とする検索制御装置。