(57)【特許請求の範囲】
【請求項１】
第１のバッファのオーバーフロー状態を検出する工程に応じて、前記第１のバッファに存在する１つまたは複数のデータ要素を第２のバッファに移動させる工程であって、前記第１のバッファの前記データ要素は、既定の順序に従ってソートされる、工程と、
前記第１のバッファにプロキシデータ要素を挿入して、前記第２のバッファに移動された前記データ要素を表す工程と、
前記プロキシデータ要素が前記第１のバッファから除去されるものとして特定されることに応じて、前記第２のバッファからの１つまたは複数のデータ要素を前記第１のバッファの前記データ要素とマージする工程と
を含む、コンピュータ実装方法。
【請求項２】
前記第１のバッファの前記データ要素の前記既定の順序は、前記第１のバッファから前記データ要素を除去するための優先度順を含む、請求項１に記載の方法。
【請求項３】
前記第２のバッファに格納される前記データ要素の一部は、前記既定の順序に従って実質的にソートされる、請求項１に記載の方法。
【請求項４】
前記第２のバッファに格納される前記データ要素の一部は、前記第１のバッファに格納された前記データ要素の少なくとも半分を含む、請求項１に記載の方法。
【請求項５】
前記第２のバッファに保存される前記データ要素の一部に対応する前記第１のバッファの位置にデータ要素を格納する工程を
さらに含む、請求項１に記載の方法。
【請求項６】
前記既定の順序に従って、前記第１のバッファから１つまたは複数のデータ要素を除去する工程と、
前記第１のバッファから前記除去された１つまたは複数のデータ要素を、前記既定の順序に従って実質的にソートされたデータ要素の出力ストリームとして提供する工程と
をさらに含む、請求項１に記載の方法。
【請求項７】
前記プロキシデータ要素が前記第１のバッファに格納された要素の最優先のデータ要素になることに応じて、前記第２のバッファからの１つまたは複数のデータ要素を前記第１のバッファの前記データ要素とマージする工程
をさらに含む、請求項２に記載の方法。
【請求項８】
前記マージされたデータ要素は、前記既定の順序に基づいてソートされる、請求項７に記載の方法。
【請求項９】
前記第２のバッファからの前記１つまたは複数のデータ要素の前記第１のバッファの前記データ要素とのマージは、出力データ要素の生成と同時に起こる、請求項１に記載の方法。
【請求項１０】
前記プロキシデータ要素は、前記第２のバッファからの除去を最優先とする前記第２のバッファからの要素のコピーである、請求項１に記載の方法。
【請求項１１】
前記除去された１つまたは複数のデータ要素は、前記第１のバッファの前記要素の最小値を表す前記第１のバッファからのデータ要素を含む、請求項６に記載の方法。
【請求項１２】
前記除去された１つまたは複数のデータ要素は、前記第１のバッファの前記要素の最大値を表す前記第１のバッファからのデータ要素を含む、請求項６に記載の方法。
【請求項１３】
前記第１のバッファに格納された前記データ要素に境界条件を適用する工程であって、前記境界条件は、前記第１のバッファに格納された任意の２つのデータ要素間の最大許容差を表す、工程と、
前記境界条件に基づいて、前記既定の優先度順に従ってソートされたデータ要素の出力ストリームとして、前記第１のバッファから１つまたは複数のデータ要素をイジェクトする工程と
をさらに含む、請求項１に記載の方法。
【請求項１４】
各データ要素は、データ記録生成時間を表す、請求項１３に記載の方法。
【請求項１５】
前記第１のバッファに格納された前記データ要素に境界条件を適用する工程は、
前記第１のバッファに格納された前記データ要素の最小値を表すものとしてデータ要素を特定する工程と、
前記最小値を表す前記データ要素と前記第１のバッファに入力するために受信されたデータ要素との差を決定する工程と
を含む、請求項１３に記載の方法。
【請求項１６】
前記境界条件に基づいて、前記第１のバッファから１つまたは複数のデータ要素をイジェクトする工程は、
１つまたは複数のデータ要素が既定の値を超えているかどうかを決定する工程と、
前記１つまたは複数のデータ要素が前記既定の値を超えている場合に、前記第１のバッファから前記１つまたは複数のデータ要素をイジェクトする工程と
を含む、請求項１３に記載の方法。
【請求項１７】
前記第１および第２のバッファの少なくとも１つは、スキップリストデータ構造によって実装される、請求項１に記載の方法。
【請求項１８】
前記第１および第２のバッファの少なくとも１つは、ツリープデータ構造によって実装される、請求項１に記載の方法。
【請求項１９】
第１および第２のバッファの個別のデータ要素の１つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出される、請求項１に記載の方法。
【請求項２０】
データ要素をソートするためのコンピュータプログラムを格納するコンピュータ可読記憶媒体であって、前記コンピュータプログラムは、コンピューティングシステムに、
第１のバッファのオーバーフロー状態を検出することに応じて、前記第１のバッファに存在する１つまたは複数のデータ要素を第２のバッファに移動させるための命令であって、前記第１のバッファの前記データ要素は、既定の順序に従ってソートされる、命令と、
前記第１のバッファにプロキシデータ要素を挿入して、前記第２のバッファに格納される前記データ要素の一部を表させるための命令と、
前記プロキシデータ要素が前記第１のバッファから除去されるものとして特定されることに応じて、前記第２のバッファからの１つまたは複数のデータ要素を前記第１のバッファの前記データ要素とマージする命令と
を含む、コンピュータ可読記憶媒体。
【請求項２１】
データ要素をソートするためのコンピューティングシステムであって、
第１のバッファにデータ要素を格納するためのデータ格納システムと、
前記データ格納システムと結合され、受信されたデータ要素のストリームを処理するよう構成された少なくとも１つのプロセッサとを含み、前記処理することは、
第１のバッファのオーバーフロー状態を検出することに応じて、前記第１のバッファに存在する１つまたは複数のデータ要素を第２のバッファに移動させることであって、前記第１のバッファの前記データ要素は、既定の順序に従ってソートされることと、
前記第１のバッファにプロキシデータ要素を挿入して、前記第２のバッファに格納される前記データ要素の一部を表すことと、
前記プロキシデータ要素が前記第１のバッファから除去されるものとして特定されることに応じて、前記第２のバッファからの１つまたは複数のデータ要素を前記第１のバッファの前記データ要素とマージすることと
を含む、コンピューティングシステム。
【請求項２２】
データ要素をソートするためのコンピューティングシステムであって、
第１のバッファにデータ要素を格納するための手段と、
受信されたデータ要素のストリームを処理するための手段とを含み、前記処理することは、
第１のバッファのオーバーフロー状態を検出することに応じて、前記第１のバッファに存在する１つまたは複数のデータ要素を第２のバッファに移動させることであって、前記第１のバッファの前記データ要素は、既定の順序に従ってソートされることと、
前記第１のバッファにプロキシデータ要素を挿入して、前記第２のバッファに格納される前記データ要素の一部を表すことと、
前記プロキシデータ要素が前記第１のバッファから除去されるものとして特定されることに応じて、前記第２のバッファからの１つまたは複数のデータ要素を前記第１のバッファの前記データ要素とマージすることと
を含む、コンピューティングシステム。
【請求項２３】
前記第１のバッファの前記データ要素の前記既定の順序は、前記第１のバッファから前記データ要素を除去するための優先度順を含む、請求項２０に記載のコンピュータ可読記憶媒体。
【請求項２４】
前記第２のバッファに格納される前記データ要素の一部は、前記既定の順序に従って実質的にソートされる、請求項２０に記載のコンピュータ可読記憶媒体。
【請求項２５】
前記第２のバッファに格納される前記データ要素の一部は、前記第１のバッファに格納された前記データ要素の少なくとも半分を含む、請求項２０に記載のコンピュータ可読記憶媒体。
【請求項２６】
前記コンピューティングシステムに、前記第２のバッファに保存される前記データ要素の一部に対応する前記第１のバッファの位置にデータ要素を格納させる命令をさらに含む、請求項２０に記載のコンピュータ可読記憶媒体。
【請求項２７】
前記コンピューティングシステムに、
前記既定の順序に従って、前記第１のバッファから１つまたは複数のデータ要素を除去させる命令と、
前記第１のバッファから前記除去された１つまたは複数のデータ要素を、前記既定の順序に従って実質的にソートされたデータ要素の出力ストリームとして提供させる命令とをさらに含む、請求項２０に記載のコンピュータ可読記憶媒体。
【請求項２８】
前記コンピューティングシステムに、前記プロキシデータ要素が前記第１のバッファに格納された要素の最優先のデータ要素になることに応じて、前記第２のバッファからの１つまたは複数のデータ要素を前記第１のバッファの前記データ要素とマージさせる命令をさらに含む、請求項２３に記載のコンピュータ可読記憶媒体。
【請求項２９】
前記マージされたデータ要素は、前記既定の順序に基づいてソートされる、請求項２８に記載のコンピュータ可読記憶媒体。
【請求項３０】
前記第２のバッファからの前記１つまたは複数のデータ要素の前記第１のバッファの前記データ要素とのマージは、出力データ要素の生成と実質的に同時に起こる、請求項２０に記載のコンピュータ可読記憶媒体。
【請求項３１】
前記プロキシデータ要素は、前記第２のバッファからの除去を最優先とする前記第２のバッファからの要素のコピーである、請求項２０に記載のコンピュータ可読記憶媒体。
【請求項３２】
前記除去された１つまたは複数のデータ要素は、前記第１のバッファの前記要素の最小値を表す前記第１のバッファからのデータ要素を含む、請求項２７に記載のコンピュータ可読記憶媒体。
【請求項３３】
前記除去された１つまたは複数のデータ要素は、前記第１のバッファの前記要素の最大値を表す前記第１のバッファからのデータ要素を含む、請求項２７に記載のコンピュータ可読記憶媒体。
【請求項３４】
前記コンピューティングシステムに、
前記第１のバッファに格納された前記データ要素に境界条件を適用させる命令であって、前記境界条件は、前記第１のバッファに格納された任意の２つのデータ要素間の最大許容差を表す、命令と、
前記境界条件に基づいて、前記既定の優先度順に従ってソートされたデータ要素の出力ストリームとして、前記第１のバッファから１つまたは複数のデータ要素をイジェクトさせる命令と
をさらに含む、請求項２０に記載のコンピュータ可読記憶媒体。
【請求項３５】
各データ要素は、データ記録生成時間を表す、請求項３４に記載のコンピュータ可読記憶媒体。
【請求項３６】
前記第１のバッファに格納された前記データ要素に境界条件を適用することは、
前記第１のバッファに格納された前記データ要素の最小値を表すものとしてデータ要素を特定することと、
前記最小値を表す前記データ要素と前記第１のバッファに入力するために受信されたデータ要素との差を決定することと
を含む、請求項３４に記載のコンピュータ可読記憶媒体。
【請求項３７】
前記境界条件に基づいて、前記第１のバッファから１つまたは複数のデータ要素をイジェクトすることは、
１つまたは複数のデータ要素が既定の値を超えているかどうかを決定することと、
前記１つまたは複数のデータ要素が前記既定の値を超えている場合に、前記第１のバッファから前記１つまたは複数のデータ要素をイジェクトすることと
を含む、請求項３４に記載のコンピュータ可読記憶媒体。
【請求項３８】
前記第１および第２のバッファの少なくとも１つは、スキップリストデータ構造によって実装される、請求項２０に記載のコンピュータ可読記憶媒体。
【請求項３９】
前記第１および第２のバッファの少なくとも１つは、ツリープデータ構造によって実装される、請求項２０に記載のコンピュータ可読記憶媒体。
【請求項４０】
第１および第２のバッファの個別のデータ要素の１つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出される、請求項２０に記載のコンピュータ可読記憶媒体。
【請求項４１】
前記第１のバッファの前記データ要素の前記既定の順序は、前記第１のバッファから前記データ要素を除去するための優先度順を含む、請求項２１に記載のコンピューティングシステム。
【請求項４２】
前記第２のバッファに格納される前記データ要素の一部は、前記既定の順序に従って実質的にソートされる、請求項２１に記載のコンピューティングシステム。
【請求項４３】
前記第２のバッファに格納される前記データ要素の一部は、前記第１のバッファに格納された前記データ要素の少なくとも半分を含む、請求項２１に記載のコンピューティングシステム。
【請求項４４】
前記処理することは、前記第２のバッファに保存される前記データ要素の一部に対応する前記第１のバッファの位置にデータ要素を格納することをさらに含む、請求項２１に記載のコンピューティングシステム。
【請求項４５】
前記処理することは、
前記既定の順序に従って、前記第１のバッファから１つまたは複数のデータ要素を除去することと、
前記第１のバッファから前記除去された１つまたは複数のデータ要素を、前記既定の順序に従って実質的にソートされたデータ要素の出力ストリームとして提供することと
をさらに含む、請求項２１に記載のコンピューティングシステム。
【請求項４６】
前記処理は、前記プロキシデータ要素が前記第１のバッファに格納された要素の最優先のデータ要素になることに応じて、前記第２のバッファからの１つまたは複数のデータ要素を前記第１のバッファの前記データ要素とマージすることをさらに含む、請求項４１に記載のコンピューティングシステム。
【請求項４７】
前記マージされたデータ要素は、前記既定の順序に基づいてソートされる、請求項４６に記載のコンピューティングシステム。
【請求項４８】
前記第２のバッファからの前記１つまたは複数のデータ要素の前記第１のバッファの前記データ要素とのマージは、出力データ要素の生成と実質的に同時に起こる、請求項２１に記載のコンピューティングシステム。
【請求項４９】
前記プロキシデータ要素は、前記第２のバッファからの除去を最優先とする前記第２のバッファからの要素のコピーである、請求項２１に記載のコンピューティングシステム。
【請求項５０】
前記除去された１つまたは複数のデータ要素は、前記第１のバッファの前記要素の最小値を表す前記第１のバッファからのデータ要素を含む、請求項４５に記載のコンピューティングシステム。
【請求項５１】
前記除去された１つまたは複数のデータ要素は、前記第１のバッファの前記要素の最大値を表す前記第１のバッファからのデータ要素を含む、請求項４５に記載のコンピューティングシステム。
【請求項５２】
前記処理することは、
前記第１のバッファに格納された前記データ要素に境界条件を適用することであって、前記境界条件は、前記第１のバッファに格納された任意の２つのデータ要素間の最大許容差を表すことと、
前記境界条件に基づいて、前記既定の優先度順に従ってソートされたデータ要素の出力ストリームとして、前記第１のバッファから１つまたは複数のデータ要素をイジェクトすることと
をさらに含む、請求項２１に記載のコンピューティングシステム。
【請求項５３】
各データ要素は、データ記録生成時間を表す、請求項５２に記載のコンピューティングシステム。
【請求項５４】
前記第１のバッファに格納された前記データ要素に境界条件を適用することは、
前記第１のバッファに格納された前記データ要素の最小値を表すものとしてデータ要素を特定することと、
前記最小値を表す前記データ要素と前記第１のバッファに入力するために受信されたデータ要素との差を決定することと
を含む、請求項５２に記載のコンピューティングシステム。
【請求項５５】
前記境界条件に基づいて、前記第１のバッファから１つまたは複数のデータ要素をイジェクトすることは、
１つまたは複数のデータ要素が既定の値を超えているかどうかを決定することと、
前記１つまたは複数のデータ要素が前記既定の値を超えている場合に、前記第１のバッファから前記１つまたは複数のデータ要素をイジェクトすることと
を含む、請求項５２に記載のコンピューティングシステム。
【請求項５６】
前記第１および第２のバッファの少なくとも１つは、スキップリストデータ構造によって実装される、請求項２１に記載のコンピューティングシステム。
【請求項５７】
前記第１および第２のバッファの少なくとも１つは、ツリープデータ構造によって実装される、請求項２１に記載のコンピューティングシステム。
【請求項５８】
第１および第２のバッファの個別のデータ要素の１つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出される、請求項２１に記載のコンピューティングシステム。
【請求項５９】
前記第１のバッファの前記データ要素の前記既定の順序は、前記第１のバッファから前記データ要素を除去するための優先度順を含む、請求項２２に記載のコンピューティングシステム。
【請求項６０】
前記第２のバッファに格納される前記データ要素の一部は、前記既定の順序に従って実質的にソートされる、請求項２２に記載のコンピューティングシステム。
【請求項６１】
前記第２のバッファに格納される前記データ要素の一部は、前記第１のバッファに格納された前記データ要素の少なくとも半分を含む、請求項２２に記載のコンピューティングシステム。
【請求項６２】
前記第２のバッファに保存される前記データ要素の一部に対応する前記第１のバッファの位置にデータ要素を格納する手段をさらに含む、請求項２２に記載のコンピューティングシステム。
【請求項６３】
前記既定の順序に従って、前記第１のバッファから１つまたは複数のデータ要素を除去する手段と、
前記第１のバッファから前記除去された１つまたは複数のデータ要素を、前記既定の順序に従って実質的にソートされたデータ要素の出力ストリームとして提供する手段と
をさらに含む、請求項２２に記載のコンピューティングシステム。
【請求項６４】
前記プロキシデータ要素が前記第１のバッファに格納された要素の最優先のデータ要素になることに応じて、前記第２のバッファからの１つまたは複数のデータ要素を前記第１のバッファの前記データ要素とマージする手段をさらに含む、請求項５９に記載のコンピューティングシステム。
【請求項６５】
前記マージされたデータ要素は、前記既定の順序に基づいてソートされる、請求項６４に記載のコンピューティングシステム。
【請求項６６】
前記第２のバッファからの前記１つまたは複数のデータ要素の前記第１のバッファの前記データ要素とのマージは、出力データ要素の生成と実質的に同時に起こる、請求項２２に記載のコンピューティングシステム。
【請求項６７】
前記プロキシデータ要素は、前記第２のバッファからの除去を最優先とする前記第２のバッファからの要素のコピーである、請求項２２に記載のコンピューティングシステム。
【請求項６８】
前記除去された１つまたは複数のデータ要素は、前記第１のバッファの前記要素の最小値を表す前記第１のバッファからのデータ要素を含む、請求項６３に記載のコンピューティングシステム。
【請求項６９】
前記除去された１つまたは複数のデータ要素は、前記第１のバッファの前記要素の最大値を表す前記第１のバッファからのデータ要素を含む、請求項６３に記載のコンピューティングシステム。
【請求項７０】
前記第１のバッファに格納された前記データ要素に境界条件を適用する手段であって、前記境界条件は、前記第１のバッファに格納された任意の２つのデータ要素間の最大許容差を表す、手段と、
前記境界条件に基づいて、前記既定の優先度順に従ってソートされたデータ要素の出力ストリームとして、前記第１のバッファから１つまたは複数のデータ要素をイジェクトする手段と
をさらに含む、請求項２２に記載のコンピューティングシステム。
【請求項７１】
各データ要素は、データ記録生成時間を表す、請求項７０に記載のコンピューティングシステム。
【請求項７２】
前記第１のバッファに格納された前記データ要素に境界条件を適用することは、
前記第１のバッファに格納された前記データ要素の最小値を表すものとしてデータ要素を特定することと、
前記最小値を表す前記データ要素と前記第１のバッファに入力するために受信されたデータ要素との差を決定することと
を含む、請求項７０に記載のコンピューティングシステム。
【請求項７３】
前記境界条件に基づいて、前記第１のバッファから１つまたは複数のデータ要素をイジェクトすることは、
１つまたは複数のデータ要素が既定の値を超えているかどうかを決定することと、
前記１つまたは複数のデータ要素が前記既定の値を超えている場合に、前記第１のバッファから前記１つまたは複数のデータ要素をイジェクトすることと
を含む、請求項７０に記載のコンピューティングシステム。
【請求項７４】
前記第１および第２のバッファの少なくとも１つは、スキップリストデータ構造によって実装される、請求項２２に記載のコンピューティングシステム。
【請求項７５】
前記第１および第２のバッファの少なくとも１つは、ツリープデータ構造によって実装される、請求項２２に記載のコンピューティングシステム。
【請求項７６】
第１および第２のバッファの個別のデータ要素の１つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出される、請求項２２に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１１年２月１８日に出願された「Managing Buffer Conditions」と称する米国特許出願第１３／０３１，０３４号の優先権を主張し、同特許は、その全内容が参照により本明細書に組み込まれる。
【０００２】
本説明は、バッファ状態の管理に関連する。
【背景技術】
【０００３】
さまざまなデータ処理技術と同様に、バッファ管理技術は、多くのアプリケーションにおいて重要な役割を果たす。一実装形態では、バッファオーバーフロー状態は、コンピュータシステムに大混乱をもたらす恐れがあり、例えば、メモリ容量を超えるデータ量の格納を試みる場合に、処理が遅くなることも、完全に停止することもあり得る。オーバーフローを阻止するため、データは、他の目的に対して義務を有し得る他の記憶域に書き込むことができ、それにより、処理がスローダウンまたは終了される可能性もある。
【発明の概要】
【課題を解決するための手段】
【０００４】
一態様では、一般に、コンピュータ実装方法は、第１のバッファのオーバーフロー状態を検出する工程に応じて、第１のバッファに存在するデータ要素の一部を第２のバッファに格納する工程であって、第１のバッファのデータ要素は、既定の順序に従ってソートされる、工程と、第１のバッファにプロキシデータ要素を挿入して、第２のバッファに格納されるデータ要素の一部を表す工程とを含み得る。
【０００５】
態様は、以下の１つまたは複数を含み得る。
【０００６】
第１のバッファのデータ要素の既定の順序は、第１のバッファからデータ要素を除去するための優先度順を含み得る。第２のバッファに格納されるデータ要素の一部は、既定の順序に従って実質的にソートすることができる。第２のバッファに格納されるデータ要素の一部は、第１のバッファに格納されたデータ要素の少なくとも半分を含み得る。本方法は、第２のバッファに保存されるデータ要素の一部に対応する第１のバッファの位置にデータ要素を格納する工程を含み得る。本方法は、既定の順序に従って、第１のバッファから１つまたは複数のデータ要素を除去する工程と、第１のバッファから除去された１つまたは複数のデータ要素を、既定の順序に従って実質的にソートされたデータ要素の出力ストリームとして提供する工程とを含み得る。本方法は、プロキシデータ要素が第１のバッファの格納要素の最優先のデータ要素になることに応じて、第２のバッファからの１つまたは複数のデータ要素を第１のバッファのデータ要素とマージする工程を含み得る。本方法は、プロキシデータ要素が第１のバッファから除去されるものとして特定されることに応じて、第２のバッファからの１つまたは複数のデータ要素を第１のバッファのデータ要素とマージする工程を含み得る。マージされたデータ要素は、既定の順序に基づいてソートすることができる。マージは、出力データ要素の生成と実質的に同時に起こり得る。プロキシデータ要素は、第２のバッファからの除去を最優先とする第２のバッファからの要素のコピーであり得る。除去された１つまたは複数のデータ要素は、第１のバッファの要素の最小値を表す第１のバッファからのデータ要素を含み得る。除去された１つまたは複数のデータ要素は、第１のバッファの要素の最大値を表す第１のバッファからのデータ要素を含み得る。本方法は、第１のバッファに格納されたデータ要素に境界条件を適用する工程と、境界条件に基づいて、既定の優先度順に従ってソートされたデータ要素の出力ストリームとして、第１のバッファから１つまたは複数のデータ要素をイジェクトする工程とを含み得る。
【０００７】
各データ要素は、データ記録生成時間を表し得る。第１のバッファに格納されたデータ要素に境界条件を適用する工程は、第１のバッファに格納されたデータ要素の最小値を表すものとしてデータ要素を特定する工程と、最小値を表すデータ要素と第１のバッファに入力するために受信されたデータ要素との差を決定する工程とを含み得る。境界条件に基づいて、第１のバッファから１つまたは複数のデータ要素をイジェクトする工程は、１つまたは複数のデータ要素が既定の値を超えているかどうかを決定する工程と、１つまたは複数のデータ要素が既定の値を超えている場合に、第１のバッファから１つまたは複数のデータ要素をイジェクトする工程とを含み得る。第１および第２のバッファの少なくとも１つは、スキップリストデータ構造によって実装することができる。第１および第２のバッファの少なくとも１つは、ツリープ（treap）データ構造によって実装することができる。第１および第２のバッファの個別のデータ要素の１つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出することができる。
【０００８】
別の態様では、一般に、データ要素をソートするためのコンピュータプログラムを格納するコンピュータ可読記憶媒体は、コンピューティングシステムに、第１のバッファのオーバーフロー状態を検出する工程に応じて、第１のバッファに存在するデータ要素の一部を第２のバッファに格納させるための命令であって、第１のバッファのデータ要素は、既定の順序に従ってソートされる、命令と、第１のバッファにプロキシデータ要素を挿入して、第２のバッファに格納されるデータ要素の一部を表させるための命令とを含み得る。
【０００９】
別の態様では、一般に、データ要素をソートするためのコンピューティングシステムは、第１のバッファに存在するデータ要素の一部を第２のバッファに格納するためのデータ格納システムと、データ格納システムと結合され、受信されたデータ要素のストリームを処理するよう構成された少なくとも１つのプロセッサとを含み得る。処理する工程は、第１のバッファのオーバーフロー状態を検出する工程に応じて、第１のバッファに存在するデータ要素の一部を第２のバッファに格納する工程であって、第１のバッファのデータ要素は、既定の順序に従ってソートされる、工程と、第１のバッファにプロキシデータ要素を挿入して、第２のバッファに格納されるデータ要素の一部を表す工程とを含み得る。
【００１０】
別の態様では、一般に、データ要素をソートするためのコンピューティングシステムは、第１のバッファに存在するデータ要素の一部を第２のバッファに格納するための手段と、受信されたデータ要素のストリームを処理するための手段とを含む。処理する工程は、第１のバッファのオーバーフロー状態を検出する工程に応じて、第１のバッファに存在するデータ要素の一部を第２のバッファに格納する工程であって、第１のバッファのデータ要素は、既定の順序に従ってソートされる、工程と、第１のバッファにプロキシデータ要素を挿入して、第２のバッファに格納されるデータ要素の一部を表す工程とを含み得る。
【００１１】
態様は、以下の利点の１つまたは複数を含み得る。
【００１２】
いくつかの例では、第１のバッファおよびそのコンテンツは、例えばランダムアクセスメモリ（ＲＡＭ：random access memory）などの高速メモリに格納することができる。オペレーションの間、第１のバッファのある部分を低速メモリ（例えば、ハードディスク）に格納することがより望ましい場合がある。例えば、プライマリバッファのある要素は、すぐには必要とされない場合があり、従って、低速メモリに格納することができる第２のバッファへ除去することができる。１つまたは複数のセカンダリバッファは、すぐには必要とされない要素を一時的に格納するために使用することができる。これらの要素は、第１のバッファに存在していた実質的に等しい数の要素がもはや存在せず、それにより、要素のための適切なスペースが提供される場合に、第１のバッファに復元することができる。
【００１３】
さらに、大部分がソートされる受信されたデータ要素のストリームに関与するいくつかの実装形態では、要素の大多数とともに適正な順序にはない一部を除いて、要素は、大部分がソートされた順序で存在し得る。ストリームの各個別のデータ要素を受信した後で、プライマリバッファに格納されたデータ要素に境界条件を適用することによって、既定の順序に従ってソートされたデータ要素の出力ストリームを生成することができる。
【００１４】
本発明の他の特徴および利点は、以下の説明および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１５】
【図１】バッファ管理システムのブロック図である。
【図２】一連の管理オペレーションを経たバッファを示す。
【図３】バッファ管理プロセスのフローチャートである。
【発明を実施するための形態】
【００１６】
図１を参照すると、例示的なバッファ管理システム１００は、記憶装置１０８にデータ要素１０６ａ〜ｎ（総称して１０６）を格納するコンピュータシステム１０４（例えば、１つまたは複数のクライアントシステムへのサービスを行うウェブサーバなどのサーバ）上で実行されるアプリケーション１０２（例えば、ソートアプリケーション）を含む。記憶装置１０８は、例えば、複数のバッファ（２つのバッファ１１０、１１２で示されるような）を有するハードドライブメモリまたは他の取り外し可能な記憶媒体であり得、コンピュータシステム１０４の一部としても、別々のスタンドアロンメモリデバイスとしても実装することができる。いくつかの例では、第１のバッファ１１０は、例えばランダムアクセスメモリなどの第１のメモリに位置し、第２のバッファ１１２は、ハードディスクに位置し得る。
【００１７】
要素１０６は、例えば、ソートアプリケーション１０２によって生成されたデータ記録（図示せず）の１つまたは複数の属性に割り当てられた値など、さまざまなタイプの情報を表し得る。いくつかの実装形態では、要素１０６は、１つまたは複数のデータ記録上で実行されたコンピューテーションから生じた値を表し得る。要素１０６によって表され得る他の情報は、例えばソートアプリケーション１０２によって対応するデータ記録が作成された際のそれぞれの時間などのタイムスタンプを含み得る。
【００１８】
ソートアプリケーション１０２はさまざまな異なる機能を提供することができるが、一例としては、ソートアプリケーション１０２は、その内容はその全体が参照により本明細書に組み込まれる、同時係属の米国特許出願第１３／０３１，０５６号にさらに詳細に説明されているウィンドウソートアプリケーションであり得る。いくつかの例では、ソートアプリケーション１０２は、データ要素１０６を生成せずに、場合により、ソートするための第２の異なるアプリケーション１１４（例えば、コンピュータシステム１１６上で実行される）からデータ要素１０６を受信することができる。
【００１９】
ソートは、本明細書では、受信されたストリームの要素１０６をある順序に置くプロセスを指す。例えば、ソートアプリケーション１０２は、要素の数値の昇順に要素を出力することができる。オペレーション中は、ソートアプリケーション１０２は、ソートされていない要素の入力ストリーム（例えば、データソースアプリケーション１１４から到達する要素）をプライマリバッファと呼ばれるバッファ１１０に格納する。要素は、格納要素１１８ａ〜ｂ（総称して１１８）として実質的にソートされた形で格納することができる。しかし、入力ストリームには比較的多数の要素（例えば、数百万）が存在し得、証拠として、これらの要素により、プライマリバッファ１１０は、提供される要素のすべてを格納することができなくなる場合がある。例えば、プライマリバッファ１１０は、その物理的な最大メモリサイズに基づく容量に達する場合がある。そのような状況の結果、プライマリバッファ１１０は、オーバーフローとなり、コンピュータシステム１０４のオペレーションに混乱をもたらし、停止させる恐れがある。そのような問題を軽減するため、１つまたは複数の「スピルオーバーベースン（spill-over basin）」またはバッファ１１２などのセカンダリバッファを使用して、オーバーフロー要素を一時的に格納することができ、図１では要素１２０ａ〜ｂ（総称して１２０）として表される。
【００２０】
いくつかの例では、プライマリバッファおよびそのコンテンツは、例えばランダムアクセスメモリ（ＲＡＭ）などの高速メモリに格納することができる。オペレーションの間、プライマリバッファのある部分を低速メモリ（例えば、ハードディスク）に格納することがより望ましい場合がある。例えば、プライマリバッファのある要素は、すぐには必要とされない場合があり、従って、低速メモリに格納することができる第２のバッファへ除去することができる。そのような状況に対処するため、バッファ１１２などの１つまたは複数のセカンダリバッファを使用して、要素１２０ａ〜ｂとして、すぐには必要とされない要素を一時的に格納することができる。
【００２１】
これらの要素１２０は、プライマリバッファ１１０に存在していた実質的に等しい数の要素がもはや存在せず（例えば、イジェクトされた要素１２２ａ〜ｂ）、それにより、要素１２０のための適切なスペースが提供される場合に、プライマリバッファ１１０に復元する（例えば、マージし直す）ことができる。
【００２２】
ソートされた出力を提供するため、ソートアプリケーション１０２は、イジェクトされた要素１２２が実質的にソートされた順序にあることを保証するためのオペレーションを実行する。例えば、イジェクトされた要素１２２は、最初に小さな（または、好ましい出力に応じて、大きな）値の要素がイジェクトされ、それに続いて、より大きな（より小さな）値の要素がイジェクトされるように、イジェクトされる。要素がタイムスタンプ値を表す例の場合、最新の（または、好ましい出力に応じて、最古の）タイムスタンプと関連する要素がバッファからイジェクトされ得る。イジェクトされた要素１２２は、示されるように、追加の処理のため、別のコンピュータシステム１２６によって実行される受信アプリケーション１２４に提供することができる。受信アプリケーション１２４は、イジェクトされた要素１２２の受信および処理が可能なタイプのソフトウェアアプリケーションを代表するものである。
【００２３】
図２は、バッファオーバーフローを管理するためのオペレーションを示す１組のバッファ２１０および２１２（例えば、図１に示されるプライマリバッファ１１０およびセカンダリバッファ１１２）の状態２０２〜２０８の図表示である。入力要素の順序は、完全に無作為の順序または幾分か決定論的な順序（例えば、部分的にソートされる、大部分がソートされる、など）など、さまざまな順序で提供され得る。大部分がソートされるシナリオでは、一部の外れ値（大多数と比べて）を除いて、要素は、大部分がソートされた順序にあり得る。そのような外れ値を定量化すると、比較的多数の要素（例えば、数百万）を有するストリームの場合、要素のおよそ０．１〜１０％が順序に狂いが生じている場合がある。多数の要素を有するストリーム内の適正な位置にそのような外れ値要素を効率的に挿入するため、ソートアプリケーションは、要素の大多数が適切に順序付けられて到達するという事実を利用することができる。例えば、外れ値を含む入力要素は、ソートされた形でプライマリバッファ２１０に格納する（例えば、ソートアプリケーション１０２によって）ことができる。既にソートされて到達する大多数の要素の場合、要素をバッファ２１０に格納することは、比較的効率的なプロセスである。しかし、外れ値がバッファに到達し、プライマリバッファ２１０内の適切な位置に挿入する必要がある場合は、追加時間が必要とされ得る。
【００２４】
通常、格納要素は、１つまたは複数の規則に基づいて、プライマリバッファ２１０からイジェクトされる。例えば、各格納要素に関連する値（例えば、数値）を使用して、対応する要素をイジェクトすべきかどうかを決定することができる。要素が格納される順序では、プライマリバッファ２１０から１つまたは複数の要素をイジェクトするかどうかの決定も考慮され得る。適切な時間に、ソートアプリケーション１０２は、ソートされた順序（例えば、昇順、降順など）に従って、優先順にプライマリバッファ２１０の要素をイジェクトする。さらに、格納要素に課された条件（例えば、任意の２つの格納要素間の最大許容差）に違反した場合、要素はイジェクトされ得る。プライマリバッファ２１０からイジェクトされた時点で、結果として得られた要素は、ソートされた要素の出力ストリームを形成する。
【００２５】
数値の昇順に従って要素がソートされる場合は、最初に小さな値の要素がイジェクトされ、その後、より大きな値の要素がイジェクトされ得る。同様に、降順に従って要素がソートされる場合は、早い時間に大きな値の要素がイジェクトされ、その後、より小さな値の要素がイジェクトされ得る。各要素に関連するそのような数値は、１つまたは複数の数量を表し得る。
【００２６】
バッファ２１０、２１２は、特定のソートされた順序でデータ要素を格納して要素をイジェクトするためのデータ構造およびアーキテクチャの１つまたは複数のタイプ（例えば、優先度付きキューデータ構造）によって実装することができる。一実装形態では、ソートアプリケーション１０２は、データ構造を使用して、データ要素をソートするためのさまざまな機能を提供できる場合がある。例えば、一構成では、プライマリおよびセカンダリバッファを定義するために選択されたデータ構造上で３つの機能を主に使用することができる。
【００２７】
３つの機能の１つにおいては、ソートアプリケーション１０２は、構造内の格納要素の優勢なソート順序によって決定されるように、データ構造の適切な位置に要素を挿入することができる。例えば、その数値の昇順に構成された格納要素について考慮する。ソートアプリケーション１０２は、入力要素の数値に基づいて、データ構造の適切な位置に新しい入力要素を挿入できる場合がある。第２の機能としては、ソートアプリケーションは、イジェクション優先度順（例えば、バッファの最小または最大データ要素をイジェクトする）に基づいて、構造からイジェクトされているものとして１つまたは複数の要素を特定できる場合がある。第３に、ソートアプリケーションは、構造内に存在する１つまたは複数の特定された要素のイジェクションを開始する機能を提供することができる。
【００２８】
一構成では、プライマリバッファ２１０およびセカンダリバッファ２１２のそれぞれは、バランスの取れた二分木データ構造（例えば、ヒープ二分木データ構造）であり得る。一般に、ヒープ二分木データ構造（単にヒープと呼ばれる場合が多い）は、２つの条件を満たす。１つの条件は、木構造に含まれる子ノードの優先度が親ノードの優先度と少なくとも同程度であることであり得る。第２の条件は、ヒープが「完全な木」であること、すなわち、あらゆる行が満たされている木であること、すなわち、恐らく最終行を除いて、葉ノード間に間隙（満たされていないノード）がないことであり得る。
【００２９】
いくつかの例では、バッファ２１０、２１２は、スキップリストデータ構造によって実装することができる。一般に、スキップリストデータ構造およびその関連アルゴリズムは、リンクされた線形リストの変形例であり、キーを有するデータ要素の頻繁な挿入を要求する状況におけるソート性能を向上させることができる。スキップリストデータ構造は、データ要素（または、ノード）の順序付けられたリンクされた線形リストを含み得、いくつかの要素は、中間データ要素をスキップする追加のポインタを有し、従って、データ要素の探索の速度および効率を増加する。
【００３０】
スキップリストデータ構造としてバッファ２１０、２１２を実装することによって、最小データ要素を検索するための検索時間は、Ｏ（１）時間であり得る。Ｏ（１）時間の挿入時間は、データ要素を適切に挿入する（例えば、要素は、ごく最近挿入された要素に隣接して挿入される）ために必要な場合がある。挿入位置がごく最近挿入された要素に隣接しない場合は、挿入時間はＯ（ｌｏｇ  Ｎ）時間であり得る。「ｋ」要素（例えば、最大値を有する要素）を読み出すためのイジェクション時間は、Ｏ（ｋ）時間であり得る。スキップリストデータ構造については、その内容はその全体が参照により本明細書に組み込まれる、William Pughによる「Skip lists: A probabilistic alternative to Balanced trees」と称する文書Communications of the ACM. 1990年,6月 668-676頁でさらに詳細に説明されている。
【００３１】
また、他の技術も利用することができ、例えば、ツリープデータ構造によってバッファ２１０、２１２を実装することができる。ツリープデータ構造は、各ノードが無作為に割り当てられた優先度属性およびキーを有する二分探索木である。ノードは、それらのキーに関して、典型的な二分探索木のような順序にある。すなわち、キーに関して、ノードの左側のサブツリーは、ノードのキー未満のキーを有するノードのみを含み、ノードの右側のサブツリーは、ノードのキー以上のキーを有するノードのみを含む。それに加えて、ノードは、それらの優先度属性に関して、「ヒープ順」にあり、その結果、各子ノードは、親ノードの優先度属性と少なくとも同程度である優先度属性を有する。ツリープデータ構造については、その内容はその全体が参照により本明細書に組み込まれる、Aragon, Cecilia R.およびSeidel, Raimundによる「Randomized Search Trees」と称する文書Proc. 30th Symp. Foundations of Computer Science (FOCS 1989年)でさらに説明されている。
【００３２】
一実装形態では、ソートアプリケーション１０２は、プライマリバッファ２１０上で境界条件を適用させることができ、境界条件を使用して、プライマリバッファから要素をイジェクトするかどうか、および、いつプライマリバッファから要素をイジェクトするか決定する。境界条件は、プライマリバッファへの格納が許可される要素値の「ウィンドウ」の形を取ることができる。ウィンドウは、プライマリバッファの任意の２つの格納データ要素間の最大許容差を表し得る。そのため、ウィンドウの「幅」は、プライマリバッファで許可される値の範囲を表す。例えば、ウィンドウ幅は、プライマリバッファ２１０の最小要素と最大要素との差を計算することによって、定義することができる。
【００３３】
境界条件は、条件が満たされているまたは満たされていない（例えば、違反している）と見なすことができるという点において、バイナリと見なすことができる。例えば、入力要素が原因でウィンドウ幅を超えることにならない限り、境界条件は満たされていると見なすことができる。逆に、ウィンドウ幅を超えた場合は、境界条件に違反していると見なすことができる。境界条件への違反があり次第、１つまたは複数の動作を実行することができ、例えば、イジェクション優先度順に従ってプライマリバッファ２１０の１つまたは複数の要素がイジェクトされ得る。
【００３４】
さまざまな技術を使用して、ウィンドウに関連するパラメータを定義することができ、例えば、ユーザがウィンドウ幅を指定することも、事前に定義しておくこともできる。例えば、特定のアプリケーション（例えば通話終了時間に基づいてソートする）に基づいて、ウィンドウ幅を定義することができる。状況次第では、ウィンドウ幅は、「順序の狂い」の度合い、例えば、外れ値要素が許容され得る度合いに相当する。例えば、タイムスタンプされたデータ要素に関与する状況について考慮する。ウィンドウ幅は、バッファ内に現在存在するタイムスタンプされた要素（例えば、最小または最大のタイムスタンプされた要素）と比較して、どのくらい遅くまでタイムスタンプされた要素をプライマリバッファに提供できるかを示す。一構成では、ウィンドウ幅（時間の単位で）が４時間であれば、プライマリバッファ２１０は、４時間ウィンドウの範囲内のすべてのタイムスタンプされた要素を格納することができる（プライマリバッファの最小のタイムスタンプされた要素によって定義されるように）。４時間の範囲外で到達するタイムスタンプされた要素は、廃棄されることも、別々に処理されることもある。
【００３５】
図２で示されるように、プライマリバッファ２１０の個別のコンテンツ、プライマリバッファ２１０のウィンドウ幅（ラベルＷで示される）、プライマリバッファ２１０内に現在存在する最小要素（ラベルＳで示される）および現在の出力データ要素についての情報は、各状態２０２〜２０８に対して提供される。この例では、要素は昇順で格納され、入力ストリームは大部分が昇順でソートされるように見える。ソートに基づいて、出力ストリームは、昇順で実質的にソートされて提供される。デモンストレーションを目的として、約１３個の要素のストリームに対して動作させるものとして例が示されるが、プロセスは、それより多いまたは少ない要素でストリームに対して動作させてもよく、例えば、プロセスによって要素の連続ストリームを入力してソートすることができる。
【００３６】
初期状態２０２では、ウィンドウ幅値は２０と事前に定められる（例えば、プライマリバッファ２１０の最小要素と最大要素との差は値２０以上ではない）。示されるように、プライマリバッファ２１０は満杯であり、従って、それ以上の要素を格納することはできない。プライマリバッファ２１０の現在最小値の要素は値０を有する（かつ、状態２０２では、Ｓ＝０で表される）。要素はイジェクトされていないため、現在の出力は「ＮＩＬ」（すなわち、出力データ要素無し）で表される。また、セカンダリバッファ２１２は現在空である。
【００３７】
状態２０４では、次の値１６の入力要素がプライマリバッファ２１０に挿入されることになっている。しかし、要素１６に対する適切な位置は、値１７の要素と値１４の要素との間であるが、プライマリバッファ２１０には、現在、値１６の要素用のスペースを作るために値１７の要素を移動することができる、要素の挿入に必要なスペースがない。スペースを作るため、プライマリバッファ２１０の格納要素の既定の部分（例えば、半分）を除去してセカンダリバッファ２１２に提供することができ、プライマリバッファ２１０の新たに利用可能な位置に値１６の要素を格納することができる。例えば、格納要素の大きい方の半分（すなわち、値１７、１４、１１、１０、９の要素）をセカンダリバッファ２１２に移動することができる。いくつかの例では、既定の部分は、事前に定義された規則に基づいて選択される。
【００３８】
格納要素の大きい方の半分を除去する一利点は、要素をプライマリバッファ２１０にマージし直すのに必要な時間の最大化である。要素を除去してそれらをセカンダリバッファ２１２に書き込むのに必要な時間は、およそＯ（ｋ）時間であり、ｋは除去された要素の数である。除去された要素は、ソートされた順序でセカンダリバッファ２１２に格納することもできる。さらに、プロキシ要素（例えば、プライマリバッファではＳ９とラベル付けされる）は、プライマリバッファ２１０の適切な位置に挿入することができる。プロキシ要素を使用して、除去されてセカンダリバッファ２１２に格納された要素を表す（例えば、プライマリバッファ２１０内）。プロキシ要素は、例えば、プロキシ要素を表すデータ要素に追加されるBooleanフィールド（フラグ）を変更することによってなど、さまざまな方法で表すことができる。プロキシ要素の位置は、プライマリバッファ２１０の残存要素の優勢な順序によって確立することができる。例えば、このデモンストレーションでは、除去された要素の最小値は値９を有するため、プロキシ要素Ｓ９は、新たに挿入された値１６の要素と値８の要素との間に挿入することができる。状態２０４では、プライマリバッファ２１０の最小要素と最大要素との差は１６であり、これは依然としてウィンドウ幅２０未満であるため、境界条件に違反しているとは見なされず、従って、データ要素をイジェクトする必要はない。
【００３９】
状態２０６では、示されるように、プライマリバッファ２１０において、要素格納のための数カ所の位置が利用可能となっている。次の値２０の入力要素は、プライマリバッファの適切な位置、すなわち、値１６の要素の後に挿入される。この挿入に基づいて、プライマリバッファ２１０の最小要素と最大要素との差は２０であり、これはウィンドウ幅２０に等しく、従って、境界条件に違反している。そのため、境界条件に違反している限り、要素は、要素のイジェクション優先度の順序（例えば、昇順）でプライマリバッファ２１０からイジェクトされる。プライマリバッファ２１０の最小要素は、値０を有するものであり、これがイジェクトされる。すると、次の最小要素は値１を有するものである。この状態でのプライマリバッファ２１０の最小要素と最大要素との差は１９であり、これはウィンドウ幅２０未満であるため、境界条件には違反していない。その結果、プライマリバッファ２１０からそれ以上の要素をイジェクトする必要はない。
【００４０】
状態２０８では、値２９の要素がプライマリバッファ２１０に挿入されると、最小要素と最大要素との差は２８となり（すなわち、２９から１を引く）、これはウィンドウ幅２０を超える。境界条件に違反しており、従って、プライマリバッファ２１０から値１、６、７および８の要素がイジェクトされる。ここでは、２９から９を引くと２０であるため、プロキシ要素Ｓ９も境界条件に違反することになる。
【００４１】
この状況では、セカンダリバッファ２１２からの要素をプライマリバッファ２１０の要素とマージし直すことができ、その結果、組み合わされた要素が順序に格納される。読者の便宜を図るため、プライマリバッファ２１０に新たにマージされた要素は、太字の下線が引かれた書体で示される。一般に、スキップリストデータ構造によって実装されたプライマリバッファ２１０の場合、プライマリバッファ２１０に要素をマージし直すのに必要な時間は、およそＯ（ｋ  ｌｏｇ（ｎ／ｋ））時間であり、「ｎ」はプライマリバッファ２１０の要素の数であり、「ｋ」はマージされた要素の数である。マージが完了した後、値９の要素は、この要素が原因で境界条件に違反することになるため（２９から９を引くと２０である）、バッファからイジェクトされ得る。そのため、ここでは、バッファの最小要素は値１０を有するものであり、これは境界条件には違反していない。その結果、プライマリバッファからそれ以上の要素はイジェクトされない。
【００４２】
通常、マージが起こると、プライマリバッファからイジェクトされる要素の数は、セカンダリバッファに存在する要素の数に等しい。例えば、プライマリバッファから４つの要素がイジェクトされることで、セカンダリバッファから４つの要素に対するスペースが提供される（５番目の値９の要素は、マージの後でイジェクトされる）。
【００４３】
数などのバッファアーキテクチャの変形例は、いくつかの実装形態において達成することができる。例えば、１つのプライマリバッファおよび２つ以上のセカンダリバッファを利用することができる。複数のバッファと同様に、複数のプロキシ要素をプライマリバッファに格納することができ、それぞれが、要素を格納する複数のセカンダリバッファに対応する。プロキシ要素がプライマリバッファの最優先イジェクション要素になると、対応するセカンダリバッファからの要素はプライマリバッファにマージされる。
【００４４】
いくつかの例では、セカンダリバッファの容量が満たされ、別の異なるバッファ（例えば、ターシャリバッファ）がオーバーフロー要素の格納に使用される場合がある。プロキシ要素は、セカンダリバッファの適切な位置に挿入して、ターシャリバッファに格納されるオーバーフロー要素を表すことができる。
【００４５】
セカンダリバッファの長さ（および、ひいてはこれらのバッファに対応するファイルサイズ）は、オーバーフロー状態が起こる際にプライマリバッファから除去された要素の数に依存する。例えば、最適のファイルサイズは、プライマリバッファの効率的な使用を可能にするだけの数の要素（例えば、最大で少なくとも半分の要素の数）をプライマリバッファから除去する工程を伴う。さらなる考慮は、除去およびマージオペレーションの数の最小化である。
【００４６】
ここで、図３を参照すると、バッファのオーバーフロー状態を管理するための例示的なバッファオーバーフロー管理プロセス３００のオペレーションを表すフローチャートが示されている。一実装形態では、以下に概説される工程は、コンピュータシステム上で実行されるソフトウェアアプリケーションによって行うことができる。事前準備として、１つまたは複数の技術を使用して、プライマリおよびセカンダリバッファを初期化する（工程３０２）。例えば、初期化は、入力要素を格納するための、記憶域、例えば、複数の連続メモリアドレスを指定する工程を含み得る。初期化の一部として、プライマリバッファに対して境界条件を指定することができる。例えば、プライマリバッファのウィンドウ幅に相当する値を保持するための変数を定義することができる。ウィンドウ幅は、プライマリバッファの任意の２つの格納データ要素値間の最大許容差を表し得る。
【００４７】
プライマリバッファに対する境界条件が定義されると、プライマリバッファがデータ要素の入力ストリームを受信する準備が整う（工程３０４）。しかし、プライマリバッファが容量に達すると、オーバーフロー状態が起こる（工程３０６）。オーバーフロー状態は、プライマリバッファにそれ以上の要素を収容できなくなると起こる。この状況では、プライマリバッファの格納要素の一部（例えば、半分）を除去してセカンダリバッファに格納することができる（工程３０８）。１つまたは複数の技術を使用して、プライマリバッファ（例えば、第１のバッファ）にプロキシデータ要素を挿入して、セカンダリバッファ（例えば、第２のバッファ）に格納されるデータ要素の一部を表すことができる。例えば、プロキシ要素は、除去された要素を表すためにプライマリバッファの適切な位置に挿入することができる番兵（sentinel）によって提供することができる。バッファからプロキシ要素をイジェクトする必要がある場合、ソートされた順序でプライマリバッファにセカンダリバッファの格納要素をマージする（工程３１０）。入力要素が存在する限り、プロセス３００は、あらゆる入力要素に対して繰り返すことができる。
【００４８】
本明細書に記載される技術は、コンピュータ上で実行するためのソフトウェアを使用して実施することができる。例えば、ソフトウェアは、１つまたは複数のプログラムされたまたはプログラム可能なコンピュータシステム（それは、分散型、クライアント／サーバまたはグリッドなどのさまざまなアーキテクチャのものである）上で実行する１つまたは複数のコンピュータプログラムの手順を形成し、コンピュータシステムはそれぞれ、少なくとも１つのプロセッサと、少なくとも１つのデータ格納システム（揮発性および不揮発性メモリならびに／または格納要素を含む）と、少なくとも１つの入力デバイスまたはポートと、少なくとも１つの出力デバイスまたはポートとを含む。ソフトウェアは、例えば、コンピューテーショングラフの設計および構成に関連する他のサービスを提供する大規模なプログラムの１つまたは複数のモジュールを形成することができる。グラフのノードおよび要素は、コンピュータ可読媒体に格納されたデータ構造、または、データリポジトリに格納されたデータモデルに適合する他の組織化されたデータとして実装することができる。
【００４９】
ソフトウェアは、汎用または特殊用途のプログラム可能なコンピュータによる読み取りが可能なＣＤ−ＲＯＭなどの記憶媒体上で提供されても、ネットワークの通信媒体上で、ソフトウェアが実行されるコンピュータに送達されてもよい（伝播信号で符号化される）。機能のすべては、特殊用途のコンピュータ上で、または、コプロセッサなどの特殊用途のハードウェアを使用して実行することができる。ソフトウェアは、ソフトウェアによって指定されるコンピューテーションの異なる部分は異なるコンピュータによって実行される分散様式で実施することができる。それぞれのそのようなコンピュータプログラムは、好ましくは、汎用もしくは特殊用途のプログラム可能なコンピュータによる読み取りが可能な記憶媒体もしくはデバイス（例えば、ソリッドステートメモリもしくは媒体、または、磁気もしくは光媒体）上に格納されるか、または、記憶媒体もしくはデバイスにダウンロードされるが、それは、コンピュータシステムで記憶媒体もしくはデバイスを読み取り、本明細書に記載される手順を実行する際にコンピュータを構成および動作するためである。また、本発明のシステムは、コンピュータ可読記憶媒体として実装され、コンピュータプログラムを用いて構成されるものと考慮され得、そのように構成された記憶媒体は、特定の事前に定義された様式でコンピュータシステムを動作させ、本明細書に記載される機能を実行する。
【００５０】
本発明の多くの実施形態について説明してきた。それにもかかわらず、本発明の精神および範囲から逸脱することなく、さまざまな変更を行うことができることが理解されよう。例えば、上記で説明された工程のいくつかは、順序に依存しないものであり得、従って、説明されている順序とは異なる順序で実行することができる。
【００５１】
前述の説明は、例示を意図するものであり、本発明の範囲を限定するものではなく、本発明の範囲は、添付の特許請求の範囲によって定義されることを理解されたい。例えば、上記で説明された多くの機能工程は、処理全体に実質的に影響を与えることなく、異なる順序で実行することができる。他の実施形態は、以下の特許請求の範囲内にある。
【図１】
0005977263.tif 000002
【図２】
0005977263.tif 000003
【図３】
0005977263.tif 000004