JP6060094B2 - ソート - Google Patents

ソート Download PDF

Info

Publication number
JP6060094B2
JP6060094B2 JP2013554591A JP2013554591A JP6060094B2 JP 6060094 B2 JP6060094 B2 JP 6060094B2 JP 2013554591 A JP2013554591 A JP 2013554591A JP 2013554591 A JP2013554591 A JP 2013554591A JP 6060094 B2 JP6060094 B2 JP 6060094B2
Authority
JP
Japan
Prior art keywords
buffer
data elements
data
data element
received
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2013554591A
Other languages
English (en)
Other versions
JP2014511526A5 (ja
JP2014511526A (ja
Inventor
ダブリュ. スタンフィル,クレイグ
ダブリュ. スタンフィル,クレイグ
リチャード ファインマン,カール
リチャード ファインマン,カール
Original Assignee
アビニシオ テクノロジー エルエルシー
アビニシオ テクノロジー エルエルシー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by アビニシオ テクノロジー エルエルシー, アビニシオ テクノロジー エルエルシー filed Critical アビニシオ テクノロジー エルエルシー
Publication of JP2014511526A publication Critical patent/JP2014511526A/ja
Publication of JP2014511526A5 publication Critical patent/JP2014511526A5/ja
Application granted granted Critical
Publication of JP6060094B2 publication Critical patent/JP6060094B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • G06F7/24Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/22Indexing scheme relating to groups G06F7/22 - G06F7/36
    • G06F2207/226Priority queue, i.e. 1 word in, 1 word out sorter; Output word, i.e. min or max of words in memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • User Interface Of Digital Computer (AREA)
  • Information Transfer Systems (AREA)

Description

関連出願の相互参照
本願は、2011年2月18日に出願された「Sorting」と題する米国特許出願第13/031,056号の優先権を主張し、同特許は、その全内容が参照により本明細書に組み込まれる。
本開示は、ソートに関連する。
さまざまなデータ処理技術と同様に、ソート技術は、多くのアプリケーションにおいて重要な役割を果たし得る。例えば、データ傾向および相違点は、ソートされたデータリストが提示され次第(1つまたは複数のソートパラメータに基づいて)、ビューアによって迅速に特定され得る。例えば、昇順または降順にリストをソートすることによって、データ境界、範囲および他の数量を視覚的に認識できる可能性がある。ソートアルゴリズムの効率は、ソートされたリストの生成に必要な、実行されるデータ要素比較およびデータ要素の動きの数の関数によってなどの多くの方法論を通じて評価することができる。
一態様では、一般に、コンピュータ実装方法は、受信されたデータ要素のストリームをバッファに格納する工程と、データ要素のストリームの各個別のデータ要素を受信した後で、バッファに格納されたデータ要素に境界条件を適用する工程と、境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、バッファから1つまたは複数のデータ要素を生成する工程とを含む。
態様は、以下の1つまたは複数を含み得る。
バッファから1つまたは複数のデータ要素を生成する工程は、バッファから少なくとも最小データ要素を生成する工程を含み得る。バッファから1つまたは複数のデータ要素を生成する工程は、バッファから少なくとも最大データ要素を生成する工程を含み得る。受信された各データは、データ記録生成時間を表し得る。データ要素の出力ストリームは、新しい順にソートすることができる。受信されたデータ要素のストリームのデータ要素は、部分的にソートすることができる。受信されたデータ要素のストリームのデータ要素は、実質的に非同期的にバッファに到達することができる。受信されたデータ要素のストリームをバッファに格納する工程は、受信されたデータ要素のストリームの各個別の要素を、バッファのソート順序によって決定されたバッファの位置に挿入する工程を含み得る。
バッファに格納されたデータ要素に境界条件を適用する工程は、バッファに格納されたデータ要素から最小データ要素を特定する工程と、最小データ要素と受信された個別のデータ要素との差が閾値を超えているかどうかを決定する工程とを含み得る。境界条件に基づいて、バッファから1つまたは複数のデータ要素を生成する工程は、1つまたは複数のデータ要素が閾値を超えている場合に、バッファから1つまたは複数のデータ要素を生成する工程を含み得る。バッファに格納されたデータ要素に境界条件を適用する工程は、バッファの最大サイズを超えているかどうかを決定する工程を含み得る。境界条件に基づいて、バッファから1つまたは複数のデータ要素を生成する工程は、バッファの最大サイズを超えている場合に、バッファから1つまたは複数のデータ要素を生成する工程を含み得る。
バッファに格納されたデータ要素に境界条件を適用する工程は、新たに受信されたデータ要素がカットオフ値を超えているかどうかを決定する工程を含み得る。本方法は、要素がカットオフ値を超えていない場合に、新たに受信されたデータ要素をバッファリングする工程をさらに含み得る。境界条件に基づいて、バッファから1つまたは複数のデータ要素を生成する工程は、新たに受信されたデータ要素が閾値を超えていない場合に、バッファから生成された1つまたは複数のデータ要素として、新たに受信されたデータ要素を生成する工程を含み得る。バッファは、スキップリストデータ構造によって実装することができる。バッファは、ツリープ(treap)データ構造によって実装することができる。受信されたデータ要素のストリームの個別のデータ要素の1つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出することができる。
別の態様では、一般に、コンピュータ実装方法は、データ要素のストリームの各個別のデータ要素を受信した後で、受信されたデータ要素に境界条件を適用する工程と、境界条件の第1の結果に基づいて、データ要素のストリームの1つまたは複数のデータ要素を格納する工程と、境界条件の第2の結果に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、1つまたは複数のデータ要素を生成する工程とを含み得る。
別の態様では、一般に、データ要素をソートするためのコンピュータプログラムを格納するコンピュータ可読記憶媒体は、コンピューティングシステムに、受信されたデータ要素のストリームをバッファに格納させるための命令と、受信されたデータ要素のストリームを処理させるための命令とを含み得る。受信されたデータ要素のストリームを処理する工程は、データ要素のストリームの各個別のデータ要素を受信した後で、バッファに格納されたデータ要素に境界条件を適用する工程と、境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、バッファから1つまたは複数のデータ要素を生成する工程とを含み得る。
別の態様では、一般に、データ要素をソートするためのコンピューティングシステムは、受信されたデータ要素のストリームをバッファに格納するためのデータ格納システムと、受信されたデータ要素のストリームを処理するよう構成された少なくとも1つのプロセッサとを含み得る。処理する工程は、データ要素のストリームの各個別のデータ要素を受信した後で、バッファに格納されたデータ要素に境界条件を適用する工程と、境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、バッファから1つまたは複数のデータ要素を生成する工程とを含み得る。
別の態様では、一般に、データ要素をソートするためのコンピューティングシステムは、受信されたデータ要素のストリームを格納するための手段と、受信されたデータ要素のストリームを処理するための手段とを含み得る。処理する工程は、データ要素のストリームの各個別のデータ要素を受信した後で、バッファに格納されたデータ要素に境界条件を適用する工程と、境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、バッファから1つまたは複数のデータ要素を生成する工程とを含み得る。
態様は、以下の利点の1つまたは複数を含み得る。
大部分がソートされる受信されたデータ要素のストリームに関与するいくつかの実装形態では、要素の大多数とともに適正な順序にはない一部を除いて、要素は、大部分がソートされた順序にあり得る。従来の技術は、要素をソートするために、かなりのコンピューティングリソースおよび処理時間を消費する恐れがある。いくつかの例では、本明細書に記載される技術は、データ要素の大多数が適切に順序付けられて到達し、従って、コンピュータリソースおよび処理時間を節約することができるという事実を利用することができる。ストリームの各個別のデータ要素を受信した後で、バッファに格納されたデータ要素に境界条件を適用することによって、既定の順序に従ってソートされたデータ要素の出力ストリームを生成することができる。
本発明の他の特徴および利点は、以下の説明および特許請求の範囲から明らかになるであろう。
ウィンドウソートシステムのブロック図である。 一連のウィンドウソートオペレーションを経たソートバッファを示す。 グラフベースのコンピューテーションを管理するためのコンピューティングシステムのブロック図である。 ウィンドウソートプロセスのフローチャートである。
図1を参照すると、例示的なソートシステム100は、ソートモジュール108(この構成では、別のコンピュータシステム108によって実行される)にデータ要素またはアイテムのストリーム106a〜n(総称して106)を提供するコンピュータシステム104(例えば、1つまたは複数のクライアントシステムへのサービスを行うウェブサーバなどのサーバ)上で実行されるデータソースアプリケーション102を含む。要素106は、ある一定の時間(例えば、24時間)にわたってソースアプリケーション102によって生成することができ、生成またはストレージ(例えば、記憶装置)から検索されると送信することができる。要素106は、例えば、ソースアプリケーション102によって生成されたデータ記録(図示せず)の1つまたは複数の属性に割り当てられた値など、さまざまなタイプの情報を表し得る。いくつかの実装形態では、要素106は、ソースアプリケーション102によって生成された1つまたは複数のデータ記録から演算された値を表し得る。要素106によって表され得る他の情報は、例えば、ソースアプリケーション102によってデータ記録が作成された際のそれぞれの時間などのタイムスタンプを含み得る。例えば、ソースアプリケーション102は、通話データ記録を作成し、特定の時間の間に行われた通話についての情報を記録することができる。そのようなシナリオでは、それぞれのタイムスタンプされたデータ要素は、対応する通話が終了した正確な時間を表し得る。
別の実装形態では、それぞれのタイムスタンプされたデータ要素は、対応する通話が開始された正確な時間を表し得る。通話が開始された時間は、通話が終了した時間から通話の長さを引くことによって計算することができる。そのような計算を容易にするため、通話の長さについての情報は、ソースアプリケーションによって生成される通話記録に格納することができる。
いくつかの構成では、ストリーム106内のデータ要素の個別の配置は、さまざまな形を取ることができる。例えば、データ要素の順序は、完全に無作為の順序または幾分か決定論的な順序(例えば、部分的にソートされる、大部分がまたはほぼソートされる、など)であり得る。要素の大部分がソートされるシナリオでは、比較的ほんのわずかな比率の要素がソートされないかまたは順序に狂いが生じている場合がある。そのため、比較的複数のデータ要素(例えば、数百万)を有するストリームでは、要素のおよそ0.1〜10%が順序に狂いが生じている可能性がある。一例として、ソースアプリケーション102が通話の終了時間を表すタイムスタンプされたデータ要素を生成するシナリオでは、要素は、実質的に非同期的にソートモジュール108に到達することができ、時折、順序に狂いが生じている状態で到達し得る。例えば、第1の時間の間にソースアプリケーション102によって生成されたデータは、別の時間(第1の時間よりも遅い)の間に生成されたデータの後にソートモジュール108に到達することができる。
大部分がソートされるストリームでは、要素の大多数とともに適正な順序にはない一部を除いて、要素は、大部分がソートされた順序にあり得る。ストリーム内の適正な位置にそのような外れ値要素を挿入するため、従来のソート技術は、通常、受信されたストリームのすべてのデータ要素を処理する。そのため、これらの技術は、要素をソートするために、かなりのコンピューティングリソースおよび処理時間を消費する恐れがあり、データ要素の数に比例して増加し得るコンピュータの損失を生み出す恐れがある。しかし、データ要素の大多数が適切に順序付けられて到達するという事実を利用することによって、ソート技術を開発し、コンピュータリソースおよび処理時間を節約することができる。
例示的なソート技術では、ソートモジュール108は、ソートバッファに入力要素を一時的に格納し、適切な時間にバッファから要素118a〜c(総称して118)をイジェクトすることによって、ほぼソートされた入力ストリームをソートする。要素イジェクションは、イジェクション優先度順(例えば、昇順、降順など)に従って起こり得る。さらに、イジェクションは、要素に課された条件(例えば、バッファに格納された任意の2つの要素間の最大許容差)に違反した場合に起こる。イジェクトされた時点で、イジェクトされた要素118を使用して、ソートされた要素の出力ストリームを形成することができる。
いくつかの例では、ソートされた出力ストリームは、順序に狂いが生じている要素をソートバッファに一時的に格納し、それらを適切な時間に出力ストリームに解放する一方で、既にソートされた順序にある入力要素を出力ストリームに直接送ることによって生成することができる。
ソートモジュール108は、例えば、コンピュータシステム110上で実行されるソフトウェアアプリケーションとして実装することができ、ソートバッファ112(または複数のソートバッファ)を制御するための命令を提供することができ、ソートバッファ112は、記憶装置114(例えば、ハードドライブメモリ、ランダムアクセスメモリなど)に格納することができる。記憶装置は、コンピュータシステム110の一部としても、別々のスタンドアロンメモリデバイスとしても実装することができる。
例では、ソートバッファ112内の格納要素116は、例えば、要素がバッファからイジェクトされる順序などの優先度順に従ってソートされる。優先度順は、要素の既定の特性(例えば、要素の数値)に基づき得る。そのため、数値の昇順に従って要素がソートされる場合は、最初に小さな値の要素がイジェクトされ、その後、より大きな値の要素がイジェクトされ得る。降順に従って要素がソートされる場合は、最初に大きな値の要素がイジェクトされ、その後、より小さな値の要素がイジェクトされ得る。ソートバッファで要素が受信されると、要素は、優先度順に従ってソートされ得る。タイムスタンプされたデータ要素に関与するシナリオでは、要素は、古い順または新しい順にソートされ得る。例えば、通話の終了時間を表す要素は、新しい順に配列することができる。
イジェクトされたデータ要素118は、ソートバッファ内の格納要素の最小値(または、好ましい出力に応じて、最大値)要素であり得る。タイムスタンプされた要素を用いると、イジェクトされた要素は、ソートバッファ内の格納要素の最新値(または、好ましい出力に応じて、最古値)要素であり得る。イジェクトされた要素は、別のコンピューティングデバイス(例えば、コンピュータシステム122)上で実行されている1つまたは複数のモジュール、アプリケーション(例えば、受信アプリケーション120)などに提供され得る。受信アプリケーション120は、実質的にソートされた出力ストリームを受信して処理するための任意のソフトウェアアプリケーションであり得る。
一構成では、ソートバッファの一方の端部は、新たに到達する要素を受信するよう構成することができる。ソートバッファを通じて(この特定の端部から)伝播する間、受信されたデータ要素(他の要素とともに)は、要素がバッファの反対側の端部(そこから要素が最終的にイジェクトされる)に近づくにつれて要素が適切なデータ要素間に配置するように、ソートモジュール108によって処理することができる。
入力要素は大部分がまたはほぼ順序付けられるため、ソートバッファ112への挿入は、バッファの端部で起こる場合が多い。そのような挿入オペレーションは、O(1)時間を要すると見なすことができる。ソートされた順序で要素が受信される限り、要素は、ソートバッファの連続記憶場所に漸進的に追加される。しかし、順序に狂いが生じている状態で要素が到達すると、必要な挿入時間は、要素の挿入に適切な記憶場所を見つけるのに必要な時間に対応するため、長くなり得る。例えば、順序に狂いが生じている要素を受信するための位置がソートバッファの端部から「k」の距離にある場合、適正な位置の特定には、O(log(k))時間が必要とされ得る。特定された時点で、要素の挿入に必要な時間は、一定と見なすことができる。ソートバッファ内に既に「n」個の格納データ要素がある場合、挿入位置は、ソートバッファの端部から「n」個の位置を超えないものと見なすことができる。それに応じて、最悪の場合の挿入時間は、O(log(n))時間であり得る。
ソートバッファ112は、ソートされた順序でデータ要素を受信して格納するよう構成されたデータ構造(例えば、優先度付きキューデータ構造)によって実装することができる。新しいデータ要素が到達すると、ソートモジュール108は、ソートバッファの優勢なソート順序によって決定されるように(優先度付きキューとして実装される)、適切な位置に要素を挿入することができる。さらに、ソートモジュール108は、イジェクション優先度順(例えば、バッファの最小または最大データ要素)に基づいてイジェクトされる1つまたは複数のデータ要素を特定することができる。特定された時点で、ソートモジュールは、ソートバッファからの特定された要素のイジェクションを開始することができる。
いくつかの実装形態では、ソートバッファ112は、バランスの取れた二分木データ構造(例えば、ヒープ二分木データ構造)であり得る。一般に、ヒープ二分木データ構造(単にヒープと呼ばれる場合が多い)は、2つの条件を満たすと見なされる。第1の条件は、子ノードの優先度が親ノードの優先度と少なくとも同程度であることである。それに応じて、木の最上位のノード(すなわち、根ノード)は、最小優先度を有すると見なすことができる。第2の条件は、根ノードから葉のノードまでの異なる経路が多くとも1つのノードレベルだけ高さが異なることである。
一実装形態では、ソートバッファは、スキップリストデータ構造によって実装することができる。スキップリストデータ構造およびその関連アルゴリズムは、リンクされた線形リストの変形例であり、キーを有するデータ要素の頻繁な挿入を要求する状況におけるソート性能を向上させることができる。スキップリストデータ構造は、データ要素(または、ノード)の順序付けられたリンクされた線形リストを含み得、いくつかの要素は、中間データ要素をスキップする追加のポインタを有し、それにより、データ要素の探索の速度および効率を増加する。
スキップリストデータ構造としてソートバッファを実装することによって、例えば、バッファから最小データ要素を検索するのに必要な時間は、最小データ要素の検索に対して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頁)と称する文書でさらに詳細に説明されている。
いくつかの例では、ソートバッファ112は、「ツリープ」データ構造によって実装することができる。ツリープデータ構造は、各ノードが無作為に割り当てられた優先度属性およびキーを有する二分探索木である。ノードは、それらのキーに関して、典型的な二分探索木のような順序にある。すなわち、キーに関して、ノードの左側のサブツリーは、ノードのキー未満のキーを有するノードのみを含み、ノードの右側のサブツリーは、ノードのキー以上のキーを有するノードのみを含む。それに加えて、ノードは、それらの優先度属性に関して、「ヒープ順」にあり、その結果、各子ノードは、親ノードの優先度属性と少なくとも同程度である優先度属性を有する。ツリープデータ構造については、その内容はその全体が参照により本明細書に組み込まれる、Aragon, Cecilia R.およびSeidel, Raimundによる「Randomized Search Trees」(Proc. 30th Symp. Foundations of Computer Science (FOCS 1989年))と称する文書で説明されている。
一実装形態では、ソートモジュール108は、ソートバッファ112上で境界条件を適用させることができ、境界条件を使用して、ソートバッファから要素をイジェクトするかどうか、および、いつソートバッファから要素をイジェクトするか決定する。境界条件は、ソートバッファに許可される値の「ウィンドウ」を定義することができる。例えば、ウィンドウは、ソートバッファの任意の2つの格納データ要素間の最大許容差を表し得る。そのため、ウィンドウの「幅」は、ソートバッファで許可される値の範囲を表す。例えば、ウィンドウ幅は、ソートバッファの最小要素と最大要素との差であり得る。
境界条件は、少なくとも2つの結果を有することができる。例えば、第1の結果は、境界条件が満たされていることを示し得、第2の異なる結果は、境界条件に違反している(すなわち、満たされていない)ことを示し得る。一シナリオでは、提供される入力要素が原因でウィンドウ幅を超えることにならない限り、境界条件は満たされていると見なすことができる。逆に、入力要素が原因でウィンドウ幅を超えることになった場合は、境界条件に違反していると見なすことができる。境界条件への違反があり次第、イジェクション優先度順に従ってバッファの1つまたは複数の要素がイジェクトされる。
一例として、ソートバッファが格納要素として数値を有する(昇順に)シナリオを想定する。ソートバッファに対する値15のウィンドウ幅は、バッファの最小格納要素と最大格納要素との差が15を超えないことを示す。そのため、バッファの現在の最小要素が3であり、新しい入力要素が19である場合、最小要素と最大要素との差はここでは16であり、これはウィンドウ幅を超えており、境界条件に違反していると見なされる。違反が原因で、ソートバッファの1つまたは複数の要素(例えば、最小または最大データ要素)はイジェクトされる。
いくつかの例では、ソートモジュール108は、ウィンドウ幅で決定されるように、ソートバッファ112の最小および最大要素を記録する。入力要素が最大要素を超えると、境界条件に違反していると見なされ、ソートモジュールは、ソートバッファに、例えば最小データ要素をイジェクトさせる。
ウィンドウ幅は、ユーザによって指定されるものなどさまざまなソースから提供することができる。一実装形態では、ウィンドウ幅は、ソートが必要とされる特定のアプリケーションの一般知識に基づく。状況次第では、ウィンドウ幅は、「順序の狂い」の度合い、例えば、どれほど要素の順序に狂いが生じているかについての度合いに相当する。例えば、タイムスタンプされたデータ要素に関与する状況について考慮する。ウィンドウ幅は、バッファ内に現在存在するタイムスタンプされた要素(例えば、最小または最大のタイムスタンプされた要素)と比較して、どのくらい遅くまでタイムスタンプされた要素をソートバッファに提供できるかを示す。例えば、ウィンドウ幅(時間の単位で)が4時間であれば、ソートバッファ112は、ソートバッファの最小のタイムスタンプされた要素と比較して、4時間ウィンドウの範囲内のすべてのタイムスタンプされた要素をバッファリング(すなわち、格納)する。4時間の範囲外で到達するタイムスタンプされた要素は、廃棄される、別々に処理されるなどの場合がある。
示される例では単一のバッファが使用されているが、複数のバッファアーキテクチャを利用することもできる。例えば、第2のバッファ(図示せず)を使用して、ある一定の時間の間(例えば、24時間)に到達するタイムスタンプされた要素をバッファリングすることができる。24時間が経過した時点で、タイムスタンプされた要素は、拒否される、廃棄される、別々に処理される可能性がある。一実装形態では、24時間の範囲内に属するとタイムスタンプされた要素が24時間経過後に到達する可能性がある。カットオフタイムスタンプ値を慎重に選択することによって、複数の正当な要素が拒否される可能性を低減することができる。いくつかのシナリオでは、少数の正当な要素の損失は、ウィンドウソート技術がコンピュータリソースの効率的な使用および処理時間の削減を提供するアプリケーションにおいて許容可能である。
図2は、ウィンドウソートプロセスのオペレーションの間のソートバッファ(例えば、ソートバッファ112)の状態202〜218の図表示である。ソートバッファの個別のコンテンツ、ウィンドウ幅(ラベルWで示される)、最小要素(ラベルSで示される)および現在の出力データ要素についての情報は、各状態202〜218に対して提供される。この例では、データ要素は昇順で格納され、入力ストリームは昇順でほぼソートされる。ウィンドウソートプロセスの終結時には、出力ストリームは、昇順で実質的にソートされて提供される。図2は単に8個の要素のストリームに対して動作する例示的なウィンドウソートプロセスを示すが、プロセスは、実質的にそれ以上の要素を含む入力ストリームに対して連続して実行することができる。
状態202では、ウィンドウ幅は、値15を有するものとして定義される(すなわち、バッファの最小値要素と最大値要素との差は15以上ではない)。初期化の際、ソートバッファの現在の最小要素は値0(S=0)のものである。さらに、現在の出力は「NIL」(すなわち、出力データ要素無し)で示される。
状態204では、第1の値3の入力要素がソートバッファに挿入される。バッファ内の3の位置は、ソートバッファの要素の現在の順序(すなわち、昇順)に基づいて決定される。値3の要素は、示されるように、0に隣接して挿入される。ソートバッファの最小値要素と最大値要素との差はここでは3であり、これはウィンドウ幅15未満である。それに応じて、境界条件に違反しておらず、データ要素をイジェクトする必要はない。この時点では、出力データ要素は存在しない。
状態206および208では、入力ストリームの値5および値7の要素がソートバッファの適切な位置に挿入される。状態208の終了時のソートバッファの最小要素と最大要素との差は7であり、これは依然としてウィンドウ幅15未満である。そのため、境界条件に違反しておらず、データ要素をイジェクトする必要はない。それに応じて、依然として出力データ要素は存在しない。
状態210では、値15の要素がソートバッファに挿入されると、バッファの最小要素と最大要素との差はここでは15であり、これはウィンドウ幅15に等しい。境界条件に違反している。それに応じて、ソートバッファ112の最小要素である値0の要素が出力ストリームの第1の要素としてイジェクトされる。それに加えて、ソートバッファの最小要素Sはここでは3である。
状態212では、値8の要素がソートバッファの値15の要素と値7の要素との間に挿入される。バッファの最小値要素と最大値要素との差は12であり、これはウィンドウ幅15未満である。それに応じて、境界条件に違反しておらず、データ要素はイジェクトされない。
状態214では、値21の要素がソートバッファに挿入されると、バッファの最小値要素と最大値要素との差は21−3=18であり、これはウィンドウ幅15を超える。ウィンドウ幅の範囲外の値を有するすべてのデータ要素がイジェクトされる。すなわち、示されるように、値3、5および7の要素がイジェクトされる。ソートバッファの新しい最小データ要素Sはここでは値8の要素である。
状態216では、値11の要素がソートバッファに挿入されると、バッファの最小値要素と最大値要素との差は21−8=13であり、これはウィンドウ幅15未満である。それに応じて、境界条件に違反しておらず、データ要素はイジェクトされない。
状態218では、値7の要素がソートバッファに挿入されると、ソートバッファ112の最小要素は値7のものである。そのため、バッファの最小値要素と最大値要素との差は21−7=14であり、これはウィンドウ幅15未満である。それに応じて、この場合もやはり、境界条件に違反しておらず、データ要素はイジェクトされない。
ウィンドウソートプロセスの実装形態は、コンピュータグラフで使用することができる。ここで、図3を参照すると、コンピュータグラフ302を管理するためのシステム300の部品の相互関係が示されている。グラフィック開発環境(GDE)304は、実行可能なコンピュータグラフ302を指定して、コンピュータグラフ302のウィンドウソートコンポーネント308を含む1つまたは複数のグラフコンポーネント306a〜cのためのパラメータを定義するためのユーザインターフェースを提供する。GDE 304については、例えば、その内容はその全体が参照により本明細書に組み込まれる、米国特許第7,164,422号「PARAMETERIZED GRAPHS WITH CONDITIONAL COMPONENTS」で説明され得る。
コンピュータグラフ302を使用して、複雑なコンピューテーションを表すことができる。そのようなグラフベースのコンピューテーションを実施するシステムについては、その内容はその全体が参照により本明細書に組み込まれる、米国特許第5,966,072号「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」で説明されている。いくつかの実装形態では、コンピュータグラフは、頂点間の有向リンク(作業要素のフローを表す)によって接続された頂点(コンポーネントまたはデータセットを表す)を含む。いくつかの事例では、コンピュータグラフ302は、入力データ記録のフローを受信し、データ記録を処理して、コンピューテーションがシャットダウンされるまで無制限にコンポーネント306から結果を提供するよう構成される。いくつかの事例では、コンピュータグラフ302は、入力データ記録のバッチを受信し、データ記録のバッチを処理して、そのバッチに対する結果を提供し、次いで、バッチが処理された後でシャットダウンするかまたはアイドル状態に戻るよう構成される。
コンポーネント306a〜cおよび308は、コンポーネント306a〜cおよび308間のデータフローを表す有向弧または線によってともにリンクされる。コンポーネント306a〜cおよび308は、1つまたは複数のデータソースコンポーネント(例えば、コンポーネント306a)と、データ処理コンポーネント(例えば、コンポーネント306b)と、データシンクコンポーネント(例えば、306d)とを含み得る。データソースコンポーネント306aは、例えばデータ記録の形でデータを生成する1つまたは複数のコンピュータシステム上で実施されるソースアプリケーション(図1のソースアプリケーション102など)を表し得る。データ処理コンポーネント306bは、データソースコンポーネント306aによって生成されたデータ記録を処理する。データシンクコンポーネント306dは、データ処理コンポーネント306bの結果を使用する。データ処理コンポーネント306bからの結果は、大部分がソートされたデータ要素のストリームの形であり得る。そのため、ウィンドウソートコンポーネント308を導入して、データ処理コンポーネント306bからの結果のストリームをソートし、実質的にソートされたデータストリームをシンクコンポーネント306cに提供することができる。
例示的なシナリオでは、データソースコンポーネント306aは、2つの同一のソートされたデータストリーム310aおよび310bを生成し、一方のストリーム(例えば、ストリーム310b)をコンポーネント306bに送信することができる。コンポーネント306bは、ストリーム310bを処理して、データ記録が格納された記憶場所のアドレスを有するアドレスストリーム310cを生成する。記憶場所は、連続したもので、次のように、すなわち、a、a+1、a+2...a+n(aは初期の記憶場所のアドレス)と連続的に配列されるものとして知られている。そのため、アドレスストリーム内の個別のアドレスも、連続的に順序付けられるものと予想される。しかし、時折、コンポーネント306bにおける処理の遅延により、1つまたは複数のアドレスは、アドレスストリームに遅れて出力され得る。その結果、個別のアドレスはもはやソートされたストリーム310a内のデータ記録に適正に対応しない。この状況を改善するため、ソートコンポーネント308を使用して、アドレスを元の順序にソートし直すことができる(これは、新しいアドレスストリーム310dとして生成される)。
典型的なアプリケーションでは、アドレスストリーム内の個別のアドレスの位置は、それらの元の位置からそれほど遠くはない。この特性をソートコンポーネントで使用して、アドレスを元の位置に復元し直すことができる。アドレスストリームは、各入力アドレスおよび/または各出力アドレスのイジェクションの後で変更する、動的に再調整されるカットオフアドレスの形で境界条件を有するソートバッファで受信される。最初は、カットオフアドレスは、アドレスストリーム内の最も初期のアドレスに初期化される。その後、入力アドレスがカットオフアドレスより1だけ大きければ、カットオフアドレスは入力アドレスに変化する。アドレスがソートコンポーネントに到達すると、カットオフアドレス以下を照合するアドレスは、ソートされた形で直接出力される。他方では、カットオフアドレス値超を照合するアドレスは、ソートバッファに格納される。
ここで、図4を参照すると、ほぼまたは大部分がソートされたデータ要素のストリームをソートするための例示的なウィンドウソートプロセス400が示されている。一実装形態では、以下に概説される工程は、コンピュータシステム上で実行されるソフトウェアアプリケーションによって行うことができる。例えば、プロセス400は、ソートシステム100(図1に示されるような)によって実現することができる。入力データ要素をバッファリングするためのソートバッファを初期化する(工程402)。初期化は、入力要素を格納するための、記憶域、例えば、複数の連続メモリアドレスを指定する工程を含み得る。初期化の一部として、ソートバッファに対して境界条件を指定することができる。例えば、ソートバッファのウィンドウ幅に相当する値を保持するための変数を定義することができる。ウィンドウ幅は、ソートバッファの任意の2つの格納データ要素値間の最大許容差を表し得る。いくつかの例では、境界条件は、動的に調整されるカットオフ値として表され得る。
ソートバッファに対する境界条件が定義されると、ソートバッファがデータ要素の入力ストリームを受信する準備が整う(工程404)。1つまたは複数の技術および方法論を使用して、入力データ要素を受信することができる。一実装形態では、入力要素が受信され、ソートバッファに挿入される。最初は、ソートバッファが空の際は、第1の要素は、事前に定義された特性を有するものとしてデフォルトで選択される(例えば、第1の要素は、最優先のイジェクションを有するものとして選択され得る)。例えば、第1の要素は、ソートバッファの最小要素と見なすことができる。後続のより大きな要素が受信されると、それは、除去またはイジェクション優先度(すなわち、昇順に第1の要素に隣接して)に基づいて適切な位置に挿入される。一実装形態では、要素がバッファに挿入されるたびに、最優先要素(または最小要素)が再計算される。
境界条件を適用して、要素が境界条件に違反しているかどうか決定する(工程406)。1つまたは複数の技術は、境界条件適用のために実施することができる。例えば、ソートバッファのウィンドウ幅を超えているかどうかについての決定が下される。境界条件に違反していない(例えば、ソートバッファのウィンドウ幅を超えていない)場合、処理のため、入力ストリームの次のデータ要素が受信される。
境界条件に違反している(例えば、ウィンドウ幅を超えている)場合、イジェクション優先度順に従って、1つまたは複数の要素をイジェクトする(工程408)。例えば、イジェクトされる要素は、少なくとも最小要素と、ソートバッファのウィンドウ幅を超えることになる1つまたは複数の他の要素とを含む。さらに、ウィンドウ幅を超えることにはならない新しい最小要素が特定される。そのため、1つまたは複数の技術は、境界条件に基づいて、既定の順序に従ってソートされたデータ要素の出力ストリームとして、バッファから1つまたは複数のデータ要素を生成するために実施することができる。
入力要素が存在する限り、プロセス400は、各入力要素に対して繰り返される。
一実装形態では、例えば、物理的なメモリサイズを超えることに起因して、ソートバッファが最大容量に到達し得る。そのような状況では、スピルオーバーメカニズムを実装することができる。スピルオーバーメカニズムは、ソートバッファから二次記憶格納域(図示せず)に1つまたは複数のデータ要素を移動する工程を伴う。「主要」要素またはアイテムをソートバッファに挿入して、二次記憶格納域のデータ要素を参照することができる。スピルオーバーメカニズムについては、その内容はその全体が参照により本明細書に組み込まれる、同時係属の米国特許出願第13/031,034号でさらに詳細に説明されている。
いくつかの実装形態では、境界条件は、ソートバッファの事前に定義された最大許容サイズ(例えば、バッファに許容される要素の最大数)によって表すことができる。また、一実装形態では、境界条件は、ウィンドウ幅限度と最大サイズ限度の両方によって表すことができる。この実装形態では、ソートモジュールは、バッファのウィンドウ幅または最大サイズのいずれかを超えることになる要素を受信する工程に応じて、要素のイジェクションを引き起こすことができる。
いくつかの例では、処理期間の終了時にソートバッファに残存するデータ要素は、処理終了時にソートされた形で出力することができる。いくつかの例では、残存要素は、残りのデータ要素と別々に異なる方法で処理することができる。いくつかの実装形態では、アプリケーションは、例えば、ソートバッファが既定の要素数を超えて格納するかまたは要素を1つでも格納する際のアプリケーションの演算論理のエラーまたは誤動作をユーザに警告することができる。
一例では、ユーザは、ソートバッファに対する境界条件に違反したデータ要素の存在について警告を受けることができる。例えば、データ記録のリスト(例えば、新しい順の)をユーザに提供する実装形態では、ユーザは、1つまたは複数の順序に狂いが生じているデータ記録の存在について警告を受けることができる。順序に狂いが生じているデータ記録は、記録に対応するデータ要素が境界条件を満たすかどうか、例えば、ユーザによって指定されたウィンドウ幅内にデータ要素があるかどうかを決定する工程に基づいて特定される。例えば、1つまたは複数の順序に狂いが生じているデータ記録をハイライトして、ユーザの注目を集めることができる。いくつかの例では、1つまたは複数の順序に狂いが生じているデータ記録は、別々の処理のために、データ要素のストリームから抽出することができる。
本明細書に記載される技術は、コンピュータ上で実行するためのソフトウェアを使用して実施することができる。例えば、ソフトウェアは、1つまたは複数のプログラムされたまたはプログラム可能なコンピュータシステム(それは、分散型、クライアント/サーバまたはグリッドなどのさまざまなアーキテクチャのものであってもよい)上で実行する1つまたは複数のコンピュータプログラムの手順を形成し、コンピュータシステムはそれぞれ、少なくとも1つのプロセッサと、少なくとも1つのデータ格納システム(揮発性および不揮発性メモリならびに/または格納要素を含む)と、少なくとも1つの入力デバイスまたはポートと、少なくとも1つの出力デバイスまたはポートとを含む。ソフトウェアは、例えば、コンピューテーショングラフの設計および構成に関連する他のサービスを提供する大規模なプログラムの1つまたは複数のモジュールを形成することができる。グラフのノードおよび要素は、コンピュータ可読媒体に格納されたデータ構造、または、データリポジトリに格納されたデータモデルに適合する他の組織化されたデータとして実装することができる。
ソフトウェアは、汎用または特殊用途のプログラム可能なコンピュータによる読み取りが可能なCD−ROMなどの記憶媒体上で提供されても、ネットワークの通信媒体上で、ソフトウェアが実行されるコンピュータに送達されてもよい(伝播信号で符号化される)。機能のすべては、特殊用途のコンピュータ上で、または、コプロセッサなどの特殊用途のハードウェアを使用して実行することができる。ソフトウェアは、ソフトウェアによって指定されるコンピューテーションの異なる部分は異なるコンピュータによって実行される分散様式で実施することができる。それぞれのそのようなコンピュータプログラムは、好ましくは、汎用もしくは特殊用途のプログラム可能なコンピュータによる読み取りが可能な記憶媒体もしくはデバイス(例えば、ソリッドステートメモリもしくは媒体、または、磁気もしくは光媒体)上に格納されるか、または、記憶媒体もしくはデバイスにダウンロードされるが、それは、コンピュータシステムで記憶媒体もしくはデバイスを読み取り、本明細書に記載される手順を実行する際にコンピュータを構成および動作するためである。また、本発明のシステムは、コンピュータ可読記憶媒体として実装され、コンピュータプログラムを用いて構成されるものと考慮され得、そのように構成された記憶媒体は、特定の事前に定義された様式でコンピュータシステムを動作させ、本明細書に記載される機能を実行する。
本発明の多くの実施形態について説明してきた。それにもかかわらず、本発明の精神および範囲から逸脱することなく、さまざまな変更を行うことができることが理解されよう。例えば、上記で説明された工程のいくつかは、順序に依存しないものであり得、従って、説明されている順序とは異なる順序で実行することができる。
前述の説明は、例示を意図するものであり、本発明の範囲を限定するものではなく、本発明の範囲は、添付の特許請求の範囲によって定義されることを理解されたい。例えば、上記で説明された多くの機能工程は、処理全体に実質的に影響を与えることなく、異なる順序で実行することができる。他の実施形態は、以下の特許請求の範囲内にある。

Claims (68)

  1. 複数のデータ要素を受信する工程と、
    前記受信された複数のデータ要素をバッファに格納する工程と、
    前記複数のデータ要素の各個別のデータ要素を受信した後で、前記バッファに格納された前記データ要素に境界条件を適用する工程であって、前記境界条件は、前記バッファに格納された最大データ要素と前記バッファに格納された最小データ要素との許容差を指定する、工程と、
    前記境界条件を適用した結果に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程であって、前記イジェクトされたデータ要素は、既定の順番に従ってソートされたデータ要素の出力ストリームを形成する、工程とを含む、コンピュータ実装方法。
  2. 前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程は、
    前記バッファから少なくとも前記最小データ要素をイジェクトする工程を含む、請求項1に記載の方法。
  3. 前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程は、
    前記バッファから少なくとも前記最大データ要素をイジェクトする工程を含む、請求項1に記載の方法。
  4. 受信された各データ要素は、データ記録生成時間を表す、請求項1に記載の方法。
  5. 前記データ要素の出力ストリームは、新しい順にソートされる、請求項4に記載の方法。
  6. 前記受信された複数のデータ要素の前記データ要素は、部分的にソートされる、請求項1に記載の方法。
  7. 前記受信された複数のデータ要素の前記データ要素は、非同期的に前記バッファに到達する、請求項1に記載の方法。
  8. 受信された複数のデータ要素をバッファに格納する工程は、
    前記受信された複数のデータ要素のストリームの各個別の要素を、前記バッファソート順序によって決定された前記バッファの位置に挿入する工程を含む、請求項1に記載の方法。
  9. 前記バッファに格納された前記データ要素に境界条件を適用する工程は、
    前記バッファに格納された前記データ要素から前記最小データ要素及び前記最大データ要素を特定する工程と、
    前記最小データ要素と前記最大データ要素との差が前記許容差を超えているかどうかを決定する工程とを含む、請求項1に記載の方法。
  10. 前記境界条件に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程は、
    前記最小データ要素と前記最大データ要素との前記差が前記許容差を超えている場合に、前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程を含む、請求項9に記載の方法。
  11. 前記バッファに格納された前記データ要素に境界条件を適用する工程は、
    前記バッファの最大サイズを超えているかどうかを決定する工程を含む、請求項1に記載の方法。
  12. 前記境界条件に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程は、
    前記バッファの前記最大サイズを超えている場合に、前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程を含む、請求項11に記載の方法。
  13. 前記バッファに格納された前記データ要素に境界条件を適用する工程は、
    新たに受信されたデータ要素がカットオフ値を超えているかどうかを決定する工程を含む、請求項1に記載の方法。
  14. 前記新たに受信されたデータ要素が前記カットオフ値を超えていない場合に、前記新たに受信されたデータ要素をバッファリングする工程をさらに含む、請求項13に記載の方法。
  15. 前記境界条件に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程は、
    前記新たに受信されたデータ要素が前記カットオフ値を超えていない場合に、前記バッファから生成された前記1つまたは複数のデータ要素として、前記新たに受信されたデータ要素をイジェクトする工程を含む、請求項13に記載の方法。
  16. 前記受信された複数のデータ要素の前記個別のデータ要素の1つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出される、請求項1に記載の方法。
  17. 複数のデータ要素を受信する工程と、
    前記複数のデータ要素の各個別のデータ要素を受信した後で、前記受信された前記データ要素に境界条件を適用する工程であって、前記境界条件は、前記受信された個別のデータ要素とバッファに格納された最小又は最大データ要素との許容差を指定する、工程と、
    前記受信された個別のデータ要素と前記バッファに格納された前記最小又は最大データ要素との差が前記境界条件によって指定される前記許容差を超えていない場合、前記受信された複数のデータ要素の1つまたは複数のデータ要素を前記バッファに格納する工程と、
    前記受信された個別のデータ要素と前記バッファに格納された前記最小又は最大データ要素との前記差が前記境界条件によって指定される前記許容差を超えている場合、前記バッファから1つまたは複数のデータ要素をイジェクトする工程であって、前記イジェクトされたデータ要素は、既定の順番に従ってソートされたデータ要素の出力ストリームを形成する、工程とを含む、コンピュータ実装方法。
  18. データ要素をソートするためのコンピュータプログラムを格納するコンピュータ可読記憶装置であって、前記コンピュータプログラムは、コンピューティングシステムに、
    複数のデータ要素を受信させるための命令と、
    前記受信された複数のデータ要素をバッファに格納させるための命令と、
    前記受信されたデータ要素のストリームを処理させるための命令とを含み、前記処理する工程は、
    前記複数のデータ要素の各個別のデータ要素を受信した後で、前記バッファに格納された前記データ要素に境界条件を適用する工程であって、前記境界条件は、前記バッファに格納された最大データ要素と前記バッファに格納された最小データ要素との許容差を指定する、工程と、
    前記境界条件を適用した結果に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程であって、前記イジェクトされたデータ要素は、既定の順番に従ってソートされたデータ要素の出力ストリームを形成する、工程とを含む、コンピュータ可読記憶装置。
  19. データ要素をソートするためのコンピューティングシステムであって、
    複数のデータ要素を受信するための入力デバイスと、
    前記受信された複数のデータ要素をバッファに格納するためのデータ格納システムと、
    前記データ格納システムと結合され、前記受信された複数のデータ要素を処理するよう構成された少なくとも1つのプロセッサとを含み、前記処理する工程は、
    前記複数のデータ要素の各個別のデータ要素を受信した後で、前記バッファに格納された前記データ要素に境界条件を適用する工程であって、前記境界条件は、前記バッファに格納された最大データ要素と前記バッファに格納された最小データ要素との許容差を指定する、工程と、
    前記境界条件を適用した結果に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程であって、前記イジェクトされたデータ要素は、既定の順番に従ってソートされたデータ要素の出力ストリームを形成する、工程とを含む、コンピューティングシステム。
  20. データ要素をソートするためのコンピューティングシステムであって、
    複数のデータ要素を受信するための手段と、
    前記受信された複数のデータ要素を格納するための手段と、
    前記受信された複数のデータ要素を処理するための手段とを含み、前記処理する工程は、
    前記データ要素のストリームの各個別のデータ要素を受信した後で、バッファに格納された前記データ要素に境界条件を適用する工程であって、前記境界条件は、前記バッファに格納された最大データ要素と前記バッファに格納された最小データ要素との許容差を指定する、工程と、
    前記境界条件を適用した結果に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程であって、前記イジェクトされたデータ要素は、既定の順番に従ってソートされたデータ要素の出力ストリームを形成する、工程とを含む、コンピューティングシステム。
  21. 前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程は、
    前記バッファから少なくとも前記最小データ要素をイジェクトする工程を含む、請求項19に記載のコンピューティングシステム。
  22. 前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程は、
    前記バッファから少なくとも前記最大データ要素をイジェクトする工程を含む、請求項19に記載のコンピューティングシステム。
  23. 受信された各データ要素は、データ記録生成時間を表す、請求項19に記載のコンピューティングシステム。
  24. 前記データ要素の出力ストリームは、新しい順にソートされる、請求項23に記載のコンピューティングシステム。
  25. 前記受信された複数のデータ要素の前記データ要素は、部分的にソートされる、請求項19に記載のコンピューティングシステム。
  26. 前記受信された複数のデータ要素の前記データ要素は、非同期的に前記バッファに到達する、請求項19に記載のコンピューティングシステム。
  27. 受信された複数のデータ要素をバッファに格納する工程は、
    前記受信された複数のデータ要素のストリームの各個別の要素を、前記バッファソート順序によって決定された前記バッファの位置に挿入する工程を含む、請求項19に記載のコンピューティングシステム。
  28. 前記バッファに格納された前記データ要素に境界条件を適用する工程は、
    前記バッファに格納された前記データ要素から前記最小データ要素及び前記最大データ要素を特定する工程と、
    前記最小データ要素と前記最大データ要素との差が前記許容差を超えているかどうかを決定する工程とを含む、請求項19に記載のコンピューティングシステム。
  29. 前記境界条件に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程は、
    前記最小データ要素と前記最大データ要素との前記差が前記許容差を超えている場合に、前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程を含む、請求項28に記載のコンピューティングシステム。
  30. 前記バッファに格納された前記データ要素に境界条件を適用する工程は、
    前記バッファの最大サイズを超えているかどうかを決定する工程を含む、請求項19に記載のコンピューティングシステム。
  31. 前記境界条件に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程は、
    前記バッファの前記最大サイズを超えている場合に、前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程を含む、請求項30に記載のコンピューティングシステム。
  32. 前記バッファに格納された前記データ要素に境界条件を適用する工程は、
    新たに受信されたデータ要素がカットオフ値を超えているかどうかを決定する工程を含む、請求項19に記載のコンピューティングシステム。
  33. 前記処理する工程は、
    前記新たに受信されたデータ要素が前記カットオフ値を超えていない場合に、前記新たに受信されたデータ要素をバッファリングする工程をさらに含む、請求項32に記載のコンピューティングシステム。
  34. 前記境界条件に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程は、
    前記新たに受信されたデータ要素が前記カットオフ値を超えていない場合に、前記バッファから生成された前記1つまたは複数のデータ要素として、前記新たに受信されたデータ要素をイジェクトする工程を含む、請求項32に記載のコンピューティングシステム。
  35. 前記受信された複数のデータ要素の前記個別のデータ要素の1つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出される、請求項19に記載のコンピューティングシステム。
  36. 前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程は、
    前記バッファから少なくとも前記最小データ要素をイジェクトする工程を含む、請求項20に記載のコンピューティングシステム。
  37. 前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程は、
    前記バッファから少なくとも前記最大データ要素をイジェクトする工程を含む、請求項20に記載のコンピューティングシステム。
  38. 受信された各データ要素は、データ記録生成時間を表す、請求項20に記載のコンピューティングシステム。
  39. 前記データ要素の出力ストリームは、新しい順にソートされる、請求項38に記載のコンピューティングシステム。
  40. 前記受信された複数のデータ要素の前記データ要素は、部分的にソートされる、請求項20に記載のコンピューティングシステム。
  41. 前記受信された複数のデータ要素の前記データ要素は、非同期的に前記バッファに到達する、請求項20に記載のコンピューティングシステム。
  42. 受信された複数のデータ要素をバッファに格納する工程は、
    前記受信された複数のデータ要素のストリームの各個別の要素を、前記バッファソート順序によって決定された前記バッファの位置に挿入する工程を含む、請求項20に記載のコンピューティングシステム。
  43. 前記バッファに格納された前記データ要素に境界条件を適用する工程は、
    前記バッファに格納された前記データ要素から前記最小データ要素及び前記最大データ要素を特定する工程と、
    前記最小データ要素と前記最大データ要素との差が前記許容差を超えているかどうかを決定する工程とを含む、請求項20に記載のコンピューティングシステム。
  44. 前記境界条件に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程は、
    前記最小データ要素と前記最大データ要素との前記差が前記許容差を超えている場合に、前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程を含む、請求項43に記載のコンピューティングシステム。
  45. 前記バッファに格納された前記データ要素に境界条件を適用する工程は、
    前記バッファの最大サイズを超えているかどうかを決定する工程を含む、請求項20に記載のコンピューティングシステム。
  46. 前記境界条件に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程は、
    前記バッファの前記最大サイズを超えている場合に、前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程を含む、請求項45に記載のコンピューティングシステム。
  47. 前記バッファに格納された前記データ要素に境界条件を適用する工程は、
    新たに受信されたデータ要素がカットオフ値を超えているかどうかを決定する工程を含む、請求項20に記載のコンピューティングシステム。
  48. 前記処理する工程は、
    前記新たに受信されたデータ要素が前記カットオフ値を超えていない場合に、前記新たに受信されたデータ要素をバッファリングする工程をさらに含む、請求項47に記載のコンピューティングシステム。
  49. 前記境界条件に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程は、
    前記新たに受信されたデータ要素が前記カットオフ値を超えていない場合に、前記バッファから生成された前記1つまたは複数のデータ要素として、前記新たに受信されたデータ要素をイジェクトする工程を含む、請求項47に記載のコンピューティングシステム。
  50. 前記受信された複数のデータ要素の前記個別のデータ要素の1つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出される、請求項20に記載のコンピューティングシステム。
  51. 前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程は、
    前記バッファから少なくとも前記最小データ要素をイジェクトする工程を含む、請求項18に記載のコンピュータ可読記憶装置。
  52. 前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程は、
    前記バッファから少なくとも前記最大データ要素をイジェクトする工程を含む、請求項18に記載のコンピュータ可読記憶装置。
  53. 受信された各データ要素は、データ記録生成時間を表す、請求項18に記載のコンピュータ可読記憶装置。
  54. 前記データ要素の出力ストリームは、新しい順にソートされる、請求項53に記載のコンピュータ可読記憶装置。
  55. 前記受信された複数のデータ要素の前記データ要素は、部分的にソートされる、請求項18に記載のコンピュータ可読記憶装置。
  56. 前記受信された複数のデータ要素の前記データ要素は、非同期的に前記バッファに到達する、請求項18に記載のコンピュータ可読記憶装置。
  57. 受信された複数のデータ要素をバッファに格納する工程は、
    前記受信された複数のデータ要素のストリームの各個別の要素を、前記バッファソート順序によって決定された前記バッファの位置に挿入する工程を含む、請求項18に記載のコンピュータ可読記憶装置。
  58. 前記バッファに格納された前記データ要素に境界条件を適用する工程は、
    前記バッファに格納された前記データ要素から前記最小データ要素及び前記最大データ要素を特定する工程と、
    前記最小データ要素と前記最大データ要素との差が前記許容差を超えているかどうかを決定する工程とを含む、請求項18に記載のコンピュータ可読記憶装置。
  59. 前記境界条件に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程は、
    前記最小データ要素と前記最大データ要素との前記差が前記許容差を超えている場合に、前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程を含む、請求項58に記載のコンピュータ可読記憶装置。
  60. 前記バッファに格納された前記データ要素に境界条件を適用する工程は、
    前記バッファの最大サイズを超えているかどうかを決定する工程を含む、請求項18に記載のコンピュータ可読記憶装置。
  61. 前記境界条件に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程は、
    前記バッファの前記最大サイズを超えている場合に、前記バッファから前記1つまたは複数のデータ要素をイジェクトする工程を含む、請求項60に記載のコンピュータ可読記憶装置。
  62. 前記バッファに格納された前記データ要素に境界条件を適用する工程は、
    新たに受信されたデータ要素がカットオフ値を超えているかどうかを決定する工程を含む、請求項18に記載のコンピュータ可読記憶装置。
  63. 前記コンピュータプログラムは、前記コンピューティングシステムに、
    前記新たに受信されたデータ要素が前記カットオフ値を超えていない場合に、前記新たに受信されたデータ要素をバッファリングさせるための命令をさらに含む、請求項62に記載のコンピュータ可読記憶装置。
  64. 前記境界条件に基づいて、前記バッファから1つまたは複数のデータ要素をイジェクトする工程は、
    前記新たに受信されたデータ要素が前記カットオフ値を超えていない場合に、前記バッファから生成された前記1つまたは複数のデータ要素として、前記新たに受信されたデータ要素をイジェクトする工程を含む、請求項62に記載のコンピュータ可読記憶装置。
  65. 前記受信された複数のデータ要素の前記個別のデータ要素の1つまたは複数は、グラフベースのコンピューテーションシステムのコンポーネントに入力されるデータ記録から導出される、請求項18に記載のコンピュータ可読記憶装置。
  66. データ要素をソートするためのコンピューティングシステムであって、
    複数のデータ要素を受信するための入力デバイスと、
    前記受信された複数のデータ要素を処理するよう構成された少なくとも1つのプロセッサとを含み、前記処理する工程は、
    前記複数のデータ要素の各個別のデータ要素を受信した後で、前記受信されたデータ要素に境界条件を適用する工程であって、前記境界条件は、前記受信された個別のデータ要素とバッファに格納された最小又は最小データ要素との許容差を指定する、工程と、
    前記受信された個別のデータ要素と前記バッファに格納された前記最小又は最大データ要素との差が前記境界条件によって指定される前記許容差を超えていない場合、前記受信された複数のデータ要素の1つまたは複数のデータ要素を前記バッファに格納する工程と、
    前記受信された個別のデータ要素と前記バッファに格納された前記最小又は最大データ要素との前記差が前記境界条件によって指定される前記許容差を超えている場合、前記バッファから1つまたは複数のデータ要素をイジェクトする工程であって、前記イジェクトされたデータ要素は、既定の順番に従ってソートされたデータ要素の出力ストリームを形成する、工程とを含む、コンピューティングシステム。
  67. データ要素をソートするためのコンピューティングシステムであって、
    複数のデータ要素を受信するための手段と、
    前記複数のデータ要素の各個別のデータ要素を受信した後で、前記受信されたデータ要素に境界条件を適用するための手段であって、前記境界条件は、前記受信された個別のデータ要素とバッファに格納された最小又は最小データ要素との許容差を指定する、手段と、
    前記受信された個別のデータ要素と前記バッファに格納された前記最小又は最大データ要素との差が前記境界条件によって指定される前記許容差を超えていない場合、前記受信された複数のデータ要素の1つまたは複数のデータ要素を前記バッファに格納する手段と、
    前記受信された個別のデータ要素と前記バッファに格納された前記最小又は最大データ要素との前記差が前記境界条件によって指定される前記許容差を超えている場合、前記バッファから1つまたは複数のデータ要素をイジェクトする手段であって、前記イジェクトされたデータ要素は、既定の順番に従ってソートされたデータ要素の出力ストリームを形成する、手段とを含む、コンピューティングシステム。
  68. データ要素をソートするためのコンピュータプログラムを格納するコンピュータ可読記憶装置であって、前記コンピュータプログラムは、コンピューティングシステムに、
    複数のデータ要素を受信させるための命令と、
    前記複数のデータ要素の各個別のデータ要素を受信した後で、前記受信されたデータ要素に境界条件を適用させるための命令であって、前記境界条件は、前記受信された個別のデータ要素とバッファに格納された最小又は最小データ要素との許容差を指定する、命令と、
    前記受信された個別のデータ要素と前記バッファに格納された前記最小又は最大データ要素との差が前記境界条件によって指定される前記許容差を超えていない場合、前記受信された複数のデータ要素の1つまたは複数のデータ要素を格納させるための命令と、
    前記受信された個別のデータ要素と前記バッファに格納された前記最小又は最大データ要素との前記差が前記境界条件によって指定される前記許容差を超えている場合、前記バッファから1つまたは複数のデータ要素をイジェクトさせるための命令であって、前記イジェクトされたデータ要素は、既定の順番に従ってソートされたデータ要素の出力ストリームを形成する、命令とを含む、コンピューティングシステム。
JP2013554591A 2011-02-18 2012-02-16 ソート Active JP6060094B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/031,056 US9003084B2 (en) 2011-02-18 2011-02-18 Sorting
US13/031,056 2011-02-18
PCT/US2012/025375 WO2012112744A2 (en) 2011-02-18 2012-02-16 Sorting

Publications (3)

Publication Number Publication Date
JP2014511526A JP2014511526A (ja) 2014-05-15
JP2014511526A5 JP2014511526A5 (ja) 2015-04-09
JP6060094B2 true JP6060094B2 (ja) 2017-01-11

Family

ID=45755583

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013554591A Active JP6060094B2 (ja) 2011-02-18 2012-02-16 ソート

Country Status (9)

Country Link
US (2) US9003084B2 (ja)
EP (1) EP2676189B1 (ja)
JP (1) JP6060094B2 (ja)
KR (2) KR20150042874A (ja)
CN (1) CN103392169B (ja)
AU (1) AU2012217617B2 (ja)
CA (1) CA2826280C (ja)
HK (1) HK1187428A1 (ja)
WO (1) WO2012112744A2 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8447901B2 (en) 2011-02-18 2013-05-21 Ab Initio Technology Llc Managing buffer conditions through sorting
CN103780692B (zh) * 2014-01-13 2017-01-11 中国科学院计算技术研究所 一种键值存储的数据访问方法及其系统
CH709742A1 (de) * 2014-06-05 2015-12-15 Swisstradingbox Ag Börsenhandelssystem.
US10523596B1 (en) * 2015-02-06 2019-12-31 Xilinx, Inc. Circuits for and methods of merging streams of data to generate sorted output data
US10073877B2 (en) 2015-06-11 2018-09-11 International Business Machines Corporation Data processing flow optimization
US20190050199A1 (en) * 2018-03-30 2019-02-14 Richard Allen Localized grid sort
CN109949378B (zh) * 2019-03-26 2021-06-08 中国科学院软件研究所 图像灰度值排序方法、装置、电子设备及计算机可读介质
EP4049421B1 (en) * 2019-10-29 2023-11-29 Huawei Technologies Co., Ltd. Systems and methods for sorting data elements with approximation to o(1)
US11899579B2 (en) * 2020-06-22 2024-02-13 StockX LLC Systems and methods for normalizing data from multiple sources
US20240248624A1 (en) * 2023-01-24 2024-07-25 VMware LLC Tiered memory data structures and algorithms for dynamic searching via treaps

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6446830A (en) * 1987-08-17 1989-02-21 Nippon Telegraph & Telephone Data selection system
US5218670A (en) 1990-08-31 1993-06-08 Texas Instruments Incorporated Apparatus and methods for the handling of banded frame buffer overflows
US5905729A (en) 1995-07-19 1999-05-18 Fujitsu Network Communications, Inc. Mapping a data cell in a communication switch
US5966072A (en) 1996-07-02 1999-10-12 Ab Initio Software Corporation Executing computations expressed as graphs
US5996031A (en) * 1997-03-31 1999-11-30 Ericsson Inc. System and method for the real time switching of an isochronous data stream
US6088716A (en) 1997-04-28 2000-07-11 Ab Initio Software Corporation Method for preventing buffer deadlock in dataflow computations
JP3544127B2 (ja) 1997-10-24 2004-07-21 キヤノン株式会社 画像形成装置および画像形成装置の制御方法
JPH11175281A (ja) 1997-12-15 1999-07-02 Hitachi Information Technology Co Ltd 印刷データバッファ制御方式
US6161155A (en) * 1998-07-20 2000-12-12 Hewlett-Packard Company Apparatus and method for storing retrievable boundary information into a buffer memory of a receiving device
AU9240598A (en) 1998-11-16 2000-05-18 Ericsson Australia Pty Ltd Method and system for scheduling packets in a telecommunications network
US6401147B1 (en) 1999-05-24 2002-06-04 Advanced Micro Devices, Inc. Split-queue architecture with a first queue area and a second queue area and queue overflow area having a trickle mode and an overflow mode based on prescribed threshold values
US7301954B1 (en) * 1999-09-24 2007-11-27 United States Of America As Represented By The Secretary Of The Navy Multiple-buffer queueing of data packets with high throughput rate
US7164422B1 (en) 2000-07-28 2007-01-16 Ab Initio Software Corporation Parameterized graphs with conditional components
US7213087B1 (en) 2000-08-31 2007-05-01 Hewlett-Packard Development Company, L.P. Mechanism to control the allocation of an N-source shared buffer
US6842800B2 (en) * 2001-08-30 2005-01-11 Marconi Intellectual Property (Ringfence) Inc. System and method for managing configurable buffer sizes
US7162546B2 (en) 2001-12-27 2007-01-09 Intel Corporation Reordering unrelated transactions from an ordered interface
US6925539B2 (en) 2002-02-06 2005-08-02 Seagate Technology Llc Data transfer performance through resource allocation
US6877048B2 (en) * 2002-03-12 2005-04-05 International Business Machines Corporation Dynamic memory allocation between inbound and outbound buffers in a protocol handler
CN100399338C (zh) * 2002-06-26 2008-07-02 联想(北京)有限公司 一种数据记录处理方法
TWI313412B (en) * 2002-11-25 2009-08-11 Ibm Method and apparatus for intermediate buffer segmentation and reassembly
US7003597B2 (en) * 2003-07-09 2006-02-21 International Business Machines Corporation Dynamic reallocation of data stored in buffers based on packet size
US20050165985A1 (en) * 2003-12-29 2005-07-28 Vangal Sriram R. Network protocol processor
WO2005089158A2 (en) * 2004-03-16 2005-09-29 Snowshore Networks, Inc. Jitter buffer management
US7958292B2 (en) 2004-06-23 2011-06-07 Marvell World Trade Ltd. Disk drive system on chip with integrated buffer memory and support for host memory access
JP4561240B2 (ja) * 2004-08-26 2010-10-13 ソニー株式会社 データ処理装置およびデータ処理方法並びにデータ送受信システム
US7877350B2 (en) * 2005-06-27 2011-01-25 Ab Initio Technology Llc Managing metadata for graph-based computations
JP4687320B2 (ja) * 2005-08-11 2011-05-25 ソニー株式会社 画像処理装置および方法、記録媒体、並びに、プログラム
JP2007179183A (ja) * 2005-12-27 2007-07-12 Fujifilm Corp メディアンフィルタおよびメディアンフィルタプログラム
KR20070076726A (ko) * 2006-01-19 2007-07-25 삼성전자주식회사 엔드포인트 제어 장치 및 방법
JP4347322B2 (ja) * 2006-07-14 2009-10-21 ソニー株式会社 受信装置および方法、並びにプログラム
US7496707B2 (en) * 2006-08-22 2009-02-24 International Business Machines Corporation Dynamically scalable queues for performance driven PCI express memory traffic
US7937419B2 (en) * 2008-06-26 2011-05-03 Tatu Ylonen Oy Garbage collection via multiobjects
US8024498B2 (en) * 2008-12-15 2011-09-20 International Business Machines Corporation Transitions between ordered and ad hoc I/O request queueing
WO2010110155A1 (ja) * 2009-03-23 2010-09-30 株式会社ソニー・コンピュータエンタテインメント チャットシステム、サーバ装置、チャット方法、チャット実行プログラム、チャット実行プログラムが記憶された記憶媒体、情報処理装置、画像表示方法、画像処理プログラム、画像処理プログラムが記憶された記憶媒体
JP5235800B2 (ja) * 2009-06-24 2013-07-10 日本電信電話株式会社 Ipストリーム送受信システム、ipストリーム送受信方法、ipストリーム送受信プログラムおよびそのプログラムを記録した記録媒体
US8447901B2 (en) 2011-02-18 2013-05-21 Ab Initio Technology Llc Managing buffer conditions through sorting

Also Published As

Publication number Publication date
EP2676189A2 (en) 2013-12-25
HK1187428A1 (en) 2014-04-04
CN103392169B (zh) 2016-06-01
EP2676189B1 (en) 2014-10-29
AU2012217617B2 (en) 2015-09-03
US9128686B2 (en) 2015-09-08
KR20140014125A (ko) 2014-02-05
JP2014511526A (ja) 2014-05-15
AU2012217617A1 (en) 2013-05-02
US9003084B2 (en) 2015-04-07
WO2012112744A3 (en) 2013-02-28
KR101857510B1 (ko) 2018-05-14
CN103392169A (zh) 2013-11-13
WO2012112744A2 (en) 2012-08-23
KR20150042874A (ko) 2015-04-21
US20150212796A1 (en) 2015-07-30
CA2826280A1 (en) 2012-08-23
CA2826280C (en) 2018-07-31
US20120215992A1 (en) 2012-08-23

Similar Documents

Publication Publication Date Title
JP6060094B2 (ja) ソート
JP5977263B2 (ja) バッファオーバーフロー状態の管理
US9467460B1 (en) Modularized database architecture using vertical partitioning for a state machine
US9170794B2 (en) Automatic exploitation of data parallelism in streaming applications
US20180097748A1 (en) Partitioned Topic Based Queue with Automatic Processing Scaling
CN103198004A (zh) 一种信息处理方法和装置
US20240104031A1 (en) Forwarding incoming io to scm namespaces
CN114968422A (zh) 基于变量状态自动执行合约的方法和装置
US20240086225A1 (en) Container group scheduling methods and apparatuses
Castillo et al. Predictive and distributed routing balancing, an application-aware approach
CN116710908A (zh) 语义感知计算存储协调方法
AU2022294976A1 (en) Techniques for scaling workflow campaigns
Bingham et al. Response property checking via distributed state space exploration
Ganjoo Real-time Stock Market Trend Analysis using Stream Processing Frameworks

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150216

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150216

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160229

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160301

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160531

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160714

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160804

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161031

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20161121

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161212

R150 Certificate of patent or registration of utility model

Ref document number: 6060094

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250