(57)【要約】【課題】ソートにおいて、コンピュータリソースおよび処理時間を節約する。【解決手段】一態様では、受信されたデータ要素のストリームをバッファに格納する工程と、データ要素のストリームの各個別のデータ要素を受信（４０４）した後で、バッファに格納されたデータ要素に境界条件を適用する工程（４０６）と、境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリーム（４０８）として、バッファから１つまたは複数のデータ要素を生成する工程とを含むコンピュータ実装方法を含むシステムおよび技術が開示される。【選択図】図１
2014511526.tif 000002
【特許請求の範囲】
【請求項１】
受信されたデータ要素のストリームをバッファに格納する工程と、
前記データ要素のストリームの各個別のデータ要素を受信した後で、前記バッファに格納された前記データ要素に境界条件を適用する工程と、
前記境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、前記バッファから１つまたは複数のデータ要素を生成する工程と
を含む、コンピュータ実装方法。
【請求項２】
前記バッファから前記１つまたは複数のデータ要素を生成する工程は、
前記バッファから少なくとも最小データ要素を生成する工程
を含む、請求項１に記載の方法。
【請求項３】
前記バッファから前記１つまたは複数のデータ要素を生成する工程は、
前記バッファから少なくとも最大データ要素を生成する工程
を含む、請求項１に記載の方法。
【請求項４】
受信された各データは、データ記録生成時間を表す、請求項１に記載の方法。
【請求項５】
前記データ要素の出力ストリームは、新しい順にソートされる、請求項４に記載の方法。
【請求項６】
前記受信されたデータ要素のストリームの前記データ要素は、部分的にソートされる、請求項１に記載の方法。
【請求項７】
前記受信されたデータ要素のストリームの前記データ要素は、実質的に非同期的に前記バッファに到達する、請求項１に記載の方法。
【請求項８】
受信されたデータ要素のストリームをバッファに格納する工程は、
前記受信されたデータ要素のストリームの各個別の要素を、前記バッファの前記ソート順序によって決定された前記バッファの位置に挿入する工程
を含む、請求項１に記載の方法。
【請求項９】
前記バッファに格納された前記データ要素に境界条件を適用する工程は、
前記バッファに格納された前記データ要素から最小データ要素を特定する工程と、
前記最小データ要素と前記受信された個別のデータ要素との差が閾値を超えているかどうかを決定する工程と
を含む、請求項１に記載の方法。
【請求項１０】
前記境界条件に基づいて、前記バッファから１つまたは複数のデータ要素を生成する工程は、
前記１つまたは複数のデータ要素が前記閾値を超えている場合に、前記バッファから前記１つまたは複数のデータ要素を生成する工程
を含む、請求項４に記載の方法。
【請求項１１】
前記バッファに格納された前記データ要素に境界条件を適用する工程は、
前記バッファの最大サイズを超えているかどうかを決定する工程
を含む、請求項１に記載の方法。
【請求項１２】
前記境界条件に基づいて、前記バッファから１つまたは複数のデータ要素を生成する工程は、
前記バッファの前記最大サイズを超えている場合に、前記バッファから前記１つまたは複数のデータ要素を生成する工程
を含む、請求項１１に記載の方法。
【請求項１３】
前記バッファに格納された前記データ要素に境界条件を適用する工程は、
新たに受信されたデータ要素がカットオフ値を超えているかどうかを決定する工程
を含む、請求項１に記載の方法。
【請求項１４】
前記要素が前記カットオフ値を超えていない場合に、前記新たに受信されたデータ要素をバッファリングする工程
をさらに含む、請求項１３に記載の方法。
【請求項１５】
前記境界条件に基づいて、前記バッファから１つまたは複数のデータ要素を生成する工程は、
前記新たに受信されたデータ要素が前記閾値を超えていない場合に、前記バッファから生成された前記１つまたは複数のデータ要素として、前記新たに受信されたデータ要素を生成する工程
を含む、請求項１３に記載の方法。
【請求項１６】
前記バッファは、スキップリストデータ構造によって実装される、請求項１に記載の方法。
【請求項１７】
前記バッファは、ツリープデータ構造によって実装される、請求項１に記載の方法。
【請求項１８】
前記受信されたデータ要素のストリームの前記個別のデータ要素の１つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出される、請求項１に記載の方法。
【請求項１９】
データ要素のストリームの各個別のデータ要素を受信した後で、受信されたデータ要素に境界条件を適用する工程と、
前記境界条件の第１の結果に基づいて、前記データ要素のストリームの１つまたは複数のデータ要素を格納する工程と、
前記境界条件の第２の結果に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、１つまたは複数のデータ要素を生成する工程と
を含む、コンピュータ実装方法。
【請求項２０】
データ要素をソートするためのコンピュータプログラムを格納するコンピュータ可読記憶媒体であって、前記コンピュータプログラムは、コンピューティングシステムに、
受信されたデータ要素のストリームをバッファに格納させるための命令と、
前記受信されたデータ要素のストリームを処理させるための命令と
を含み、前記処理する工程は、
前記データ要素のストリームの各個別のデータ要素を受信した後で、前記バッファに格納された前記データ要素に境界条件を適用する工程と、
前記境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、前記バッファから１つまたは複数のデータ要素を生成する工程と
を含む、コンピュータ可読記憶媒体。
【請求項２１】
データ要素をソートするためのコンピューティングシステムであって、
受信されたデータ要素のストリームをバッファに格納するためのデータ格納システムと、
前記データ格納システムと結合され、前記受信されたデータ要素のストリームを処理するよう構成された少なくとも１つのプロセッサと
を含み、前記処理する工程は、
前記データ要素のストリームの各個別のデータ要素を受信した後で、前記バッファに格納された前記データ要素に境界条件を適用する工程と、
前記境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、前記バッファから１つまたは複数のデータ要素を生成する工程と
を含む、コンピューティングシステム。
【請求項２２】
データ要素をソートするためのコンピューティングシステムであって、
受信されたデータ要素のストリームを格納するための手段と、
前記受信されたデータ要素のストリームを処理するための手段と
を含み、前記処理する工程は、
前記データ要素のストリームの各個別のデータ要素を受信した後で、前記バッファに格納された前記データ要素に境界条件を適用する工程と、
前記境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、前記バッファから１つまたは複数のデータ要素を生成する工程と
を含む、コンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本願は、２０１１年２月１８日に出願された「Sorting」と題する米国特許出願第１３／０３１，０５６号の優先権を主張し、同特許は、その全内容が参照により本明細書に組み込まれる。
【０００２】
本開示は、ソートに関連する。
【背景技術】
【０００３】
さまざまなデータ処理技術と同様に、ソート技術は、多くのアプリケーションにおいて重要な役割を果たし得る。例えば、データ傾向および相違点は、ソートされたデータリストが提示され次第（１つまたは複数のソートパラメータに基づいて）、ビューアによって迅速に特定され得る。例えば、昇順または降順にリストをソートすることによって、データ境界、範囲および他の数量を視覚的に認識できる可能性がある。ソートアルゴリズムの効率は、ソートされたリストの生成に必要な、実行されるデータ要素比較およびデータ要素の動きの数の関数によってなどの多くの方法論を通じて評価することができる。
【発明の概要】
【課題を解決するための手段】
【０００４】
一態様では、一般に、コンピュータ実装方法は、受信されたデータ要素のストリームをバッファに格納する工程と、データ要素のストリームの各個別のデータ要素を受信した後で、バッファに格納されたデータ要素に境界条件を適用する工程と、境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、バッファから１つまたは複数のデータ要素を生成する工程とを含む。
【０００５】
態様は、以下の１つまたは複数を含み得る。
【０００６】
バッファから１つまたは複数のデータ要素を生成する工程は、バッファから少なくとも最小データ要素を生成する工程を含み得る。バッファから１つまたは複数のデータ要素を生成する工程は、バッファから少なくとも最大データ要素を生成する工程を含み得る。受信された各データは、データ記録生成時間を表し得る。データ要素の出力ストリームは、新しい順にソートすることができる。受信されたデータ要素のストリームのデータ要素は、部分的にソートすることができる。受信されたデータ要素のストリームのデータ要素は、実質的に非同期的にバッファに到達することができる。受信されたデータ要素のストリームをバッファに格納する工程は、受信されたデータ要素のストリームの各個別の要素を、バッファのソート順序によって決定されたバッファの位置に挿入する工程を含み得る。
【０００７】
バッファに格納されたデータ要素に境界条件を適用する工程は、バッファに格納されたデータ要素から最小データ要素を特定する工程と、最小データ要素と受信された個別のデータ要素との差が閾値を超えているかどうかを決定する工程とを含み得る。境界条件に基づいて、バッファから１つまたは複数のデータ要素を生成する工程は、１つまたは複数のデータ要素が閾値を超えている場合に、バッファから１つまたは複数のデータ要素を生成する工程を含み得る。バッファに格納されたデータ要素に境界条件を適用する工程は、バッファの最大サイズを超えているかどうかを決定する工程を含み得る。境界条件に基づいて、バッファから１つまたは複数のデータ要素を生成する工程は、バッファの最大サイズを超えている場合に、バッファから１つまたは複数のデータ要素を生成する工程を含み得る。
【０００８】
バッファに格納されたデータ要素に境界条件を適用する工程は、新たに受信されたデータ要素がカットオフ値を超えているかどうかを決定する工程を含み得る。本方法は、要素がカットオフ値を超えていない場合に、新たに受信されたデータ要素をバッファリングする工程をさらに含み得る。境界条件に基づいて、バッファから１つまたは複数のデータ要素を生成する工程は、新たに受信されたデータ要素が閾値を超えていない場合に、バッファから生成された１つまたは複数のデータ要素として、新たに受信されたデータ要素を生成する工程を含み得る。バッファは、スキップリストデータ構造によって実装することができる。バッファは、ツリープ（treap）データ構造によって実装することができる。受信されたデータ要素のストリームの個別のデータ要素の１つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出することができる。
【０００９】
別の態様では、一般に、コンピュータ実装方法は、データ要素のストリームの各個別のデータ要素を受信した後で、受信されたデータ要素に境界条件を適用する工程と、境界条件の第１の結果に基づいて、データ要素のストリームの１つまたは複数のデータ要素を格納する工程と、境界条件の第２の結果に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、１つまたは複数のデータ要素を生成する工程とを含み得る。
【００１０】
別の態様では、一般に、データ要素をソートするためのコンピュータプログラムを格納するコンピュータ可読記憶媒体は、コンピューティングシステムに、受信されたデータ要素のストリームをバッファに格納させるための命令と、受信されたデータ要素のストリームを処理させるための命令とを含み得る。受信されたデータ要素のストリームを処理する工程は、データ要素のストリームの各個別のデータ要素を受信した後で、バッファに格納されたデータ要素に境界条件を適用する工程と、境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、バッファから１つまたは複数のデータ要素を生成する工程とを含み得る。
【００１１】
別の態様では、一般に、データ要素をソートするためのコンピューティングシステムは、受信されたデータ要素のストリームをバッファに格納するためのデータ格納システムと、受信されたデータ要素のストリームを処理するよう構成された少なくとも１つのプロセッサとを含み得る。処理する工程は、データ要素のストリームの各個別のデータ要素を受信した後で、バッファに格納されたデータ要素に境界条件を適用する工程と、境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、バッファから１つまたは複数のデータ要素を生成する工程とを含み得る。
【００１２】
別の態様では、一般に、データ要素をソートするためのコンピューティングシステムは、受信されたデータ要素のストリームを格納するための手段と、受信されたデータ要素のストリームを処理するための手段とを含み得る。処理する工程は、データ要素のストリームの各個別のデータ要素を受信した後で、バッファに格納されたデータ要素に境界条件を適用する工程と、境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、バッファから１つまたは複数のデータ要素を生成する工程とを含み得る。
【００１３】
態様は、以下の利点の１つまたは複数を含み得る。
【００１４】
大部分がソートされる受信されたデータ要素のストリームに関与するいくつかの実装形態では、要素の大多数とともに適正な順序にはない一部を除いて、要素は、大部分がソートされた順序にあり得る。従来の技術は、要素をソートするために、かなりのコンピューティングリソースおよび処理時間を消費する恐れがある。いくつかの例では、本明細書に記載される技術は、データ要素の大多数が適切に順序付けられて到達し、従って、コンピュータリソースおよび処理時間を節約することができるという事実を利用することができる。ストリームの各個別のデータ要素を受信した後で、バッファに格納されたデータ要素に境界条件を適用することによって、既定の順序に従ってソートされたデータ要素の出力ストリームを生成することができる。
【００１５】
本発明の他の特徴および利点は、以下の説明および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１６】
【図１】ウィンドウソートシステムのブロック図である。
【図２】一連のウィンドウソートオペレーションを経たソートバッファを示す。
【図３】グラフベースのコンピューテーションを管理するためのコンピューティングシステムのブロック図である。
【図４】ウィンドウソートプロセスのフローチャートである。
【発明を実施するための形態】
【００１７】
図１を参照すると、例示的なソートシステム１００は、ソートモジュール１０８（この構成では、別のコンピュータシステム１０８によって実行される）にデータ要素またはアイテムのストリーム１０６ａ〜ｎ（総称して１０６）を提供するコンピュータシステム１０４（例えば、１つまたは複数のクライアントシステムへのサービスを行うウェブサーバなどのサーバ）上で実行されるデータソースアプリケーション１０２を含む。要素１０６は、ある一定の時間（例えば、２４時間）にわたってソースアプリケーション１０２によって生成することができ、生成またはストレージ（例えば、記憶装置）から検索されると送信することができる。要素１０６は、例えば、ソースアプリケーション１０２によって生成されたデータ記録（図示せず）の１つまたは複数の属性に割り当てられた値など、さまざまなタイプの情報を表し得る。いくつかの実装形態では、要素１０６は、ソースアプリケーション１０２によって生成された１つまたは複数のデータ記録から演算された値を表し得る。要素１０６によって表され得る他の情報は、例えば、ソースアプリケーション１０２によってデータ記録が作成された際のそれぞれの時間などのタイムスタンプを含み得る。例えば、ソースアプリケーション１０２は、通話データ記録を作成し、特定の時間の間に行われた通話についての情報を記録することができる。そのようなシナリオでは、それぞれのタイムスタンプされたデータ要素は、対応する通話が終了した正確な時間を表し得る。
【００１８】
別の実装形態では、それぞれのタイムスタンプされたデータ要素は、対応する通話が開始された正確な時間を表し得る。通話が開始された時間は、通話が終了した時間から通話の長さを引くことによって計算することができる。そのような計算を容易にするため、通話の長さについての情報は、ソースアプリケーションによって生成される通話記録に格納することができる。
【００１９】
いくつかの構成では、ストリーム１０６内のデータ要素の個別の配置は、さまざまな形を取ることができる。例えば、データ要素の順序は、完全に無作為の順序または幾分か決定論的な順序（例えば、部分的にソートされる、大部分がまたはほぼソートされる、など）であり得る。要素の大部分がソートされるシナリオでは、比較的ほんのわずかな比率の要素がソートされないかまたは順序に狂いが生じている場合がある。そのため、比較的複数のデータ要素（例えば、数百万）を有するストリームでは、要素のおよそ０．１〜１０％が順序に狂いが生じている可能性がある。一例として、ソースアプリケーション１０２が通話の終了時間を表すタイムスタンプされたデータ要素を生成するシナリオでは、要素は、実質的に非同期的にソートモジュール１０８に到達することができ、時折、順序に狂いが生じている状態で到達し得る。例えば、第１の時間の間にソースアプリケーション１０２によって生成されたデータは、別の時間（第１の時間よりも遅い）の間に生成されたデータの後にソートモジュール１０８に到達することができる。
【００２０】
大部分がソートされるストリームでは、要素の大多数とともに適正な順序にはない一部を除いて、要素は、大部分がソートされた順序にあり得る。ストリーム内の適正な位置にそのような外れ値要素を挿入するため、従来のソート技術は、通常、受信されたストリームのすべてのデータ要素を処理する。そのため、これらの技術は、要素をソートするために、かなりのコンピューティングリソースおよび処理時間を消費する恐れがあり、データ要素の数に比例して増加し得るコンピュータの損失を生み出す恐れがある。しかし、データ要素の大多数が適切に順序付けられて到達するという事実を利用することによって、ソート技術を開発し、コンピュータリソースおよび処理時間を節約することができる。
【００２１】
例示的なソート技術では、ソートモジュール１０８は、ソートバッファに入力要素を一時的に格納し、適切な時間にバッファから要素１１８ａ〜ｃ（総称して１１８）をイジェクトすることによって、ほぼソートされた入力ストリームをソートする。要素イジェクションは、イジェクション優先度順（例えば、昇順、降順など）に従って起こり得る。さらに、イジェクションは、要素に課された条件（例えば、バッファに格納された任意の２つの要素間の最大許容差）に違反した場合に起こる。イジェクトされた時点で、イジェクトされた要素１１８を使用して、ソートされた要素の出力ストリームを形成することができる。
【００２２】
いくつかの例では、ソートされた出力ストリームは、順序に狂いが生じている要素をソートバッファに一時的に格納し、それらを適切な時間に出力ストリームに解放する一方で、既にソートされた順序にある入力要素を出力ストリームに直接送ることによって生成することができる。
【００２３】
ソートモジュール１０８は、例えば、コンピュータシステム１１０上で実行されるソフトウェアアプリケーションとして実装することができ、ソートバッファ１１２（または複数のソートバッファ）を制御するための命令を提供することができ、ソートバッファ１１２は、記憶装置１１４（例えば、ハードドライブメモリ、ランダムアクセスメモリなど）に格納することができる。記憶装置は、コンピュータシステム１１０の一部としても、別々のスタンドアロンメモリデバイスとしても実装することができる。
【００２４】
例では、ソートバッファ１１２内の格納要素１１６は、例えば、要素がバッファからイジェクトされる順序などの優先度順に従ってソートされる。優先度順は、要素の既定の特性（例えば、要素の数値）に基づき得る。そのため、数値の昇順に従って要素がソートされる場合は、最初に小さな値の要素がイジェクトされ、その後、より大きな値の要素がイジェクトされ得る。降順に従って要素がソートされる場合は、最初に大きな値の要素がイジェクトされ、その後、より小さな値の要素がイジェクトされ得る。ソートバッファで要素が受信されると、要素は、優先度順に従ってソートされ得る。タイムスタンプされたデータ要素に関与するシナリオでは、要素は、古い順または新しい順にソートされ得る。例えば、通話の終了時間を表す要素は、新しい順に配列することができる。
【００２５】
イジェクトされたデータ要素１１８は、ソートバッファ内の格納要素の最小値（または、好ましい出力に応じて、最大値）要素であり得る。タイムスタンプされた要素を用いると、イジェクトされた要素は、ソートバッファ内の格納要素の最新値（または、好ましい出力に応じて、最古値）要素であり得る。イジェクトされた要素は、別のコンピューティングデバイス（例えば、コンピュータシステム１２２）上で実行されている１つまたは複数のモジュール、アプリケーション（例えば、受信アプリケーション１２０）などに提供され得る。受信アプリケーション１２０は、実質的にソートされた出力ストリームを受信して処理するための任意のソフトウェアアプリケーションであり得る。
【００２６】
一構成では、ソートバッファの一方の端部は、新たに到達する要素を受信するよう構成することができる。ソートバッファを通じて（この特定の端部から）伝播する間、受信されたデータ要素（他の要素とともに）は、要素がバッファの反対側の端部（そこから要素が最終的にイジェクトされる）に近づくにつれて要素が適切なデータ要素間に配置するように、ソートモジュール１０８によって処理することができる。
【００２７】
入力要素は大部分がまたはほぼ順序付けられるため、ソートバッファ１１２への挿入は、バッファの端部で起こる場合が多い。そのような挿入オペレーションは、Ｏ（１）時間を要すると見なすことができる。ソートされた順序で要素が受信される限り、要素は、ソートバッファの連続記憶場所に漸進的に追加される。しかし、順序に狂いが生じている状態で要素が到達すると、必要な挿入時間は、要素の挿入に適切な記憶場所を見つけるのに必要な時間に対応するため、長くなり得る。例えば、順序に狂いが生じている要素を受信するための位置がソートバッファの端部から「ｋ」の距離にある場合、適正な位置の特定には、Ｏ（ｌｏｇ（ｋ））時間が必要とされ得る。特定された時点で、要素の挿入に必要な時間は、一定と見なすことができる。ソートバッファ内に既に「ｎ」個の格納データ要素がある場合、挿入位置は、ソートバッファの端部から「ｎ」個の位置を超えないものと見なすことができる。それに応じて、最悪の場合の挿入時間は、Ｏ（ｌｏｇ（ｎ））時間であり得る。
【００２８】
ソートバッファ１１２は、ソートされた順序でデータ要素を受信して格納するよう構成されたデータ構造（例えば、優先度付きキューデータ構造）によって実装することができる。新しいデータ要素が到達すると、ソートモジュール１０８は、ソートバッファの優勢なソート順序によって決定されるように（優先度付きキューとして実装される）、適切な位置に要素を挿入することができる。さらに、ソートモジュール１０８は、イジェクション優先度順（例えば、バッファの最小または最大データ要素）に基づいてイジェクトされる１つまたは複数のデータ要素を特定することができる。特定された時点で、ソートモジュールは、ソートバッファからの特定された要素のイジェクションを開始することができる。
【００２９】
いくつかの実装形態では、ソートバッファ１１２は、バランスの取れた二分木データ構造（例えば、ヒープ二分木データ構造）であり得る。一般に、ヒープ二分木データ構造（単にヒープと呼ばれる場合が多い）は、２つの条件を満たすと見なされる。第１の条件は、子ノードの優先度が親ノードの優先度と少なくとも同程度であることである。それに応じて、木の最上位のノード（すなわち、根ノード）は、最小優先度を有すると見なすことができる。第２の条件は、根ノードから葉のノードまでの異なる経路が多くとも１つのノードレベルだけ高さが異なることである。
【００３０】
一実装形態では、ソートバッファは、スキップリストデータ構造によって実装することができる。スキップリストデータ構造およびその関連アルゴリズムは、リンクされた線形リストの変形例であり、キーを有するデータ要素の頻繁な挿入を要求する状況におけるソート性能を向上させることができる。スキップリストデータ構造は、データ要素（または、ノード）の順序付けられたリンクされた線形リストを含み得、いくつかの要素は、中間データ要素をスキップする追加のポインタを有し、それにより、データ要素の探索の速度および効率を増加する。
【００３１】
スキップリストデータ構造としてソートバッファを実装することによって、例えば、バッファから最小データ要素を検索するのに必要な時間は、最小データ要素の検索に対してＯ（１）時間であり得る。データ要素を適切に挿入する（例えば、要素は、ごく最近挿入された要素に隣接して挿入される）ための挿入時間は、Ｏ（１）時間であり得る。挿入位置がごく最近の要素に隣接しない場合は、挿入時間はＯ（ｌｏｇ  Ｎ）時間であり得る。「ｋ」要素（例えば、最大値を有する要素）を読み出すためのイジェクション時間は、Ｏ（ｋ）時間であり得る。スキップリストデータ構造については、その内容はその全体が参照により本明細書に組み込まれる、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年))と称する文書で説明されている。
【００３３】
一実装形態では、ソートモジュール１０８は、ソートバッファ１１２上で境界条件を適用させることができ、境界条件を使用して、ソートバッファから要素をイジェクトするかどうか、および、いつソートバッファから要素をイジェクトするか決定する。境界条件は、ソートバッファに許可される値の「ウィンドウ」を定義することができる。例えば、ウィンドウは、ソートバッファの任意の２つの格納データ要素間の最大許容差を表し得る。そのため、ウィンドウの「幅」は、ソートバッファで許可される値の範囲を表す。例えば、ウィンドウ幅は、ソートバッファの最小要素と最大要素との差であり得る。
【００３４】
境界条件は、少なくとも２つの結果を有することができる。例えば、第１の結果は、境界条件が満たされていることを示し得、第２の異なる結果は、境界条件に違反している（すなわち、満たされていない）ことを示し得る。一シナリオでは、提供される入力要素が原因でウィンドウ幅を超えることにならない限り、境界条件は満たされていると見なすことができる。逆に、入力要素が原因でウィンドウ幅を超えることになった場合は、境界条件に違反していると見なすことができる。境界条件への違反があり次第、イジェクション優先度順に従ってバッファの１つまたは複数の要素がイジェクトされる。
【００３５】
一例として、ソートバッファが格納要素として数値を有する（昇順に）シナリオを想定する。ソートバッファに対する値１５のウィンドウ幅は、バッファの最小格納要素と最大格納要素との差が１５を超えないことを示す。そのため、バッファの現在の最小要素が３であり、新しい入力要素が１９である場合、最小要素と最大要素との差はここでは１６であり、これはウィンドウ幅を超えており、境界条件に違反していると見なされる。違反が原因で、ソートバッファの１つまたは複数の要素（例えば、最小または最大データ要素）はイジェクトされる。
【００３６】
いくつかの例では、ソートモジュール１０８は、ウィンドウ幅で決定されるように、ソートバッファ１１２の最小および最大要素を記録する。入力要素が最大要素を超えると、境界条件に違反していると見なされ、ソートモジュールは、ソートバッファに、例えば最小データ要素をイジェクトさせる。
【００３７】
ウィンドウ幅は、ユーザによって指定されるものなどさまざまなソースから提供することができる。一実装形態では、ウィンドウ幅は、ソートが必要とされる特定のアプリケーションの一般知識に基づく。状況次第では、ウィンドウ幅は、「順序の狂い」の度合い、例えば、どれほど要素の順序に狂いが生じているかについての度合いに相当する。例えば、タイムスタンプされたデータ要素に関与する状況について考慮する。ウィンドウ幅は、バッファ内に現在存在するタイムスタンプされた要素（例えば、最小または最大のタイムスタンプされた要素）と比較して、どのくらい遅くまでタイムスタンプされた要素をソートバッファに提供できるかを示す。例えば、ウィンドウ幅（時間の単位で）が４時間であれば、ソートバッファ１１２は、ソートバッファの最小のタイムスタンプされた要素と比較して、４時間ウィンドウの範囲内のすべてのタイムスタンプされた要素をバッファリング（すなわち、格納）する。４時間の範囲外で到達するタイムスタンプされた要素は、廃棄される、別々に処理されるなどの場合がある。
【００３８】
示される例では単一のバッファが使用されているが、複数のバッファアーキテクチャを利用することもできる。例えば、第２のバッファ（図示せず）を使用して、ある一定の時間の間（例えば、２４時間）に到達するタイムスタンプされた要素をバッファリングすることができる。２４時間が経過した時点で、タイムスタンプされた要素は、拒否される、廃棄される、別々に処理される可能性がある。一実装形態では、２４時間の範囲内に属するとタイムスタンプされた要素が２４時間経過後に到達する可能性がある。カットオフタイムスタンプ値を慎重に選択することによって、複数の正当な要素が拒否される可能性を低減することができる。いくつかのシナリオでは、少数の正当な要素の損失は、ウィンドウソート技術がコンピュータリソースの効率的な使用および処理時間の削減を提供するアプリケーションにおいて許容可能である。
【００３９】
図２は、ウィンドウソートプロセスのオペレーションの間のソートバッファ（例えば、ソートバッファ１１２）の状態２０２〜２１８の図表示である。ソートバッファの個別のコンテンツ、ウィンドウ幅（ラベルＷで示される）、最小要素（ラベルＳで示される）および現在の出力データ要素についての情報は、各状態２０２〜２１８に対して提供される。この例では、データ要素は昇順で格納され、入力ストリームは昇順でほぼソートされる。ウィンドウソートプロセスの終結時には、出力ストリームは、昇順で実質的にソートされて提供される。図２は単に８個の要素のストリームに対して動作する例示的なウィンドウソートプロセスを示すが、プロセスは、実質的にそれ以上の要素を含む入力ストリームに対して連続して実行することができる。
【００４０】
状態２０２では、ウィンドウ幅は、値１５を有するものとして定義される（すなわち、バッファの最小値要素と最大値要素との差は１５以上ではない）。初期化の際、ソートバッファの現在の最小要素は値０（Ｓ＝０）のものである。さらに、現在の出力は「ＮＩＬ」（すなわち、出力データ要素無し）で示される。
【００４１】
状態２０４では、第１の値３の入力要素がソートバッファに挿入される。バッファ内の３の位置は、ソートバッファの要素の現在の順序（すなわち、昇順）に基づいて決定される。値３の要素は、示されるように、０に隣接して挿入される。ソートバッファの最小値要素と最大値要素との差はここでは３であり、これはウィンドウ幅１５未満である。それに応じて、境界条件に違反しておらず、データ要素をイジェクトする必要はない。この時点では、出力データ要素は存在しない。
【００４２】
状態２０６および２０８では、入力ストリームの値５および値７の要素がソートバッファの適切な位置に挿入される。状態２０８の終了時のソートバッファの最小要素と最大要素との差は７であり、これは依然としてウィンドウ幅１５未満である。そのため、境界条件に違反しておらず、データ要素をイジェクトする必要はない。それに応じて、依然として出力データ要素は存在しない。
【００４３】
状態２１０では、値１５の要素がソートバッファに挿入されると、バッファの最小要素と最大要素との差はここでは１５であり、これはウィンドウ幅１５に等しい。境界条件に違反している。それに応じて、ソートバッファ１１２の最小要素である値０の要素が出力ストリームの第１の要素としてイジェクトされる。それに加えて、ソートバッファの最小要素Ｓはここでは３である。
【００４４】
状態２１２では、値８の要素がソートバッファの値１５の要素と値７の要素との間に挿入される。バッファの最小値要素と最大値要素との差は１２であり、これはウィンドウ幅１５未満である。それに応じて、境界条件に違反しておらず、データ要素はイジェクトされない。
【００４５】
状態２１４では、値２１の要素がソートバッファに挿入されると、バッファの最小値要素と最大値要素との差は２１−３＝１８であり、これはウィンドウ幅１５を超える。ウィンドウ幅の範囲外の値を有するすべてのデータ要素がイジェクトされる。すなわち、示されるように、値３、５および７の要素がイジェクトされる。ソートバッファの新しい最小データ要素Ｓはここでは値８の要素である。
【００４６】
状態２１６では、値１１の要素がソートバッファに挿入されると、バッファの最小値要素と最大値要素との差は２１−８＝１３であり、これはウィンドウ幅１５未満である。それに応じて、境界条件に違反しておらず、データ要素はイジェクトされない。
【００４７】
状態２１８では、値７の要素がソートバッファに挿入されると、ソートバッファ１１２の最小要素は値７のものである。そのため、バッファの最小値要素と最大値要素との差は２１−７＝１４であり、これはウィンドウ幅１５未満である。それに応じて、この場合もやはり、境界条件に違反しておらず、データ要素はイジェクトされない。
【００４８】
ウィンドウソートプロセスの実装形態は、コンピュータグラフで使用することができる。ここで、図３を参照すると、コンピュータグラフ３０２を管理するためのシステム３００の部品の相互関係が示されている。グラフィック開発環境（ＧＤＥ）３０４は、実行可能なコンピュータグラフ３０２を指定して、コンピュータグラフ３０２のウィンドウソートコンポーネント３０８を含む１つまたは複数のグラフコンポーネント３０６ａ〜ｃのためのパラメータを定義するためのユーザインターフェースを提供する。ＧＤＥ  ３０４については、例えば、その内容はその全体が参照により本明細書に組み込まれる、米国特許第７，１６４，４２２号「PARAMETERIZED GRAPHS WITH CONDITIONAL COMPONENTS」で説明され得る。
【００４９】
コンピュータグラフ３０２を使用して、複雑なコンピューテーションを表すことができる。そのようなグラフベースのコンピューテーションを実施するシステムについては、その内容はその全体が参照により本明細書に組み込まれる、米国特許第５，９６６，０７２号「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」で説明されている。いくつかの実装形態では、コンピュータグラフは、頂点間の有向リンク（作業要素のフローを表す）によって接続された頂点（コンポーネントまたはデータセットを表す）を含む。いくつかの事例では、コンピュータグラフ３０２は、入力データ記録のフローを受信し、データ記録を処理して、コンピューテーションがシャットダウンされるまで無制限にコンポーネント３０６から結果を提供するよう構成される。いくつかの事例では、コンピュータグラフ３０２は、入力データ記録のバッチを受信し、データ記録のバッチを処理して、そのバッチに対する結果を提供し、次いで、バッチが処理された後でシャットダウンするかまたはアイドル状態に戻るよう構成される。
【００５０】
コンポーネント３０６ａ〜ｃおよび３０８は、コンポーネント３０６ａ〜ｃおよび３０８間のデータフローを表す有向弧または線によってともにリンクされる。コンポーネント３０６ａ〜ｃおよび３０８は、１つまたは複数のデータソースコンポーネント（例えば、コンポーネント３０６ａ）と、データ処理コンポーネント（例えば、コンポーネント３０６ｂ）と、データシンクコンポーネント（例えば、３０６ｄ）とを含み得る。データソースコンポーネント３０６ａは、例えばデータ記録の形でデータを生成する１つまたは複数のコンピュータシステム上で実施されるソースアプリケーション（図１のソースアプリケーション１０２など）を表し得る。データ処理コンポーネント３０６ｂは、データソースコンポーネント３０６ａによって生成されたデータ記録を処理する。データシンクコンポーネント３０６ｄは、データ処理コンポーネント３０６ｂの結果を使用する。データ処理コンポーネント３０６ｂからの結果は、大部分がソートされたデータ要素のストリームの形であり得る。そのため、ウィンドウソートコンポーネント３０８を導入して、データ処理コンポーネント３０６ｂからの結果のストリームをソートし、実質的にソートされたデータストリームをシンクコンポーネント３０６ｃに提供することができる。
【００５１】
例示的なシナリオでは、データソースコンポーネント３０６ａは、２つの同一のソートされたデータストリーム３１０ａおよび３１０ｂを生成し、一方のストリーム（例えば、ストリーム３１０ｂ）をコンポーネント３０６ｂに送信することができる。コンポーネント３０６ｂは、ストリーム３１０ｂを処理して、データ記録が格納された記憶場所のアドレスを有するアドレスストリーム３１０ｃを生成する。記憶場所は、連続したもので、次のように、すなわち、ａ０、ａ０＋１、ａ０＋２．．．ａ０＋ｎ（ａ０は初期の記憶場所のアドレス）と連続的に配列されるものとして知られている。そのため、アドレスストリーム内の個別のアドレスも、連続的に順序付けられるものと予想される。しかし、時折、コンポーネント３０６ｂにおける処理の遅延により、１つまたは複数のアドレスは、アドレスストリームに遅れて出力され得る。その結果、個別のアドレスはもはやソートされたストリーム３１０ａ内のデータ記録に適正に対応しない。この状況を改善するため、ソートコンポーネント３０８を使用して、アドレスを元の順序にソートし直すことができる（これは、新しいアドレスストリーム３１０ｄとして生成される）。
【００５２】
典型的なアプリケーションでは、アドレスストリーム内の個別のアドレスの位置は、それらの元の位置からそれほど遠くはない。この特性をソートコンポーネントで使用して、アドレスを元の位置に復元し直すことができる。アドレスストリームは、各入力アドレスおよび／または各出力アドレスのイジェクションの後で変更する、動的に再調整されるカットオフアドレスの形で境界条件を有するソートバッファで受信される。最初は、カットオフアドレスは、アドレスストリーム内の最も初期のアドレスに初期化される。その後、入力アドレスがカットオフアドレスより１だけ大きければ、カットオフアドレスは入力アドレスに変化する。アドレスがソートコンポーネントに到達すると、カットオフアドレス以下を照合するアドレスは、ソートされた形で直接出力される。他方では、カットオフアドレス値超を照合するアドレスは、ソートバッファに格納される。
【００５３】
ここで、図４を参照すると、ほぼまたは大部分がソートされたデータ要素のストリームをソートするための例示的なウィンドウソートプロセス４００が示されている。一実装形態では、以下に概説される工程は、コンピュータシステム上で実行されるソフトウェアアプリケーションによって行うことができる。例えば、プロセス４００は、ソートシステム１００（図１に示されるような）によって実現することができる。入力データ要素をバッファリングするためのソートバッファを初期化する（工程４０２）。初期化は、入力要素を格納するための、記憶域、例えば、複数の連続メモリアドレスを指定する工程を含み得る。初期化の一部として、ソートバッファに対して境界条件を指定することができる。例えば、ソートバッファのウィンドウ幅に相当する値を保持するための変数を定義することができる。ウィンドウ幅は、ソートバッファの任意の２つの格納データ要素値間の最大許容差を表し得る。いくつかの例では、境界条件は、動的に調整されるカットオフ値として表され得る。
【００５４】
ソートバッファに対する境界条件が定義されると、ソートバッファがデータ要素の入力ストリームを受信する準備が整う（工程４０４）。１つまたは複数の技術および方法論を使用して、入力データ要素を受信することができる。一実装形態では、入力要素が受信され、ソートバッファに挿入される。最初は、ソートバッファが空の際は、第１の要素は、事前に定義された特性を有するものとしてデフォルトで選択される（例えば、第１の要素は、最優先のイジェクションを有するものとして選択され得る）。例えば、第１の要素は、ソートバッファの最小要素と見なすことができる。後続のより大きな要素が受信されると、それは、除去またはイジェクション優先度（すなわち、昇順に第１の要素に隣接して）に基づいて適切な位置に挿入される。一実装形態では、要素がバッファに挿入されるたびに、最優先要素（または最小要素）が再計算される。
【００５５】
境界条件を適用して、要素が境界条件に違反しているかどうか決定する（工程４０６）。１つまたは複数の技術は、境界条件適用のために実施することができる。例えば、ソートバッファのウィンドウ幅を超えているかどうかについての決定が下される。境界条件に違反していない（例えば、ソートバッファのウィンドウ幅を超えていない）場合、処理のため、入力ストリームの次のデータ要素が受信される。
【００５６】
境界条件に違反している（例えば、ウィンドウ幅を超えている）場合、イジェクション優先度順に従って、１つまたは複数の要素をイジェクトする（工程４０８）。例えば、イジェクトされる要素は、少なくとも最小要素と、ソートバッファのウィンドウ幅を超えることになる１つまたは複数の他の要素とを含む。さらに、ウィンドウ幅を超えることにはならない新しい最小要素が特定される。そのため、１つまたは複数の技術は、境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、バッファから１つまたは複数のデータ要素を生成するために実施することができる。
【００５７】
入力要素が存在する限り、プロセス４００は、各入力要素に対して繰り返される。
【００５８】
一実装形態では、例えば、物理的なメモリサイズを超えることに起因して、ソートバッファが最大容量に到達し得る。そのような状況では、スピルオーバーメカニズムを実装することができる。スピルオーバーメカニズムは、ソートバッファから二次記憶格納域（図示せず）に１つまたは複数のデータ要素を移動する工程を伴う。「主要」要素またはアイテムをソートバッファに挿入して、二次記憶格納域のデータ要素を参照することができる。スピルオーバーメカニズムについては、その内容はその全体が参照により本明細書に組み込まれる、同時係属の米国特許出願第１３／０３１，０３４号でさらに詳細に説明されている。
【００５９】
いくつかの実装形態では、境界条件は、ソートバッファの事前に定義された最大許容サイズ（例えば、バッファに許容される要素の最大数）によって表すことができる。また、一実装形態では、境界条件は、ウィンドウ幅限度と最大サイズ限度の両方によって表すことができる。この実装形態では、ソートモジュールは、バッファのウィンドウ幅または最大サイズのいずれかを超えることになる要素を受信する工程に応じて、要素のイジェクションを引き起こすことができる。
【００６０】
いくつかの例では、処理期間の終了時にソートバッファに残存するデータ要素は、処理終了時にソートされた形で出力することができる。いくつかの例では、残存要素は、残りのデータ要素と別々に異なる方法で処理することができる。いくつかの実装形態では、アプリケーションは、例えば、ソートバッファが既定の要素数を超えて格納するかまたは要素を１つでも格納する際のアプリケーションの演算論理のエラーまたは誤動作をユーザに警告することができる。
【００６１】
一例では、ユーザは、ソートバッファに対する境界条件に違反したデータ要素の存在について警告を受けることができる。例えば、データ記録のリスト（例えば、新しい順の）をユーザに提供する実装形態では、ユーザは、１つまたは複数の順序に狂いが生じているデータ記録の存在について警告を受けることができる。順序に狂いが生じているデータ記録は、記録に対応するデータ要素が境界条件を満たすかどうか、例えば、ユーザによって指定されたウィンドウ幅内にデータ要素があるかどうかを決定する工程に基づいて特定される。例えば、１つまたは複数の順序に狂いが生じているデータ記録をハイライトして、ユーザの注目を集めることができる。いくつかの例では、１つまたは複数の順序に狂いが生じているデータ記録は、別々の処理のために、データ要素のストリームから抽出することができる。
【００６２】
本明細書に記載される技術は、コンピュータ上で実行するためのソフトウェアを使用して実施することができる。例えば、ソフトウェアは、１つまたは複数のプログラムされたまたはプログラム可能なコンピュータシステム（それは、分散型、クライアント／サーバまたはグリッドなどのさまざまなアーキテクチャのものであってもよい）上で実行する１つまたは複数のコンピュータプログラムの手順を形成し、コンピュータシステムはそれぞれ、少なくとも１つのプロセッサと、少なくとも１つのデータ格納システム（揮発性および不揮発性メモリならびに／または格納要素を含む）と、少なくとも１つの入力デバイスまたはポートと、少なくとも１つの出力デバイスまたはポートとを含む。ソフトウェアは、例えば、コンピューテーショングラフの設計および構成に関連する他のサービスを提供する大規模なプログラムの１つまたは複数のモジュールを形成することができる。グラフのノードおよび要素は、コンピュータ可読媒体に格納されたデータ構造、または、データリポジトリに格納されたデータモデルに適合する他の組織化されたデータとして実装することができる。
【００６３】
ソフトウェアは、汎用または特殊用途のプログラム可能なコンピュータによる読み取りが可能なＣＤ−ＲＯＭなどの記憶媒体上で提供されても、ネットワークの通信媒体上で、ソフトウェアが実行されるコンピュータに送達されてもよい（伝播信号で符号化される）。機能のすべては、特殊用途のコンピュータ上で、または、コプロセッサなどの特殊用途のハードウェアを使用して実行することができる。ソフトウェアは、ソフトウェアによって指定されるコンピューテーションの異なる部分は異なるコンピュータによって実行される分散様式で実施することができる。それぞれのそのようなコンピュータプログラムは、好ましくは、汎用もしくは特殊用途のプログラム可能なコンピュータによる読み取りが可能な記憶媒体もしくはデバイス（例えば、ソリッドステートメモリもしくは媒体、または、磁気もしくは光媒体）上に格納されるか、または、記憶媒体もしくはデバイスにダウンロードされるが、それは、コンピュータシステムで記憶媒体もしくはデバイスを読み取り、本明細書に記載される手順を実行する際にコンピュータを構成および動作するためである。また、本発明のシステムは、コンピュータ可読記憶媒体として実装され、コンピュータプログラムを用いて構成されるものと考慮され得、そのように構成された記憶媒体は、特定の事前に定義された様式でコンピュータシステムを動作させ、本明細書に記載される機能を実行する。
【００６４】
本発明の多くの実施形態について説明してきた。それにもかかわらず、本発明の精神および範囲から逸脱することなく、さまざまな変更を行うことができることが理解されよう。例えば、上記で説明された工程のいくつかは、順序に依存しないものであり得、従って、説明されている順序とは異なる順序で実行することができる。
【００６５】
前述の説明は、例示を意図するものであり、本発明の範囲を限定するものではなく、本発明の範囲は、添付の特許請求の範囲によって定義されることを理解されたい。例えば、上記で説明された多くの機能工程は、処理全体に実質的に影響を与えることなく、異なる順序で実行することができる。他の実施形態は、以下の特許請求の範囲内にある。
【図１】
2014511526.tif 000003
【図２】
2014511526.tif 000004
【図３】
2014511526.tif 000005
【図４】
2014511526.tif 000006
【手続補正書】
【提出日】平成25年1月16日(2013.1.16)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のデータ要素を受信する工程と、
前記受信された複数のデータ要素をバッファに格納する工程と、
前記複数のデータ要素の各個別のデータ要素を受信した後で、前記バッファに格納された前記データ要素に境界条件を適用する工程であって、前記境界条件は、前記バッファに格納された前記データ要素の１つまたは複数の値に基づく、工程と、
前記境界条件を適用した結果に基づいて、前記バッファから１つまたは複数のデータ要素をイジェクトする工程であって、前記イジェクトされたデータ要素は、既定の順番に従ってソートされたデータ要素の出力ストリームを形成する、工程と
を含む、コンピュータ実装方法。
【請求項２】
前記バッファから前記１つまたは複数のデータ要素をイジェクトする工程は、
前記バッファから少なくとも最小データ要素をイジェクトする工程
を含む、請求項１に記載の方法。
【請求項３】
前記バッファから前記１つまたは複数のデータ要素をイジェクトする工程は、
前記バッファから少なくとも最大データ要素をイジェクトする工程
を含む、請求項１に記載の方法。
【請求項４】
受信された各データ要素は、データ記録生成時間を表す、請求項１に記載の方法。
【請求項５】
前記データ要素の出力ストリームは、新しい順にソートされる、請求項４に記載の方法。
【請求項６】
前記受信された複数のデータ要素の前記データ要素は、部分的にソートされる、請求項１に記載の方法。
【請求項７】
前記受信された複数のデータ要素の前記データ要素は、実質的に非同期的に前記バッファに到達する、請求項１に記載の方法。
【請求項８】
受信された複数のデータ要素をバッファに格納する工程は、
前記受信された複数のデータ要素のストリームの各個別の要素を、前記バッファの前記ソート順序によって決定された前記バッファの位置に挿入する工程
を含む、請求項１に記載の方法。
【請求項９】
前記バッファに格納された前記データ要素に境界条件を適用する工程は、
前記バッファに格納された前記データ要素から最小データ要素を特定する工程と、
前記最小データ要素と前記受信された個別のデータ要素との差が閾値を超えているかどうかを決定する工程と
を含む、請求項１に記載の方法。
【請求項１０】
前記境界条件に基づいて、前記バッファから１つまたは複数のデータ要素をイジェクトする工程は、
前記１つまたは複数のデータ要素が前記閾値を超えている場合に、前記バッファから前記１つまたは複数のデータ要素をイジェクトする工程
を含む、請求項９に記載の方法。
【請求項１１】
前記バッファに格納された前記データ要素に境界条件を適用する工程は、
前記バッファの最大サイズを超えているかどうかを決定する工程
を含む、請求項１に記載の方法。
【請求項１２】
前記境界条件に基づいて、前記バッファから１つまたは複数のデータ要素をイジェクトする工程は、
前記バッファの前記最大サイズを超えている場合に、前記バッファから前記１つまたは複数のデータ要素をイジェクトする工程
を含む、請求項１１に記載の方法。
【請求項１３】
前記バッファに格納された前記データ要素に境界条件を適用する工程は、
新たに受信されたデータ要素がカットオフ値を超えているかどうかを決定する工程
を含む、請求項１に記載の方法。
【請求項１４】
前記要素が前記カットオフ値を超えていない場合に、前記新たに受信されたデータ要素をバッファリングする工程
をさらに含む、請求項１３に記載の方法。
【請求項１５】
前記境界条件に基づいて、前記バッファから１つまたは複数のデータ要素をイジェクトする工程は、
前記新たに受信されたデータ要素が前記カットオフ値を超えていない場合に、前記バッファから生成された前記１つまたは複数のデータ要素として、前記新たに受信されたデータ要素をイジェクトする工程
を含む、請求項１３に記載の方法。
【請求項１６】
前記受信された複数のデータ要素の前記個別のデータ要素の１つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出される、請求項１に記載の方法。
【請求項１７】
複数のデータ要素を受信する工程と、
前記複数のデータ要素の各個別のデータ要素を受信した後で、前記受信された前記データ要素に境界条件を適用する工程であって、前記境界条件は、前記データ要素の１つまたは複数の値に基づく、工程と、
前記境界条件の第１の結果に基づいて、前記複数のデータ要素の１つまたは複数のデータ要素を格納する工程と、
前記境界条件の第２の結果に基づいて、１つまたは複数のデータ要素をイジェクトする工程であって、前記イジェクトされたデータ要素は、既定の順番に従ってソートされたデータ要素の出力ストリームを形成する、工程と
を含む、コンピュータ実装方法。
【請求項１８】
データ要素をソートするためのコンピュータプログラムを格納するコンピュータ可読記憶装置であって、前記コンピュータプログラムは、コンピューティングシステムに、
複数のデータ要素を受信させるための命令と、
前記受信された複数のデータ要素をバッファに格納させるための命令と、
前記受信されたデータ要素のストリームを処理させるための命令と
を含み、前記処理する工程は、
前記複数のデータ要素の各個別のデータ要素を受信した後で、前記バッファに格納された前記データ要素に境界条件を適用する工程であって、前記境界条件は、前記バッファに格納された前記データ要素の１つまたは複数の値に基づく、工程と、
前記境界条件を適用した結果に基づいて、前記バッファから１つまたは複数のデータ要素をイジェクトする工程であって、前記イジェクトされたデータ要素は、既定の順番に従ってソートされたデータ要素の出力ストリームを形成する、工程と
を含む、コンピュータ可読記憶装置。
【請求項１９】
データ要素をソートするためのコンピューティングシステムであって、
複数のデータ要素を受信するための入力デバイスと、
前記受信された複数のデータ要素をバッファに格納するためのデータ格納システムと、
前記データ格納システムと結合され、前記受信された複数のデータ要素を処理するよう構成された少なくとも１つのプロセッサと
を含み、前記処理する工程は、
前記複数のデータ要素の各個別のデータ要素を受信した後で、前記バッファに格納された前記データ要素に境界条件を適用する工程であって、前記境界条件は、前記バッファに格納された前記データ要素の１つまたは複数の値に基づく、工程と、
前記境界条件を適用した結果に基づいて、前記バッファから１つまたは複数のデータ要素をイジェクトする工程であって、前記イジェクトされたデータ要素は、既定の順番に従ってソートされたデータ要素の出力ストリームを形成する、工程と
を含む、コンピューティングシステム。
【請求項２０】
データ要素をソートするためのコンピューティングシステムであって、
複数のデータ要素を受信するための手段と、
前記受信された複数のデータ要素を格納するための手段と、
前記受信された複数のデータ要素を処理するための手段と
を含み、前記処理する工程は、
前記データ要素のストリームの各個別のデータ要素を受信した後で、前記バッファに格納された前記データ要素に境界条件を適用する工程と、
前記境界条件を適用した結果に基づいて、前記バッファから１つまたは複数のデータ要素をイジェクトする工程であって、前記イジェクトされたデータ要素は、既定の順番に従ってソートされたデータ要素の出力ストリームを形成する、工程と
を含む、コンピューティングシステム。
【国際調査報告】
2014511526.tif 000007
2014511526.tif 000008