特許第5977263号(P5977263)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アビニシオ テクノロジー エルエルシーの特許一覧

<>
  • 特許5977263-バッファオーバーフロー状態の管理 図000002
  • 特許5977263-バッファオーバーフロー状態の管理 図000003
  • 特許5977263-バッファオーバーフロー状態の管理 図000004
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5977263
(24)【登録日】2016年7月29日
(45)【発行日】2016年8月24日
(54)【発明の名称】バッファオーバーフロー状態の管理
(51)【国際特許分類】
   G06F 12/00 20060101AFI20160817BHJP
【FI】
   G06F12/00 514A
【請求項の数】76
【全頁数】20
(21)【出願番号】特願2013-554604(P2013-554604)
(86)(22)【出願日】2012年2月16日
(65)【公表番号】特表2014-505959(P2014-505959A)
(43)【公表日】2014年3月6日
(86)【国際出願番号】US2012025441
(87)【国際公開番号】WO2012112772
(87)【国際公開日】20120823
【審査請求日】2015年2月2日
(31)【優先権主張番号】13/031,034
(32)【優先日】2011年2月18日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】509123208
【氏名又は名称】アビニシオ テクノロジー エルエルシー
(74)【代理人】
【識別番号】100079108
【弁理士】
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【弁理士】
【氏名又は名称】大貫 敏史
(72)【発明者】
【氏名】スタンフィル,クレイグ ダブリュ.
(72)【発明者】
【氏名】ファインマン,カール リチャード
【審査官】 漆原 孝治
(56)【参考文献】
【文献】 特開平10−200574(JP,A)
【文献】 特開平04−205418(JP,A)
【文献】 特開2010−211880(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
(57)【特許請求の範囲】
【請求項1】
第1のバッファのオーバーフロー状態を検出する工程に応じて、前記第1のバッファに存在する1つまたは複数のデータ要素第2のバッファに移動させる工程であって、前記第1のバッファの前記データ要素は、既定の順序に従ってソートされる、工程と、
前記第1のバッファにプロキシデータ要素を挿入して、前記第2のバッファに移動された前記データ要素表す工程と
前記プロキシデータ要素が前記第1のバッファから除去されるものとして特定されることに応じて、前記第2のバッファからの1つまたは複数のデータ要素を前記第1のバッファの前記データ要素とマージする工程と
を含む、コンピュータ実装方法。
【請求項2】
前記第1のバッファの前記データ要素の前記既定の順序は、前記第1のバッファから前記データ要素を除去するための優先度順を含む、請求項1に記載の方法。
【請求項3】
前記第2のバッファに格納される前記データ要素の一部は、前記既定の順序に従って実質的にソートされる、請求項1に記載の方法。
【請求項4】
前記第2のバッファに格納される前記データ要素の一部は、前記第1のバッファに格納された前記データ要素の少なくとも半分を含む、請求項1に記載の方法。
【請求項5】
前記第2のバッファに保存される前記データ要素の一部に対応する前記第1のバッファの位置にデータ要素を格納する工程を
さらに含む、請求項1に記載の方法。
【請求項6】
前記既定の順序に従って、前記第1のバッファから1つまたは複数のデータ要素を除去する工程と、
前記第1のバッファから前記除去された1つまたは複数のデータ要素を、前記既定の順序に従って実質的にソートされたデータ要素の出力ストリームとして提供する工程と
をさらに含む、請求項1に記載の方法。
【請求項7】
前記プロキシデータ要素が前記第1のバッファに格納された要素の最優先のデータ要素になることに応じて、前記第2のバッファからの1つまたは複数のデータ要素を前記第1のバッファの前記データ要素とマージする工程
をさらに含む、請求項2に記載の方法。
【請求項8】
前記マージされたデータ要素は、前記既定の順序に基づいてソートされる、請求項7に記載の方法。
【請求項9】
前記第2のバッファからの前記1つまたは複数のデータ要素の前記第1のバッファの前記データ要素とのマージは、出力データ要素の生成と同時に起こる、請求項に記載の方法。
【請求項10】
前記プロキシデータ要素は、前記第2のバッファからの除去を最優先とする前記第2のバッファからの要素のコピーである、請求項1に記載の方法。
【請求項11】
前記除去された1つまたは複数のデータ要素は、前記第1のバッファの前記要素の最小値を表す前記第1のバッファからのデータ要素を含む、請求項6に記載の方法。
【請求項12】
前記除去された1つまたは複数のデータ要素は、前記第1のバッファの前記要素の最大値を表す前記第1のバッファからのデータ要素を含む、請求項6に記載の方法。
【請求項13】
前記第1のバッファに格納された前記データ要素に境界条件を適用する工程であって、前記境界条件は、前記第1のバッファに格納された任意の2つのデータ要素間の最大許容差を表す、工程と、
前記境界条件に基づいて、前記既定の優先度順に従ってソートされたデータ要素の出力ストリームとして、前記第1のバッファから1つまたは複数のデータ要素をイジェクトする工程と
をさらに含む、請求項1に記載の方法。
【請求項14】
各データ要素は、データ記録生成時間を表す、請求項13に記載の方法。
【請求項15】
前記第1のバッファに格納された前記データ要素に境界条件を適用する工程は、
前記第1のバッファに格納された前記データ要素最小値を表すものとしてデータ要素を特定する工程と、
前記最小値を表す前記データ要素と前記第1のバッファに入力するために受信されたデータ要素との差を決定する工程と
を含む、請求項13に記載の方法。
【請求項16】
前記境界条件に基づいて、前記第1のバッファから1つまたは複数のデータ要素をイジェクトする工程は、
1つまたは複数のデータ要素が既定の値を超えているかどうかを決定する工程と、
前記1つまたは複数のデータ要素が前記既定の値を超えている場合に、前記第1のバッファから前記1つまたは複数のデータ要素をイジェクトする工程と
を含む、請求項13に記載の方法。
【請求項17】
前記第1および第2のバッファの少なくとも1つは、スキップリストデータ構造によって実装される、請求項1に記載の方法。
【請求項18】
前記第1および第2のバッファの少なくとも1つは、ツリープデータ構造によって実装される、請求項1に記載の方法。
【請求項19】
第1および第2のバッファ個別のデータ要素の1つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出される、請求項1に記載の方法。
【請求項20】
データ要素をソートするためのコンピュータプログラムを格納するコンピュータ可読記憶媒体であって、前記コンピュータプログラムは、コンピューティングシステムに、
第1のバッファのオーバーフロー状態を検出することに応じて、前記第1のバッファに存在する1つまたは複数のデータ要素第2のバッファに移動させるための命令であって、前記第1のバッファの前記データ要素は、既定の順序に従ってソートされる、命令と、
前記第1のバッファにプロキシデータ要素を挿入して、前記第2のバッファに格納される前記データ要素の一部を表させるための命令と
前記プロキシデータ要素が前記第1のバッファから除去されるものとして特定されることに応じて、前記第2のバッファからの1つまたは複数のデータ要素を前記第1のバッファの前記データ要素とマージする命令と
を含む、コンピュータ可読記憶媒体。
【請求項21】
データ要素をソートするためのコンピューティングシステムであって、
第1のバッファデータ要素格納するためのデータ格納システムと、
前記データ格納システムと結合され、受信されたデータ要素のストリームを処理するよう構成された少なくとも1つのプロセッサとを含み、前記処理することは、
第1のバッファのオーバーフロー状態を検出することに応じて、前記第1のバッファに存在する1つまたは複数のデータ要素第2のバッファに移動させることであって、前記第1のバッファの前記データ要素は、既定の順序に従ってソートされることと、
前記第1のバッファにプロキシデータ要素を挿入して、前記第2のバッファに格納される前記データ要素の一部を表すことと
前記プロキシデータ要素が前記第1のバッファから除去されるものとして特定されることに応じて、前記第2のバッファからの1つまたは複数のデータ要素を前記第1のバッファの前記データ要素とマージすることと
を含む、コンピューティングシステム。
【請求項22】
データ要素をソートするためのコンピューティングシステムであって、
第1のバッファデータ要素格納するための手段と、
受信されたデータ要素のストリームを処理するための手段とを含み、前記処理することは、
第1のバッファのオーバーフロー状態を検出することに応じて、前記第1のバッファに存在する1つまたは複数のデータ要素第2のバッファに移動させることであって、前記第1のバッファの前記データ要素は、既定の順序に従ってソートされることと、
前記第1のバッファにプロキシデータ要素を挿入して、前記第2のバッファに格納される前記データ要素の一部を表すことと
前記プロキシデータ要素が前記第1のバッファから除去されるものとして特定されることに応じて、前記第2のバッファからの1つまたは複数のデータ要素を前記第1のバッファの前記データ要素とマージすることと
を含む、コンピューティングシステム。
【請求項23】
前記第1のバッファの前記データ要素の前記既定の順序は、前記第1のバッファから前記データ要素を除去するための優先度順を含む、請求項20に記載のコンピュータ可読記憶媒体。
【請求項24】
前記第2のバッファに格納される前記データ要素の一部は、前記既定の順序に従って実質的にソートされる、請求項20に記載のコンピュータ可読記憶媒体。
【請求項25】
前記第2のバッファに格納される前記データ要素の一部は、前記第1のバッファに格納された前記データ要素の少なくとも半分を含む、請求項20に記載のコンピュータ可読記憶媒体。
【請求項26】
前記コンピューティングシステムに、前記第2のバッファに保存される前記データ要素の一部に対応する前記第1のバッファの位置にデータ要素を格納させる命令をさらに含む、請求項20に記載のコンピュータ可読記憶媒体。
【請求項27】
前記コンピューティングシステムに、
前記既定の順序に従って、前記第1のバッファから1つまたは複数のデータ要素を除去させる命令と、
前記第1のバッファから前記除去された1つまたは複数のデータ要素を、前記既定の順序に従って実質的にソートされたデータ要素の出力ストリームとして提供させる命令とをさらに含む、請求項20に記載のコンピュータ可読記憶媒体。
【請求項28】
前記コンピューティングシステムに、前記プロキシデータ要素が前記第1のバッファに格納された要素の最優先のデータ要素になることに応じて、前記第2のバッファからの1つまたは複数のデータ要素を前記第1のバッファの前記データ要素とマージさせる命令をさらに含む、請求項23に記載のコンピュータ可読記憶媒体。
【請求項29】
前記マージされたデータ要素は、前記既定の順序に基づいてソートされる、請求項28に記載のコンピュータ可読記憶媒体。
【請求項30】
前記第2のバッファからの前記1つまたは複数のデータ要素の前記第1のバッファの前記データ要素とのマージは、出力データ要素の生成と実質的に同時に起こる、請求項20に記載のコンピュータ可読記憶媒体。
【請求項31】
前記プロキシデータ要素は、前記第2のバッファからの除去を最優先とする前記第2のバッファからの要素のコピーである、請求項20に記載のコンピュータ可読記憶媒体。
【請求項32】
前記除去された1つまたは複数のデータ要素は、前記第1のバッファの前記要素の最小値を表す前記第1のバッファからのデータ要素を含む、請求項27に記載のコンピュータ可読記憶媒体。
【請求項33】
前記除去された1つまたは複数のデータ要素は、前記第1のバッファの前記要素の最大値を表す前記第1のバッファからのデータ要素を含む、請求項27に記載のコンピュータ可読記憶媒体。
【請求項34】
前記コンピューティングシステムに、
前記第1のバッファに格納された前記データ要素に境界条件を適用させる命令であって、前記境界条件は、前記第1のバッファに格納された任意の2つのデータ要素間の最大許容差を表す、命令と、
前記境界条件に基づいて、前記既定の優先度順に従ってソートされたデータ要素の出力ストリームとして、前記第1のバッファから1つまたは複数のデータ要素をイジェクトさせる命令と
をさらに含む、請求項20に記載のコンピュータ可読記憶媒体。
【請求項35】
各データ要素は、データ記録生成時間を表す、請求項34に記載のコンピュータ可読記憶媒体。
【請求項36】
前記第1のバッファに格納された前記データ要素に境界条件を適用することは、
前記第1のバッファに格納された前記データ要素最小値を表すものとしてデータ要素を特定することと、
前記最小値を表す前記データ要素と前記第1のバッファに入力するために受信されたデータ要素との差を決定することと
を含む、請求項34に記載のコンピュータ可読記憶媒体。
【請求項37】
前記境界条件に基づいて、前記第1のバッファから1つまたは複数のデータ要素をイジェクトすることは、
1つまたは複数のデータ要素が既定の値を超えているかどうかを決定することと、
前記1つまたは複数のデータ要素が前記既定の値を超えている場合に、前記第1のバッファから前記1つまたは複数のデータ要素をイジェクトすることと
を含む、請求項34に記載のコンピュータ可読記憶媒体。
【請求項38】
前記第1および第2のバッファの少なくとも1つは、スキップリストデータ構造によって実装される、請求項20に記載のコンピュータ可読記憶媒体。
【請求項39】
前記第1および第2のバッファの少なくとも1つは、ツリープデータ構造によって実装される、請求項20に記載のコンピュータ可読記憶媒体。
【請求項40】
第1および第2のバッファ個別のデータ要素の1つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出される、請求項20に記載のコンピュータ可読記憶媒体。
【請求項41】
前記第1のバッファの前記データ要素の前記既定の順序は、前記第1のバッファから前記データ要素を除去するための優先度順を含む、請求項21に記載のコンピューティングシステム。
【請求項42】
前記第2のバッファに格納される前記データ要素の一部は、前記既定の順序に従って実質的にソートされる、請求項21に記載のコンピューティングシステム。
【請求項43】
前記第2のバッファに格納される前記データ要素の一部は、前記第1のバッファに格納された前記データ要素の少なくとも半分を含む、請求項21に記載のコンピューティングシステム。
【請求項44】
前記処理することは、前記第2のバッファに保存される前記データ要素の一部に対応する前記第1のバッファの位置にデータ要素を格納することをさらに含む、請求項21に記載のコンピューティングシステム。
【請求項45】
前記処理することは、
前記既定の順序に従って、前記第1のバッファから1つまたは複数のデータ要素を除去することと、
前記第1のバッファから前記除去された1つまたは複数のデータ要素を、前記既定の順序に従って実質的にソートされたデータ要素の出力ストリームとして提供することと
をさらに含む、請求項21に記載のコンピューティングシステム。
【請求項46】
前記処理は、前記プロキシデータ要素が前記第1のバッファに格納された要素の最優先のデータ要素になることに応じて、前記第2のバッファからの1つまたは複数のデータ要素を前記第1のバッファの前記データ要素とマージすることをさらに含む、請求項41に記載のコンピューティングシステム。
【請求項47】
前記マージされたデータ要素は、前記既定の順序に基づいてソートされる、請求項46に記載のコンピューティングシステム。
【請求項48】
前記第2のバッファからの前記1つまたは複数のデータ要素の前記第1のバッファの前記データ要素とのマージは、出力データ要素の生成と実質的に同時に起こる、請求項21に記載のコンピューティングシステム。
【請求項49】
前記プロキシデータ要素は、前記第2のバッファからの除去を最優先とする前記第2のバッファからの要素のコピーである、請求項21に記載のコンピューティングシステム。
【請求項50】
前記除去された1つまたは複数のデータ要素は、前記第1のバッファの前記要素の最小値を表す前記第1のバッファからのデータ要素を含む、請求項45に記載のコンピューティングシステム。
【請求項51】
前記除去された1つまたは複数のデータ要素は、前記第1のバッファの前記要素の最大値を表す前記第1のバッファからのデータ要素を含む、請求項45に記載のコンピューティングシステム。
【請求項52】
前記処理することは、
前記第1のバッファに格納された前記データ要素に境界条件を適用することであって、前記境界条件は、前記第1のバッファに格納された任意の2つのデータ要素間の最大許容差を表すことと、
前記境界条件に基づいて、前記既定の優先度順に従ってソートされたデータ要素の出力ストリームとして、前記第1のバッファから1つまたは複数のデータ要素をイジェクトすることと
をさらに含む、請求項21に記載のコンピューティングシステム。
【請求項53】
各データ要素は、データ記録生成時間を表す、請求項52に記載のコンピューティングシステム。
【請求項54】
前記第1のバッファに格納された前記データ要素に境界条件を適用することは、
前記第1のバッファに格納された前記データ要素最小値を表すものとしてデータ要素を特定することと、
前記最小値を表す前記データ要素と前記第1のバッファに入力するために受信されたデータ要素との差を決定することと
を含む、請求項52に記載のコンピューティングシステム。
【請求項55】
前記境界条件に基づいて、前記第1のバッファから1つまたは複数のデータ要素をイジェクトすることは、
1つまたは複数のデータ要素が既定の値を超えているかどうかを決定することと、
前記1つまたは複数のデータ要素が前記既定の値を超えている場合に、前記第1のバッファから前記1つまたは複数のデータ要素をイジェクトすることと
を含む、請求項52に記載のコンピューティングシステム。
【請求項56】
前記第1および第2のバッファの少なくとも1つは、スキップリストデータ構造によって実装される、請求項21に記載のコンピューティングシステム。
【請求項57】
前記第1および第2のバッファの少なくとも1つは、ツリープデータ構造によって実装される、請求項21に記載のコンピューティングシステム。
【請求項58】
第1および第2のバッファ個別のデータ要素の1つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出される、請求項21に記載のコンピューティングシステム。
【請求項59】
前記第1のバッファの前記データ要素の前記既定の順序は、前記第1のバッファから前記データ要素を除去するための優先度順を含む、請求項22に記載のコンピューティングシステム。
【請求項60】
前記第2のバッファに格納される前記データ要素の一部は、前記既定の順序に従って実質的にソートされる、請求項22に記載のコンピューティングシステム。
【請求項61】
前記第2のバッファに格納される前記データ要素の一部は、前記第1のバッファに格納された前記データ要素の少なくとも半分を含む、請求項22に記載のコンピューティングシステム。
【請求項62】
前記第2のバッファに保存される前記データ要素の一部に対応する前記第1のバッファの位置にデータ要素を格納する手段をさらに含む、請求項22に記載のコンピューティングシステム。
【請求項63】
前記既定の順序に従って、前記第1のバッファから1つまたは複数のデータ要素を除去する手段と、
前記第1のバッファから前記除去された1つまたは複数のデータ要素を、前記既定の順序に従って実質的にソートされたデータ要素の出力ストリームとして提供する手段と
をさらに含む、請求項22に記載のコンピューティングシステム。
【請求項64】
前記プロキシデータ要素が前記第1のバッファに格納された要素の最優先のデータ要素になることに応じて、前記第2のバッファからの1つまたは複数のデータ要素を前記第1のバッファの前記データ要素とマージする手段をさらに含む、請求項59に記載のコンピューティングシステム。
【請求項65】
前記マージされたデータ要素は、前記既定の順序に基づいてソートされる、請求項64に記載のコンピューティングシステム。
【請求項66】
前記第2のバッファからの前記1つまたは複数のデータ要素の前記第1のバッファの前記データ要素とのマージは、出力データ要素の生成と実質的に同時に起こる、請求項22に記載のコンピューティングシステム。
【請求項67】
前記プロキシデータ要素は、前記第2のバッファからの除去を最優先とする前記第2のバッファからの要素のコピーである、請求項22に記載のコンピューティングシステム。
【請求項68】
前記除去された1つまたは複数のデータ要素は、前記第1のバッファの前記要素の最小値を表す前記第1のバッファからのデータ要素を含む、請求項63に記載のコンピューティングシステム。
【請求項69】
前記除去された1つまたは複数のデータ要素は、前記第1のバッファの前記要素の最大値を表す前記第1のバッファからのデータ要素を含む、請求項63に記載のコンピューティングシステム。
【請求項70】
前記第1のバッファに格納された前記データ要素に境界条件を適用する手段であって、前記境界条件は、前記第1のバッファに格納された任意の2つのデータ要素間の最大許容差を表す、手段と、
前記境界条件に基づいて、前記既定の優先度順に従ってソートされたデータ要素の出力ストリームとして、前記第1のバッファから1つまたは複数のデータ要素をイジェクトする手段と
をさらに含む、請求項22に記載のコンピューティングシステム。
【請求項71】
各データ要素は、データ記録生成時間を表す、請求項70に記載のコンピューティングシステム。
【請求項72】
前記第1のバッファに格納された前記データ要素に境界条件を適用することは、
前記第1のバッファに格納された前記データ要素最小値を表すものとしてデータ要素を特定することと、
前記最小値を表す前記データ要素と前記第1のバッファに入力するために受信されたデータ要素との差を決定することと
を含む、請求項70に記載のコンピューティングシステム。
【請求項73】
前記境界条件に基づいて、前記第1のバッファから1つまたは複数のデータ要素をイジェクトすることは、
1つまたは複数のデータ要素が既定の値を超えているかどうかを決定することと、
前記1つまたは複数のデータ要素が前記既定の値を超えている場合に、前記第1のバッファから前記1つまたは複数のデータ要素をイジェクトすることと
を含む、請求項70に記載のコンピューティングシステム。
【請求項74】
前記第1および第2のバッファの少なくとも1つは、スキップリストデータ構造によって実装される、請求項22に記載のコンピューティングシステム。
【請求項75】
前記第1および第2のバッファの少なくとも1つは、ツリープデータ構造によって実装される、請求項22に記載のコンピューティングシステム。
【請求項76】
第1および第2のバッファ個別のデータ要素の1つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出される、請求項22に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2011年2月18日に出願された「Managing Buffer Conditions」と称する米国特許出願第13/031,034号の優先権を主張し、同特許は、その全内容が参照により本明細書に組み込まれる。
【0002】
本説明は、バッファ状態の管理に関連する。
【背景技術】
【0003】
さまざまなデータ処理技術と同様に、バッファ管理技術は、多くのアプリケーションにおいて重要な役割を果たす。一実装形態では、バッファオーバーフロー状態は、コンピュータシステムに大混乱をもたらす恐れがあり、例えば、メモリ容量を超えるデータ量の格納を試みる場合に、処理が遅くなることも、完全に停止することもあり得る。オーバーフローを阻止するため、データは、他の目的に対して義務を有し得る他の記憶域に書き込むことができ、それにより、処理がスローダウンまたは終了される可能性もある。
【発明の概要】
【課題を解決するための手段】
【0004】
一態様では、一般に、コンピュータ実装方法は、第1のバッファのオーバーフロー状態を検出する工程に応じて、第1のバッファに存在するデータ要素の一部を第2のバッファに格納する工程であって、第1のバッファのデータ要素は、既定の順序に従ってソートされる、工程と、第1のバッファにプロキシデータ要素を挿入して、第2のバッファに格納されるデータ要素の一部を表す工程とを含み得る。
【0005】
態様は、以下の1つまたは複数を含み得る。
【0006】
第1のバッファのデータ要素の既定の順序は、第1のバッファからデータ要素を除去するための優先度順を含み得る。第2のバッファに格納されるデータ要素の一部は、既定の順序に従って実質的にソートすることができる。第2のバッファに格納されるデータ要素の一部は、第1のバッファに格納されたデータ要素の少なくとも半分を含み得る。本方法は、第2のバッファに保存されるデータ要素の一部に対応する第1のバッファの位置にデータ要素を格納する工程を含み得る。本方法は、既定の順序に従って、第1のバッファから1つまたは複数のデータ要素を除去する工程と、第1のバッファから除去された1つまたは複数のデータ要素を、既定の順序に従って実質的にソートされたデータ要素の出力ストリームとして提供する工程とを含み得る。本方法は、プロキシデータ要素が第1のバッファの格納要素の最優先のデータ要素になることに応じて、第2のバッファからの1つまたは複数のデータ要素を第1のバッファのデータ要素とマージする工程を含み得る。本方法は、プロキシデータ要素が第1のバッファから除去されるものとして特定されることに応じて、第2のバッファからの1つまたは複数のデータ要素を第1のバッファのデータ要素とマージする工程を含み得る。マージされたデータ要素は、既定の順序に基づいてソートすることができる。マージは、出力データ要素の生成と実質的に同時に起こり得る。プロキシデータ要素は、第2のバッファからの除去を最優先とする第2のバッファからの要素のコピーであり得る。除去された1つまたは複数のデータ要素は、第1のバッファの要素の最小値を表す第1のバッファからのデータ要素を含み得る。除去された1つまたは複数のデータ要素は、第1のバッファの要素の最大値を表す第1のバッファからのデータ要素を含み得る。本方法は、第1のバッファに格納されたデータ要素に境界条件を適用する工程と、境界条件に基づいて、既定の優先度順に従ってソートされたデータ要素の出力ストリームとして、第1のバッファから1つまたは複数のデータ要素をイジェクトする工程とを含み得る。
【0007】
各データ要素は、データ記録生成時間を表し得る。第1のバッファに格納されたデータ要素に境界条件を適用する工程は、第1のバッファに格納されたデータ要素の最小値を表すものとしてデータ要素を特定する工程と、最小値を表すデータ要素と第1のバッファに入力するために受信されたデータ要素との差を決定する工程とを含み得る。境界条件に基づいて、第1のバッファから1つまたは複数のデータ要素をイジェクトする工程は、1つまたは複数のデータ要素が既定の値を超えているかどうかを決定する工程と、1つまたは複数のデータ要素が既定の値を超えている場合に、第1のバッファから1つまたは複数のデータ要素をイジェクトする工程とを含み得る。第1および第2のバッファの少なくとも1つは、スキップリストデータ構造によって実装することができる。第1および第2のバッファの少なくとも1つは、ツリープ(treap)データ構造によって実装することができる。第1および第2のバッファの個別のデータ要素の1つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出することができる。
【0008】
別の態様では、一般に、データ要素をソートするためのコンピュータプログラムを格納するコンピュータ可読記憶媒体は、コンピューティングシステムに、第1のバッファのオーバーフロー状態を検出する工程に応じて、第1のバッファに存在するデータ要素の一部を第2のバッファに格納させるための命令であって、第1のバッファのデータ要素は、既定の順序に従ってソートされる、命令と、第1のバッファにプロキシデータ要素を挿入して、第2のバッファに格納されるデータ要素の一部を表させるための命令とを含み得る。
【0009】
別の態様では、一般に、データ要素をソートするためのコンピューティングシステムは、第1のバッファに存在するデータ要素の一部を第2のバッファに格納するためのデータ格納システムと、データ格納システムと結合され、受信されたデータ要素のストリームを処理するよう構成された少なくとも1つのプロセッサとを含み得る。処理する工程は、第1のバッファのオーバーフロー状態を検出する工程に応じて、第1のバッファに存在するデータ要素の一部を第2のバッファに格納する工程であって、第1のバッファのデータ要素は、既定の順序に従ってソートされる、工程と、第1のバッファにプロキシデータ要素を挿入して、第2のバッファに格納されるデータ要素の一部を表す工程とを含み得る。
【0010】
別の態様では、一般に、データ要素をソートするためのコンピューティングシステムは、第1のバッファに存在するデータ要素の一部を第2のバッファに格納するための手段と、受信されたデータ要素のストリームを処理するための手段とを含む。処理する工程は、第1のバッファのオーバーフロー状態を検出する工程に応じて、第1のバッファに存在するデータ要素の一部を第2のバッファに格納する工程であって、第1のバッファのデータ要素は、既定の順序に従ってソートされる、工程と、第1のバッファにプロキシデータ要素を挿入して、第2のバッファに格納されるデータ要素の一部を表す工程とを含み得る。
【0011】
態様は、以下の利点の1つまたは複数を含み得る。
【0012】
いくつかの例では、第1のバッファおよびそのコンテンツは、例えばランダムアクセスメモリ(RAM:random access memory)などの高速メモリに格納することができる。オペレーションの間、第1のバッファのある部分を低速メモリ(例えば、ハードディスク)に格納することがより望ましい場合がある。例えば、プライマリバッファのある要素は、すぐには必要とされない場合があり、従って、低速メモリに格納することができる第2のバッファへ除去することができる。1つまたは複数のセカンダリバッファは、すぐには必要とされない要素を一時的に格納するために使用することができる。これらの要素は、第1のバッファに存在していた実質的に等しい数の要素がもはや存在せず、それにより、要素のための適切なスペースが提供される場合に、第1のバッファに復元することができる。
【0013】
さらに、大部分がソートされる受信されたデータ要素のストリームに関与するいくつかの実装形態では、要素の大多数とともに適正な順序にはない一部を除いて、要素は、大部分がソートされた順序で存在し得る。ストリームの各個別のデータ要素を受信した後で、プライマリバッファに格納されたデータ要素に境界条件を適用することによって、既定の順序に従ってソートされたデータ要素の出力ストリームを生成することができる。
【0014】
本発明の他の特徴および利点は、以下の説明および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0015】
図1】バッファ管理システムのブロック図である。
図2】一連の管理オペレーションを経たバッファを示す。
図3】バッファ管理プロセスのフローチャートである。
【発明を実施するための形態】
【0016】
図1を参照すると、例示的なバッファ管理システム100は、記憶装置108にデータ要素106a〜n(総称して106)を格納するコンピュータシステム104(例えば、1つまたは複数のクライアントシステムへのサービスを行うウェブサーバなどのサーバ)上で実行されるアプリケーション102(例えば、ソートアプリケーション)を含む。記憶装置108は、例えば、複数のバッファ(2つのバッファ110、112で示されるような)を有するハードドライブメモリまたは他の取り外し可能な記憶媒体であり得、コンピュータシステム104の一部としても、別々のスタンドアロンメモリデバイスとしても実装することができる。いくつかの例では、第1のバッファ110は、例えばランダムアクセスメモリなどの第1のメモリに位置し、第2のバッファ112は、ハードディスクに位置し得る。
【0017】
要素106は、例えば、ソートアプリケーション102によって生成されたデータ記録(図示せず)の1つまたは複数の属性に割り当てられた値など、さまざまなタイプの情報を表し得る。いくつかの実装形態では、要素106は、1つまたは複数のデータ記録上で実行されたコンピューテーションから生じた値を表し得る。要素106によって表され得る他の情報は、例えばソートアプリケーション102によって対応するデータ記録が作成された際のそれぞれの時間などのタイムスタンプを含み得る。
【0018】
ソートアプリケーション102はさまざまな異なる機能を提供することができるが、一例としては、ソートアプリケーション102は、その内容はその全体が参照により本明細書に組み込まれる、同時係属の米国特許出願第13/031,056号にさらに詳細に説明されているウィンドウソートアプリケーションであり得る。いくつかの例では、ソートアプリケーション102は、データ要素106を生成せずに、場合により、ソートするための第2の異なるアプリケーション114(例えば、コンピュータシステム116上で実行される)からデータ要素106を受信することができる。
【0019】
ソートは、本明細書では、受信されたストリームの要素106をある順序に置くプロセスを指す。例えば、ソートアプリケーション102は、要素の数値の昇順に要素を出力することができる。オペレーション中は、ソートアプリケーション102は、ソートされていない要素の入力ストリーム(例えば、データソースアプリケーション114から到達する要素)をプライマリバッファと呼ばれるバッファ110に格納する。要素は、格納要素118a〜b(総称して118)として実質的にソートされた形で格納することができる。しかし、入力ストリームには比較的多数の要素(例えば、数百万)が存在し得、証拠として、これらの要素により、プライマリバッファ110は、提供される要素のすべてを格納することができなくなる場合がある。例えば、プライマリバッファ110は、その物理的な最大メモリサイズに基づく容量に達する場合がある。そのような状況の結果、プライマリバッファ110は、オーバーフローとなり、コンピュータシステム104のオペレーションに混乱をもたらし、停止させる恐れがある。そのような問題を軽減するため、1つまたは複数の「スピルオーバーベースン(spill-over basin)」またはバッファ112などのセカンダリバッファを使用して、オーバーフロー要素を一時的に格納することができ、図1では要素120a〜b(総称して120)として表される。
【0020】
いくつかの例では、プライマリバッファおよびそのコンテンツは、例えばランダムアクセスメモリ(RAM)などの高速メモリに格納することができる。オペレーションの間、プライマリバッファのある部分を低速メモリ(例えば、ハードディスク)に格納することがより望ましい場合がある。例えば、プライマリバッファのある要素は、すぐには必要とされない場合があり、従って、低速メモリに格納することができる第2のバッファへ除去することができる。そのような状況に対処するため、バッファ112などの1つまたは複数のセカンダリバッファを使用して、要素120a〜bとして、すぐには必要とされない要素を一時的に格納することができる。
【0021】
これらの要素120は、プライマリバッファ110に存在していた実質的に等しい数の要素がもはや存在せず(例えば、イジェクトされた要素122a〜b)、それにより、要素120のための適切なスペースが提供される場合に、プライマリバッファ110に復元する(例えば、マージし直す)ことができる。
【0022】
ソートされた出力を提供するため、ソートアプリケーション102は、イジェクトされた要素122が実質的にソートされた順序にあることを保証するためのオペレーションを実行する。例えば、イジェクトされた要素122は、最初に小さな(または、好ましい出力に応じて、大きな)値の要素がイジェクトされ、それに続いて、より大きな(より小さな)値の要素がイジェクトされるように、イジェクトされる。要素がタイムスタンプ値を表す例の場合、最新の(または、好ましい出力に応じて、最古の)タイムスタンプと関連する要素がバッファからイジェクトされ得る。イジェクトされた要素122は、示されるように、追加の処理のため、別のコンピュータシステム126によって実行される受信アプリケーション124に提供することができる。受信アプリケーション124は、イジェクトされた要素122の受信および処理が可能なタイプのソフトウェアアプリケーションを代表するものである。
【0023】
図2は、バッファオーバーフローを管理するためのオペレーションを示す1組のバッファ210および212(例えば、図1に示されるプライマリバッファ110およびセカンダリバッファ112)の状態202〜208の図表示である。入力要素の順序は、完全に無作為の順序または幾分か決定論的な順序(例えば、部分的にソートされる、大部分がソートされる、など)など、さまざまな順序で提供され得る。大部分がソートされるシナリオでは、一部の外れ値(大多数と比べて)を除いて、要素は、大部分がソートされた順序にあり得る。そのような外れ値を定量化すると、比較的多数の要素(例えば、数百万)を有するストリームの場合、要素のおよそ0.1〜10%が順序に狂いが生じている場合がある。多数の要素を有するストリーム内の適正な位置にそのような外れ値要素を効率的に挿入するため、ソートアプリケーションは、要素の大多数が適切に順序付けられて到達するという事実を利用することができる。例えば、外れ値を含む入力要素は、ソートされた形でプライマリバッファ210に格納する(例えば、ソートアプリケーション102によって)ことができる。既にソートされて到達する大多数の要素の場合、要素をバッファ210に格納することは、比較的効率的なプロセスである。しかし、外れ値がバッファに到達し、プライマリバッファ210内の適切な位置に挿入する必要がある場合は、追加時間が必要とされ得る。
【0024】
通常、格納要素は、1つまたは複数の規則に基づいて、プライマリバッファ210からイジェクトされる。例えば、各格納要素に関連する値(例えば、数値)を使用して、対応する要素をイジェクトすべきかどうかを決定することができる。要素が格納される順序では、プライマリバッファ210から1つまたは複数の要素をイジェクトするかどうかの決定も考慮され得る。適切な時間に、ソートアプリケーション102は、ソートされた順序(例えば、昇順、降順など)に従って、優先順にプライマリバッファ210の要素をイジェクトする。さらに、格納要素に課された条件(例えば、任意の2つの格納要素間の最大許容差)に違反した場合、要素はイジェクトされ得る。プライマリバッファ210からイジェクトされた時点で、結果として得られた要素は、ソートされた要素の出力ストリームを形成する。
【0025】
数値の昇順に従って要素がソートされる場合は、最初に小さな値の要素がイジェクトされ、その後、より大きな値の要素がイジェクトされ得る。同様に、降順に従って要素がソートされる場合は、早い時間に大きな値の要素がイジェクトされ、その後、より小さな値の要素がイジェクトされ得る。各要素に関連するそのような数値は、1つまたは複数の数量を表し得る。
【0026】
バッファ210、212は、特定のソートされた順序でデータ要素を格納して要素をイジェクトするためのデータ構造およびアーキテクチャの1つまたは複数のタイプ(例えば、優先度付きキューデータ構造)によって実装することができる。一実装形態では、ソートアプリケーション102は、データ構造を使用して、データ要素をソートするためのさまざまな機能を提供できる場合がある。例えば、一構成では、プライマリおよびセカンダリバッファを定義するために選択されたデータ構造上で3つの機能を主に使用することができる。
【0027】
3つの機能の1つにおいては、ソートアプリケーション102は、構造内の格納要素の優勢なソート順序によって決定されるように、データ構造の適切な位置に要素を挿入することができる。例えば、その数値の昇順に構成された格納要素について考慮する。ソートアプリケーション102は、入力要素の数値に基づいて、データ構造の適切な位置に新しい入力要素を挿入できる場合がある。第2の機能としては、ソートアプリケーションは、イジェクション優先度順(例えば、バッファの最小または最大データ要素をイジェクトする)に基づいて、構造からイジェクトされているものとして1つまたは複数の要素を特定できる場合がある。第3に、ソートアプリケーションは、構造内に存在する1つまたは複数の特定された要素のイジェクションを開始する機能を提供することができる。
【0028】
一構成では、プライマリバッファ210およびセカンダリバッファ212のそれぞれは、バランスの取れた二分木データ構造(例えば、ヒープ二分木データ構造)であり得る。一般に、ヒープ二分木データ構造(単にヒープと呼ばれる場合が多い)は、2つの条件を満たす。1つの条件は、木構造に含まれる子ノードの優先度が親ノードの優先度と少なくとも同程度であることであり得る。第2の条件は、ヒープが「完全な木」であること、すなわち、あらゆる行が満たされている木であること、すなわち、恐らく最終行を除いて、葉ノード間に間隙(満たされていないノード)がないことであり得る。
【0029】
いくつかの例では、バッファ210、212は、スキップリストデータ構造によって実装することができる。一般に、スキップリストデータ構造およびその関連アルゴリズムは、リンクされた線形リストの変形例であり、キーを有するデータ要素の頻繁な挿入を要求する状況におけるソート性能を向上させることができる。スキップリストデータ構造は、データ要素(または、ノード)の順序付けられたリンクされた線形リストを含み得、いくつかの要素は、中間データ要素をスキップする追加のポインタを有し、従って、データ要素の探索の速度および効率を増加する。
【0030】
スキップリストデータ構造としてバッファ210、212を実装することによって、最小データ要素を検索するための検索時間は、O(1)時間であり得る。O(1)時間の挿入時間は、データ要素を適切に挿入する(例えば、要素は、ごく最近挿入された要素に隣接して挿入される)ために必要な場合がある。挿入位置がごく最近挿入された要素に隣接しない場合は、挿入時間はO(log N)時間であり得る。「k」要素(例えば、最大値を有する要素)を読み出すためのイジェクション時間は、O(k)時間であり得る。スキップリストデータ構造については、その内容はその全体が参照により本明細書に組み込まれる、William Pughによる「Skip lists: A probabilistic alternative to Balanced trees」と称する文書Communications of the ACM. 1990年,6月 668-676頁でさらに詳細に説明されている。
【0031】
また、他の技術も利用することができ、例えば、ツリープデータ構造によってバッファ210、212を実装することができる。ツリープデータ構造は、各ノードが無作為に割り当てられた優先度属性およびキーを有する二分探索木である。ノードは、それらのキーに関して、典型的な二分探索木のような順序にある。すなわち、キーに関して、ノードの左側のサブツリーは、ノードのキー未満のキーを有するノードのみを含み、ノードの右側のサブツリーは、ノードのキー以上のキーを有するノードのみを含む。それに加えて、ノードは、それらの優先度属性に関して、「ヒープ順」にあり、その結果、各子ノードは、親ノードの優先度属性と少なくとも同程度である優先度属性を有する。ツリープデータ構造については、その内容はその全体が参照により本明細書に組み込まれる、Aragon, Cecilia R.およびSeidel, Raimundによる「Randomized Search Trees」と称する文書Proc. 30th Symp. Foundations of Computer Science (FOCS 1989年)でさらに説明されている。
【0032】
一実装形態では、ソートアプリケーション102は、プライマリバッファ210上で境界条件を適用させることができ、境界条件を使用して、プライマリバッファから要素をイジェクトするかどうか、および、いつプライマリバッファから要素をイジェクトするか決定する。境界条件は、プライマリバッファへの格納が許可される要素値の「ウィンドウ」の形を取ることができる。ウィンドウは、プライマリバッファの任意の2つの格納データ要素間の最大許容差を表し得る。そのため、ウィンドウの「幅」は、プライマリバッファで許可される値の範囲を表す。例えば、ウィンドウ幅は、プライマリバッファ210の最小要素と最大要素との差を計算することによって、定義することができる。
【0033】
境界条件は、条件が満たされているまたは満たされていない(例えば、違反している)と見なすことができるという点において、バイナリと見なすことができる。例えば、入力要素が原因でウィンドウ幅を超えることにならない限り、境界条件は満たされていると見なすことができる。逆に、ウィンドウ幅を超えた場合は、境界条件に違反していると見なすことができる。境界条件への違反があり次第、1つまたは複数の動作を実行することができ、例えば、イジェクション優先度順に従ってプライマリバッファ210の1つまたは複数の要素がイジェクトされ得る。
【0034】
さまざまな技術を使用して、ウィンドウに関連するパラメータを定義することができ、例えば、ユーザがウィンドウ幅を指定することも、事前に定義しておくこともできる。例えば、特定のアプリケーション(例えば通話終了時間に基づいてソートする)に基づいて、ウィンドウ幅を定義することができる。状況次第では、ウィンドウ幅は、「順序の狂い」の度合い、例えば、外れ値要素が許容され得る度合いに相当する。例えば、タイムスタンプされたデータ要素に関与する状況について考慮する。ウィンドウ幅は、バッファ内に現在存在するタイムスタンプされた要素(例えば、最小または最大のタイムスタンプされた要素)と比較して、どのくらい遅くまでタイムスタンプされた要素をプライマリバッファに提供できるかを示す。一構成では、ウィンドウ幅(時間の単位で)が4時間であれば、プライマリバッファ210は、4時間ウィンドウの範囲内のすべてのタイムスタンプされた要素を格納することができる(プライマリバッファの最小のタイムスタンプされた要素によって定義されるように)。4時間の範囲外で到達するタイムスタンプされた要素は、廃棄されることも、別々に処理されることもある。
【0035】
図2で示されるように、プライマリバッファ210の個別のコンテンツ、プライマリバッファ210のウィンドウ幅(ラベルWで示される)、プライマリバッファ210内に現在存在する最小要素(ラベルSで示される)および現在の出力データ要素についての情報は、各状態202〜208に対して提供される。この例では、要素は昇順で格納され、入力ストリームは大部分が昇順でソートされるように見える。ソートに基づいて、出力ストリームは、昇順で実質的にソートされて提供される。デモンストレーションを目的として、約13個の要素のストリームに対して動作させるものとして例が示されるが、プロセスは、それより多いまたは少ない要素でストリームに対して動作させてもよく、例えば、プロセスによって要素の連続ストリームを入力してソートすることができる。
【0036】
初期状態202では、ウィンドウ幅値は20と事前に定められる(例えば、プライマリバッファ210の最小要素と最大要素との差は値20以上ではない)。示されるように、プライマリバッファ210は満杯であり、従って、それ以上の要素を格納することはできない。プライマリバッファ210の現在最小値の要素は値0を有する(かつ、状態202では、S=0で表される)。要素はイジェクトされていないため、現在の出力は「NIL」(すなわち、出力データ要素無し)で表される。また、セカンダリバッファ212は現在空である。
【0037】
状態204では、次の値16の入力要素がプライマリバッファ210に挿入されることになっている。しかし、要素16に対する適切な位置は、値17の要素と値14の要素との間であるが、プライマリバッファ210には、現在、値16の要素用のスペースを作るために値17の要素を移動することができる、要素の挿入に必要なスペースがない。スペースを作るため、プライマリバッファ210の格納要素の既定の部分(例えば、半分)を除去してセカンダリバッファ212に提供することができ、プライマリバッファ210の新たに利用可能な位置に値16の要素を格納することができる。例えば、格納要素の大きい方の半分(すなわち、値17、14、11、10、9の要素)をセカンダリバッファ212に移動することができる。いくつかの例では、既定の部分は、事前に定義された規則に基づいて選択される。
【0038】
格納要素の大きい方の半分を除去する一利点は、要素をプライマリバッファ210にマージし直すのに必要な時間の最大化である。要素を除去してそれらをセカンダリバッファ212に書き込むのに必要な時間は、およそO(k)時間であり、kは除去された要素の数である。除去された要素は、ソートされた順序でセカンダリバッファ212に格納することもできる。さらに、プロキシ要素(例えば、プライマリバッファではS9とラベル付けされる)は、プライマリバッファ210の適切な位置に挿入することができる。プロキシ要素を使用して、除去されてセカンダリバッファ212に格納された要素を表す(例えば、プライマリバッファ210内)。プロキシ要素は、例えば、プロキシ要素を表すデータ要素に追加されるBooleanフィールド(フラグ)を変更することによってなど、さまざまな方法で表すことができる。プロキシ要素の位置は、プライマリバッファ210の残存要素の優勢な順序によって確立することができる。例えば、このデモンストレーションでは、除去された要素の最小値は値9を有するため、プロキシ要素S9は、新たに挿入された値16の要素と値8の要素との間に挿入することができる。状態204では、プライマリバッファ210の最小要素と最大要素との差は16であり、これは依然としてウィンドウ幅20未満であるため、境界条件に違反しているとは見なされず、従って、データ要素をイジェクトする必要はない。
【0039】
状態206では、示されるように、プライマリバッファ210において、要素格納のための数カ所の位置が利用可能となっている。次の値20の入力要素は、プライマリバッファの適切な位置、すなわち、値16の要素の後に挿入される。この挿入に基づいて、プライマリバッファ210の最小要素と最大要素との差は20であり、これはウィンドウ幅20に等しく、従って、境界条件に違反している。そのため、境界条件に違反している限り、要素は、要素のイジェクション優先度の順序(例えば、昇順)でプライマリバッファ210からイジェクトされる。プライマリバッファ210の最小要素は、値0を有するものであり、これがイジェクトされる。すると、次の最小要素は値1を有するものである。この状態でのプライマリバッファ210の最小要素と最大要素との差は19であり、これはウィンドウ幅20未満であるため、境界条件には違反していない。その結果、プライマリバッファ210からそれ以上の要素をイジェクトする必要はない。
【0040】
状態208では、値29の要素がプライマリバッファ210に挿入されると、最小要素と最大要素との差は28となり(すなわち、29から1を引く)、これはウィンドウ幅20を超える。境界条件に違反しており、従って、プライマリバッファ210から値1、6、7および8の要素がイジェクトされる。ここでは、29から9を引くと20であるため、プロキシ要素S9も境界条件に違反することになる。
【0041】
この状況では、セカンダリバッファ212からの要素をプライマリバッファ210の要素とマージし直すことができ、その結果、組み合わされた要素が順序に格納される。読者の便宜を図るため、プライマリバッファ210に新たにマージされた要素は、太字の下線が引かれた書体で示される。一般に、スキップリストデータ構造によって実装されたプライマリバッファ210の場合、プライマリバッファ210に要素をマージし直すのに必要な時間は、およそO(k log(n/k))時間であり、「n」はプライマリバッファ210の要素の数であり、「k」はマージされた要素の数である。マージが完了した後、値9の要素は、この要素が原因で境界条件に違反することになるため(29から9を引くと20である)、バッファからイジェクトされ得る。そのため、ここでは、バッファの最小要素は値10を有するものであり、これは境界条件には違反していない。その結果、プライマリバッファからそれ以上の要素はイジェクトされない。
【0042】
通常、マージが起こると、プライマリバッファからイジェクトされる要素の数は、セカンダリバッファに存在する要素の数に等しい。例えば、プライマリバッファから4つの要素がイジェクトされることで、セカンダリバッファから4つの要素に対するスペースが提供される(5番目の値9の要素は、マージの後でイジェクトされる)。
【0043】
数などのバッファアーキテクチャの変形例は、いくつかの実装形態において達成することができる。例えば、1つのプライマリバッファおよび2つ以上のセカンダリバッファを利用することができる。複数のバッファと同様に、複数のプロキシ要素をプライマリバッファに格納することができ、それぞれが、要素を格納する複数のセカンダリバッファに対応する。プロキシ要素がプライマリバッファの最優先イジェクション要素になると、対応するセカンダリバッファからの要素はプライマリバッファにマージされる。
【0044】
いくつかの例では、セカンダリバッファの容量が満たされ、別の異なるバッファ(例えば、ターシャリバッファ)がオーバーフロー要素の格納に使用される場合がある。プロキシ要素は、セカンダリバッファの適切な位置に挿入して、ターシャリバッファに格納されるオーバーフロー要素を表すことができる。
【0045】
セカンダリバッファの長さ(および、ひいてはこれらのバッファに対応するファイルサイズ)は、オーバーフロー状態が起こる際にプライマリバッファから除去された要素の数に依存する。例えば、最適のファイルサイズは、プライマリバッファの効率的な使用を可能にするだけの数の要素(例えば、最大で少なくとも半分の要素の数)をプライマリバッファから除去する工程を伴う。さらなる考慮は、除去およびマージオペレーションの数の最小化である。
【0046】
ここで、図3を参照すると、バッファのオーバーフロー状態を管理するための例示的なバッファオーバーフロー管理プロセス300のオペレーションを表すフローチャートが示されている。一実装形態では、以下に概説される工程は、コンピュータシステム上で実行されるソフトウェアアプリケーションによって行うことができる。事前準備として、1つまたは複数の技術を使用して、プライマリおよびセカンダリバッファを初期化する(工程302)。例えば、初期化は、入力要素を格納するための、記憶域、例えば、複数の連続メモリアドレスを指定する工程を含み得る。初期化の一部として、プライマリバッファに対して境界条件を指定することができる。例えば、プライマリバッファのウィンドウ幅に相当する値を保持するための変数を定義することができる。ウィンドウ幅は、プライマリバッファの任意の2つの格納データ要素値間の最大許容差を表し得る。
【0047】
プライマリバッファに対する境界条件が定義されると、プライマリバッファがデータ要素の入力ストリームを受信する準備が整う(工程304)。しかし、プライマリバッファが容量に達すると、オーバーフロー状態が起こる(工程306)。オーバーフロー状態は、プライマリバッファにそれ以上の要素を収容できなくなると起こる。この状況では、プライマリバッファの格納要素の一部(例えば、半分)を除去してセカンダリバッファに格納することができる(工程308)。1つまたは複数の技術を使用して、プライマリバッファ(例えば、第1のバッファ)にプロキシデータ要素を挿入して、セカンダリバッファ(例えば、第2のバッファ)に格納されるデータ要素の一部を表すことができる。例えば、プロキシ要素は、除去された要素を表すためにプライマリバッファの適切な位置に挿入することができる番兵(sentinel)によって提供することができる。バッファからプロキシ要素をイジェクトする必要がある場合、ソートされた順序でプライマリバッファにセカンダリバッファの格納要素をマージする(工程310)。入力要素が存在する限り、プロセス300は、あらゆる入力要素に対して繰り返すことができる。
【0048】
本明細書に記載される技術は、コンピュータ上で実行するためのソフトウェアを使用して実施することができる。例えば、ソフトウェアは、1つまたは複数のプログラムされたまたはプログラム可能なコンピュータシステム(それは、分散型、クライアント/サーバまたはグリッドなどのさまざまなアーキテクチャのものである)上で実行する1つまたは複数のコンピュータプログラムの手順を形成し、コンピュータシステムはそれぞれ、少なくとも1つのプロセッサと、少なくとも1つのデータ格納システム(揮発性および不揮発性メモリならびに/または格納要素を含む)と、少なくとも1つの入力デバイスまたはポートと、少なくとも1つの出力デバイスまたはポートとを含む。ソフトウェアは、例えば、コンピューテーショングラフの設計および構成に関連する他のサービスを提供する大規模なプログラムの1つまたは複数のモジュールを形成することができる。グラフのノードおよび要素は、コンピュータ可読媒体に格納されたデータ構造、または、データリポジトリに格納されたデータモデルに適合する他の組織化されたデータとして実装することができる。
【0049】
ソフトウェアは、汎用または特殊用途のプログラム可能なコンピュータによる読み取りが可能なCD−ROMなどの記憶媒体上で提供されても、ネットワークの通信媒体上で、ソフトウェアが実行されるコンピュータに送達されてもよい(伝播信号で符号化される)。機能のすべては、特殊用途のコンピュータ上で、または、コプロセッサなどの特殊用途のハードウェアを使用して実行することができる。ソフトウェアは、ソフトウェアによって指定されるコンピューテーションの異なる部分は異なるコンピュータによって実行される分散様式で実施することができる。それぞれのそのようなコンピュータプログラムは、好ましくは、汎用もしくは特殊用途のプログラム可能なコンピュータによる読み取りが可能な記憶媒体もしくはデバイス(例えば、ソリッドステートメモリもしくは媒体、または、磁気もしくは光媒体)上に格納されるか、または、記憶媒体もしくはデバイスにダウンロードされるが、それは、コンピュータシステムで記憶媒体もしくはデバイスを読み取り、本明細書に記載される手順を実行する際にコンピュータを構成および動作するためである。また、本発明のシステムは、コンピュータ可読記憶媒体として実装され、コンピュータプログラムを用いて構成されるものと考慮され得、そのように構成された記憶媒体は、特定の事前に定義された様式でコンピュータシステムを動作させ、本明細書に記載される機能を実行する。
【0050】
本発明の多くの実施形態について説明してきた。それにもかかわらず、本発明の精神および範囲から逸脱することなく、さまざまな変更を行うことができることが理解されよう。例えば、上記で説明された工程のいくつかは、順序に依存しないものであり得、従って、説明されている順序とは異なる順序で実行することができる。
【0051】
前述の説明は、例示を意図するものであり、本発明の範囲を限定するものではなく、本発明の範囲は、添付の特許請求の範囲によって定義されることを理解されたい。例えば、上記で説明された多くの機能工程は、処理全体に実質的に影響を与えることなく、異なる順序で実行することができる。他の実施形態は、以下の特許請求の範囲内にある。
図1
図2
図3