(58)【調査した分野】(Int.Cl.,DB名)
【発明の開示】
【発明が解決しようとする課題】
【0005】
このキーブレイク処理の実行に際しては、各データのキー値を直前のキー値と1件毎に比較していく必要があるため、処理対象となるデータの件数が数百万超の大容量データともなると膨大な時間を要し、営業時間後のバッチ処理では翌日の営業開始までに集計が完了しないといった事態も生じ得る。
【0006】
本来であれば、データを複数のファイルに分割し、複数台のコンピュータまたは複数個のCPUコアを用いて並列処理を実行することにより、処理時間の短縮化を図りたいところであるが、
図6に示すように、一連のデータを適当な位置で分割すると同じキー値を備えたデータが複数のファイル中に分散する所謂「泣き別れ」が生じてしまい、後続の処理に悪影響を及ぼすこととなる。
【0007】
かといって、正確なブレイクポイントでファイルを分割するとなると、そのブレイクポイントを発見するためにデータを上から1件ずつチェックしていく必要が生じ、本末転倒な結果となる。
【0008】
なお、大容量ファイルをデータの分量ベースで分割した際に生じる「泣き別れ」により、後続処理に不都合が生じるのは上記の場合に限られるものではく、大容量のテキストファイル中から特定の文字列が含まれる行を行単位で出力する処理を複数のCPUコアを用いて並列的に実行するに先立ち、当該テキストファイルを複数ファイルに分割するケースなどにも該当する。
【0009】
例えば、「…あいうえお\nかきくけこ\nさしすせそ\n…」というテキストファイルに対して「きく」というキーワードが与えられた際に、「かきくけこ」の行を正しく抽出するためには、元ファイルが改行文字(\n)の直後で分割がなされる必要がある。仮に「あいうえお\nかき」と「くけこ\nさしすせそ」に分割されてしまうと「きく」が泣き別れとなり、検索対象として認識されなくなる。
【0010】
この発明は、このような現状を鑑みて案出されたものであり、大容量データをブレイクポイント等の分割許容ポイントで分割する処理を、効率的に実行できる技術の提供を目的としている。
【課題を解決するための手段】
【0011】
上記の目的を達成するため、請求項1に記載したファイル分割システムは、複数の分割処理部と、複数の分割許容ポイントを有している元データを、データの分量ベースで複数のグループに区分し、各グループに含まれるデータを上記の各分割処理部に割当データとして順番に関連付けるデータ割当処理部と、複数の後続処理部を備え、上記の各分割処理部の中、元データの最初のグループが割り当てられた先頭の分割処理部を除き、各分割処理部がそれぞれ自己の割当データについて先頭から分割許容ポイントを探索する処理を実行し、最初の分割許容ポイントを発見した時点で、当該最初の分割許容ポイントより前のデータを判定済データとして判定済データ記憶領域に出力すると共に、当該最初の分割許容ポイント以降のデータを判定不要データとして判定不要データ記憶領域に出力し、上記先頭の分割処理部が、自己の割当データについて分割許容ポイントを探索する処理を実行することなく、そのまま判定不要データとして上記判定不要データ記憶領域に出力し、上記の各後続処理部は、自己の担当する分割処理部の次の分割処理部に係る判定済データが存在する場合には、自己の担当する分割処理部に係る判定不要データの末尾に上記判定済データを仮想的に連結した上で必要な後続処理を実行し、上記の判定済データが存在しない場合には、自己の担当する分割処理部に係る判定不要データのみに対して必要な後続処理を実行することを特徴としている。
【0012】
請求項2に記載したファイル分割システムは、請求項1のシステムであって、上記データ割当処理部が、キー項目の値に基づいてソートされた複数のレコードからなる元データをレコードの件数ベースで複数のグループに区分し、上記分割処理部が、上記元データに含まれる各レコードのキー項目の値が変化するブレイクポイントを分割許容ポイントとして探索することを特徴としている。
【0013】
請求項3に記載したファイル分割システムは、請求項1のシステムであって、上記データ割当処理部が、複数の改行文字を含むテキストファイルからなる元データを文字数ベースで複数のグループに区分し、上記分割処理部が、上記元データに含まれる各改行文字の直後を分割許容ポイントとして探索することを特徴としている。
【0014】
請求項4に記載したファイル分割システムは、請求項1〜3のシステムであって、上記の各分割処理部による処理が、それぞれ別個のCPUコアによって実行されることを特徴としている。
【0015】
請求項5に記載したファイル分割方法は、
コンピュータにより実行される方法であって、複数の分割許容ポイントを有している元データを、データの分量ベースで複数のグループに区分するステップと、上記複数のグループの中、上記元データの最初のグループ以外の各グループについて、それぞれ先頭から分割許容ポイントを探索し、最初の分割許容ポイントを発見した時点で、当該最初の分割許容ポイントより前のデータを判定済データとして判定済データ記憶領域に出力するステップと、当該最初の分割許容ポイント以降のデータを、判定不要データとして判定不要データ記憶領域に出力するステップと、上記先頭のグループについては、分割許容ポイントを探索することなく、そのまま判定不要データとして上記判定不要データ記憶領域に出力するステップと、上記判定不要データ記憶領域に格納された判定不要データの中、元データの最後のグループに係る判定不要データ以外の各判定不要データに対しては、それぞれ次のグループに係る判定済データを仮想的に連結した上で必要な後続処理を実行し、上記元データの最後のグループに係る判定不要データに対しては、そのまま必要な後続処理を実行するステップからなることを特徴としている。
【発明の効果】
【0016】
請求項1に記載したファイル分割システムの場合、各分割処理部によって切り出された判定済データは分割許容ポイントよりも前のものであり、これが一つ前の分割処理部に係る判定不要データの最後尾に仮想的に連結された上で必要な後続処理が実行される仕組みであるため、後続処理の対象データ間において所謂「泣き別れ」が生じることがない。
しかも、各分割処理部による逐次的な分割許容ポイント探索処理は、各グループにおいて最初の分割許容ポイントが発見されるまでに限定され、それ以降のデータに対しては分割許容ポイント探索処理が省略される仕組みであるため、元データのすべてについて同処理を実行する場合に比べ、処理の大幅な簡素化が実現できる。
【0017】
請求項4に記載したファイル分割システムの場合、各分散処理部による分割許容ポイント探索処理を並列化することができ、ファイル分割処理をより効率化することが可能となる。
【0018】
請求項5に記載したファイル分割方法の場合にも、各グループから切り出された判定済データは分割許容ポイントよりも前のものであり、これが一つ前のグループに係る判定不要データの最後尾に仮想的に連結された上で必要な後続処理が実行される仕組みであるため、後続処理の対象データ間において所謂「泣き別れ」が生じることがない。
しかも、データに対する逐次的な分割許容ポイント探索処理は、各グループにおいて最初の分割許容ポイントが発見されるまでに限定され、それ以降のデータに対しては分割許容ポイント探索処理が省略される仕組みであるため、元データのすべてについて同処理を実行する場合に比べ、処理の大幅な簡素化が実現できる。
【発明を実施するための最良の形態】
【0019】
図1は、この発明に係るファイル分割システム10の機能構成を示すブロック図であり、データ割当処理部12と、元データ記憶領域13と、判定済データ記憶領域14と、判定不要データ記憶領域15と、集計結果記憶領域16と、第1の分割処理部21と、第2の分割処理部22と、第3の分割処理部23と、第4の分割処理部24と、第5の分割処理部25と、第6の分割処理部26と、第7の分割処理部27と、第1の集計処理部(後続処理部)31と、第2の集計処理部(後続処理部)32と、第3の集計処理部(後続処理部)33と、第4の集計処理部(後続処理部)34と、第5の集計処理部(後続処理部)35と、第6の集計処理部(後続処理部)36と、第7の集計処理部(後続処理部)37を備えている。
【0020】
上記元データ記憶領域13、判定済データ記憶領域14、判定不要データ記憶領域15及び集計結果記憶領域16は、コンピュータ40の補助記憶装置42内に設けられている。
また、上記データ割当処理部12、第1の分割処理部21〜第7の分割処理部27及び第1の集計処理部31〜第7の集計処理部37は、同コンピュータ40のCPUが特定のアプリケーションプログラムに従って動作することにより実現される。
【0021】
このコンピュータ40は複数のCPUコアを備えており、第1の分割処理部21〜第7の分割処理部27が動作する際には、それぞれ別個のCPUコアが割り当てられる。この結果、第1の分割処理部21〜第7の分割処理部27は同時並行的に別個の処理を実行可能となされている。
また、第1の集計処理部31〜第7の集計処理部37が動作する際にも、それぞれには別個のCPUコアが割り当てられる結果、第1の集計処理部31〜第7の集計処理部37は同時並行的に別個の処理を実行できる。
【0022】
つぎに、
図2のフローチャート及び
図3の概念図に基づき、このファイル分割システム10の処理内容を説明する。
【0023】
まずデータ割当処理部12は、元データ記憶領域13に格納された元データ46のレコード件数をチェックし、第1の分割処理部21〜第7の分割処理部27用に等分に割り当てる(S10)。
【0024】
元データ46は、例えば仕入先、伝票番号、金額のデータ項目を備えた数百万件超の大容量データであり、予め仕入先コードに基づいて昇順又は降順に整列されている。
データ割当処理部12は、この大容量データを件数ベースで先頭から順に7等分し、それぞれのグループを第1の分割処理部21〜第7の分割処理部27に対して順に割り当てるのであるが、正確に7等分できずに端数が生じる場合、適当な分割処理部に対して他より多目にデータを割り当てる。
図3においては、第1の分割処理部21〜第7の分割処理部27に対して、それぞれ割当データ51〜57が関連付けられた状態が示されている。
【0025】
つぎに、元データ46の先頭のグループを担当する第1の分割処理部21を除き、第2の分割処理部22〜第7の分割処理部27は、それぞれ自己に関連付けられた割当データに対してブレイク判定処理を上から順に実行し(S12)、最初のブレイクポイントαを発見した時点でブレイク判定処理を停止し、当該ブレイクポイントαより前に位置する判定済データを判定済データ記憶領域14にファイルとして出力する(S14)。ここでは、ブレイクポイントが「分割可能ポイント」に相当することとなる。
図3においては、判定済データ記憶領域14に判定済データ62〜67が配置されている状態が示されている。
【0026】
同時に、第2の分割処理部22〜第7の分割処理部27は、最初のブレイクポイントα以降に存在する全データを、判定不要データとして判定不要データ記憶領域15にファイルとして出力する(S16)。
これに対し第1の分割処理部21は、ブレイク判定処理を一切実行することなく、自己の割当データ51をそのまま判定不要データとして判定不要データ記憶領域15に出力する(S18)。
図3においては、判定不要データ記憶領域15に判定不要データ71〜77が配置されている状態が示されている。
【0027】
図4は、ブレイク判定処理の具体例を示すものである。
まず第2の分割処理部22は、仕入先コードが「003」から「004」に変わる箇所を最初のブレイクポイントαと認定し、この最初のブレイクポイントαより前に配置された全データ(ここでは「003」の仕入先コードを備えたデータ)を判定済データ62として判定済データ記憶領域14に出力する。
図示の通り、最初のブレイクポイントα以降に配置された判定不要データ72中にも次のブレイクポイントが存在しているが、第2の分割処理部22はブレイク判定処理を再開することなく、判定不要データ72を一括して判定不要データ記憶領域14に出力する。
【0028】
つぎに、第1の集計処理部31は、判定不要データ記憶領域15に格納された第1の分割処理部21に係る判定不要データ71と、判定済データ記憶領域14に格納された第2の分割処理部22に係る判定済データ62を仮想的にマージして第1の分割ファイル81となした上で、仕入先単位での集計処理を実行し(S20)、その結果を集計結果記憶領域16に格納する(S24)。
ここで「仮想的にマージ」とは、先行グループに係る判定不要データと一つ後ろのグループに係る判定済データを、連続する一つのファイルとして読み込むことを意味している。
【0029】
同様に、第2の集計処理部32〜第6の集計処理部36も、それぞれ判定不要データ記憶領域15に格納された判定不要データ72〜76に対し、一つ後ろの分割処理部によって出力された判定済データ62〜67を仮想的にマージして第2の分割ファイル82〜第6の分割ファイル86となした上で集計処理を実行し(S20)、その結果を集計結果記憶領域16に格納する(S24)。
【0030】
これに対し、元データ46の最後尾のグループを担当する第7の分割処理部27に係る判定不要データ77には、マージの対象となる判定済データが存在しないため、第7の集計処理部37は判定不要データ77をそのまま第7の分割ファイル87として取り扱い、これに対する集計処理を実行した後(S22)、集計結果記憶領域16に集計結果を格納する(S24)。
【0031】
上記のように、第1の集計処理部31〜第6の集計処理部36が仮想マージ機能を備えているため、判定不要データ記憶領域15に格納された判定不要データのファイルと、判定済データ記憶領域14に格納された判定済データのファイルを物理的に結合し、第三のファイルとして別の領域に書き込む際の時間とディスク容量を節約することができる。
【0032】
ただし、この発明はこれに限定されるものではない。すなわち、第1の集計処理部31〜第6の集計処理部36が、それぞれ自己が担当する判定不要データ71〜76のファイルと判定済データ62〜67のファイルを物理的にマージし、独立した分割ファイルとしてディスク上の所定の領域に出力すると共に、第7の集計処理部37が、自己が担当する判定不要データ77をそのまま分割ファイルとして上記領域に出力するように構成してもよい。この後、第1の集計処理部31〜第7の集計処理部37によって、各分割ファイルに対して集計処理が実行される。
【0033】
各分割ファイル81〜87に含まれるデータの件数は区々であり、また一つの分割ファイル中には複数のブレイクポイントが含まれているが、少なくとも同一のキー値を備えたデータが異なる分割ファイル中に分散する「泣き別れ」が生じることはない。
【0034】
例えば、
図4に示すように、第1の分割処理部21の割当データ51の最後尾には仕入先コードが「003」のデータが含まれているが、第2の分割処理部22の判定済データ62はすべて仕入先コード「003」のデータで占められており、これらが第1の分割処理部21の判定不要データ71の最後尾に仮想的に結合されるため、仕入先コード「003」のデータが第1の分割ファイル81内に集約されることとなる。
【0035】
各分割処理部においては逐次的なブレイク判定処理が実行されることになるが、第1の分割処理部21〜第7の分割処理部27には異なるCPUコアが割り当てられているため、並列処理による効率化が実現される。
【0036】
しかも、ブレイク判定処理は最初のブレイクポイントαが発見されるまでのことであり、それ以降は判定不要データとしてブレイク判定処理が施されることなく、一括して判定不要データ記憶領域15に出力されるため、すべてのデータを1件毎にチェックする場合に比べて処理の大幅な簡素化が期待できる。
【0037】
各分割ファイル81〜87については、上記のように同種データの泣き別れが生じていないことが保証されているため、各分割ファイル中のデータについて集計処理を行う場合に、それぞれ別個のCPUコアが割り当てられた第1の集計処理部31〜第7の集計処理部37による並列処理が可能となる。
【0038】
上記において元データ46を7つのファイルに分割したのはあくまでも一例であり、対応する数の分割処理部(CPUコア)を用意することにより、任意の数のファイルに分割できることは当然である。
【0039】
なお、本願発明は上記のようにマルチコアCPUを備えたコンピュータ32による並列処理を必須要件とするものではなく、シングルコアCPUのコンピュータを用いて元データ46の各グループについて順番に処理を実行する方式を採用することもできる。
【0040】
上記においては、キーブレイク処理の前処理としてファイルを複数に分割するケースを例示したが、このファイル分割システム10は他の用途にも応用可能である。
その一例として、大容量のテキストファイル中から、特定の文字列が含まれる行を行単位で出力する処理を複数のCPUコアを用いて並列的に実行するに先立ち、当該テキストファイルを複数ファイルに分割するケースが該当する。
【0041】
すなわち、「…あいうえお\nかきくけこ\nさしすせそ\n…」というテキストファイルに対して「きく」というキーワードが与えられた際に、「かきくけこ」の行を正しく抽出するためには、元ファイルが改行文字(\n)の直後で分割がなされる必要がある。仮に「あいうえお\nかき」と「くけこ\nさしすせそ」に分割されてしまうと「きく」が泣き別れとなり、検索対象として認識されなくなる。
【0042】
このような場面において、元データの分割処理にこのファイル分割システム10を適用すれば、以下の通り、元データを改行文字の直後の位置で正確に分割することが可能となる。
【0043】
(1) データ割当処理部12が、元データを文字数ベースで7つのグループに区分し、第1の分割処理部21〜第7の分割処理部27に割り当てる。
【0044】
(2) これに対し、第2の分割処理部22〜第7の分割処理部27は、自己の割当データに対して、先頭の文字から順に改行文字に該当するか否かを判定していき、最初の改行文字を発見した時点で、当該改行文字を含む判定済の文字列を判定済データとして判定済データ記憶領域14にファイル出力する。ここでは、改行文字の直後が「分割可能ポイント」に相当することとなる。
【0045】
(3) 同時に、第2の分割処理部22〜第7の分割処理部27は、最初の改行文字より後の文字列については、判定不要データとして判定不要データ記憶領域15に一括してファイル出力する。
【0046】
(4) 第1の分割処理部21は、自己の割当データについて上記の改行文字探索処理を行うことなく、そのまま判定不要データ記憶領域15にファイル出力する。
【0047】
(5) 以上の結果、判定不要データ記憶領域15には7つの判定不要データがファイルとして格納されると共に、判定済データ記憶領域14には6つの判定済データがファイルとして格納されることとなる。
【0048】
(6) この後、7つの検索処理部(後続処理部)がコンピュータ上に起動され、「きく」の文字列を含む行を行単位で抽出する処理を並列的に実行する。
【0049】
(7) この際、第1の検索処理部は、第1の分割処理部21に係る判定不要データと第2の分割処理部22に係る判定済データを仮想的にマージし、一つのファイルとして取り扱う。
【0050】
(8) この判定済データは、最後の文字列が改行文字で終わっているため、これを上記の判定不要データの最後尾に連結すれば、第1の分割ファイル中に泣き別れが生じることはない。
【0051】
(9) 以下同様に、第2の検索処理部〜第6の検索処理部は、第2の判定不要データ〜第6の判定不要データと、第2の判定済データ〜第6の判定済データとを、それぞれ仮想的にマージした上で、必要な検索処理を実行する。
【0052】
(10)これに対し、第7の検索処理部は、第7の判定済データが存在しないため、第7の判定不要データのみを検索対象として取り扱う。