(57)【特許請求の範囲】
【請求項１】
複数の分割処理部と、
複数の分割許容ポイントを有している元データを、データの分量ベースで複数のグループに区分し、各グループに含まれるデータを上記の各分割処理部に割当データとして順番に関連付けるデータ割当処理部と、
複数の後続処理部を備え、
上記の各分割処理部の中、元データの最初のグループが割り当てられた先頭の分割処理部を除き、各分割処理部がそれぞれ自己の割当データについて先頭から分割許容ポイントを探索する処理を実行し、最初の分割許容ポイントを発見した時点で、当該最初の分割許容ポイントより前のデータを判定済データとして判定済データ記憶領域に出力すると共に、当該最初の分割許容ポイント以降のデータを判定不要データとして判定不要データ記憶領域に出力し、
上記先頭の分割処理部が、自己の割当データについて分割許容ポイントを探索する処理を実行することなく、そのまま判定不要データとして上記判定不要データ記憶領域に出力し、
上記の各後続処理部は、自己の担当する分割処理部の次の分割処理部に係る判定済データが存在する場合には、自己の担当する分割処理部に係る判定不要データの末尾に上記判定済データを仮想的に連結した上で必要な後続処理を実行し、上記の判定済データが存在しない場合には、自己の担当する分割処理部に係る判定不要データのみに対して必要な後続処理を実行することを特徴とするファイル分割システム。
【請求項２】
上記データ割当処理部が、キー項目の値に基づいてソートされた複数のレコードからなる元データを、レコードの件数ベースで複数のグループに区分し、
上記分割処理部が、上記元データに含まれる各レコードのキー項目の値が変化するブレイクポイントを分割許容ポイントとして探索することを特徴とする請求項１に記載のファイル分割システム。
【請求項３】
上記データ割当処理部が、複数の改行文字を含むテキストファイルからなる元データを、文字数ベースで複数のグループに区分し、
上記分割処理部が、上記元データに含まれる各改行文字の直後を分割許容ポイントとして探索することを特徴とする請求項１に記載のファイル分割システム。
【請求項４】
上記の各分割処理部による処理が、それぞれ別個のCPUコアによって実行されることを特徴とする請求項１〜３の何れかに記載のファイル分割システム。
【請求項５】
コンピュータにより実行されるファイル分割方法であって、
複数の分割許容ポイントを有している元データを、データの分量ベースで複数のグループに区分するステップと、
上記複数のグループの中、上記元データの最初のグループ以外の各グループについて、それぞれ先頭から分割許容ポイントを探索し、最初の分割許容ポイントを発見した時点で、当該最初の分割許容ポイントより前のデータを判定済データとして判定済データ記憶領域に出力するステップと、
当該最初の分割許容ポイント以降のデータを、判定不要データとして判定不要データ記憶領域に出力するステップと、
上記先頭のグループについては、分割許容ポイントを探索することなく、そのまま判定不要データとして上記判定不要データ記憶領域に出力するステップと、
上記判定不要データ記憶領域に格納された判定不要データの中、元データの最後のグループに係る判定不要データ以外の各判定不要データに対しては、それぞれ次のグループに係る判定済データを仮想的に連結した上で必要な後続処理を実行し、上記元データの最後のグループに係る判定不要データに対しては、そのまま必要な後続処理を実行するステップと、
からなることを特徴とするファイル分割方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はファイル分割システム及び方法に係り、特に、大容量データに対するキーブレイク処理等の並列化を実現するための前処理として、当該大容量データをブレイクポイント等において複数のグループに分割する技術に関する。
【背景技術】
【０００２】
キーブレイク処理とは、ある項目（キー）でソート済みのデータをシーケンシャルに読み込み、属性（キー）が変わったタイミングで集計等の処理を実行することを指す（非特許文献１参照）。
【０００３】
例えば、図５に示すように、仕入先コードに基づいてソートされた５件のデータについて「仕入先毎に金額を集計する」という処理が与えられた場合、各データの仕入先コードを上から順にチェックしていき、仕入先コードが変化した時点でそれ以前のデータを抽出し、それぞれの金額を合計する処理が実行される。
【０００４】
【非特許文献１】2-2.キーブレイク処理インターネットURL：http://www003.upp.so-net.ne.jp/NAMBOKU/ruby/ruby022.html  検索日：２０１４年９月１０日
【発明の開示】
【発明が解決しようとする課題】
【０００５】
このキーブレイク処理の実行に際しては、各データのキー値を直前のキー値と１件毎に比較していく必要があるため、処理対象となるデータの件数が数百万超の大容量データともなると膨大な時間を要し、営業時間後のバッチ処理では翌日の営業開始までに集計が完了しないといった事態も生じ得る。
【０００６】
本来であれば、データを複数のファイルに分割し、複数台のコンピュータまたは複数個のCPUコアを用いて並列処理を実行することにより、処理時間の短縮化を図りたいところであるが、図６に示すように、一連のデータを適当な位置で分割すると同じキー値を備えたデータが複数のファイル中に分散する所謂「泣き別れ」が生じてしまい、後続の処理に悪影響を及ぼすこととなる。
【０００７】
かといって、正確なブレイクポイントでファイルを分割するとなると、そのブレイクポイントを発見するためにデータを上から１件ずつチェックしていく必要が生じ、本末転倒な結果となる。
【０００８】
なお、大容量ファイルをデータの分量ベースで分割した際に生じる「泣き別れ」により、後続処理に不都合が生じるのは上記の場合に限られるものではく、大容量のテキストファイル中から特定の文字列が含まれる行を行単位で出力する処理を複数のCPUコアを用いて並列的に実行するに先立ち、当該テキストファイルを複数ファイルに分割するケースなどにも該当する。
【０００９】
例えば、「…あいうえお\nかきくけこ\nさしすせそ\n…」というテキストファイルに対して「きく」というキーワードが与えられた際に、「かきくけこ」の行を正しく抽出するためには、元ファイルが改行文字（\n）の直後で分割がなされる必要がある。仮に「あいうえお\nかき」と「くけこ\nさしすせそ」に分割されてしまうと「きく」が泣き別れとなり、検索対象として認識されなくなる。  
【００１０】
この発明は、このような現状を鑑みて案出されたものであり、大容量データをブレイクポイント等の分割許容ポイントで分割する処理を、効率的に実行できる技術の提供を目的としている。
【課題を解決するための手段】
【００１１】
上記の目的を達成するため、請求項１に記載したファイル分割システムは、複数の分割処理部と、複数の分割許容ポイントを有している元データを、データの分量ベースで複数のグループに区分し、各グループに含まれるデータを上記の各分割処理部に割当データとして順番に関連付けるデータ割当処理部と、複数の後続処理部を備え、上記の各分割処理部の中、元データの最初のグループが割り当てられた先頭の分割処理部を除き、各分割処理部がそれぞれ自己の割当データについて先頭から分割許容ポイントを探索する処理を実行し、最初の分割許容ポイントを発見した時点で、当該最初の分割許容ポイントより前のデータを判定済データとして判定済データ記憶領域に出力すると共に、当該最初の分割許容ポイント以降のデータを判定不要データとして判定不要データ記憶領域に出力し、上記先頭の分割処理部が、自己の割当データについて分割許容ポイントを探索する処理を実行することなく、そのまま判定不要データとして上記判定不要データ記憶領域に出力し、上記の各後続処理部は、自己の担当する分割処理部の次の分割処理部に係る判定済データが存在する場合には、自己の担当する分割処理部に係る判定不要データの末尾に上記判定済データを仮想的に連結した上で必要な後続処理を実行し、上記の判定済データが存在しない場合には、自己の担当する分割処理部に係る判定不要データのみに対して必要な後続処理を実行することを特徴としている。
【００１２】
請求項２に記載したファイル分割システムは、請求項１のシステムであって、上記データ割当処理部が、キー項目の値に基づいてソートされた複数のレコードからなる元データをレコードの件数ベースで複数のグループに区分し、上記分割処理部が、上記元データに含まれる各レコードのキー項目の値が変化するブレイクポイントを分割許容ポイントとして探索することを特徴としている。
【００１３】
請求項３に記載したファイル分割システムは、請求項１のシステムであって、上記データ割当処理部が、複数の改行文字を含むテキストファイルからなる元データを文字数ベースで複数のグループに区分し、上記分割処理部が、上記元データに含まれる各改行文字の直後を分割許容ポイントとして探索することを特徴としている。
【００１４】
請求項４に記載したファイル分割システムは、請求項１〜３のシステムであって、上記の各分割処理部による処理が、それぞれ別個のCPUコアによって実行されることを特徴としている。
【００１５】
請求項５に記載したファイル分割方法は、コンピュータにより実行される方法であって、複数の分割許容ポイントを有している元データを、データの分量ベースで複数のグループに区分するステップと、上記複数のグループの中、上記元データの最初のグループ以外の各グループについて、それぞれ先頭から分割許容ポイントを探索し、最初の分割許容ポイントを発見した時点で、当該最初の分割許容ポイントより前のデータを判定済データとして判定済データ記憶領域に出力するステップと、当該最初の分割許容ポイント以降のデータを、判定不要データとして判定不要データ記憶領域に出力するステップと、上記先頭のグループについては、分割許容ポイントを探索することなく、そのまま判定不要データとして上記判定不要データ記憶領域に出力するステップと、上記判定不要データ記憶領域に格納された判定不要データの中、元データの最後のグループに係る判定不要データ以外の各判定不要データに対しては、それぞれ次のグループに係る判定済データを仮想的に連結した上で必要な後続処理を実行し、上記元データの最後のグループに係る判定不要データに対しては、そのまま必要な後続処理を実行するステップからなることを特徴としている。
【発明の効果】
【００１６】
請求項１に記載したファイル分割システムの場合、各分割処理部によって切り出された判定済データは分割許容ポイントよりも前のものであり、これが一つ前の分割処理部に係る判定不要データの最後尾に仮想的に連結された上で必要な後続処理が実行される仕組みであるため、後続処理の対象データ間において所謂「泣き別れ」が生じることがない。
しかも、各分割処理部による逐次的な分割許容ポイント探索処理は、各グループにおいて最初の分割許容ポイントが発見されるまでに限定され、それ以降のデータに対しては分割許容ポイント探索処理が省略される仕組みであるため、元データのすべてについて同処理を実行する場合に比べ、処理の大幅な簡素化が実現できる。
【００１７】
請求項４に記載したファイル分割システムの場合、各分散処理部による分割許容ポイント探索処理を並列化することができ、ファイル分割処理をより効率化することが可能となる。
【００１８】
請求項５に記載したファイル分割方法の場合にも、各グループから切り出された判定済データは分割許容ポイントよりも前のものであり、これが一つ前のグループに係る判定不要データの最後尾に仮想的に連結された上で必要な後続処理が実行される仕組みであるため、後続処理の対象データ間において所謂「泣き別れ」が生じることがない。
しかも、データに対する逐次的な分割許容ポイント探索処理は、各グループにおいて最初の分割許容ポイントが発見されるまでに限定され、それ以降のデータに対しては分割許容ポイント探索処理が省略される仕組みであるため、元データのすべてについて同処理を実行する場合に比べ、処理の大幅な簡素化が実現できる。
【発明を実施するための最良の形態】
【００１９】
図１は、この発明に係るファイル分割システム10の機能構成を示すブロック図であり、データ割当処理部12と、元データ記憶領域13と、判定済データ記憶領域14と、判定不要データ記憶領域15と、集計結果記憶領域16と、第１の分割処理部21と、第２の分割処理部22と、第３の分割処理部23と、第４の分割処理部24と、第５の分割処理部25と、第６の分割処理部26と、第７の分割処理部27と、第１の集計処理部（後続処理部）31と、第２の集計処理部（後続処理部）32と、第３の集計処理部（後続処理部）33と、第４の集計処理部（後続処理部）34と、第５の集計処理部（後続処理部）35と、第６の集計処理部（後続処理部）36と、第７の集計処理部（後続処理部）37を備えている。
【００２０】
上記元データ記憶領域13、判定済データ記憶領域14、判定不要データ記憶領域15及び集計結果記憶領域16は、コンピュータ40の補助記憶装置42内に設けられている。
また、上記データ割当処理部12、第１の分割処理部21〜第７の分割処理部27及び第１の集計処理部31〜第７の集計処理部37は、同コンピュータ40のCPUが特定のアプリケーションプログラムに従って動作することにより実現される。
【００２１】
このコンピュータ40は複数のCPUコアを備えており、第１の分割処理部21〜第７の分割処理部27が動作する際には、それぞれ別個のCPUコアが割り当てられる。この結果、第１の分割処理部21〜第７の分割処理部27は同時並行的に別個の処理を実行可能となされている。
また、第１の集計処理部31〜第７の集計処理部37が動作する際にも、それぞれには別個のCPUコアが割り当てられる結果、第１の集計処理部31〜第７の集計処理部37は同時並行的に別個の処理を実行できる。
【００２２】
つぎに、図２のフローチャート及び図３の概念図に基づき、このファイル分割システム10の処理内容を説明する。
【００２３】
まずデータ割当処理部12は、元データ記憶領域13に格納された元データ46のレコード件数をチェックし、第１の分割処理部21〜第７の分割処理部27用に等分に割り当てる（Ｓ10）。
【００２４】
元データ46は、例えば仕入先、伝票番号、金額のデータ項目を備えた数百万件超の大容量データであり、予め仕入先コードに基づいて昇順又は降順に整列されている。
データ割当処理部12は、この大容量データを件数ベースで先頭から順に７等分し、それぞれのグループを第１の分割処理部21〜第７の分割処理部27に対して順に割り当てるのであるが、正確に７等分できずに端数が生じる場合、適当な分割処理部に対して他より多目にデータを割り当てる。
図３においては、第１の分割処理部21〜第７の分割処理部27に対して、それぞれ割当データ51〜57が関連付けられた状態が示されている。
【００２５】
つぎに、元データ46の先頭のグループを担当する第１の分割処理部21を除き、第２の分割処理部22〜第７の分割処理部27は、それぞれ自己に関連付けられた割当データに対してブレイク判定処理を上から順に実行し（Ｓ12）、最初のブレイクポイントαを発見した時点でブレイク判定処理を停止し、当該ブレイクポイントαより前に位置する判定済データを判定済データ記憶領域14にファイルとして出力する（Ｓ14）。ここでは、ブレイクポイントが「分割可能ポイント」に相当することとなる。
図３においては、判定済データ記憶領域14に判定済データ62〜67が配置されている状態が示されている。
【００２６】
同時に、第２の分割処理部22〜第７の分割処理部27は、最初のブレイクポイントα以降に存在する全データを、判定不要データとして判定不要データ記憶領域15にファイルとして出力する（Ｓ16）。
これに対し第１の分割処理部21は、ブレイク判定処理を一切実行することなく、自己の割当データ51をそのまま判定不要データとして判定不要データ記憶領域15に出力する（Ｓ18）。
図３においては、判定不要データ記憶領域15に判定不要データ71〜77が配置されている状態が示されている。
【００２７】
図４は、ブレイク判定処理の具体例を示すものである。
まず第２の分割処理部22は、仕入先コードが「003」から「004」に変わる箇所を最初のブレイクポイントαと認定し、この最初のブレイクポイントαより前に配置された全データ（ここでは「003」の仕入先コードを備えたデータ）を判定済データ62として判定済データ記憶領域14に出力する。
図示の通り、最初のブレイクポイントα以降に配置された判定不要データ72中にも次のブレイクポイントが存在しているが、第２の分割処理部22はブレイク判定処理を再開することなく、判定不要データ72を一括して判定不要データ記憶領域14に出力する。
【００２８】
つぎに、第１の集計処理部31は、判定不要データ記憶領域15に格納された第１の分割処理部21に係る判定不要データ71と、判定済データ記憶領域14に格納された第２の分割処理部22に係る判定済データ62を仮想的にマージして第１の分割ファイル81となした上で、仕入先単位での集計処理を実行し（Ｓ20）、その結果を集計結果記憶領域16に格納する（Ｓ24）。
ここで「仮想的にマージ」とは、先行グループに係る判定不要データと一つ後ろのグループに係る判定済データを、連続する一つのファイルとして読み込むことを意味している。
【００２９】
同様に、第２の集計処理部32〜第６の集計処理部36も、それぞれ判定不要データ記憶領域15に格納された判定不要データ72〜76に対し、一つ後ろの分割処理部によって出力された判定済データ62〜67を仮想的にマージして第２の分割ファイル82〜第６の分割ファイル86となした上で集計処理を実行し（Ｓ20）、その結果を集計結果記憶領域16に格納する（Ｓ24）。
【００３０】
これに対し、元データ46の最後尾のグループを担当する第７の分割処理部27に係る判定不要データ77には、マージの対象となる判定済データが存在しないため、第７の集計処理部37は判定不要データ77をそのまま第７の分割ファイル87として取り扱い、これに対する集計処理を実行した後（Ｓ22）、集計結果記憶領域16に集計結果を格納する（Ｓ24）。
【００３１】
上記のように、第１の集計処理部31〜第６の集計処理部36が仮想マージ機能を備えているため、判定不要データ記憶領域15に格納された判定不要データのファイルと、判定済データ記憶領域14に格納された判定済データのファイルを物理的に結合し、第三のファイルとして別の領域に書き込む際の時間とディスク容量を節約することができる。
【００３２】
ただし、この発明はこれに限定されるものではない。すなわち、第１の集計処理部31〜第６の集計処理部36が、それぞれ自己が担当する判定不要データ71〜76のファイルと判定済データ62〜67のファイルを物理的にマージし、独立した分割ファイルとしてディスク上の所定の領域に出力すると共に、第７の集計処理部37が、自己が担当する判定不要データ77をそのまま分割ファイルとして上記領域に出力するように構成してもよい。この後、第１の集計処理部31〜第７の集計処理部37によって、各分割ファイルに対して集計処理が実行される。
【００３３】
各分割ファイル81〜87に含まれるデータの件数は区々であり、また一つの分割ファイル中には複数のブレイクポイントが含まれているが、少なくとも同一のキー値を備えたデータが異なる分割ファイル中に分散する「泣き別れ」が生じることはない。
【００３４】
例えば、図４に示すように、第１の分割処理部21の割当データ51の最後尾には仕入先コードが「003」のデータが含まれているが、第２の分割処理部22の判定済データ62はすべて仕入先コード「003」のデータで占められており、これらが第１の分割処理部21の判定不要データ71の最後尾に仮想的に結合されるため、仕入先コード「003」のデータが第１の分割ファイル81内に集約されることとなる。
【００３５】
各分割処理部においては逐次的なブレイク判定処理が実行されることになるが、第１の分割処理部21〜第７の分割処理部27には異なるCPUコアが割り当てられているため、並列処理による効率化が実現される。
【００３６】
しかも、ブレイク判定処理は最初のブレイクポイントαが発見されるまでのことであり、それ以降は判定不要データとしてブレイク判定処理が施されることなく、一括して判定不要データ記憶領域15に出力されるため、すべてのデータを１件毎にチェックする場合に比べて処理の大幅な簡素化が期待できる。
【００３７】
各分割ファイル81〜87については、上記のように同種データの泣き別れが生じていないことが保証されているため、各分割ファイル中のデータについて集計処理を行う場合に、それぞれ別個のCPUコアが割り当てられた第１の集計処理部31〜第７の集計処理部37による並列処理が可能となる。
【００３８】
上記において元データ46を７つのファイルに分割したのはあくまでも一例であり、対応する数の分割処理部（CPUコア）を用意することにより、任意の数のファイルに分割できることは当然である。
【００３９】
なお、本願発明は上記のようにマルチコアCPUを備えたコンピュータ32による並列処理を必須要件とするものではなく、シングルコアCPUのコンピュータを用いて元データ46の各グループについて順番に処理を実行する方式を採用することもできる。
【００４０】
上記においては、キーブレイク処理の前処理としてファイルを複数に分割するケースを例示したが、このファイル分割システム10は他の用途にも応用可能である。
その一例として、大容量のテキストファイル中から、特定の文字列が含まれる行を行単位で出力する処理を複数のCPUコアを用いて並列的に実行するに先立ち、当該テキストファイルを複数ファイルに分割するケースが該当する。
【００４１】
すなわち、「…あいうえお\nかきくけこ\nさしすせそ\n…」というテキストファイルに対して「きく」というキーワードが与えられた際に、「かきくけこ」の行を正しく抽出するためには、元ファイルが改行文字（\n）の直後で分割がなされる必要がある。仮に「あいうえお\nかき」と「くけこ\nさしすせそ」に分割されてしまうと「きく」が泣き別れとなり、検索対象として認識されなくなる。
【００４２】
このような場面において、元データの分割処理にこのファイル分割システム10を適用すれば、以下の通り、元データを改行文字の直後の位置で正確に分割することが可能となる。
【００４３】
(1) データ割当処理部12が、元データを文字数ベースで７つのグループに区分し、第１の分割処理部21〜第７の分割処理部27に割り当てる。
【００４４】
(2) これに対し、第２の分割処理部22〜第７の分割処理部27は、自己の割当データに対して、先頭の文字から順に改行文字に該当するか否かを判定していき、最初の改行文字を発見した時点で、当該改行文字を含む判定済の文字列を判定済データとして判定済データ記憶領域14にファイル出力する。ここでは、改行文字の直後が「分割可能ポイント」に相当することとなる。
【００４５】
(3) 同時に、第２の分割処理部22〜第７の分割処理部27は、最初の改行文字より後の文字列については、判定不要データとして判定不要データ記憶領域15に一括してファイル出力する。
【００４６】
(4) 第１の分割処理部21は、自己の割当データについて上記の改行文字探索処理を行うことなく、そのまま判定不要データ記憶領域15にファイル出力する。
【００４７】
(5) 以上の結果、判定不要データ記憶領域15には７つの判定不要データがファイルとして格納されると共に、判定済データ記憶領域14には６つの判定済データがファイルとして格納されることとなる。
【００４８】
(6) この後、７つの検索処理部（後続処理部）がコンピュータ上に起動され、「きく」の文字列を含む行を行単位で抽出する処理を並列的に実行する。
【００４９】
(7) この際、第１の検索処理部は、第１の分割処理部21に係る判定不要データと第２の分割処理部22に係る判定済データを仮想的にマージし、一つのファイルとして取り扱う。
【００５０】
(8) この判定済データは、最後の文字列が改行文字で終わっているため、これを上記の判定不要データの最後尾に連結すれば、第１の分割ファイル中に泣き別れが生じることはない。
【００５１】
(9) 以下同様に、第２の検索処理部〜第６の検索処理部は、第２の判定不要データ〜第６の判定不要データと、第２の判定済データ〜第６の判定済データとを、それぞれ仮想的にマージした上で、必要な検索処理を実行する。
【００５２】
(10)これに対し、第７の検索処理部は、第７の判定済データが存在しないため、第７の判定不要データのみを検索対象として取り扱う。
【図面の簡単な説明】
【００５３】
【図１】この発明に係るファイル分割システムの機能構成を示すブロック図である。
【図２】このシステムにおける処理手順を示すフローチャートである。
【図３】このシステムにおける処理手順を示す概念図である。
【図４】ブレイク判定処理の具体例を示す説明図である。
【図５】キーブレイク処理の概要を示す説明図である。
【図６】これまでのファイル分割によって生じる問題点を示す説明図である。
【符号の説明】
【００５４】
10      ファイル分割システム
12      データ割当処理部
13      元データ記憶領域
14      判定済データ記憶領域
15      判定不要データ記憶領域
16      集計結果記憶領域
21      第１の分割処理部
22      第２の分割処理部
23      第３の分割処理部
24      第４の分割処理部
25      第５の分割処理部
26      第６の分割処理部
27      第７の分割処理部
31      第１の集計処理部
32      第２の集計処理部
33      第３の集計処理部
34      第４の集計処理部
35      第５の集計処理部
36      第６の集計処理部
37      第７の集計処理部
40      コンピュータ
42      補助記憶装置
46      元データ
51〜57  割当データ
62〜67  判定済データ
71〜77  判定不要データ
81〜87  分割ファイル
α      最初のブレイクポイント
【図１】
0006355514.tif 000002
【図２】
0006355514.tif 000003
【図３】
0006355514.tif 000004
【図４】
0006355514.tif 000005
【図５】
0006355514.tif 000006
【図６】
0006355514.tif 000007