(57)【特許請求の範囲】
【請求項１】
作業メモリ空間を提供するメモリデバイスと、
オーバーフローストレージ空間を提供するストレージデバイスと、
複数のデータユニットを処理して結果情報を生成するように構成された少なくとも１つのプロセッサとを備えるコンピューティングシステムであって、前記処理が、
前記複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行することであって、前記データ操作が、前記作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットの少なくとも１つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第１のセットの少なくとも１つのデータ構造内の情報を修正し、前記値が検出されなかった場合に、前記第１のセットの少なくとも１つのデータ構造に情報を追加することを含むものであること、
前記作業メモリ空間に対するオーバーフローが起きた後で、情報を前記オーバーフローストレージ空間に記憶して、前記作業メモリ空間の少なくとも一部を解放し、前記複数のデータユニットからのデータユニットの第２のサブセットの各データユニットに対して前記データ操作を実行することであって、前記データ操作が、前記作業メモリ空間に記憶された１又は２以上のデータ構造の第２のセットの少なくとも１つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第２のセットの少なくとも１つのデータ構造内の情報を修正することを含むものであること、並びに、
前記第１及び第２のセットを含む、１又は２以上のデータ構造の複数のセットを結合して前記結果情報を生成することを含む、前記コンピューティングシステム。
【請求項２】
前記作業メモリ空間に対するオーバーフローが、１又は２以上のデータ構造の前記第１のセットの全体の大きさが所定の閾値以上である場合に起きている、請求項１に記載のコンピューティングシステム。
【請求項３】
前記処理がさらに、前記オーバーフローが起きた後、且つ前記データユニットの第２のサブセットの各データユニットについて検索を実行する前に、１又は２以上のデータ構造の前記第１のセットを前記オーバーフローストレージ空間に記憶し、１又は２以上のデータ構造の前記第１のセットを前記作業メモリ空間から削除することを含む、請求項１に記載のコンピューティングシステム。
【請求項４】
１又は２以上のデータ構造の複数のセットを結合することが、前記第１のセットからの少なくとも１つのデータ構造を前記第２のセットからの少なくとも１つのデータ構造とマージすることを含む、請求項１に記載のコンピューティングシステム。
【請求項５】
前記第１のセットからの少なくとも１つのデータ構造を前記第２のセットからの少なくとも１つのデータ構造とマージすることが、１又は２以上のデータ構造の前記第１のセットからの前記データ構造内の第１のキーを、１又は２以上のデータ構造の前記第２のセットからの前記データ構造内の第２のキーと一致させ、前記第１のキーに関連する値と前記第２のキーに関連する値とに対して集約操作を実行することを含む、請求項４に記載のコンピューティングシステム。
【請求項６】
前記処理がさらに、オーバーフローが起きた後、且つ前記データユニットの第２のサブセットの各データユニットについて検索を実行する前に、前記複数のデータユニットからのデータユニットの第３のサブセットの各データユニットに対して、前記作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットの少なくとも１つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第１のセットの前記少なくとも１つのデータ構造内の情報を修正することを含む、請求項１に記載のコンピューティングシステム。
【請求項７】
前記データユニットの第２のサブセットが、前記データユニットの第３のサブセットの前記データユニットのサブセットである、請求項６に記載のコンピューティングシステム。
【請求項８】
前記情報を修正することが、前記作業メモリ空間内の位置に記憶された値を、前記作業メモリ空間内の同じ位置に記憶された異なる値で上書きするインプレースメモリ操作を実行することを含む、請求項１に記載のコンピューティングシステム。
【請求項９】
前記処理が、データソースから前記複数のデータユニットを生成することを更に含み、各データユニットが、前記データソースのフィールドの識別子と、前記データソースのレコード内の前記フィールドに現れる値とを含む、請求項１に記載のコンピューティングシステム。
【請求項１０】
１又は２以上のデータ構造の前記第１のセットが、キーと値のペアのエントリの、複数の連想配列を含む、請求項９に記載のコンピューティングシステム。
【請求項１１】
前記作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットの少なくとも１つのデータ構造内でデータユニット内の値を検索することが、キーと値のペアのエントリの前記連想配列のうちの選択された連想配列内のエントリのキーとして前記値を検索することを含む、請求項１０に記載のコンピューティングシステム。
【請求項１２】
キーと値のペアのエントリの連想配列のうちの選択された連想配列が、前記データユニット内の前記識別子に対応する、請求項１１に記載のコンピューティングシステム。
【請求項１３】
前記第１のセットの少なくとも１つのデータ構造内の情報を修正することが、検出されたキーと値のペアのエントリの値をインクリメントすることを含む、請求項１１に記載のコンピューティングシステム。
【請求項１４】
前記第１のセットの少なくとも１つのデータ構造に情報を追加することが、データユニット内の値をキーとして有し、１のカウントを値として有する新しいキーと値のペアのエントリを、前記選択された配列に追加することを含む、請求項１１に記載のコンピューティングシステム。
【請求項１５】
前記メモリデバイスが揮発性メモリデバイスを含み、前記ストレージデバイスが不揮発性ストレージデバイスを含む、請求項１に記載のコンピューティングシステム。
【請求項１６】
複数のデータユニットを処理して結果情報を生成する方法であって、
前記複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行するステップであって、前記データ操作が、メモリデバイスの作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットの少なくとも１つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第１のセットの少なくとも１つのデータ構造内の情報を修正し、前記値が検出されなかった場合に、前記第１のセットの少なくとも１つのデータ構造に情報を追加することを含むものであるステップと、
前記作業メモリ空間に対するオーバーフローが起きた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶して、前記作業メモリ空間の少なくとも一部を解放し、前記複数のデータユニットからのデータユニットの第２のサブセットの各データユニットに対して前記データ操作を実行するステップであって、前記データ操作が、前記作業メモリ空間に記憶された１又は２以上のデータ構造の第２のセットの少なくとも１つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第２のセットの少なくとも１つのデータ構造内の情報を修正することを含むものであるステップと、
前記第１及び第２のセットを含む、１又は２以上のデータ構造の複数のセットを結合して前記結果情報を生成するステップとを含む、前記方法。
【請求項１７】
複数のデータユニットを処理して結果情報を生成するための、コンピュータ可読媒体に記憶されたソフトウェアであって、
前記複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行することであって、前記データ操作が、メモリデバイスの作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットの少なくとも１つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第１のセットの少なくとも１つのデータ構造内の情報を修正し、前記値が検出されなかった場合に、前記第１のセットの少なくとも１つのデータ構造に情報を追加することを含むものであること、
前記作業メモリ空間に対するオーバーフローが起きた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶して前記作業メモリ空間の少なくとも一部を解放し、前記複数のデータユニットからのデータユニットの第２のサブセットの各データユニットに対して前記データ操作を実行することであって、前記データ操作が、前記作業メモリ空間に記憶された１又は２以上のデータ構造の第２のセットの少なくとも１つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第２のセットの少なくとも１つのデータ構造内の情報を修正することを含むものであること、並びに、
前記第１及び第２のセットを含む、１又は２以上のデータ構造の複数のセットを結合して前記結果情報を生成することをコンピューティングシステムに実行させるための命令を含む、前記ソフトウェア。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１３年５月１７日に出願された米国特許出願第６１／８２４，６８６号明細書に対する優先権を主張するものである。
【０００２】
本記述は、データ操作のためにメモリ及びストレージ空間を管理することに関する。
【背景技術】
【０００３】
いくつかのコンピューティングシステムは、オペレーティングシステム内で実行されるプログラムによって使用されるメモリデバイスを管理するために、仮想メモリ方式を使用する。例えば、オペレーティングシステムは、より大きい仮想アドレス空間と、より小さい、メモリデバイス（「メインメモリ」とも呼ばれる）の実アドレス空間との間の変換を扱うことができ、メモリデバイスよりも大きい記憶容量を有するバッキングストアとしての働きをするストレージデバイスに対して、メモリのページがスワップイン及びスワップアウトされる。したがって、プログラムからアクセス可能な作業メモリの量は、メインメモリのサイズによって制限されない。仮想メモリ方式では、プログラムの作業メモリ内のアドレスのページがメモリデバイスとバッキングストアとの間で行き来することは、一般に、この作業メモリを使用しているプログラムにとってはトランスペアレントである。いくつかのコンピューティングシステムは、中央処理装置（ＣＰＵ）に内蔵されたメモリ管理ユニット（ＭＭＵ）など、仮想メモリに対するハードウェアサポートを有することができる。いくつかのコンピューティングシステムはまた、１又は２以上のレベルを有するキャッシングシステムを使用して、限られた数のメインメモリアドレスのコピーを相対的により速いキャッシュメモリ内に記憶し、これらのメモリアドレスの繰り返されるアクセスを加速させることができる。
【発明の概要】
【課題を解決するための手段】
【０００４】
一態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供するメモリデバイスと、オーバーフローストレージ空間を提供するストレージデバイスと、複数のデータユニットを処理して結果情報を生成するように構成された少なくとも１つのプロセッサとを備える。処理は、複数のデータユニットからのデータユニットの第１のサブセット（first subset of data units）の各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶すること；作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第２のサブセット（second subset of data units）の各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された１又は２以上のデータ構造の第２のセットに記憶すること；並びに、第１及び第２のセットを含めた１又は２以上のデータ構造の複数のセットを結合して結果情報を生成することを含む。データ操作の結果に関連する情報を１又は２以上のデータ構造のセットに記憶することは、少なくとも１つのデータユニットに対して、１又は２以上のデータ構造のセットに使用される作業メモリ空間の量を増加させずに１又は２以上のデータ構造のセット中の情報を変更する操作を実行することを含む。
【０００５】
態様は、以下の特徴の１又は２以上を含み得る。
【０００６】
作業メモリ空間に対するオーバーフロー条件は、１又は２以上のデータ構造の第１のセットに使用される作業メモリ空間の量が所定の閾値以上である場合に、満たされる。
【０００７】
処理はさらに、オーバーフロー条件が満たされた後、且つデータユニットの第２のサブセットの各データユニットに対してデータ操作を実行する前に、１又は２以上のデータ構造の第１のセットをオーバーフローストレージ空間に記憶し、１又は２以上のデータ構造の第１のセットを作業メモリ空間から削除することを含む。
【０００８】
１又は２以上のデータ構造の複数のセットを結合することは、第１のセットからの少なくとも１つのデータ構造を、第２のセットからの少なくとも１つのデータ構造とマージすることを含む。
【０００９】
第１のセットからの少なくとも１つのデータ構造を第２のセットからの少なくとも１つのデータ構造とマージすることは、１又は２以上のデータ構造の第１のセットからのデータ構造内の第１のキーを、１又は２以上のデータ構造の第２のセットからのデータ構造内の第２のキーと一致させ、第１のキーに関連する値と第２のキーに関連する値とに対して集約操作を実行することを含む。
【００１０】
処理はさらに、オーバーフロー条件が満たされた後、且つデータユニットの第２のサブセットの各データユニットに対してデータ操作を実行する前に、複数のデータユニットからのデータユニットの第３のサブセット（third subset of data units）の各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶することを含む。
【００１１】
データユニットの第２のサブセットは、データユニットの第３のサブセットのデータユニットのサブセットである。
【００１２】
処理はさらに、データユニットの第３のサブセットの第１のデータユニットに対してデータ操作を実行した後で、データ操作の結果に関連する情報を（１）作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶するか、それとも（２）オーバーフローストレージ空間に記憶するかを決定することを含む。
【００１３】
１又は２以上のデータ構造のセット内の情報を変更する操作は、作業メモリ空間内の位置に記憶された値を、作業メモリ空間内の同じ位置に記憶された異なる値で上書きするインプレースメモリ操作を含む。
【００１４】
データ操作の結果に関連する情報をオーバーフローストレージ空間に記憶することは、第１のデータユニットの少なくとも一部の内容をオーバーフローストレージ空間に記憶することを含む。
【００１５】
第１のデータユニットに対してデータ操作を実行することは、第１のデータユニット内のキーを１又は２以上のデータ構造の第１のセット内の１又は２以上のキーと比較することを含み、比較の結果が一致する場合は、データ操作の結果に関連する情報は、作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶され、比較の結果が一致しない場合は、データ操作の結果に関連する情報はオーバーフローストレージ空間に記憶される。
【００１６】
処理はさらに、複数のデータユニットをデータソースから生成することを含み、各データユニットは、データソースのフィールドの識別子と、データソースのレコード内でこのフィールドに現れる値とを含む。
【００１７】
データ操作は、複数のデータユニットに含まれる値を、情報の集約元となる一致するデータユニットを選択するためのキーとして使用して、これらのデータユニットからの情報を集約することを含む。
【００１８】
メモリデバイスは、揮発性メモリデバイスを含む。
【００１９】
ストレージデバイスは、不揮発性ストレージデバイスを含む。
【００２０】
別の態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供する手段と、オーバーフローストレージ空間を提供する手段と、複数のデータユニットを処理して結果情報を生成する手段とを備える。処理は、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶すること；作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第２のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された１又は２以上のデータ構造の第２のセットに記憶すること；並びに、第１及び第２のセットを含めた１又は２以上のデータ構造の複数のセットを結合して結果情報を生成することを含む。データ操作の結果に関連する情報を１又は２以上のデータ構造のセットに記憶することは、少なくとも１つのデータユニットに対して、１又は２以上のデータ構造のセットに使用される作業メモリ空間の量を増加させずに１又は２以上のデータ構造のセット内の情報を変更する操作を実行することを含む。
【００２１】
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成する方法は、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶するステップと；作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第２のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された１又は２以上のデータ構造の第２のセットに記憶するステップと；第１及び第２のセットを含めた１又は２以上のデータ構造の複数のセットを結合して結果情報を生成するステップとを含む。データ操作の結果に関連する情報を１又は２以上のデータ構造のセットに記憶するステップは、少なくとも１つのデータユニットに対して、１又は２以上のデータ構造のセットに使用される作業メモリ空間の量を増加させずに１又は２以上のデータ構造のセット内の情報を変更する操作を実行するステップを含む。
【００２２】
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成するためのソフトウェアが、コンピュータ可読媒体に記憶される。ソフトウェアは、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶すること；作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第２のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された１又は２以上のデータ構造の第２のセットに記憶すること；並びに、第１及び第２のセットを含めた１又は２以上のデータ構造の複数のセットを結合して結果情報を生成すること、をコンピューティングシステムに行わせるための命令を含む。データ操作の結果に関連する情報を１又は２以上のデータ構造のセットに記憶することは、少なくとも１つのデータユニットに対して、１又は２以上のデータ構造のセットに使用される作業メモリ空間の量を増加させずに１又は２以上のデータ構造のセット内の情報を変更する操作を実行することを含む。
【００２３】
別の態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供するメモリデバイスと、オーバーフローストレージ空間を提供するストレージデバイスと、複数のデータユニットを処理して結果情報を生成するように構成された少なくとも１つのプロセッサとを備える。処理は、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶すること；及び、作業メモリ空間に対するオーバーフロー条件が満たされた後で、複数のデータユニットからのデータユニットの第２のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を（１）作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶するか、それとも（２）オーバーフローストレージ空間に記憶するかを決定することを含む。
【００２４】
態様は、以下の特徴の１又は２以上を含み得る。
【００２５】
作業メモリ空間に対するオーバーフロー条件は、１又は２以上のデータ構造の第１のセットに使用される作業メモリ空間の量が所定の閾値以上である場合に、満たされる。
【００２６】
データ操作は、各データユニット内のキー値に少なくとも部分的に基づき、決定することは、第１のセットのデータ構造の少なくとも１つの中で少なくとも１つのキー値を検索して、（１）作業メモリ空間内の１又は２以上のデータ構造の第１のセットのデータ構造内のこのキー値に関連する情報を更新するか、それとも（２）このキー値に関連する情報をオーバーフローストレージ空間に記憶するかを決定することを含む。
【００２７】
データ操作は、作業メモリ空間内の位置に記憶された値を、作業メモリ空間内の同じ位置に記憶された異なる値で上書きするインプレースメモリ操作を含む。
【００２８】
データ操作の結果に関連する情報をオーバーフローストレージ空間に記憶することは、データ操作が実行されるデータユニットの少なくとも一部の内容をオーバーフローストレージ空間に記憶することを含む。
【００２９】
第１のデータユニットに対してデータ操作を実行することは、第１のデータユニット内のキーを１又は２以上のデータ構造の第１のセット内の１又は２以上のキーと比較することを含み、比較の結果が一致する場合は、データ操作の結果に関連する情報は、作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶され、比較の結果が一致しない場合は、データ操作の結果に関連する情報はオーバーフローストレージ空間に記憶される。
【００３０】
処理はさらに、複数のデータユニットをデータソースから生成することを含み、各データユニットは、データソースのフィールドの識別子と、データソースのレコード内でこのフィールドに現れる値とを含む。
【００３１】
データ操作は、複数のデータユニットに含まれる値を、情報の集約元となる一致するデータユニットを選択するためのキーとして使用して、これらのデータユニットからの情報を集約することを含む。
【００３２】
複数のデータユニットを生成することは、データソースの少なくとも第１のフィールドと、データソースの少なくとも第２のフィールドとについてデータユニットを生成することを含む。
【００３３】
第２のサブセットの各データユニットに対してデータ操作を実行することは、第１のデータユニットに対して実行されたデータ操作の結果に関連する情報を１又は２以上のデータ構造の第１のセットに記憶し、第２のデータユニットに対して実行されたデータ操作の結果に関連する情報をオーバーフローストレージ空間に記憶することを含む。
【００３４】
第１のデータユニット及び第２のデータユニットは、データソースの同じフィールドについての、それぞれの識別子を含む。
【００３５】
メモリデバイスは、揮発性メモリデバイスを含む。
【００３６】
ストレージデバイスは、不揮発性ストレージデバイスを含む。
【００３７】
別の態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供する手段と、オーバーフローストレージ空間を提供する手段と、複数のデータユニットを処理して結果情報を生成する手段とを備える。処理は、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶すること；及び、作業メモリ空間に対するオーバーフロー条件が満たされた後で、複数のデータユニットからのデータユニットの第２のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を（１）作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶するか、それとも（２）オーバーフローストレージ空間に記憶するかを決定することを含む。
【００３８】
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成する方法は、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶するステップと；作業メモリ空間に対するオーバーフロー条件が満たされた後で、複数のデータユニットからのデータユニットの第２のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を（１）作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶するか、それとも（２）ストレージデバイスのオーバーフローストレージ空間に記憶するかを決定するステップとを含む。
【００３９】
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成するためのソフトウェアが、コンピュータ可読媒体に記憶される。ソフトウェアは、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶すること；及び、作業メモリ空間に対するオーバーフロー条件が満たされた後で、複数のデータユニットからのデータユニットの第２のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を（１）作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶するか、それとも（２）ストレージデバイスのオーバーフローストレージ空間に記憶するかを決定すること、をコンピューティングシステムに行わせるための命令を含む。
【００４０】
別の態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供するメモリデバイスと、オーバーフローストレージ空間を提供するストレージデバイスと、複数のデータユニットを処理して結果情報を生成するように構成された少なくとも１つのプロセッサとを備える。処理は、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行することであって、データ操作が、作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットの少なくとも１つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第１のセットの少なくとも１つのデータ構造内の情報を修正し、値が見つからなかった場合に、第１のセットの少なくとも１つのデータ構造に情報を追加することを含むものであること；作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第２のサブセットの各データユニットに対してデータ操作を実行することであって、データ操作が、作業メモリ空間に記憶された１又は２以上のデータ構造の第２のセットの少なくとも１つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第２のセットの少なくとも１つのデータ構造内の情報を修正することを含むものであること；並びに、第１及び第２のセットを含めた１又は２以上のデータ構造の複数のセットを結合して結果情報を生成することを含む。
【００４１】
態様は、以下の特徴の１又は２以上を含み得る。
【００４２】
作業メモリ空間に対するオーバーフロー条件は、１又は２以上のデータ構造の第１のセットに使用される作業メモリ空間の量が所定の閾値以上である場合に、満たされる。
【００４３】
処理はさらに、オーバーフロー条件が満たされた後、且つデータユニットの第２のサブセットの各データユニットについて検索を実行する前に、１又は２以上のデータ構造の第１のセットをオーバーフローストレージ空間に記憶し、１又は２以上のデータ構造の第１のセットを作業メモリ空間から削除することを含む。
【００４４】
１又は２以上のデータ構造の複数のセットを結合することは、第１のセットからの少なくとも１つのデータ構造を、第２のセットからの少なくとも１つのデータ構造とマージすることを含む。
【００４５】
第１のセットからの少なくとも１つのデータ構造を第２のセットからの少なくとも１つのデータ構造とマージすることは、１又は２以上のデータ構造の第１のセットからのデータ構造内の第１のキーを、１又は２以上のデータ構造の第２のセットからのデータ構造内の第２のキーと一致させ、第１のキーに関連する値と第２のキーに関連する値とに対して集約操作を実行することを含む。
【００４６】
処理はさらに、オーバーフロー条件が満たされた後、且つデータユニットの第２のサブセットの各データユニットについて検索を実行する前に、複数のデータユニットからのデータユニットの第３のサブセットの各データユニットに対して、作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットの少なくとも１つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第１のセットの少なくとも１つのデータ構造内の情報を修正することを含む。
【００４７】
データユニットの第２のサブセットは、データユニットの第３のサブセットのデータユニットのサブセットである。
【００４８】
情報を修正することは、作業メモリ空間内の位置に記憶された値を、作業メモリ空間内の同じ位置に記憶された異なる値で上書きするインプレースメモリ操作を実行することを含む。
【００４９】
処理はさらに、複数のデータユニットをデータソースから生成することを含み、各データユニットは、データソースのフィールドの識別子と、データソースのレコード内でこのフィールドに現れる値とを含む。
【００５０】
１又は２以上のデータ構造の第１のセットは、キーと値のペアのエントリの、複数の連想配列を含む。
【００５１】
作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットの少なくとも１つのデータ構造内でデータユニット内の値を検索することは、キーと値のペアのエントリの連想配列のうちの選択された連想配列内のエントリのキーとして値を検索することを含む。
【００５２】
キーと値のペアのエントリの連想配列のうちの選択された連想配列は、データユニット内の識別子に対応する。
【００５３】
第１のセットの少なくとも１つのデータ構造内の情報を修正することは、見つかったキーと値のペアのエントリの値をインクリメントすることを含む。
【００５４】
第１のセットの少なくとも１つのデータ構造に情報を追加することは、データユニット内の値をキーとして有し、１のカウントを値として有する、新しいキーと値のペアのエントリを、選択されたアレイに追加することを含む。
【００５５】
メモリデバイスは、揮発性メモリデバイスを含む。
【００５６】
ストレージデバイスは、不揮発性ストレージデバイスを含む。
【００５７】
別の態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供する手段と、オーバーフローストレージ空間を提供する手段と、複数のデータユニットを処理して結果情報を生成する手段とを備える。処理は、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行することであって、データ操作が、作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットの少なくとも１つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第１のセットの少なくとも１つのデータ構造内の情報を修正し、値が見つからなかった場合に、第１のセットの少なくとも１つのデータ構造に情報を追加することを含むものであること；作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第２のサブセットの各データユニットに対してデータ操作を実行することであって、データ操作が、作業メモリ空間に記憶された１又は２以上のデータ構造の第２のセットの少なくとも１つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第２のセットの少なくとも１つのデータ構造内の情報を修正することを含むものであること；並びに、第１及び第２のセットを含めた１又は２以上のデータ構造の複数のセットを結合して結果情報を生成することを含む。
【００５８】
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成する方法は、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行するステップであって、データ操作が、メモリデバイスの作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットの少なくとも１つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第１のセットの少なくとも１つのデータ構造内の情報を修正し、値が見つからなかった場合に、第１のセットの少なくとも１つのデータ構造に情報を追加することを含むものであるステップと；作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第２のサブセットの各データユニットに対してデータ操作を実行するステップであって、データ操作が、作業メモリ空間に記憶された１又は２以上のデータ構造の第２のセットの少なくとも１つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第２のセットの少なくとも１つのデータ構造内の情報を修正することを含むものであるステップと；第１及び第２のセットを含めた１又は２以上のデータ構造の複数のセットを結合して結果情報を生成するステップとを含む。
【００５９】
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成するためのソフトウェアが、コンピュータ可読媒体に記憶される。ソフトウェアは、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行することであって、データ操作が、メモリデバイスの作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットの少なくとも１つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第１のセットの少なくとも１つのデータ構造内の情報を修正し、値が見つからなかった場合に、第１のセットの少なくとも１つのデータ構造に情報を追加することを含むものであること；作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第２のサブセットの各データユニットに対してデータ操作を実行することであって、データ操作が、作業メモリ空間に記憶された１又は２以上のデータ構造の第２のセットの少なくとも１つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第２のセットの少なくとも１つのデータ構造内の情報を修正することを含むものであること；並びに、第１及び第２のセットを含めた１又は２以上のデータ構造の複数のセットを結合して結果情報を生成すること、をコンピューティングシステムに行わせるための命令を含む。
【００６０】
別の態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供するメモリデバイスと、オーバーフローストレージ空間を提供するストレージデバイスと、複数のデータユニットを処理して結果情報を生成するように構成された少なくとも１つのプロセッサとを備える。処理は、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶すること；作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をオーバーフローストレージ空間に記憶すること；及び、複数のデータユニットの処理中にオーバーフロー処理手順を複数回繰り返すことを含み、オーバーフロー処理手順は、オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された１又は２以上のデータ構造の新しいセットを更新することを含む。
【００６１】
態様は、以下の特徴の１又は２以上を含み得る。
【００６２】
作業メモリ空間に対するオーバーフロー条件は、１又は２以上のデータ構造の第１のセットに使用される作業メモリ空間の量が所定の閾値以上である場合に、満たされる。
【００６３】
処理はさらに、オーバーフロー条件が満たされた後、且つデータユニットの第２のサブセットの各データユニットに対してデータ操作を実行する前に、１又は２以上のデータ構造の第１のセットを移動済みセット（moved set）としてオーバーフローストレージ空間に記憶し、１又は２以上のデータ構造の第１のセットを作業メモリ空間から削除することを含む。
【００６４】
オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された１又は２以上のデータ構造の新しいセットを更新することは、オーバーフローストレージ空間に記憶された１又は２以上のデータ構造の移動済みセットからの少なくとも１つのデータ構造からの情報を、作業メモリ空間に記憶された１又は２以上のデータ構造の新しいセットからの少なくとも１つのデータ構造とマージすることを含む。
【００６５】
マージすることは、１又は２以上のデータ構造の移動済みセットからのデータ構造内の第１のキーを、１又は２以上のデータ構造の新しいセットからのデータ構造内の第２のキーと一致させ、第１のキーに関連する値と第２のキーに関連する値とに対して集約操作を実行することを含む。
【００６６】
オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された１又は２以上のデータ構造の新しいセットを更新することは、オーバーフローストレージ空間に記憶されたデータユニット内の第１のキーを、１又は２以上のデータ構造の新しいセットからのデータ構造内の第２のキーと一致させ、第２のキーに関連する値をインクリメントすることを含む。
【００６７】
オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された１又は２以上のデータ構造の新しいセットを更新することは、作業メモリ空間内の位置に記憶された値を、作業メモリ空間内の同じ位置に記憶された異なる値で上書きするインプレースメモリ操作を含む。
【００６８】
処理はさらに、複数のデータユニットをデータソースから生成することを含み、各データユニットは、データソースのフィールドの識別子と、データソースのレコード内でこのフィールドに現れる値とを含む。
【００６９】
データ操作は、複数のデータユニットに含まれる値を、情報の集約元となる一致するデータユニットを選択するためのキーとして使用して、これらのデータユニットからの情報を集約することを含む。
【００７０】
１又は２以上のデータ構造の第１のセットは、キーと値のペアのエントリの、複数の連想配列を含む。
【００７１】
第１のデータユニットに対するデータ操作は、第１のデータユニット内の値をキーとして使用して、キーと値のペアのエントリの連想配列のうちの選択された連想配列内で検索することを含む。
【００７２】
キーと値のペアのエントリの連想配列のうちの選択された連想配列は、第１のデータユニット内の識別子に対応する。
【００７３】
メモリデバイスは、揮発性メモリデバイスを含む。
【００７４】
ストレージデバイスは、不揮発性ストレージデバイスを含む。
【００７５】
別の態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供する手段と、オーバーフローストレージ空間を提供する手段と、複数のデータユニットを処理して結果情報を生成する手段とを備える。処理は、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶すること；作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をオーバーフローストレージ空間に記憶すること；及び、複数のデータユニットの処理中にオーバーフロー処理手順を複数回繰り返すことを含み、オーバーフロー処理手順は、オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された１又は２以上のデータ構造の新しいセットを更新することを含む。
【００７６】
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成する方法は、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶するステップと；作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶するステップと；複数のデータユニットの処理中にオーバーフロー処理手順を複数回繰り返すステップとを含み、オーバーフロー処理手順は、オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された１又は２以上のデータ構造の新しいセットを更新することを含む。
【００７７】
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成するためのソフトウェアが、コンピュータ可読媒体に記憶される。ソフトウェアは、複数のデータユニットからのデータユニットの第１のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された１又は２以上のデータ構造の第１のセットに記憶すること；作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶すること；及び、複数のデータユニットの処理中にオーバーフロー処理手順を複数回繰り返すこと、をコンピューティングシステムに行わせるための命令を含み、オーバーフロー処理手順は、オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された１又は２以上のデータ構造の新しいセットを更新することを含む。
【発明の効果】
【００７８】
態様は、以下の利点の１又は２以上を有し得る。
【００７９】
いくつかのコンピューティングシステム（例えばいくつかのデータベース管理システム）は、作業メモリを管理するために仮想メモリのみに依拠することはせず、処理中のデータがメインメモリに記憶されるべきかそれともストレージデバイス内のオーバーフローストレージ空間に記憶されるべきかを直接制御することができる。例えば、いくつかのシステムは、プログラムに利用可能な作業メモリのサイズに明示的な限度を課し、この作業メモリ限度は、メインメモリのサイズよりも小さい（例えば、このプログラムが他のプログラムと作業メモリを共有している場合があるので）。プログラムがこの作業メモリ限度に近づいた場合、プログラムは、「ディスクにスピルする」技法を使用して、一部のデータをオーバーフローストレージ空間内に一時的に記憶し、のちに、十分な作業メモリが利用可能になった後でこのデータの処理を終了する、というオプションを有する。場合によっては、データをディスクにスピルすること、又はオペレーティングシステムに依拠してメモリページをスワップすることは、データ操作の性能に大きな影響を有する可能性がある。
【００８０】
後でより詳細に述べるデータプロファイリングなど、データ処理システムのいくつかのアプリケーションでは、大量となり得るデータ（例えば、大きいデータセット及び／又は多数のデータセット）に対してデータ操作が実行されることになっている場合、システムは、データ処理アプリケーションが妥当な性能を確実に提供できるように作業メモリ及びオーバーフローストレージ空間を効率的に管理するように構成されるべきである。作業メモリ及びオーバーフローストレージ空間を管理する手法の１つは、次の認識に基づく。すなわち、いくつかのデータ操作については、システムは、入力データを処理せずにディスクにスピルする代わりに、この入力データに対してデータ操作を少なくとも部分的に実行することができ、場合によってはこの入力データをディスクにスピルする必要性を回避することができる、という認識である。
【００８１】
例えば、いくつかのデータ操作は、キー値にそれぞれ関連付けられた入力レコードのストリームを処理し、キー値が前のキー値と一致するレコードについては、データ操作は、メモリ内のデータ構造に記憶された結果を更新する。いくつかの実施形態では、本明細書に記載のコンピューティングシステムは、「オーバーフロー処理」手順を使用して、作業メモリ限度に達した後でも、任意のキーを有する新しいレコードを処理し続けることができる。オーバーフロー処理手順の２つの具体例について述べる。両方の手順により、いくつかのレコードは、これらのレコードをスピルする必要なしに、一致させて結果データ構造の更新のために使用することができる。一致させたレコードについては、より多くのメモリを使用することなく結果データ構造をインプレースで更新することができる。一方のオーバーフロー処理手順は、結果データ構造のみをオーバーフローストレージに移動して、全ての新しいレコード（移動されたデータ構造とマージされることになる新しい結果データ構造内の）の処理を継続することによって、オーバーフローに対処し、他方のオーバーフロー処理手順は、一致しないレコードのみをオーバーフローストレージに移動して、全ての新しいレコード（同じ結果データ構造内）の処理を継続することによって、オーバーフローに対処する。
【００８２】
本明細書に記載の技法を使用して実行できるデータ操作の一例は、データセットをプロファイリングするために大きいデータセット内のデータ値のセンサス（データセット内に現れる値と、各値のカウントとを含む）を生成するのに使用される、センサス操作である。データプロファイリング操作は、センサス操作など、データプロファイリング手順の実行中に処理されているデータに対して実行される任意の操作を含み得る。センサス操作はまた、経時的なデータの特性を追跡するデータ品質システムにおいてなど、他のコンテキストで処理されているデータにも実行され得る。これらの技法を適用できる他のデータ操作は、後でより詳細に述べるように、不完全な結果のマージを可能にするデータ操作、及び、少なくともいくつかのケースをメモリ内のデータ構造内でインプレースに扱うことができるデータ操作を含む。これらの技法を使用して、本明細書に記載の正規化済みレコードなどのデータユニット、又は、データストリーム内のデータの個々の部分を表す他の任意のデータユニットを、処理することができる。
【００８３】
本発明の他の特徴及び利点は、後続の記述、及び特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００８４】
【図１】データ処理システムのブロック図である。
【図２】データプロファイリング手順の概略図である。
【図３】センサス生成手順の概略図である。
【図４Ａ−４Ｃ】センサス生成手順のフローチャートである。
【図５】センサス生成手順の概略図である。
【図６】センサス生成手順のフローチャートである。
【発明を実施するための形態】
【００８５】
図１に、作業メモリ及びオーバーフローストレージ空間を管理する技法をその中で使用できるデータ処理システム１００の例を示す。データ処理システム１００はデータソース１０２を含み、データソース１０２は、ストレージデバイスや、オンラインデータストリームへの接続など、１又は２以上のデータソースを含むことができ、これらのデータソースの各々は、様々なフォーマットのいずれか（例えば、データベーステーブル、スプレッドシートファイル、フラットテキストファイル、又は、メインフレームによって使用されるネイティブフォーマット）でデータを記憶又は提供することができる。データ処理システム１００はコンピューティングシステム１０４を含み、コンピューティングシステム１０４は、少なくとも１つのプロセッサ１０６と、プロセッサ１０６に接続された少なくとも１つのメモリデバイス１０８（例えば、ダイナミックランダムアクセスメモリなどの揮発性メモリ）と、プロセッサ１０６に接続された少なくとも１つのストレージデバイス１１０（例えば、磁気ハードディスクドライブなどの不揮発性ストレージ）とを備える。コンピューティングシステム１００がデータソース１０２からのデータを処理した後、この処理の結果がユーザインタフェース（ＵＩ）１１２に提供されてもよい。これは、データソース１０２内で優勢な状態について、又は、データソース１０２からのデータを受け取って処理することになる宛先において優勢となるであろう状態についてユーザに自動的に視覚的に示すことを含む。
【００８６】
データ処理システム１００の種々のコンポーネントの様々な構成が可能である。プロセッサ１０６は、ＵＮＩＸオペレーティングシステムのバージョンなどの適切なオペレーティングシステムによって例えば制御される実行環境をホストするように構成されてよい。いくつかの実施形態では、コンピューティングシステム１０４は、複数の中央処理装置（ＣＰＵ）又はプロセッサコアの構成を含む、複数ノード並列コンピューティング環境の一部であってよく、この構成は、ローカルであるか（例えば、対称型マルチプロセッシング（ＳＭＰ）コンピュータなどのマルチプロセッサシステム）又はローカルに分散され（例えば、クラスタ若しくは超並列処理（ＭＰＰ）システムとして接続された、複数のプロセッサ）、或いは、リモートであるか又はリモートに分散され（例えば、ローカルエリアネットワーク（ＬＡＮ）及び／若しくはワイドエリアネットワーク（ＷＡＮ）を介して接続された複数のプロセッサ）、或いはこれらの任意の組合せである。データソース１０２を提供するストレージデバイスは、コンピューティングシステム１０４に対してローカルである場合があり、例えば、コンピューティングシステム１０４に接続されたストレージ媒体（ストレージデバイス１１０を含む）に記憶され、又は、コンピューティングシステム１０４に対してリモートである場合があり、例えば、（例えば、クラウドコンピューティングインフラストラクチャによって提供される）リモート接続を介してコンピューティングシステム１０４と通信するリモートシステム（例えばメインフレーム）上でホストされる。
【００８７】
いくつかの実施形態では、コンピューティングシステム１０４は、ノード間の有向リンク（作業要素（すなわちデータ）のフローを表す）によって接続されたノード（データ処理コンポーネント又はデータセットを表す）を含むデータフローグラフとして、アプリケーションを実行するように構成される。例えば、このような環境は、参照により本明細書に組み込まれる、“Managing Parameters for Graph-Based Applications”という名称の米国特許出願公開第２００７／００１１６６８号明細書に、より詳細に記載されている。このようなグラフベースの計算を実行するためのシステムは、参照により本明細書に組み込まれる、“EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS”という名称の米国特許第５，９６６，０７２号明細書に記載されている。このシステムに従って作成されたデータフローグラフは、プロセス間で情報を移動するため、及びプロセスの実行順序を定義するために、グラフコンポーネントによって表される個々のプロセスに対して情報を出し入れする方法を提供する。このシステムは、任意の利用可能な方法からプロセス間通信方法を選ぶアルゴリズムを含む（例えば、グラフのリンクに従った通信パスは、ＴＣＰ／ＩＰ又はＵＮＩＸドメインソケットを使用するか、又は共有メモリを使用して、プロセス間でデータを渡すことができる）。
【００８８】
コンピューティングシステム１０４は、種々の型のデータベースシステムを含めた、データソース１０２を具現化することのできる様々なタイプのシステムから、データを受け取ることができる。データは、それぞれのフィールド（「属性」又は「列」とも呼ばれる）に対する値を有するレコードの集合を表すデータセットとして編成されたものであってよく、値は、場合によってはヌル値を含む。データソースからのデータを最初に読み取るとき、コンピューティングシステム１０４は通常、このデータソース内のレコードに関する何らかの初期フォーマット情報で起動する。状況によっては、データソースのレコード構造は、最初はわかっていないことがあり、その代わり、データソース又はデータの分析後に決定されることがある。レコードに関する初期情報は、例えば、異なる値を表すビットの数、レコード内のフィールドの順序、及び、ビットによって表される値のタイプ（例えば、ストリング、符号付き／符号なし整数）を含む可能性がある。
【００８９】
データ処理システム１００がデータソース１０２内のデータに対して実行できる処理のタイプの一例は、データプロファイリングである。記憶されたデータセットは、様々な特性が事前にわかっていないデータを含む場合がある。例えば、データセットの値の範囲若しくは代表的な値、データセット内の種々のフィールド間の関係、又は種々のフィールド内の値の間の機能的依存性が、わかっていない場合がある。データプロファイリングは、このような特性を決定するために、関係する可能性のある任意の数のデータセットを調べることを含むことができる。コンピューティングシステム１０４はまた、データソース１０２内のデータをクレンジングすることや、データソース１０２に記憶されたデータセットについてのメタデータを管理することなど、様々なタスクを実行する場合がある。コンピューティングシステム１０４がアプリケーションをデータフローグラフとして実行するように構成された実施形態では、データプロファイリングは、例えば、データフローグラフ内のプロファイラコンポーネントノードによって実行されてよく、このプロファイラコンポーネントノードは、データフローリンクによって入力データセットに接続される入力ポートと、データフローリンクによって（データプロファイリングの結果を使用してタスクを実行するように構成された）ダウンストリームコンポーネントに接続される出力ポートとを有する。
【００９０】
データプロファイリングを実行するとき、コンピューティングシステム１０４は、データソース１０２からのデータを読み取り、プロファイリング要約情報を記憶する。プロファイリング要約情報を使用して様々なタイプの分析を実行し、種々のデータセット、及び種々のデータセット内の種々のフィールドを、特徴付けることができる。いくつかの実施形態では、プロファイリング要約情報は、特定のフィールド（例えば、選択されたデータセットの選択されたフィールド、又は全てのデータセットの全てのフィールド）内に現れる値のセンサスを含む。センサスは、フィールド内の異なる値の全てをリストし、異なる各値が現れる回数を定量化する。いくつかの実施形態では、センサスデータは、単一のデータ構造（フィールドで索引付けされていてもよい）に記憶され、他の実施形態では、センサスデータは、複数のデータ構造、例えば各フィールドにつき１つのデータ構造に記憶される。
【００９１】
プロファイリングされている特定のフィールドについてのセンサスデータは、エントリのリストとして編成されてよく、各エントリは、フィールドの識別子と、フィールド内に現れる値と、その値がそのフィールド内に現れるレコードの数のカウントとを含む。異なる値ごとにエントリがあり、したがって、あるエントリの各値は、他のエントリの値とは異なり、エントリの数は、フィールド内に現れる異なる値の数に等しい。フィールドの識別子は、プロファイリングされているフィールドを一意に識別する任意の値とすることができる。例えば、プロファイリングされているフィールドは、１からプロファイリング対象フィールド数までの範囲の整数索引を各フィールドに割り当てることによって、列挙されてよい。このような索引は、センサスデータ構造内にコンパクトに記憶することができる。異なるフィールドについてのセンサスデータが別々のデータ構造に記憶される場合でも、そのフィールドに対する特定のフィールド識別子をデータ構造の各エントリ内に含めることは、（例えば、処理モジュールにストリーミングされる種々のデータ構造からのエントリを区別するために）なお有用であろう。別法として、いくつかの実施形態では、異なるフィールドについてのセンサスデータが別々のデータ構造に記憶される場合、フィールドは、そのデータ構造については１度だけ記憶されればよく、各エントリは、このフィールドに暗黙的に関連付けられ、値及びカウントのみを含む。
【００９２】
図２に、コンピューティングシステム１０４上で実行されるプログラムによって実行されるセンサスベースのデータプロファイリング手順の例を示す。このプログラムは、正規化済みレコードのストリーム２０８を生成するための正規化モジュール２００と、正規化済みレコードのストリーム２０８を処理してセンサスファイル２１０にするためのセンサス生成モジュール２０２と、センサスファイル２１０を分析してプロファイル結果を計算するためのセンサス処理モジュール２０４とを備える。正規化モジュール２００は、テーブル２０６など、プロファイリングされるべき１又は２以上のデータセットを読み取る。テーブル２０６は、FIELD 1、FIELD 2、及びFIELD 3と名付けられた３つのフィールドを有し、テーブル２０６内の最初の少数の（最初の３つの行の）データレコードが、３つのフィールドの各々についてのそれぞれの値と共に示されている。正規化モジュール２００は、特定のデータレコードを一連の正規化済みレコードに分解することによって正規化済みレコードを生成し、これらの正規化済みレコードはそれぞれ、フィールド索引及びデータ値を有する。フィールド索引は、特定のフィールドを一意に（且つ効率的に）識別するためにそのフィールドに割り当てられた索引値であり（例えば、１＝FIELD 1、２＝FIELD 2、３＝FIELD 3）、データ値は、そのフィールドのデータレコードに含まれる対応する値である。この例では、テーブル２０６内の第１のデータレコードは、３つのそれぞれの正規化済みレコード内の、以下の（フィールド索引，データ値）ペアを生成することになる。すなわち、（１，Ａ）、（２，Ｍ）、（３，Ｘ）である。センサス生成モジュール２０２は、ストリーム２０８内の正規化済みレコードからのデータ値を集約して、センサスファイル２１０を生成する。（図２では、センサスファイル２１０のエントリ内に示される値は、テーブル２０６内の最初の３つのデータレコードに対応し、これは、テーブル２０６内の追加のデータレコードからの正規化済みレコードがセンサス生成モジュール２０２によって処理されるにつれて更新されることになる。）
【００９３】
特定のデータセットについて、正規化済みレコードは任意の順序でストリーム２０８に挿入されてよい。この例では、ストリーム２０８は、データレコードがテーブル２０６内に出現するのに伴って、特定のデータレコードの正規化済みレコードの全てを含み、それに続いて次のデータレコードの正規化済みレコードの全てを含む。別法として、テーブル２０６は、フィールドごとに処理されてもよく、したがって、ストリームは、フィールドがテーブル２０６内に出現するのに伴って、特定のフィールドの正規化済みレコードの全てを含み、それに続いて次のフィールドの正規化済みレコードの全てを含む。より高次元のデータセットもまたこのようにして正規化されてよく、正規化済みレコードは、例えば、データセットを読み取るために又は結果的なストリームからセンサスを生成するために最も効率的となる順序に基づいて、出力ストリームに追加される。正規化済みレコードのストリーム２０８は、全ての正規化済みレコードが生成された後で、ダウンストリームセンサス生成モジュール２０２によって処理されるようにファイルに書き込まれてもよく、又は、正規化済みレコードのストリーム２０８は、（結果としてもたらされるパイプライン並列性を利用するために）生成されるにつれてダウンストリームセンサス生成モジュール２０２に提供されてもよい。
【００９４】
センサス生成モジュール２０２は、（例えば、ストリーム終了レコードによって示されるように）ストリーム２０８の終わりに達するまで、正規化済みレコードを処理する。モジュール２０２は、「センサスマッチング操作」と呼ばれる、あるタイプのセンサス操作を正規化済みレコードに対して実行して、この正規化済みレコード内のデータ値が、前に処理された正規化済みレコードからのデータ値と一致するかどうか判定する。モジュール２０２は、ストリーム２０８内の各正規化済みレコードにつき少なくとも１回、センサスマッチング操作を実行する。モジュール２０２は、センサスマッチング操作の結果に関連する情報を、メモリデバイス１０８内の作業メモリ空間に記憶された少なくとも１つのデータ構造に記憶する。データ構造に使用される作業メモリ空間は、ポインタによって参照されるデータのための任意のメモリを含めた、データ構造の任意のオーバーフローとデータ構造内の全ての情報との両方のためのメモリを含む。センサスマッチング操作によって前のデータ値との一致が検出された場合は、このデータ値に関連する記憶済みカウントがインクリメントされる。そうではなくセンサスマッチング操作によって前のデータ値との一致が検出されなかった場合は、新しいエントリがデータ構造に記憶される。
【００９５】
例えば、データ構造は、キーと値のペアを記憶することができる連想配列であってよく、一意のキーを使用してアレイ内の関連する値が検索される。この例では、キーは、正規化済みレコードからのデータ値であり、値は、センサスデータの総カウントまでインクリメントされることになるカウントである。カウントは、連想配列内にすでに存在するどんなキーとも一致しない特定のデータ値をそのキーとするキーと値のペアが正規化済みレコードについて作成されたときに１で開始し、別の正規化済みレコードが既存のキーと一致するデータ値を有するたびに１つインクリメントされる。モジュール２０２は、正規化済みレコードのデータ値を、種々の連想配列内で種々のフィールド（各正規化済みレコード内のフィールド索引によって決定される）について検索し、プロファイリングされているフィールドの各々に１つの連想配列が割り振られる。いくつかの実施形態では、プロファイリングされているフィールドの数は事前にわかっており、プロファイリング手順の初めに、空の連想配列（最小限の量の記憶空間のみを使用する）が各フィールドに割り振られる。
【００９６】
連想配列は、例えば、効率的なキーの検索及び関連する値の修正を提供する、ハッシュテーブル又は他のデータ構造を使用して実装することができる。キーと値のペアのキーとして使用されるデータ値は、データ値自体のコピーを記憶することができ、又は、作業メモリ内の異なる位置に記憶された（例えば、正規化済みレコードのコピーの中に記憶された）データ値へのポインタを記憶することができる。連想配列は、この場合、正規化済みレコードからのデータ値の記憶済みコピーと共に、さらには正規化済みレコード自体の全体と共に、センサスマッチング結果を記憶したデータ構造として集合的に考えることができる。正規化済みレコード内のデータ値へのポインタが連想配列に記憶される実施形態では、特定のキーを含む最初の正規化済みレコードのみが作業メモリに記憶されればよく、この特定のキーを含む後続の正規化済みレコードは、センサスマッチング操作後に作業メモリから削除されてよい。
【００９７】
以下の例では、プロファイリングされているフィールドについてのこれらの連想配列を「センサスアレイ」と呼び、キーと値のペアをセンサスアレイ内の「センサスエントリ」と呼ぶ。データプロファイリング手順の終わりに、センサス生成モジュール２０２によって生成されたセンサスアレイは、テーブル２０６内に現れる全ての異なるデータ値を別々のセンサスエントリ内に記憶しているとともに、そのデータ値がテーブル２０６の行内に現れる回数の総カウントを記憶していることになり、これらは、プロファイルされているデータレコードを表す。
【００９８】
データプロファイリング手順を実行するプログラム、又はこのプログラムの一部（例えばセンサス生成モジュール２０２）には、プログラムが使用することを許される、メモリデバイス１０８内の作業メモリ空間の最大量を設定するメモリ限度が与えられるものとすることができる。プログラムは、許される作業メモリ空間のほとんどを必要とするであろうセンサスアレイを記憶するために、また、センサスアレイよりもかなり少ない空間を必要とするであろう他の一時的な値を記憶するために、作業メモリ空間を使用することができる。追加のエントリをセンサスアレイに加えるのに利用可能な作業メモリ空間が十分にない可能性が高いこと、又は、追加のエントリを加えるのに利用可能な作業メモリ空間がもはやない（例えば最後のエントリが加えられたせいで）ことを、モジュール２０２が決定したとき、作業メモリ空間に対するオーバーフロー条件が満たされる。モジュール２０２は、センサスアレイのメモリサイズを測定することによって、この決定を行うことができる。このメモリサイズは、センサスアレイに使用される作業メモリ空間の量を表し、これは、センサスアレイを表すデータ構造に使用される任意のオーバーヘッドと、これらのデータ構造内の全ての情報（センサスアレイ内のポインタによって参照される任意のデータ値又は正規化済みレコードを含む）と、によって占められるメモリの総量を含む。次いで、モジュール２０２は、このメモリサイズをメモリ限度（又は他の閾値）と比較する。
【００９９】
いくつかの実施形態では、プログラムは、センサスアレイのメモリサイズがメモリ限度に近いときを検出するためのオーバーフロー閾値を設定する。センサスアレイのメモリサイズは、例えば、個々のセンサスアレイのサイズの合計を計算することによって、直接測定することができ、個々のセンサスアレイのサイズは、そのセンサスアレイによって占められる作業メモリ空間内のビットの数として測定される。別法として、センサスアレイのメモリサイズは、例えば、センサスアレイのメモリサイズを直接測定せずに、作業メモリ空間内に残された利用可能な空間の量を計算することによって、間接的に測定することもできる（例えば、割り振られたメモリアドレスブロックからの残されたメモリアドレスの範囲）。いくつかの実施形態では、プログラムは、他の値のための一部の空間を確保しておくために、メモリ限度より少し下のオーバーフロー閾値を設定する。いくつかの実施形態では、例えば、他の値に必要な空間がごくわずかである場合、及び／又は、コンピューティングシステム１０４が厳格なメモリ制限を課さず、メモリ限度を比較的短期間にわたって少量超えるのを許容する場合は、オーバーフロー閾値はメモリ限度に等しいものとすることができる。
【０１００】
オーバーフロー条件がトリガされた後、プログラムは、オーバーフロー処理手順を使用して、完成されたセンサスアレイを生成するのに必要な一部のデータを、ストレージデバイス１１０内のオーバーフローストレージ空間に記憶する。厳密に何がオーバーフローストレージ空間に記憶されるかは、使用されるオーバーフロー処理手順のタイプに依存する。後述するオーバーフロー処理手順の例では、プログラムは、オーバーフロー条件がトリガされた後に処理される各正規化済みレコードに対して、センサスマッチング操作を実行し続け、センサスマッチング操作の結果に関連する情報（すなわち、センサスエントリ内のインクリメントされたカウント、又は新しいセンサスエントリ）を、作業メモリ内のセンサスアレイの同じセットに、又は作業メモリ内のセンサスアレイの新しいセットに、記憶する。これについては後でより詳細に述べる。ストリーム２０８内の正規化済みレコードの処理中の何らかの時点でオーバーフロー条件がトリガされた場合、一部のデータは作業メモリ空間に記憶されることになり、一部のデータはオーバーフローストレージ空間に記憶されることになる。後述するオーバーフロー処理手順の例では、両方の位置のデータが何らかの方法で結合されて、完成されたセンサスアレイが生成される。各センサスアレイは、センサス処理モジュール２０４による処理に向けて、それ自体のセンサスファイル２１０内で出力される。この場合もやはり、使用される厳密な結合手順は、使用されるオーバーフロー処理手順のタイプに依存する。センサスファイル２１０は、センサス生成モジュール２０２から段階的に出力されてもよく、センサスアレイ、又はセンサスアレイエントリのセットは、それらが完成されるにつれて出力ポートに送られる。
【０１０１】
後述するオーバーフロー処理手順の２つの例は両方とも、同じセンサス生成モジュール２０２によって使用することができる。あるモードでは、この手順のうちの一方を使用することができ、別のモードでは、この手順のうちの他方を使用することができる。モードは、例えばユーザによって決定することができ、或いは、どちらの手順が最も効率的となるかを推定するための何らかの初期分析（例えば、プロファイリングされているデータセットのサブセットに対して、又は同じ若しくは類似のデータセットについての履歴プロファイル情報に対して実行される）によって決定することができる。これらのオーバーフロー処理手順はまた、センサスマッチング操作に加えて、他のデータ処理にも適用され得る。不完全な結果のマージを可能にするデータ操作は、後述するオーバーフロー処理手順で実行されるように、作業メモリ空間に記憶された結果とオーバーフローストレージ空間に記憶された結果とを結合することと互換性があることになる。少なくともいくつかのケースをインプレースに扱うことができるデータ操作は、後述するオーバーフロー処理手順で実行されるように、データ構造をメモリ内のデータ構造内でインプレースに更新することと互換性があることになる。一部のデータをオーバーフローストレージ空間に記憶するのにかかったはずの時間を回避することによって、オーバーフロー処理手順の効率は、センサス操作や他のデータプロファイリング操作などのデータ操作（大量となり得る入来データを処理した後で、ユーザがその処理の結果を見られるようにするか、又はその処理に依存する追加の対話を実行できるようにするのに使用される）にとって特に有用である。
【０１０２】
図３に、センサス生成モジュール２０２がセンサスアレイを生成するコンテキスト内で使用される第１のオーバーフロー処理手順による、センサス生成を示す。図４Ａ〜４Ｃに、第１のオーバーフロー処理手順によるセンサス生成に対応するフローチャートを示す。図３及び４Ａを参照すると、センサス生成モジュール２０２は、正規化済みレコードのストリーム３００を受け取り、オーバーフロー処理手順の終わりまでに、プロファイリングされている各フィールドにつき、完成されたセンサスアレイ３０２を生成する。モジュール２０２は、ストリーム３００内の正規化済みレコードの各々にわたるループ中を反復するのに伴って、次の正規化済みレコードを読み取る（４００）（最初の反復では、最初の正規化済みレコードで開始する）。モジュール２０２は、作業メモリ空間３０６内で生成されているセンサスアレイ３０４のメモリサイズをチェックして（４０２）、オーバーフロー閾値に達したかどうか判定する。
【０１０３】
オーバーフロー閾値に達していない場合は、モジュール２０２は、この正規化済みレコードに対してセンサスマッチング操作４０４を実行する。センサスマッチング操作４０４は、センサスアレイ３０４のうちの適切なセンサスアレイ（正規化済みレコード内のフィールド索引に対するセンサスアレイ）のキーの中で、正規化済みレコード内のデータ値との一致を検索する（４０６）ことを含む。キー（前の正規化済みレコードからのデータ値）との一致があった場合は、このキーに対応するカウントがインクリメントされる（４０８）。キーとの一致がなかった場合は、センサスアレイ３０４のうちの適切なセンサスアレイに新しいエントリが追加され（４０９）、キーがデータ値に設定されてカウントが１に設定される。
【０１０４】
オーバーフロー閾値に達した場合は、モジュール２０２は、センサスアレイ３０４と、オーバーフローストレージ空間３１０に（前の反復中に）記憶された前の部分的センサスアレイ３０８があればそれらとに対して、マージ操作４１２を実行する。マージ操作４１２（後でより詳細に述べる）の結果は、部分的センサスアレイ３０８の新しいセットであり、各部分的センサスアレイ３０８は、所与のフィールドについてのマージされたセンサスアレイ内のキー（すなわちデータ値）の集合（union）に対応するエントリを、各キーのカウントの合計と共に含む。したがって、作業メモリ空間３０６内にあった部分的センサスアレイ３０４内の情報は、オーバーフローストレージ空間３１０に安全に記憶され、部分的センサスアレイ３０４は今や作業メモリ空間３０６から削除されてよく（４１４）、次の正規化済みレコードに対してセンサスマッチング操作４０４を実行するためにより多くの作業メモリ空間３０６が解放される。
【０１０５】
反復の終わりに、モジュール２０２は、ストリーム３００の終わりに達した（これにより、ストリーム内のレコードごとに反復するループが終了する）かどうか判定する（４１６）。終わりに達していない場合は、次の正規化済みレコードを読み取る（４００）ことによって別の反復が開始される。終わりに達した場合は、モジュール２０２は、反復のいずれかの間にオーバーフローが起こったかどうか判定する（４１８）。オーバーフローが起こらなかった場合は、モジュール２０２は、作業メモリ空間３０６内のちょうど（now）、完成したセンサスアレイ３０４の各々を、出力ポートに送る（４１９）。オーバーフローが起こった場合は、モジュール２０２は、作業メモリ空間３０６に記憶された部分的センサスアレイ３０４と、オーバーフローストレージ空間３１０に記憶された部分的センサスアレイ３０８とに対して、マージ操作の修正バージョン４１２’を実行して、得られたマージ済みセンサスアレイを出力ポートに送る。マージ操作４１２については図４Ｂにおいて、より詳細に述べ、マージ操作４１２’については図４Ｃにおいて、より詳細に述べる。
【０１０６】
図４Ｂを参照すると、作業メモリ空間３０６内の部分的センサスアレイ（「メモリアレイ」と呼ぶ）のセットを、オーバーフローストレージ空間３１０内の部分的センサスアレイ（「記憶済みアレイ」と呼ぶ）のセットとマージするための、マージ操作４１２の例を示している。マージ操作４１２は、フィールドにわたって反復する（すなわち、１からフィールド数までに及ぶ「現フィールド」を参照するループカウンタを用いて）外側ループと、現フィールド反復のフィールドに対する記憶済みアレイ内のエントリにわたって反復する（すなわち、１からエントリ数までに及ぶ「現エントリ」を参照するループカウンタを用いて）内側ループとを含む。内側ループは、記憶済みアレイ内の現エントリのデータ値を、現フィールド反復のフィールドに対するメモリアレイ内で検索する（４２０）ことによって開始する。一致が検出されなかった場合、内側ループは、記憶済みアレイ内の現エントリからのカウントと、メモリアレイ内の一致させたエントリからのカウントとを合計し（４２２）、得られた総カウントをメモリアレイ内の一致させたエントリに記憶する（前のカウントを上書きする）。この新しい総カウントは作業メモリ内のどんな追加の空間も必要とすることにならないので、この操作は、使用される作業メモリ空間の量を増加させることはない。種々の実施形態では、メモリアレイと記憶済みアレイとのどちらかの中で検索して、このどちらかを使用して総カウントを累算することもできるが、記憶済みアレイにわたって反復してメモリアレイ内で検索することによって、検索をより効率的に実行することができる（メモリデバイス１０８へはストレージデバイス１１０よりも効率的にアクセスできるので）。一致が検出されなかった場合は、内側ループは、記憶済みアレイ内の現エントリをオーバーフローストレージ空間３１０内の新しいセンサスアレイに追加する（４２４）。この新しいセンサスアレイは、マージ操作４１２の後で前の記憶済みアレイに置き換わることになる新しいセンサスアレイのセットの一部である。そして内側ループは、記憶済みアレイ内の次のエントリのデータ値をメモリアレイ内で検索する（４２０）ことによって、新しい内側ループ反復を開始する。記憶済みアレイ内の最後のエントリに達した後、内側ループは終了する（４２６）。外側ループは、更新済みメモリアレイを新しいセンサスアレイに付加する（４２８）ことを含み、したがって、新しいセンサスアレイの完全なセットは、マージ操作４１２からの一致させたエントリと一致させなかったエントリの両方を表すことになる。最後のフィールドに達した後、外側ループは終了する（４３０）。
【０１０７】
図４Ｃに、メモリアレイの最後のセットを記憶済みアレイとマージするために実行される、マージ操作の修正バージョン４１２’の例を示す。この例では、唯一の違いは以下の点である。記憶済みアレイ内の現エントリをオーバーフローストレージ空間３１０内の新しいセンサスアレイに追加する（４２４）代わりに、操作４１２’は、（例えば、やはりオーバーフローストレージ空間３１０に記憶されていてよい出力センサスファイルに書き込むことによって）記憶済みアレイ内の現エントリをモジュール２０２の出力ポートに出力する（４２４’）。更新済みメモリアレイを記憶済みアレイに付加する（４２８）代わりに、操作４１２’は、（例えば、やはりオーバーフローストレージ空間３１０に記憶されていてよい出力センサスファイルに書き込むことによって）更新済みメモリアレイをモジュール２０２の出力ポートに送る（４２８’）。
【０１０８】
要約すると、第１のオーバーフロー処理手順は、部分的センサスアレイをオーバーフローストレージに移動して、全ての新しいレコード（オーバーフローストレージに移動された部分的センサスアレイとマージされることになる、作業メモリ内の新しい部分的センサスアレイ内の）の処理を継続することによって、作業メモリに対するオーバーフロー条件に対処する。第１のオーバーフロー処理手順は、部分的センサスアレイをオーバーフローストレージにスピルするのを効率的に管理する。第２のオーバーフロー処理手順は、同様に全ての新しいレコードの処理を継続しながらオーバーフロー条件に対処することになるが、部分的センサスアレイの代わりに、一致しないレコードをオーバーフローストレージにスピルするのを効率的に管理するように構成されることになる。
【０１０９】
図５に、センサス生成モジュール２０２がセンサスアレイを生成するコンテキスト内で使用される第２のオーバーフロー処理手順による、センサス生成を示す。図６に、第２のオーバーフロー処理手順によるセンサス生成に対応するフローチャートを示す。図５及び６を参照すると、センサス生成モジュール２０２は、正規化済みレコードのストリーム５００を受け取り、オーバーフロー処理手順の終わりまでに、プロファイリングされている各フィールドにつき、完成されたセンサスアレイ５０２を生成する。モジュール２０２は、第１のパスでストリーム５００内の正規化済みレコードの各々にわたるループ中を反復するのに伴って、又は、１若しくは２以上の追加のパスでオーバーフローストレージ空間５０４内の一時レコードストア５０３に一時的に記憶された正規化済みレコードのセットの各々にわたるループ中を反復するのに伴って、次の正規化済みレコードを読み取る（６００）。１又は２以上のパスで実行されるステップについてはより詳細に後述するが、本質的には、各パスは、閾値条件が満たされるまで作業メモリ空間３０６を埋め、次いで、閾値条件が満たされた後で、全ての一致するレコードをインプレースに処理し、全ての一致しないレコードをスピルすることを含む。モジュール２０２は、この正規化済みレコードに対してセンサスマッチング操作６０２を実行する。
【０１１０】
センサスマッチング操作６０２は、作業メモリ空間５０８内で生成されているセンサスアレイ５０６のうちの適切なセンサスアレイ（正規化済みレコード内のフィールド索引に対するセンサスアレイ）のキーの中で、正規化済みレコード内のデータ値との一致（６０５）を検索する（６０４）ことを含む。キー（前の正規化済みレコードからのデータ値）との一致があった場合は、このキーに対応するカウントがインクリメントされる（６０６）。このインクリメント（６０６）は、作業メモリ空間５０８をそれ以上使用することなく行うことができ（例えば、インプレース操作を使用して、一致させたエントリのカウントをインクリメントして）、したがって、オーバーフロー閾値に達したか否かに依存しない。キーとの一致がなかった場合は、次のアクションは、センサスアレイ５０６のメモリサイズをチェックしてオーバーフロー閾値に達したかどうか判定する（６０７）ことの結果に依存する。オーバーフロー閾値に達していない場合は、センサスアレイ５０６のうちの適切なセンサスアレイに新しいエントリが追加され（６０８）、キーがデータ値に設定されてカウントが１に設定される。オーバーフロー閾値に達した場合は、モジュール２０２は、正規化済みレコードをオーバーフローストレージ空間５０４内の新しい一時レコードストア５０３に記憶する（６０９）。一時レコードストア５０３は、正規化済みレコードを記憶する単一のファイル（若しくは他のデータ構造）であってもよく、又は、フィールド索引（若しくは他の特性）によって正規化済みレコードへのアクセスを提供する複数のファイル（若しくは他のデータ構造）であってもよい。異なるパスごとの異なる正規化済みレコードセットを含む、異なる一時レコードストア５０３がある。
【０１１１】
モジュール２０２は、ストリーム５００を通る第１のパスの終わりに達した（これにより、ストリーム内のレコードごとに反復するループが終了する）かどうか、又は一時レコードストア５０３の１つを通るパスの終わりに達したかどうか判定する（６１０）。パスの終わりに達していない場合は、次の正規化済みレコードを読み取る（６００）ことによって別の反復が開始する。パスの終わりに達した場合は、モジュール２０２は、現パスについての前の反復のいずれかの間にオーバーフローが起こったかどうか判定する（６１１）。オーバーフローが起こらなかった場合は、モジュール２０２は、作業メモリ空間５０８内のちょうど完成したセンサスアレイ５０６の各々を、出力ポートに送る（６１３）。オーバーフローが起こった場合は、モジュール２０２は、いずれかの一時レコードストア５０３が残っているかどうかチェックして判定する（６１２）。
【０１１２】
少なくとも１つの一時レコードストア５０３が残っている場合は、モジュール２０２は、このストア５０３内の正規化済みレコードを処理するために作業メモリ内の空間を解放することを開始する。これは、フィールドにわたって反復し（すなわち、１からフィールド数までに及ぶ「現フィールド」を参照するループカウンタを用いて）、部分的センサスアレイ５０６のうちの適切な部分的センサスアレイを、オーバーフローストレージ空間５０４に（前の反復中に）記憶されたいずれかの部分的センサスアレイ５１０のうちの対応する部分的センサスアレイ（同じフィールド索引を有する）に付加する（６１４）ことによって行う。最後のフィールドに達した後、ループは終了する（６１５）。したがって、作業メモリ空間５０８内の部分的センサスアレイ５０６内の情報は、オーバーフローストレージ空間５０４に安全に記憶され、部分的センサスアレイ５０６は作業メモリ空間５０８内から削除されてよく（６１６）、より多くの作業メモリ空間５０８が解放されて、残りの一時レコードストア５０３から次の正規化済みレコードが読み取られ（６００）、この正規化済みレコードに対してセンサスマッチング操作６０２が実行される。
【０１１３】
部分的センサスアレイ５０６及び部分的センサスアレイ５１０は、マージ操作が実行される必要なしに、単純に付加されてよい。というのは、センサスアレイ５１０内のキーと一致したはずのデータ値を有するどんな正規化済みレコードも、これらのセンサスアレイ５１０が作業メモリ空間５０８内で生成されていたときに処理されたはずであり、したがって、これらのデータ値はどれも、作業メモリ空間５０８内に現在あるセンサスアレイ５０６のうちのどの中にも存在し得ないからである。部分的センサスアレイ５０６及び部分的センサスアレイ５１０中のエントリは、そうすることが役立つなら、１又は２以上の他のデータ構造にソート又は再構成されてもよい（例えば、これらのエントリへのアクセスの効率のために）が、個々のエントリは、特定のデータ値についての情報を統合するために結合される必要はない。
【０１１４】
どのようにモジュール２０２がストリーム５００からのレコードを処理するかについての一例では、ストリーム５００からの正規化済みレコードの第１のサブセット５１２が処理されてセンサスアレイ５０６のメモリサイズがオーバーフロー閾値まで拡張された後、正規化済みレコードの第２のサブセット５１４が処理されて、キーに一致するデータ値（陰影のないボックスとして示されるレコードからの）について、センサスアレイ５０６のカウントがインクリメントし続けられるか、又は、正規化済みレコードの第３のサブセット５１６（陰影付きのボックスとして示される）が一時レコードストア５０３に記憶される。第３のサブセット５１６は、第２のサブセット５１４のサブセットでもあることに留意されたい。このプロセスが継続し、ストリーム５００は一時レコードストア５０３で置き換えられ、現在の一時レコードストア５０３の中を反復する間に新しい（より小さい）一時レコードストア５０３’が生成される可能性がある。
【０１１５】
チェック（６１２）の後で一時レコードストア５０３が残っていない場合は、モジュール２０２は、フィールドにわたって反復し（すなわち、１からフィールド数まで）、センサスアレイ５０６のうちの適切なセンサスアレイを作業メモリ空間５０８から出力ポートに送り（６１８）、センサスアレイ５１０のうちの適切なセンサスアレイをオーバーフローストレージ空間５０４から出力ポートに送る（６２０）。最後のフィールドに達した後、ループは終了する（６２２）。センサス生成のこの部分でセンサスアレイ５０６及び５１０を出力ポートに送ることにより、（種々のフィールドの部分的センサスアレイが準備でき次第すぐに出力されるのとは対照的に）センサスアレイをフィールド索引順に出力することができる。これは、例えば、センサスアレイがその順序で提供されることを必要とするダウンストリーム計算がセンサス処理モジュール２０４の後にある場合に、有用であることがある。別法として、順序付けられた出力を必ずしも必要としないセンサス生成の他の実施形態では、作業メモリ空間５０８からの部分的センサスアレイ５０６をオーバーフローストレージ空間５０４に記憶するのを回避することができ、その代わり、単に、部分的センサスアレイ５０６を作業メモリ空間５０８から出力ポートに直接出力することができる（それらを付加するときにマージ操作が実行される必要がなかったのと同じ理由で）。
【０１１６】
要約すると、第２のオーバーフロー処理手順は、一致しないレコードをオーバーフローストレージに移動して全ての新しいレコードの処理を継続する（一致するレコードがあればそれについては作業メモリ内にすでにあるセンサスアレイを更新する）ことによって、作業メモリに対するオーバーフロー条件に対処する。第２のオーバーフロー処理手順は、一致しないレコードをオーバーフローストレージにスピルするのを効率的に管理する。
【０１１７】
第１と第２のオーバーフロー処理手順の間にはいくつかの違いがあり、これらの違いにより、場合によって一方又は他方がより適切に（すなわちより効率的に）なることがある。第１のオーバーフロー処理手順はレコードをオーバーフローストレージにスピルする必要がないが、第２のオーバーフロー処理手順はその必要がある。しかし、第２のオーバーフロー処理手順はセンサスアレイをマージする必要がないが、第１のオーバーフロー処理手順はその必要がある。また、第２のオーバーフロー処理手順は、オーバーフロー条件の後、入力ストリーム内のレコードの完全なパスを最後まで読み取るまで作業メモリ内で同じセンサスアレイを保持するので、値の初期分散が、より後のどの値が一致する又は一致しないかを決定する。したがって、所与のフィールド内の繰り返される値（もしあれば）の分散が入力ストリーム中の全てのレコードにわたって比較的均一である状況では、第２のオーバーフロー処理手順は、効率的なスピルを可能にする傾向があるであろう。第１のオーバーフロー処理手順では、センサスアレイがオーバーフローストレージにスピルされるたびに、値の完全に新しいセットを一致させることができる。したがって、入力ストリーム内の全てのレコードにわたって１又は２以上のフィールド内の繰り返される値の分散に大きな変化がある状況では、第１のオーバーフロー処理手順は、効率的なスピルを可能にする傾向があるであろう。
【０１１８】
他のオーバーフロー処理手順も可能である。例えば、前述の第１と第２の手順間のハイブリッドは、センサスアレイに一致しない正規化済みレコードをオーバーフローストレージ空間に記憶することによって、オーバーフロー条件への対処を開始することができる（すなわち第２の手順に従って）。次いで、一致しない記憶された正規化済みレコードの部分が特定の閾値よりも大きくなった場合、この手順は、作業メモリ空間中の部分的センサスアレイをオーバーフローストレージ空間に移動し（前に記憶された部分的センサスアレイがあれば、それらとマージし）、現パス中の正規化済みレコードの処理を継続することができる（すなわち第１の手順に従って）。第１の手順のこのパスが終了した後、この手順は、同じハイブリッドプロセスを使用して、オーバーフローストレージ空間に記憶された正規化済みレコードを処理することによって継続する（すなわち、オーバーフロー条件に達したとき、閾値に達するまで一致しない正規化済みレコードを記憶するのを開始する）ことになる。
【０１１９】
前述の技法は、適切なソフトウェアを実行するコンピューティングシステムを使用して実装することができる。例えば、ソフトウェアは、１又は２以上のプログラムされた又はプログラム可能なコンピューティングシステム（分散型、クライアント／サーバ、又はグリッドなど、様々なアーキテクチャのものであり得る）上で実行される１又は２以上のコンピュータプログラム中の手順を含むことができ、各コンピューティングシステムは、少なくとも１つのプロセッサと、少なくとも１つのデータストレージシステム（揮発性及び／又は不揮発性の、メモリ及び／又はストレージ要素を含む）と、少なくとも１つのユーザインタフェース（少なくとも１つの入力デバイス又はポートを使用して入力を受け取るため、及び少なくとも１つの出力デバイス又はポートを使用して出力を提供するための）とを備える。ソフトウェアは、データフローグラフの設計、構成、及び実行に関係するサービスを例えば提供するより大きいプログラムの、１又は２以上のモジュールを含むことができる。プログラムのモジュール（例えば、データフローグラフの要素）は、データリポジトリに記憶されたデータモデルに従う、データ構造又は他の編成されたデータとして実装することができる。プログラムのモジュールは、ハッシュテーブルやフラットファイルなどの様々なデータ構造のいずれかにアレイデータを記憶することができ、これらのデータ構造は、例えば、索引付け及び／又は圧縮されてもよい。
【０１２０】
ソフトウェアは、ＣＤ−ＲＯＭ又は他のコンピュータ可読媒体（例えば、汎用若しくは専用コンピューティングシステム若しくはデバイスによって読取り可能な）など、有形の非一時的媒体上で提供されてもよく、或いは、ネットワークの通信媒体を介してコンピューティングシステムの有形の非一時的媒体に送信（例えば、伝搬信号中で符号化）されて、そこで実行されてもよい。処理の一部又は全ては、専用コンピュータ上で実行されてよく、又は、コプロセッサ若しくはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）若しくは専用の特定用途向け集積回路（ＡＳＩＣ）など、専用ハードウェアを使用して実行されてよい。処理は分散方式で実装されてもよく、その場合、ソフトウェアによって指定される計算の異なる部分が、異なるコンピューティング要素によって実行される。このような各コンピュータプログラムは、汎用又は専用プログラム可能コンピュータによってアクセス可能なストレージデバイスのコンピュータ可読ストレージ媒体（例えば、固体メモリ若しくは媒体、又は磁気若しくは光学媒体）に記憶されるか又はダウンロードされることが好ましく、それにより、ストレージデバイス媒体がコンピュータによって読み取られたとき、本明細書に記載の処理が実行されるようにコンピュータが構成及び操作される。本発明のシステムはまた、コンピュータプログラムで構成された有形の非一時的媒体として実装されるものと考えることもでき、その場合、このように構成された媒体は、特定の事前定義された方式でコンピュータを動作させて、本明細書に記載の処理ステップの１又は２以上を実行させる。
【０１２１】
本発明のいくつかの実施形態について述べた。しかし、以上の記述は、本発明の範囲を例示するものとし、限定するものとはしないことを理解されたい。本発明の範囲は、後続の特許請求の範囲によって定義される。したがって、他の実施形態もまた、後続の特許請求の範囲内である。例えば、本発明の範囲を逸脱することなく、様々な修正を加えることができる。加えて、前述のステップのいくつかは、順序に依存しないこともあり、したがって、述べた順序とは異なる順序で実行されてもよい。
【図１】
0006387399.tif 000002
【図２】
0006387399.tif 000003
【図３】
0006387399.tif 000004
【図４Ａ】
0006387399.tif 000005
【図４Ｂ】
0006387399.tif 000006
【図４Ｃ】
0006387399.tif 000007
【図５】
0006387399.tif 000008
【図６】
0006387399.tif 000009