JP2016530584A - データ操作のための、メモリ及びストレージ空間の管理 - Google Patents

データ操作のための、メモリ及びストレージ空間の管理 Download PDF

Info

Publication number
JP2016530584A
JP2016530584A JP2016514115A JP2016514115A JP2016530584A JP 2016530584 A JP2016530584 A JP 2016530584A JP 2016514115 A JP2016514115 A JP 2016514115A JP 2016514115 A JP2016514115 A JP 2016514115A JP 2016530584 A JP2016530584 A JP 2016530584A
Authority
JP
Japan
Prior art keywords
data
working memory
memory space
stored
information
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.)
Granted
Application number
JP2016514115A
Other languages
English (en)
Other versions
JP6387399B2 (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 JP2016530584A publication Critical patent/JP2016530584A/ja
Application granted granted Critical
Publication of JP6387399B2 publication Critical patent/JP6387399B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7204Capacity control, e.g. partitioning, end-of-life degradation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

複数のデータユニットを処理して結果情報を生成することは、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、メモリデバイス(108)の作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること、作業メモリ空間に対するオーバーフロー条件が満たされた後で情報をストレージデバイス(110)のオーバーフローストレージ空間に記憶すること、及び、複数のデータユニットの処理中にオーバーフロー処理手順を複数回繰り返すことを含み、オーバーフロー処理手順は、オーバーフローストレージ空間に記憶された少なくともいくらかの情報を使用して、作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することを含む。

Description

関連出願の相互参照
本出願は、2013年5月17日に出願された米国特許出願第61/824,686号明細書に対する優先権を主張するものである。
本記述は、データ操作のためにメモリ及びストレージ空間を管理することに関する。
いくつかのコンピューティングシステムは、オペレーティングシステム内で実行されるプログラムによって使用されるメモリデバイスを管理するために、仮想メモリ方式を使用する。例えば、オペレーティングシステムは、より大きい仮想アドレス空間と、より小さい、メモリデバイス(「メインメモリ」とも呼ばれる)の実アドレス空間との間の変換を扱うことができ、メモリデバイスよりも大きい記憶容量を有するバッキングストアとしての働きをするストレージデバイスに対して、メモリのページがスワップイン及びスワップアウトされる。したがって、プログラムからアクセス可能な作業メモリの量は、メインメモリのサイズによって制限されない。仮想メモリ方式では、プログラムの作業メモリ内のアドレスのページがメモリデバイスとバッキングストアとの間で行き来することは、一般に、この作業メモリを使用しているプログラムにとってはトランスペアレントである。いくつかのコンピューティングシステムは、中央処理装置(CPU)に内蔵されたメモリ管理ユニット(MMU)など、仮想メモリに対するハードウェアサポートを有することができる。いくつかのコンピューティングシステムはまた、1又は2以上のレベルを有するキャッシングシステムを使用して、限られた数のメインメモリアドレスのコピーを相対的により速いキャッシュメモリ内に記憶し、これらのメモリアドレスの繰り返されるアクセスを加速させることができる。
一態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供するメモリデバイスと、オーバーフローストレージ空間を提供するストレージデバイスと、複数のデータユニットを処理して結果情報を生成するように構成された少なくとも1つのプロセッサとを備える。処理は、複数のデータユニットからのデータユニットの第1のサブセット(first subset of data units)の各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること;作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第2のサブセット(second subset of data units)の各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットに記憶すること;並びに、第1及び第2のセットを含めた1又は2以上のデータ構造の複数のセットを結合して結果情報を生成することを含む。データ操作の結果に関連する情報を1又は2以上のデータ構造のセットに記憶することは、少なくとも1つのデータユニットに対して、1又は2以上のデータ構造のセットに使用される作業メモリ空間の量を増加させずに1又は2以上のデータ構造のセット中の情報を変更する操作を実行することを含む。
態様は、以下の特徴の1又は2以上を含み得る。
作業メモリ空間に対するオーバーフロー条件は、1又は2以上のデータ構造の第1のセットに使用される作業メモリ空間の量が所定の閾値以上である場合に、満たされる。
処理はさらに、オーバーフロー条件が満たされた後、且つデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行する前に、1又は2以上のデータ構造の第1のセットをオーバーフローストレージ空間に記憶し、1又は2以上のデータ構造の第1のセットを作業メモリ空間から削除することを含む。
1又は2以上のデータ構造の複数のセットを結合することは、第1のセットからの少なくとも1つのデータ構造を、第2のセットからの少なくとも1つのデータ構造とマージすることを含む。
第1のセットからの少なくとも1つのデータ構造を第2のセットからの少なくとも1つのデータ構造とマージすることは、1又は2以上のデータ構造の第1のセットからのデータ構造内の第1のキーを、1又は2以上のデータ構造の第2のセットからのデータ構造内の第2のキーと一致させ、第1のキーに関連する値と第2のキーに関連する値とに対して集約操作を実行することを含む。
処理はさらに、オーバーフロー条件が満たされた後、且つデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行する前に、複数のデータユニットからのデータユニットの第3のサブセット(third subset of data units)の各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶することを含む。
データユニットの第2のサブセットは、データユニットの第3のサブセットのデータユニットのサブセットである。
処理はさらに、データユニットの第3のサブセットの第1のデータユニットに対してデータ操作を実行した後で、データ操作の結果に関連する情報を(1)作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶するか、それとも(2)オーバーフローストレージ空間に記憶するかを決定することを含む。
1又は2以上のデータ構造のセット内の情報を変更する操作は、作業メモリ空間内の位置に記憶された値を、作業メモリ空間内の同じ位置に記憶された異なる値で上書きするインプレースメモリ操作を含む。
データ操作の結果に関連する情報をオーバーフローストレージ空間に記憶することは、第1のデータユニットの少なくとも一部の内容をオーバーフローストレージ空間に記憶することを含む。
第1のデータユニットに対してデータ操作を実行することは、第1のデータユニット内のキーを1又は2以上のデータ構造の第1のセット内の1又は2以上のキーと比較することを含み、比較の結果が一致する場合は、データ操作の結果に関連する情報は、作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶され、比較の結果が一致しない場合は、データ操作の結果に関連する情報はオーバーフローストレージ空間に記憶される。
処理はさらに、複数のデータユニットをデータソースから生成することを含み、各データユニットは、データソースのフィールドの識別子と、データソースのレコード内でこのフィールドに現れる値とを含む。
データ操作は、複数のデータユニットに含まれる値を、情報の集約元となる一致するデータユニットを選択するためのキーとして使用して、これらのデータユニットからの情報を集約することを含む。
メモリデバイスは、揮発性メモリデバイスを含む。
ストレージデバイスは、不揮発性ストレージデバイスを含む。
別の態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供する手段と、オーバーフローストレージ空間を提供する手段と、複数のデータユニットを処理して結果情報を生成する手段とを備える。処理は、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること;作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットに記憶すること;並びに、第1及び第2のセットを含めた1又は2以上のデータ構造の複数のセットを結合して結果情報を生成することを含む。データ操作の結果に関連する情報を1又は2以上のデータ構造のセットに記憶することは、少なくとも1つのデータユニットに対して、1又は2以上のデータ構造のセットに使用される作業メモリ空間の量を増加させずに1又は2以上のデータ構造のセット内の情報を変更する操作を実行することを含む。
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成する方法は、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶するステップと;作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットに記憶するステップと;第1及び第2のセットを含めた1又は2以上のデータ構造の複数のセットを結合して結果情報を生成するステップとを含む。データ操作の結果に関連する情報を1又は2以上のデータ構造のセットに記憶するステップは、少なくとも1つのデータユニットに対して、1又は2以上のデータ構造のセットに使用される作業メモリ空間の量を増加させずに1又は2以上のデータ構造のセット内の情報を変更する操作を実行するステップを含む。
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成するためのソフトウェアが、コンピュータ可読媒体に記憶される。ソフトウェアは、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること;作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットに記憶すること;並びに、第1及び第2のセットを含めた1又は2以上のデータ構造の複数のセットを結合して結果情報を生成すること、をコンピューティングシステムに行わせるための命令を含む。データ操作の結果に関連する情報を1又は2以上のデータ構造のセットに記憶することは、少なくとも1つのデータユニットに対して、1又は2以上のデータ構造のセットに使用される作業メモリ空間の量を増加させずに1又は2以上のデータ構造のセット内の情報を変更する操作を実行することを含む。
別の態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供するメモリデバイスと、オーバーフローストレージ空間を提供するストレージデバイスと、複数のデータユニットを処理して結果情報を生成するように構成された少なくとも1つのプロセッサとを備える。処理は、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること;及び、作業メモリ空間に対するオーバーフロー条件が満たされた後で、複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を(1)作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶するか、それとも(2)オーバーフローストレージ空間に記憶するかを決定することを含む。
態様は、以下の特徴の1又は2以上を含み得る。
作業メモリ空間に対するオーバーフロー条件は、1又は2以上のデータ構造の第1のセットに使用される作業メモリ空間の量が所定の閾値以上である場合に、満たされる。
データ操作は、各データユニット内のキー値に少なくとも部分的に基づき、決定することは、第1のセットのデータ構造の少なくとも1つの中で少なくとも1つのキー値を検索して、(1)作業メモリ空間内の1又は2以上のデータ構造の第1のセットのデータ構造内のこのキー値に関連する情報を更新するか、それとも(2)このキー値に関連する情報をオーバーフローストレージ空間に記憶するかを決定することを含む。
データ操作は、作業メモリ空間内の位置に記憶された値を、作業メモリ空間内の同じ位置に記憶された異なる値で上書きするインプレースメモリ操作を含む。
データ操作の結果に関連する情報をオーバーフローストレージ空間に記憶することは、データ操作が実行されるデータユニットの少なくとも一部の内容をオーバーフローストレージ空間に記憶することを含む。
第1のデータユニットに対してデータ操作を実行することは、第1のデータユニット内のキーを1又は2以上のデータ構造の第1のセット内の1又は2以上のキーと比較することを含み、比較の結果が一致する場合は、データ操作の結果に関連する情報は、作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶され、比較の結果が一致しない場合は、データ操作の結果に関連する情報はオーバーフローストレージ空間に記憶される。
処理はさらに、複数のデータユニットをデータソースから生成することを含み、各データユニットは、データソースのフィールドの識別子と、データソースのレコード内でこのフィールドに現れる値とを含む。
データ操作は、複数のデータユニットに含まれる値を、情報の集約元となる一致するデータユニットを選択するためのキーとして使用して、これらのデータユニットからの情報を集約することを含む。
複数のデータユニットを生成することは、データソースの少なくとも第1のフィールドと、データソースの少なくとも第2のフィールドとについてデータユニットを生成することを含む。
第2のサブセットの各データユニットに対してデータ操作を実行することは、第1のデータユニットに対して実行されたデータ操作の結果に関連する情報を1又は2以上のデータ構造の第1のセットに記憶し、第2のデータユニットに対して実行されたデータ操作の結果に関連する情報をオーバーフローストレージ空間に記憶することを含む。
第1のデータユニット及び第2のデータユニットは、データソースの同じフィールドについての、それぞれの識別子を含む。
メモリデバイスは、揮発性メモリデバイスを含む。
ストレージデバイスは、不揮発性ストレージデバイスを含む。
別の態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供する手段と、オーバーフローストレージ空間を提供する手段と、複数のデータユニットを処理して結果情報を生成する手段とを備える。処理は、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること;及び、作業メモリ空間に対するオーバーフロー条件が満たされた後で、複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を(1)作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶するか、それとも(2)オーバーフローストレージ空間に記憶するかを決定することを含む。
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成する方法は、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶するステップと;作業メモリ空間に対するオーバーフロー条件が満たされた後で、複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を(1)作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶するか、それとも(2)ストレージデバイスのオーバーフローストレージ空間に記憶するかを決定するステップとを含む。
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成するためのソフトウェアが、コンピュータ可読媒体に記憶される。ソフトウェアは、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること;及び、作業メモリ空間に対するオーバーフロー条件が満たされた後で、複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を(1)作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶するか、それとも(2)ストレージデバイスのオーバーフローストレージ空間に記憶するかを決定すること、をコンピューティングシステムに行わせるための命令を含む。
別の態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供するメモリデバイスと、オーバーフローストレージ空間を提供するストレージデバイスと、複数のデータユニットを処理して結果情報を生成するように構成された少なくとも1つのプロセッサとを備える。処理は、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行することであって、データ操作が、作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットの少なくとも1つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第1のセットの少なくとも1つのデータ構造内の情報を修正し、値が見つからなかった場合に、第1のセットの少なくとも1つのデータ構造に情報を追加することを含むものであること;作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行することであって、データ操作が、作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットの少なくとも1つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第2のセットの少なくとも1つのデータ構造内の情報を修正することを含むものであること;並びに、第1及び第2のセットを含めた1又は2以上のデータ構造の複数のセットを結合して結果情報を生成することを含む。
態様は、以下の特徴の1又は2以上を含み得る。
作業メモリ空間に対するオーバーフロー条件は、1又は2以上のデータ構造の第1のセットに使用される作業メモリ空間の量が所定の閾値以上である場合に、満たされる。
処理はさらに、オーバーフロー条件が満たされた後、且つデータユニットの第2のサブセットの各データユニットについて検索を実行する前に、1又は2以上のデータ構造の第1のセットをオーバーフローストレージ空間に記憶し、1又は2以上のデータ構造の第1のセットを作業メモリ空間から削除することを含む。
1又は2以上のデータ構造の複数のセットを結合することは、第1のセットからの少なくとも1つのデータ構造を、第2のセットからの少なくとも1つのデータ構造とマージすることを含む。
第1のセットからの少なくとも1つのデータ構造を第2のセットからの少なくとも1つのデータ構造とマージすることは、1又は2以上のデータ構造の第1のセットからのデータ構造内の第1のキーを、1又は2以上のデータ構造の第2のセットからのデータ構造内の第2のキーと一致させ、第1のキーに関連する値と第2のキーに関連する値とに対して集約操作を実行することを含む。
処理はさらに、オーバーフロー条件が満たされた後、且つデータユニットの第2のサブセットの各データユニットについて検索を実行する前に、複数のデータユニットからのデータユニットの第3のサブセットの各データユニットに対して、作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットの少なくとも1つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第1のセットの少なくとも1つのデータ構造内の情報を修正することを含む。
データユニットの第2のサブセットは、データユニットの第3のサブセットのデータユニットのサブセットである。
情報を修正することは、作業メモリ空間内の位置に記憶された値を、作業メモリ空間内の同じ位置に記憶された異なる値で上書きするインプレースメモリ操作を実行することを含む。
処理はさらに、複数のデータユニットをデータソースから生成することを含み、各データユニットは、データソースのフィールドの識別子と、データソースのレコード内でこのフィールドに現れる値とを含む。
1又は2以上のデータ構造の第1のセットは、キーと値のペアのエントリの、複数の連想配列を含む。
作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットの少なくとも1つのデータ構造内でデータユニット内の値を検索することは、キーと値のペアのエントリの連想配列のうちの選択された連想配列内のエントリのキーとして値を検索することを含む。
キーと値のペアのエントリの連想配列のうちの選択された連想配列は、データユニット内の識別子に対応する。
第1のセットの少なくとも1つのデータ構造内の情報を修正することは、見つかったキーと値のペアのエントリの値をインクリメントすることを含む。
第1のセットの少なくとも1つのデータ構造に情報を追加することは、データユニット内の値をキーとして有し、1のカウントを値として有する、新しいキーと値のペアのエントリを、選択されたアレイに追加することを含む。
メモリデバイスは、揮発性メモリデバイスを含む。
ストレージデバイスは、不揮発性ストレージデバイスを含む。
別の態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供する手段と、オーバーフローストレージ空間を提供する手段と、複数のデータユニットを処理して結果情報を生成する手段とを備える。処理は、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行することであって、データ操作が、作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットの少なくとも1つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第1のセットの少なくとも1つのデータ構造内の情報を修正し、値が見つからなかった場合に、第1のセットの少なくとも1つのデータ構造に情報を追加することを含むものであること;作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行することであって、データ操作が、作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットの少なくとも1つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第2のセットの少なくとも1つのデータ構造内の情報を修正することを含むものであること;並びに、第1及び第2のセットを含めた1又は2以上のデータ構造の複数のセットを結合して結果情報を生成することを含む。
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成する方法は、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行するステップであって、データ操作が、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットの少なくとも1つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第1のセットの少なくとも1つのデータ構造内の情報を修正し、値が見つからなかった場合に、第1のセットの少なくとも1つのデータ構造に情報を追加することを含むものであるステップと;作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行するステップであって、データ操作が、作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットの少なくとも1つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第2のセットの少なくとも1つのデータ構造内の情報を修正することを含むものであるステップと;第1及び第2のセットを含めた1又は2以上のデータ構造の複数のセットを結合して結果情報を生成するステップとを含む。
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成するためのソフトウェアが、コンピュータ可読媒体に記憶される。ソフトウェアは、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行することであって、データ操作が、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットの少なくとも1つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第1のセットの少なくとも1つのデータ構造内の情報を修正し、値が見つからなかった場合に、第1のセットの少なくとも1つのデータ構造に情報を追加することを含むものであること;作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶して作業メモリ空間の少なくとも一部を解放し、複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行することであって、データ操作が、作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットの少なくとも1つのデータ構造内でデータユニット内の値を検索して、値が見つかった場合に、第2のセットの少なくとも1つのデータ構造内の情報を修正することを含むものであること;並びに、第1及び第2のセットを含めた1又は2以上のデータ構造の複数のセットを結合して結果情報を生成すること、をコンピューティングシステムに行わせるための命令を含む。
別の態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供するメモリデバイスと、オーバーフローストレージ空間を提供するストレージデバイスと、複数のデータユニットを処理して結果情報を生成するように構成された少なくとも1つのプロセッサとを備える。処理は、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること;作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をオーバーフローストレージ空間に記憶すること;及び、複数のデータユニットの処理中にオーバーフロー処理手順を複数回繰り返すことを含み、オーバーフロー処理手順は、オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することを含む。
態様は、以下の特徴の1又は2以上を含み得る。
作業メモリ空間に対するオーバーフロー条件は、1又は2以上のデータ構造の第1のセットに使用される作業メモリ空間の量が所定の閾値以上である場合に、満たされる。
処理はさらに、オーバーフロー条件が満たされた後、且つデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行する前に、1又は2以上のデータ構造の第1のセットを移動済みセット(moved set)としてオーバーフローストレージ空間に記憶し、1又は2以上のデータ構造の第1のセットを作業メモリ空間から削除することを含む。
オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することは、オーバーフローストレージ空間に記憶された1又は2以上のデータ構造の移動済みセットからの少なくとも1つのデータ構造からの情報を、作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットからの少なくとも1つのデータ構造とマージすることを含む。
マージすることは、1又は2以上のデータ構造の移動済みセットからのデータ構造内の第1のキーを、1又は2以上のデータ構造の新しいセットからのデータ構造内の第2のキーと一致させ、第1のキーに関連する値と第2のキーに関連する値とに対して集約操作を実行することを含む。
オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することは、オーバーフローストレージ空間に記憶されたデータユニット内の第1のキーを、1又は2以上のデータ構造の新しいセットからのデータ構造内の第2のキーと一致させ、第2のキーに関連する値をインクリメントすることを含む。
オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することは、作業メモリ空間内の位置に記憶された値を、作業メモリ空間内の同じ位置に記憶された異なる値で上書きするインプレースメモリ操作を含む。
処理はさらに、複数のデータユニットをデータソースから生成することを含み、各データユニットは、データソースのフィールドの識別子と、データソースのレコード内でこのフィールドに現れる値とを含む。
データ操作は、複数のデータユニットに含まれる値を、情報の集約元となる一致するデータユニットを選択するためのキーとして使用して、これらのデータユニットからの情報を集約することを含む。
1又は2以上のデータ構造の第1のセットは、キーと値のペアのエントリの、複数の連想配列を含む。
第1のデータユニットに対するデータ操作は、第1のデータユニット内の値をキーとして使用して、キーと値のペアのエントリの連想配列のうちの選択された連想配列内で検索することを含む。
キーと値のペアのエントリの連想配列のうちの選択された連想配列は、第1のデータユニット内の識別子に対応する。
メモリデバイスは、揮発性メモリデバイスを含む。
ストレージデバイスは、不揮発性ストレージデバイスを含む。
別の態様では、一般に、コンピューティングシステムは、作業メモリ空間を提供する手段と、オーバーフローストレージ空間を提供する手段と、複数のデータユニットを処理して結果情報を生成する手段とを備える。処理は、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること;作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をオーバーフローストレージ空間に記憶すること;及び、複数のデータユニットの処理中にオーバーフロー処理手順を複数回繰り返すことを含み、オーバーフロー処理手順は、オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することを含む。
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成する方法は、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶するステップと;作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶するステップと;複数のデータユニットの処理中にオーバーフロー処理手順を複数回繰り返すステップとを含み、オーバーフロー処理手順は、オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することを含む。
別の態様では、一般に、複数のデータユニットを処理して結果情報を生成するためのソフトウェアが、コンピュータ可読媒体に記憶される。ソフトウェアは、複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること;作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶すること;及び、複数のデータユニットの処理中にオーバーフロー処理手順を複数回繰り返すこと、をコンピューティングシステムに行わせるための命令を含み、オーバーフロー処理手順は、オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することを含む。
態様は、以下の利点の1又は2以上を有し得る。
いくつかのコンピューティングシステム(例えばいくつかのデータベース管理システム)は、作業メモリを管理するために仮想メモリのみに依拠することはせず、処理中のデータがメインメモリに記憶されるべきかそれともストレージデバイス内のオーバーフローストレージ空間に記憶されるべきかを直接制御することができる。例えば、いくつかのシステムは、プログラムに利用可能な作業メモリのサイズに明示的な限度を課し、この作業メモリ限度は、メインメモリのサイズよりも小さい(例えば、このプログラムが他のプログラムと作業メモリを共有している場合があるので)。プログラムがこの作業メモリ限度に近づいた場合、プログラムは、「ディスクにスピルする」技法を使用して、一部のデータをオーバーフローストレージ空間内に一時的に記憶し、のちに、十分な作業メモリが利用可能になった後でこのデータの処理を終了する、というオプションを有する。場合によっては、データをディスクにスピルすること、又はオペレーティングシステムに依拠してメモリページをスワップすることは、データ操作の性能に大きな影響を有する可能性がある。
後でより詳細に述べるデータプロファイリングなど、データ処理システムのいくつかのアプリケーションでは、大量となり得るデータ(例えば、大きいデータセット及び/又は多数のデータセット)に対してデータ操作が実行されることになっている場合、システムは、データ処理アプリケーションが妥当な性能を確実に提供できるように作業メモリ及びオーバーフローストレージ空間を効率的に管理するように構成されるべきである。作業メモリ及びオーバーフローストレージ空間を管理する手法の1つは、次の認識に基づく。すなわち、いくつかのデータ操作については、システムは、入力データを処理せずにディスクにスピルする代わりに、この入力データに対してデータ操作を少なくとも部分的に実行することができ、場合によってはこの入力データをディスクにスピルする必要性を回避することができる、という認識である。
例えば、いくつかのデータ操作は、キー値にそれぞれ関連付けられた入力レコードのストリームを処理し、キー値が前のキー値と一致するレコードについては、データ操作は、メモリ内のデータ構造に記憶された結果を更新する。いくつかの実施形態では、本明細書に記載のコンピューティングシステムは、「オーバーフロー処理」手順を使用して、作業メモリ限度に達した後でも、任意のキーを有する新しいレコードを処理し続けることができる。オーバーフロー処理手順の2つの具体例について述べる。両方の手順により、いくつかのレコードは、これらのレコードをスピルする必要なしに、一致させて結果データ構造の更新のために使用することができる。一致させたレコードについては、より多くのメモリを使用することなく結果データ構造をインプレースで更新することができる。一方のオーバーフロー処理手順は、結果データ構造のみをオーバーフローストレージに移動して、全ての新しいレコード(移動されたデータ構造とマージされることになる新しい結果データ構造内の)の処理を継続することによって、オーバーフローに対処し、他方のオーバーフロー処理手順は、一致しないレコードのみをオーバーフローストレージに移動して、全ての新しいレコード(同じ結果データ構造内)の処理を継続することによって、オーバーフローに対処する。
本明細書に記載の技法を使用して実行できるデータ操作の一例は、データセットをプロファイリングするために大きいデータセット内のデータ値のセンサス(データセット内に現れる値と、各値のカウントとを含む)を生成するのに使用される、センサス操作である。データプロファイリング操作は、センサス操作など、データプロファイリング手順の実行中に処理されているデータに対して実行される任意の操作を含み得る。センサス操作はまた、経時的なデータの特性を追跡するデータ品質システムにおいてなど、他のコンテキストで処理されているデータにも実行され得る。これらの技法を適用できる他のデータ操作は、後でより詳細に述べるように、不完全な結果のマージを可能にするデータ操作、及び、少なくともいくつかのケースをメモリ内のデータ構造内でインプレースに扱うことができるデータ操作を含む。これらの技法を使用して、本明細書に記載の正規化済みレコードなどのデータユニット、又は、データストリーム内のデータの個々の部分を表す他の任意のデータユニットを、処理することができる。
本発明の他の特徴及び利点は、後続の記述、及び特許請求の範囲から明らかになるであろう。
データ処理システムのブロック図である。 データプロファイリング手順の概略図である。 センサス生成手順の概略図である。 センサス生成手順のフローチャートである。 センサス生成手順の概略図である。 センサス生成手順のフローチャートである。
図1に、作業メモリ及びオーバーフローストレージ空間を管理する技法をその中で使用できるデータ処理システム100の例を示す。データ処理システム100はデータソース102を含み、データソース102は、ストレージデバイスや、オンラインデータストリームへの接続など、1又は2以上のデータソースを含むことができ、これらのデータソースの各々は、様々なフォーマットのいずれか(例えば、データベーステーブル、スプレッドシートファイル、フラットテキストファイル、又は、メインフレームによって使用されるネイティブフォーマット)でデータを記憶又は提供することができる。データ処理システム100はコンピューティングシステム104を含み、コンピューティングシステム104は、少なくとも1つのプロセッサ106と、プロセッサ106に接続された少なくとも1つのメモリデバイス108(例えば、ダイナミックランダムアクセスメモリなどの揮発性メモリ)と、プロセッサ106に接続された少なくとも1つのストレージデバイス110(例えば、磁気ハードディスクドライブなどの不揮発性ストレージ)とを備える。コンピューティングシステム100がデータソース102からのデータを処理した後、この処理の結果がユーザインタフェース(UI)112に提供されてもよい。これは、データソース102内で優勢な状態について、又は、データソース102からのデータを受け取って処理することになる宛先において優勢となるであろう状態についてユーザに自動的に視覚的に示すことを含む。
データ処理システム100の種々のコンポーネントの様々な構成が可能である。プロセッサ106は、UNIXオペレーティングシステムのバージョンなどの適切なオペレーティングシステムによって例えば制御される実行環境をホストするように構成されてよい。いくつかの実施形態では、コンピューティングシステム104は、複数の中央処理装置(CPU)又はプロセッサコアの構成を含む、複数ノード並列コンピューティング環境の一部であってよく、この構成は、ローカルであるか(例えば、対称型マルチプロセッシング(SMP)コンピュータなどのマルチプロセッサシステム)又はローカルに分散され(例えば、クラスタ若しくは超並列処理(MPP)システムとして接続された、複数のプロセッサ)、或いは、リモートであるか又はリモートに分散され(例えば、ローカルエリアネットワーク(LAN)及び/若しくはワイドエリアネットワーク(WAN)を介して接続された複数のプロセッサ)、或いはこれらの任意の組合せである。データソース102を提供するストレージデバイスは、コンピューティングシステム104に対してローカルである場合があり、例えば、コンピューティングシステム104に接続されたストレージ媒体(ストレージデバイス110を含む)に記憶され、又は、コンピューティングシステム104に対してリモートである場合があり、例えば、(例えば、クラウドコンピューティングインフラストラクチャによって提供される)リモート接続を介してコンピューティングシステム104と通信するリモートシステム(例えばメインフレーム)上でホストされる。
いくつかの実施形態では、コンピューティングシステム104は、ノード間の有向リンク(作業要素(すなわちデータ)のフローを表す)によって接続されたノード(データ処理コンポーネント又はデータセットを表す)を含むデータフローグラフとして、アプリケーションを実行するように構成される。例えば、このような環境は、参照により本明細書に組み込まれる、“Managing Parameters for Graph-Based Applications”という名称の米国特許出願公開第2007/0011668号明細書に、より詳細に記載されている。このようなグラフベースの計算を実行するためのシステムは、参照により本明細書に組み込まれる、“EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS”という名称の米国特許第5,966,072号明細書に記載されている。このシステムに従って作成されたデータフローグラフは、プロセス間で情報を移動するため、及びプロセスの実行順序を定義するために、グラフコンポーネントによって表される個々のプロセスに対して情報を出し入れする方法を提供する。このシステムは、任意の利用可能な方法からプロセス間通信方法を選ぶアルゴリズムを含む(例えば、グラフのリンクに従った通信パスは、TCP/IP又はUNIXドメインソケットを使用するか、又は共有メモリを使用して、プロセス間でデータを渡すことができる)。
コンピューティングシステム104は、種々の型のデータベースシステムを含めた、データソース102を具現化することのできる様々なタイプのシステムから、データを受け取ることができる。データは、それぞれのフィールド(「属性」又は「列」とも呼ばれる)に対する値を有するレコードの集合を表すデータセットとして編成されたものであってよく、値は、場合によってはヌル値を含む。データソースからのデータを最初に読み取るとき、コンピューティングシステム104は通常、このデータソース内のレコードに関する何らかの初期フォーマット情報で起動する。状況によっては、データソースのレコード構造は、最初はわかっていないことがあり、その代わり、データソース又はデータの分析後に決定されることがある。レコードに関する初期情報は、例えば、異なる値を表すビットの数、レコード内のフィールドの順序、及び、ビットによって表される値のタイプ(例えば、ストリング、符号付き/符号なし整数)を含む可能性がある。
データ処理システム100がデータソース102内のデータに対して実行できる処理のタイプの一例は、データプロファイリングである。記憶されたデータセットは、様々な特性が事前にわかっていないデータを含む場合がある。例えば、データセットの値の範囲若しくは代表的な値、データセット内の種々のフィールド間の関係、又は種々のフィールド内の値の間の機能的依存性が、わかっていない場合がある。データプロファイリングは、このような特性を決定するために、関係する可能性のある任意の数のデータセットを調べることを含むことができる。コンピューティングシステム104はまた、データソース102内のデータをクレンジングすることや、データソース102に記憶されたデータセットについてのメタデータを管理することなど、様々なタスクを実行する場合がある。コンピューティングシステム104がアプリケーションをデータフローグラフとして実行するように構成された実施形態では、データプロファイリングは、例えば、データフローグラフ内のプロファイラコンポーネントノードによって実行されてよく、このプロファイラコンポーネントノードは、データフローリンクによって入力データセットに接続される入力ポートと、データフローリンクによって(データプロファイリングの結果を使用してタスクを実行するように構成された)ダウンストリームコンポーネントに接続される出力ポートとを有する。
データプロファイリングを実行するとき、コンピューティングシステム104は、データソース102からのデータを読み取り、プロファイリング要約情報を記憶する。プロファイリング要約情報を使用して様々なタイプの分析を実行し、種々のデータセット、及び種々のデータセット内の種々のフィールドを、特徴付けることができる。いくつかの実施形態では、プロファイリング要約情報は、特定のフィールド(例えば、選択されたデータセットの選択されたフィールド、又は全てのデータセットの全てのフィールド)内に現れる値のセンサスを含む。センサスは、フィールド内の異なる値の全てをリストし、異なる各値が現れる回数を定量化する。いくつかの実施形態では、センサスデータは、単一のデータ構造(フィールドで索引付けされていてもよい)に記憶され、他の実施形態では、センサスデータは、複数のデータ構造、例えば各フィールドにつき1つのデータ構造に記憶される。
プロファイリングされている特定のフィールドについてのセンサスデータは、エントリのリストとして編成されてよく、各エントリは、フィールドの識別子と、フィールド内に現れる値と、その値がそのフィールド内に現れるレコードの数のカウントとを含む。異なる値ごとにエントリがあり、したがって、あるエントリの各値は、他のエントリの値とは異なり、エントリの数は、フィールド内に現れる異なる値の数に等しい。フィールドの識別子は、プロファイリングされているフィールドを一意に識別する任意の値とすることができる。例えば、プロファイリングされているフィールドは、1からプロファイリング対象フィールド数までの範囲の整数索引を各フィールドに割り当てることによって、列挙されてよい。このような索引は、センサスデータ構造内にコンパクトに記憶することができる。異なるフィールドについてのセンサスデータが別々のデータ構造に記憶される場合でも、そのフィールドに対する特定のフィールド識別子をデータ構造の各エントリ内に含めることは、(例えば、処理モジュールにストリーミングされる種々のデータ構造からのエントリを区別するために)なお有用であろう。別法として、いくつかの実施形態では、異なるフィールドについてのセンサスデータが別々のデータ構造に記憶される場合、フィールドは、そのデータ構造については1度だけ記憶されればよく、各エントリは、このフィールドに暗黙的に関連付けられ、値及びカウントのみを含む。
図2に、コンピューティングシステム104上で実行されるプログラムによって実行されるセンサスベースのデータプロファイリング手順の例を示す。このプログラムは、正規化済みレコードのストリーム208を生成するための正規化モジュール200と、正規化済みレコードのストリーム208を処理してセンサスファイル210にするためのセンサス生成モジュール202と、センサスファイル210を分析してプロファイル結果を計算するためのセンサス処理モジュール204とを備える。正規化モジュール200は、テーブル206など、プロファイリングされるべき1又は2以上のデータセットを読み取る。テーブル206は、FIELD 1、FIELD 2、及びFIELD 3と名付けられた3つのフィールドを有し、テーブル206内の最初の少数の(最初の3つの行の)データレコードが、3つのフィールドの各々についてのそれぞれの値と共に示されている。正規化モジュール200は、特定のデータレコードを一連の正規化済みレコードに分解することによって正規化済みレコードを生成し、これらの正規化済みレコードはそれぞれ、フィールド索引及びデータ値を有する。フィールド索引は、特定のフィールドを一意に(且つ効率的に)識別するためにそのフィールドに割り当てられた索引値であり(例えば、1=FIELD 1、2=FIELD 2、3=FIELD 3)、データ値は、そのフィールドのデータレコードに含まれる対応する値である。この例では、テーブル206内の第1のデータレコードは、3つのそれぞれの正規化済みレコード内の、以下の(フィールド索引,データ値)ペアを生成することになる。すなわち、(1,A)、(2,M)、(3,X)である。センサス生成モジュール202は、ストリーム208内の正規化済みレコードからのデータ値を集約して、センサスファイル210を生成する。(図2では、センサスファイル210のエントリ内に示される値は、テーブル206内の最初の3つのデータレコードに対応し、これは、テーブル206内の追加のデータレコードからの正規化済みレコードがセンサス生成モジュール202によって処理されるにつれて更新されることになる。)
特定のデータセットについて、正規化済みレコードは任意の順序でストリーム208に挿入されてよい。この例では、ストリーム208は、データレコードがテーブル206内に出現するのに伴って、特定のデータレコードの正規化済みレコードの全てを含み、それに続いて次のデータレコードの正規化済みレコードの全てを含む。別法として、テーブル206は、フィールドごとに処理されてもよく、したがって、ストリームは、フィールドがテーブル206内に出現するのに伴って、特定のフィールドの正規化済みレコードの全てを含み、それに続いて次のフィールドの正規化済みレコードの全てを含む。より高次元のデータセットもまたこのようにして正規化されてよく、正規化済みレコードは、例えば、データセットを読み取るために又は結果的なストリームからセンサスを生成するために最も効率的となる順序に基づいて、出力ストリームに追加される。正規化済みレコードのストリーム208は、全ての正規化済みレコードが生成された後で、ダウンストリームセンサス生成モジュール202によって処理されるようにファイルに書き込まれてもよく、又は、正規化済みレコードのストリーム208は、(結果としてもたらされるパイプライン並列性を利用するために)生成されるにつれてダウンストリームセンサス生成モジュール202に提供されてもよい。
センサス生成モジュール202は、(例えば、ストリーム終了レコードによって示されるように)ストリーム208の終わりに達するまで、正規化済みレコードを処理する。モジュール202は、「センサスマッチング操作」と呼ばれる、あるタイプのセンサス操作を正規化済みレコードに対して実行して、この正規化済みレコード内のデータ値が、前に処理された正規化済みレコードからのデータ値と一致するかどうか判定する。モジュール202は、ストリーム208内の各正規化済みレコードにつき少なくとも1回、センサスマッチング操作を実行する。モジュール202は、センサスマッチング操作の結果に関連する情報を、メモリデバイス108内の作業メモリ空間に記憶された少なくとも1つのデータ構造に記憶する。データ構造に使用される作業メモリ空間は、ポインタによって参照されるデータのための任意のメモリを含めた、データ構造の任意のオーバーフローとデータ構造内の全ての情報との両方のためのメモリを含む。センサスマッチング操作によって前のデータ値との一致が検出された場合は、このデータ値に関連する記憶済みカウントがインクリメントされる。そうではなくセンサスマッチング操作によって前のデータ値との一致が検出されなかった場合は、新しいエントリがデータ構造に記憶される。
例えば、データ構造は、キーと値のペアを記憶することができる連想配列であってよく、一意のキーを使用してアレイ内の関連する値が検索される。この例では、キーは、正規化済みレコードからのデータ値であり、値は、センサスデータの総カウントまでインクリメントされることになるカウントである。カウントは、連想配列内にすでに存在するどんなキーとも一致しない特定のデータ値をそのキーとするキーと値のペアが正規化済みレコードについて作成されたときに1で開始し、別の正規化済みレコードが既存のキーと一致するデータ値を有するたびに1つインクリメントされる。モジュール202は、正規化済みレコードのデータ値を、種々の連想配列内で種々のフィールド(各正規化済みレコード内のフィールド索引によって決定される)について検索し、プロファイリングされているフィールドの各々に1つの連想配列が割り振られる。いくつかの実施形態では、プロファイリングされているフィールドの数は事前にわかっており、プロファイリング手順の初めに、空の連想配列(最小限の量の記憶空間のみを使用する)が各フィールドに割り振られる。
連想配列は、例えば、効率的なキーの検索及び関連する値の修正を提供する、ハッシュテーブル又は他のデータ構造を使用して実装することができる。キーと値のペアのキーとして使用されるデータ値は、データ値自体のコピーを記憶することができ、又は、作業メモリ内の異なる位置に記憶された(例えば、正規化済みレコードのコピーの中に記憶された)データ値へのポインタを記憶することができる。連想配列は、この場合、正規化済みレコードからのデータ値の記憶済みコピーと共に、さらには正規化済みレコード自体の全体と共に、センサスマッチング結果を記憶したデータ構造として集合的に考えることができる。正規化済みレコード内のデータ値へのポインタが連想配列に記憶される実施形態では、特定のキーを含む最初の正規化済みレコードのみが作業メモリに記憶されればよく、この特定のキーを含む後続の正規化済みレコードは、センサスマッチング操作後に作業メモリから削除されてよい。
以下の例では、プロファイリングされているフィールドについてのこれらの連想配列を「センサスアレイ」と呼び、キーと値のペアをセンサスアレイ内の「センサスエントリ」と呼ぶ。データプロファイリング手順の終わりに、センサス生成モジュール202によって生成されたセンサスアレイは、テーブル206内に現れる全ての異なるデータ値を別々のセンサスエントリ内に記憶しているとともに、そのデータ値がテーブル206の行内に現れる回数の総カウントを記憶していることになり、これらは、プロファイルされているデータレコードを表す。
データプロファイリング手順を実行するプログラム、又はこのプログラムの一部(例えばセンサス生成モジュール202)には、プログラムが使用することを許される、メモリデバイス108内の作業メモリ空間の最大量を設定するメモリ限度が与えられるものとすることができる。プログラムは、許される作業メモリ空間のほとんどを必要とするであろうセンサスアレイを記憶するために、また、センサスアレイよりもかなり少ない空間を必要とするであろう他の一時的な値を記憶するために、作業メモリ空間を使用することができる。追加のエントリをセンサスアレイに加えるのに利用可能な作業メモリ空間が十分にない可能性が高いこと、又は、追加のエントリを加えるのに利用可能な作業メモリ空間がもはやない(例えば最後のエントリが加えられたせいで)ことを、モジュール202が決定したとき、作業メモリ空間に対するオーバーフロー条件が満たされる。モジュール202は、センサスアレイのメモリサイズを測定することによって、この決定を行うことができる。このメモリサイズは、センサスアレイに使用される作業メモリ空間の量を表し、これは、センサスアレイを表すデータ構造に使用される任意のオーバーヘッドと、これらのデータ構造内の全ての情報(センサスアレイ内のポインタによって参照される任意のデータ値又は正規化済みレコードを含む)と、によって占められるメモリの総量を含む。次いで、モジュール202は、このメモリサイズをメモリ限度(又は他の閾値)と比較する。
いくつかの実施形態では、プログラムは、センサスアレイのメモリサイズがメモリ限度に近いときを検出するためのオーバーフロー閾値を設定する。センサスアレイのメモリサイズは、例えば、個々のセンサスアレイのサイズの合計を計算することによって、直接測定することができ、個々のセンサスアレイのサイズは、そのセンサスアレイによって占められる作業メモリ空間内のビットの数として測定される。別法として、センサスアレイのメモリサイズは、例えば、センサスアレイのメモリサイズを直接測定せずに、作業メモリ空間内に残された利用可能な空間の量を計算することによって、間接的に測定することもできる(例えば、割り振られたメモリアドレスブロックからの残されたメモリアドレスの範囲)。いくつかの実施形態では、プログラムは、他の値のための一部の空間を確保しておくために、メモリ限度より少し下のオーバーフロー閾値を設定する。いくつかの実施形態では、例えば、他の値に必要な空間がごくわずかである場合、及び/又は、コンピューティングシステム104が厳格なメモリ制限を課さず、メモリ限度を比較的短期間にわたって少量超えるのを許容する場合は、オーバーフロー閾値はメモリ限度に等しいものとすることができる。
オーバーフロー条件がトリガされた後、プログラムは、オーバーフロー処理手順を使用して、完成されたセンサスアレイを生成するのに必要な一部のデータを、ストレージデバイス110内のオーバーフローストレージ空間に記憶する。厳密に何がオーバーフローストレージ空間に記憶されるかは、使用されるオーバーフロー処理手順のタイプに依存する。後述するオーバーフロー処理手順の例では、プログラムは、オーバーフロー条件がトリガされた後に処理される各正規化済みレコードに対して、センサスマッチング操作を実行し続け、センサスマッチング操作の結果に関連する情報(すなわち、センサスエントリ内のインクリメントされたカウント、又は新しいセンサスエントリ)を、作業メモリ内のセンサスアレイの同じセットに、又は作業メモリ内のセンサスアレイの新しいセットに、記憶する。これについては後でより詳細に述べる。ストリーム208内の正規化済みレコードの処理中の何らかの時点でオーバーフロー条件がトリガされた場合、一部のデータは作業メモリ空間に記憶されることになり、一部のデータはオーバーフローストレージ空間に記憶されることになる。後述するオーバーフロー処理手順の例では、両方の位置のデータが何らかの方法で結合されて、完成されたセンサスアレイが生成される。各センサスアレイは、センサス処理モジュール204による処理に向けて、それ自体のセンサスファイル210内で出力される。この場合もやはり、使用される厳密な結合手順は、使用されるオーバーフロー処理手順のタイプに依存する。センサスファイル210は、センサス生成モジュール202から段階的に出力されてもよく、センサスアレイ、又はセンサスアレイエントリのセットは、それらが完成されるにつれて出力ポートに送られる。
後述するオーバーフロー処理手順の2つの例は両方とも、同じセンサス生成モジュール202によって使用することができる。あるモードでは、この手順のうちの一方を使用することができ、別のモードでは、この手順のうちの他方を使用することができる。モードは、例えばユーザによって決定することができ、或いは、どちらの手順が最も効率的となるかを推定するための何らかの初期分析(例えば、プロファイリングされているデータセットのサブセットに対して、又は同じ若しくは類似のデータセットについての履歴プロファイル情報に対して実行される)によって決定することができる。これらのオーバーフロー処理手順はまた、センサスマッチング操作に加えて、他のデータ処理にも適用され得る。不完全な結果のマージを可能にするデータ操作は、後述するオーバーフロー処理手順で実行されるように、作業メモリ空間に記憶された結果とオーバーフローストレージ空間に記憶された結果とを結合することと互換性があることになる。少なくともいくつかのケースをインプレースに扱うことができるデータ操作は、後述するオーバーフロー処理手順で実行されるように、データ構造をメモリ内のデータ構造内でインプレースに更新することと互換性があることになる。一部のデータをオーバーフローストレージ空間に記憶するのにかかったはずの時間を回避することによって、オーバーフロー処理手順の効率は、センサス操作や他のデータプロファイリング操作などのデータ操作(大量となり得る入来データを処理した後で、ユーザがその処理の結果を見られるようにするか、又はその処理に依存する追加の対話を実行できるようにするのに使用される)にとって特に有用である。
図3に、センサス生成モジュール202がセンサスアレイを生成するコンテキスト内で使用される第1のオーバーフロー処理手順による、センサス生成を示す。図4A〜4Cに、第1のオーバーフロー処理手順によるセンサス生成に対応するフローチャートを示す。図3及び4Aを参照すると、センサス生成モジュール202は、正規化済みレコードのストリーム300を受け取り、オーバーフロー処理手順の終わりまでに、プロファイリングされている各フィールドにつき、完成されたセンサスアレイ302を生成する。モジュール202は、ストリーム300内の正規化済みレコードの各々にわたるループ中を反復するのに伴って、次の正規化済みレコードを読み取る(400)(最初の反復では、最初の正規化済みレコードで開始する)。モジュール202は、作業メモリ空間306内で生成されているセンサスアレイ304のメモリサイズをチェックして(402)、オーバーフロー閾値に達したかどうか判定する。
オーバーフロー閾値に達していない場合は、モジュール202は、この正規化済みレコードに対してセンサスマッチング操作404を実行する。センサスマッチング操作404は、センサスアレイ304のうちの適切なセンサスアレイ(正規化済みレコード内のフィールド索引に対するセンサスアレイ)のキーの中で、正規化済みレコード内のデータ値との一致を検索する(406)ことを含む。キー(前の正規化済みレコードからのデータ値)との一致があった場合は、このキーに対応するカウントがインクリメントされる(408)。キーとの一致がなかった場合は、センサスアレイ304のうちの適切なセンサスアレイに新しいエントリが追加され(409)、キーがデータ値に設定されてカウントが1に設定される。
オーバーフロー閾値に達した場合は、モジュール202は、センサスアレイ304と、オーバーフローストレージ空間310に(前の反復中に)記憶された前の部分的センサスアレイ308があればそれらとに対して、マージ操作412を実行する。マージ操作412(後でより詳細に述べる)の結果は、部分的センサスアレイ308の新しいセットであり、各部分的センサスアレイ308は、所与のフィールドについてのマージされたセンサスアレイ内のキー(すなわちデータ値)の集合(union)に対応するエントリを、各キーのカウントの合計と共に含む。したがって、作業メモリ空間306内にあった部分的センサスアレイ304内の情報は、オーバーフローストレージ空間310に安全に記憶され、部分的センサスアレイ304は今や作業メモリ空間306から削除されてよく(414)、次の正規化済みレコードに対してセンサスマッチング操作404を実行するためにより多くの作業メモリ空間306が解放される。
反復の終わりに、モジュール202は、ストリーム300の終わりに達した(これにより、ストリーム内のレコードごとに反復するループが終了する)かどうか判定する(416)。終わりに達していない場合は、次の正規化済みレコードを読み取る(400)ことによって別の反復が開始される。終わりに達した場合は、モジュール202は、反復のいずれかの間にオーバーフローが起こったかどうか判定する(418)。オーバーフローが起こらなかった場合は、モジュール202は、作業メモリ空間306内のちょうど(now)、完成したセンサスアレイ304の各々を、出力ポートに送る(419)。オーバーフローが起こった場合は、モジュール202は、作業メモリ空間306に記憶された部分的センサスアレイ304と、オーバーフローストレージ空間310に記憶された部分的センサスアレイ308とに対して、マージ操作の修正バージョン412’を実行して、得られたマージ済みセンサスアレイを出力ポートに送る。マージ操作412については図4Bにおいて、より詳細に述べ、マージ操作412’については図4Cにおいて、より詳細に述べる。
図4Bを参照すると、作業メモリ空間306内の部分的センサスアレイ(「メモリアレイ」と呼ぶ)のセットを、オーバーフローストレージ空間310内の部分的センサスアレイ(「記憶済みアレイ」と呼ぶ)のセットとマージするための、マージ操作412の例を示している。マージ操作412は、フィールドにわたって反復する(すなわち、1からフィールド数までに及ぶ「現フィールド」を参照するループカウンタを用いて)外側ループと、現フィールド反復のフィールドに対する記憶済みアレイ内のエントリにわたって反復する(すなわち、1からエントリ数までに及ぶ「現エントリ」を参照するループカウンタを用いて)内側ループとを含む。内側ループは、記憶済みアレイ内の現エントリのデータ値を、現フィールド反復のフィールドに対するメモリアレイ内で検索する(420)ことによって開始する。一致が検出されなかった場合、内側ループは、記憶済みアレイ内の現エントリからのカウントと、メモリアレイ内の一致させたエントリからのカウントとを合計し(422)、得られた総カウントをメモリアレイ内の一致させたエントリに記憶する(前のカウントを上書きする)。この新しい総カウントは作業メモリ内のどんな追加の空間も必要とすることにならないので、この操作は、使用される作業メモリ空間の量を増加させることはない。種々の実施形態では、メモリアレイと記憶済みアレイとのどちらかの中で検索して、このどちらかを使用して総カウントを累算することもできるが、記憶済みアレイにわたって反復してメモリアレイ内で検索することによって、検索をより効率的に実行することができる(メモリデバイス108へはストレージデバイス110よりも効率的にアクセスできるので)。一致が検出されなかった場合は、内側ループは、記憶済みアレイ内の現エントリをオーバーフローストレージ空間310内の新しいセンサスアレイに追加する(424)。この新しいセンサスアレイは、マージ操作412の後で前の記憶済みアレイに置き換わることになる新しいセンサスアレイのセットの一部である。そして内側ループは、記憶済みアレイ内の次のエントリのデータ値をメモリアレイ内で検索する(420)ことによって、新しい内側ループ反復を開始する。記憶済みアレイ内の最後のエントリに達した後、内側ループは終了する(426)。外側ループは、更新済みメモリアレイを新しいセンサスアレイに付加する(428)ことを含み、したがって、新しいセンサスアレイの完全なセットは、マージ操作412からの一致させたエントリと一致させなかったエントリの両方を表すことになる。最後のフィールドに達した後、外側ループは終了する(430)。
図4Cに、メモリアレイの最後のセットを記憶済みアレイとマージするために実行される、マージ操作の修正バージョン412’の例を示す。この例では、唯一の違いは以下の点である。記憶済みアレイ内の現エントリをオーバーフローストレージ空間310内の新しいセンサスアレイに追加する(424)代わりに、操作412’は、(例えば、やはりオーバーフローストレージ空間310に記憶されていてよい出力センサスファイルに書き込むことによって)記憶済みアレイ内の現エントリをモジュール202の出力ポートに出力する(424’)。更新済みメモリアレイを記憶済みアレイに付加する(428)代わりに、操作412’は、(例えば、やはりオーバーフローストレージ空間310に記憶されていてよい出力センサスファイルに書き込むことによって)更新済みメモリアレイをモジュール202の出力ポートに送る(428’)。
要約すると、第1のオーバーフロー処理手順は、部分的センサスアレイをオーバーフローストレージに移動して、全ての新しいレコード(オーバーフローストレージに移動された部分的センサスアレイとマージされることになる、作業メモリ内の新しい部分的センサスアレイ内の)の処理を継続することによって、作業メモリに対するオーバーフロー条件に対処する。第1のオーバーフロー処理手順は、部分的センサスアレイをオーバーフローストレージにスピルするのを効率的に管理する。第2のオーバーフロー処理手順は、同様に全ての新しいレコードの処理を継続しながらオーバーフロー条件に対処することになるが、部分的センサスアレイの代わりに、一致しないレコードをオーバーフローストレージにスピルするのを効率的に管理するように構成されることになる。
図5に、センサス生成モジュール202がセンサスアレイを生成するコンテキスト内で使用される第2のオーバーフロー処理手順による、センサス生成を示す。図6に、第2のオーバーフロー処理手順によるセンサス生成に対応するフローチャートを示す。図5及び6を参照すると、センサス生成モジュール202は、正規化済みレコードのストリーム500を受け取り、オーバーフロー処理手順の終わりまでに、プロファイリングされている各フィールドにつき、完成されたセンサスアレイ502を生成する。モジュール202は、第1のパスでストリーム500内の正規化済みレコードの各々にわたるループ中を反復するのに伴って、又は、1若しくは2以上の追加のパスでオーバーフローストレージ空間504内の一時レコードストア503に一時的に記憶された正規化済みレコードのセットの各々にわたるループ中を反復するのに伴って、次の正規化済みレコードを読み取る(600)。1又は2以上のパスで実行されるステップについてはより詳細に後述するが、本質的には、各パスは、閾値条件が満たされるまで作業メモリ空間306を埋め、次いで、閾値条件が満たされた後で、全ての一致するレコードをインプレースに処理し、全ての一致しないレコードをスピルすることを含む。モジュール202は、この正規化済みレコードに対してセンサスマッチング操作602を実行する。
センサスマッチング操作602は、作業メモリ空間508内で生成されているセンサスアレイ506のうちの適切なセンサスアレイ(正規化済みレコード内のフィールド索引に対するセンサスアレイ)のキーの中で、正規化済みレコード内のデータ値との一致(605)を検索する(604)ことを含む。キー(前の正規化済みレコードからのデータ値)との一致があった場合は、このキーに対応するカウントがインクリメントされる(606)。このインクリメント(606)は、作業メモリ空間508をそれ以上使用することなく行うことができ(例えば、インプレース操作を使用して、一致させたエントリのカウントをインクリメントして)、したがって、オーバーフロー閾値に達したか否かに依存しない。キーとの一致がなかった場合は、次のアクションは、センサスアレイ506のメモリサイズをチェックしてオーバーフロー閾値に達したかどうか判定する(607)ことの結果に依存する。オーバーフロー閾値に達していない場合は、センサスアレイ506のうちの適切なセンサスアレイに新しいエントリが追加され(608)、キーがデータ値に設定されてカウントが1に設定される。オーバーフロー閾値に達した場合は、モジュール202は、正規化済みレコードをオーバーフローストレージ空間504内の新しい一時レコードストア503に記憶する(609)。一時レコードストア503は、正規化済みレコードを記憶する単一のファイル(若しくは他のデータ構造)であってもよく、又は、フィールド索引(若しくは他の特性)によって正規化済みレコードへのアクセスを提供する複数のファイル(若しくは他のデータ構造)であってもよい。異なるパスごとの異なる正規化済みレコードセットを含む、異なる一時レコードストア503がある。
モジュール202は、ストリーム500を通る第1のパスの終わりに達した(これにより、ストリーム内のレコードごとに反復するループが終了する)かどうか、又は一時レコードストア503の1つを通るパスの終わりに達したかどうか判定する(610)。パスの終わりに達していない場合は、次の正規化済みレコードを読み取る(600)ことによって別の反復が開始する。パスの終わりに達した場合は、モジュール202は、現パスについての前の反復のいずれかの間にオーバーフローが起こったかどうか判定する(611)。オーバーフローが起こらなかった場合は、モジュール202は、作業メモリ空間508内のちょうど完成したセンサスアレイ506の各々を、出力ポートに送る(613)。オーバーフローが起こった場合は、モジュール202は、いずれかの一時レコードストア503が残っているかどうかチェックして判定する(612)。
少なくとも1つの一時レコードストア503が残っている場合は、モジュール202は、このストア503内の正規化済みレコードを処理するために作業メモリ内の空間を解放することを開始する。これは、フィールドにわたって反復し(すなわち、1からフィールド数までに及ぶ「現フィールド」を参照するループカウンタを用いて)、部分的センサスアレイ506のうちの適切な部分的センサスアレイを、オーバーフローストレージ空間504に(前の反復中に)記憶されたいずれかの部分的センサスアレイ510のうちの対応する部分的センサスアレイ(同じフィールド索引を有する)に付加する(614)ことによって行う。最後のフィールドに達した後、ループは終了する(615)。したがって、作業メモリ空間508内の部分的センサスアレイ506内の情報は、オーバーフローストレージ空間504に安全に記憶され、部分的センサスアレイ506は作業メモリ空間508内から削除されてよく(616)、より多くの作業メモリ空間508が解放されて、残りの一時レコードストア503から次の正規化済みレコードが読み取られ(600)、この正規化済みレコードに対してセンサスマッチング操作602が実行される。
部分的センサスアレイ506及び部分的センサスアレイ510は、マージ操作が実行される必要なしに、単純に付加されてよい。というのは、センサスアレイ510内のキーと一致したはずのデータ値を有するどんな正規化済みレコードも、これらのセンサスアレイ510が作業メモリ空間508内で生成されていたときに処理されたはずであり、したがって、これらのデータ値はどれも、作業メモリ空間508内に現在あるセンサスアレイ506のうちのどの中にも存在し得ないからである。部分的センサスアレイ506及び部分的センサスアレイ510中のエントリは、そうすることが役立つなら、1又は2以上の他のデータ構造にソート又は再構成されてもよい(例えば、これらのエントリへのアクセスの効率のために)が、個々のエントリは、特定のデータ値についての情報を統合するために結合される必要はない。
どのようにモジュール202がストリーム500からのレコードを処理するかについての一例では、ストリーム500からの正規化済みレコードの第1のサブセット512が処理されてセンサスアレイ506のメモリサイズがオーバーフロー閾値まで拡張された後、正規化済みレコードの第2のサブセット514が処理されて、キーに一致するデータ値(陰影のないボックスとして示されるレコードからの)について、センサスアレイ506のカウントがインクリメントし続けられるか、又は、正規化済みレコードの第3のサブセット516(陰影付きのボックスとして示される)が一時レコードストア503に記憶される。第3のサブセット516は、第2のサブセット514のサブセットでもあることに留意されたい。このプロセスが継続し、ストリーム500は一時レコードストア503で置き換えられ、現在の一時レコードストア503の中を反復する間に新しい(より小さい)一時レコードストア503’が生成される可能性がある。
チェック(612)の後で一時レコードストア503が残っていない場合は、モジュール202は、フィールドにわたって反復し(すなわち、1からフィールド数まで)、センサスアレイ506のうちの適切なセンサスアレイを作業メモリ空間508から出力ポートに送り(618)、センサスアレイ510のうちの適切なセンサスアレイをオーバーフローストレージ空間504から出力ポートに送る(620)。最後のフィールドに達した後、ループは終了する(622)。センサス生成のこの部分でセンサスアレイ506及び510を出力ポートに送ることにより、(種々のフィールドの部分的センサスアレイが準備でき次第すぐに出力されるのとは対照的に)センサスアレイをフィールド索引順に出力することができる。これは、例えば、センサスアレイがその順序で提供されることを必要とするダウンストリーム計算がセンサス処理モジュール204の後にある場合に、有用であることがある。別法として、順序付けられた出力を必ずしも必要としないセンサス生成の他の実施形態では、作業メモリ空間508からの部分的センサスアレイ506をオーバーフローストレージ空間504に記憶するのを回避することができ、その代わり、単に、部分的センサスアレイ506を作業メモリ空間508から出力ポートに直接出力することができる(それらを付加するときにマージ操作が実行される必要がなかったのと同じ理由で)。
要約すると、第2のオーバーフロー処理手順は、一致しないレコードをオーバーフローストレージに移動して全ての新しいレコードの処理を継続する(一致するレコードがあればそれについては作業メモリ内にすでにあるセンサスアレイを更新する)ことによって、作業メモリに対するオーバーフロー条件に対処する。第2のオーバーフロー処理手順は、一致しないレコードをオーバーフローストレージにスピルするのを効率的に管理する。
第1と第2のオーバーフロー処理手順の間にはいくつかの違いがあり、これらの違いにより、場合によって一方又は他方がより適切に(すなわちより効率的に)なることがある。第1のオーバーフロー処理手順はレコードをオーバーフローストレージにスピルする必要がないが、第2のオーバーフロー処理手順はその必要がある。しかし、第2のオーバーフロー処理手順はセンサスアレイをマージする必要がないが、第1のオーバーフロー処理手順はその必要がある。また、第2のオーバーフロー処理手順は、オーバーフロー条件の後、入力ストリーム内のレコードの完全なパスを最後まで読み取るまで作業メモリ内で同じセンサスアレイを保持するので、値の初期分散が、より後のどの値が一致する又は一致しないかを決定する。したがって、所与のフィールド内の繰り返される値(もしあれば)の分散が入力ストリーム中の全てのレコードにわたって比較的均一である状況では、第2のオーバーフロー処理手順は、効率的なスピルを可能にする傾向があるであろう。第1のオーバーフロー処理手順では、センサスアレイがオーバーフローストレージにスピルされるたびに、値の完全に新しいセットを一致させることができる。したがって、入力ストリーム内の全てのレコードにわたって1又は2以上のフィールド内の繰り返される値の分散に大きな変化がある状況では、第1のオーバーフロー処理手順は、効率的なスピルを可能にする傾向があるであろう。
他のオーバーフロー処理手順も可能である。例えば、前述の第1と第2の手順間のハイブリッドは、センサスアレイに一致しない正規化済みレコードをオーバーフローストレージ空間に記憶することによって、オーバーフロー条件への対処を開始することができる(すなわち第2の手順に従って)。次いで、一致しない記憶された正規化済みレコードの部分が特定の閾値よりも大きくなった場合、この手順は、作業メモリ空間中の部分的センサスアレイをオーバーフローストレージ空間に移動し(前に記憶された部分的センサスアレイがあれば、それらとマージし)、現パス中の正規化済みレコードの処理を継続することができる(すなわち第1の手順に従って)。第1の手順のこのパスが終了した後、この手順は、同じハイブリッドプロセスを使用して、オーバーフローストレージ空間に記憶された正規化済みレコードを処理することによって継続する(すなわち、オーバーフロー条件に達したとき、閾値に達するまで一致しない正規化済みレコードを記憶するのを開始する)ことになる。
前述の技法は、適切なソフトウェアを実行するコンピューティングシステムを使用して実装することができる。例えば、ソフトウェアは、1又は2以上のプログラムされた又はプログラム可能なコンピューティングシステム(分散型、クライアント/サーバ、又はグリッドなど、様々なアーキテクチャのものであり得る)上で実行される1又は2以上のコンピュータプログラム中の手順を含むことができ、各コンピューティングシステムは、少なくとも1つのプロセッサと、少なくとも1つのデータストレージシステム(揮発性及び/又は不揮発性の、メモリ及び/又はストレージ要素を含む)と、少なくとも1つのユーザインタフェース(少なくとも1つの入力デバイス又はポートを使用して入力を受け取るため、及び少なくとも1つの出力デバイス又はポートを使用して出力を提供するための)とを備える。ソフトウェアは、データフローグラフの設計、構成、及び実行に関係するサービスを例えば提供するより大きいプログラムの、1又は2以上のモジュールを含むことができる。プログラムのモジュール(例えば、データフローグラフの要素)は、データリポジトリに記憶されたデータモデルに従う、データ構造又は他の編成されたデータとして実装することができる。プログラムのモジュールは、ハッシュテーブルやフラットファイルなどの様々なデータ構造のいずれかにアレイデータを記憶することができ、これらのデータ構造は、例えば、索引付け及び/又は圧縮されてもよい。
ソフトウェアは、CD−ROM又は他のコンピュータ可読媒体(例えば、汎用若しくは専用コンピューティングシステム若しくはデバイスによって読取り可能な)など、有形の非一時的媒体上で提供されてもよく、或いは、ネットワークの通信媒体を介してコンピューティングシステムの有形の非一時的媒体に送信(例えば、伝搬信号中で符号化)されて、そこで実行されてもよい。処理の一部又は全ては、専用コンピュータ上で実行されてよく、又は、コプロセッサ若しくはフィールドプログラマブルゲートアレイ(FPGA)若しくは専用の特定用途向け集積回路(ASIC)など、専用ハードウェアを使用して実行されてよい。処理は分散方式で実装されてもよく、その場合、ソフトウェアによって指定される計算の異なる部分が、異なるコンピューティング要素によって実行される。このような各コンピュータプログラムは、汎用又は専用プログラム可能コンピュータによってアクセス可能なストレージデバイスのコンピュータ可読ストレージ媒体(例えば、固体メモリ若しくは媒体、又は磁気若しくは光学媒体)に記憶されるか又はダウンロードされることが好ましく、それにより、ストレージデバイス媒体がコンピュータによって読み取られたとき、本明細書に記載の処理が実行されるようにコンピュータが構成及び操作される。本発明のシステムはまた、コンピュータプログラムで構成された有形の非一時的媒体として実装されるものと考えることもでき、その場合、このように構成された媒体は、特定の事前定義された方式でコンピュータを動作させて、本明細書に記載の処理ステップの1又は2以上を実行させる。
本発明のいくつかの実施形態について述べた。しかし、以上の記述は、本発明の範囲を例示するものとし、限定するものとはしないことを理解されたい。本発明の範囲は、後続の特許請求の範囲によって定義される。したがって、他の実施形態もまた、後続の特許請求の範囲内である。例えば、本発明の範囲を逸脱することなく、様々な修正を加えることができる。加えて、前述のステップのいくつかは、順序に依存しないこともあり、したがって、述べた順序とは異なる順序で実行されてもよい。

Claims (70)

  1. 作業メモリ空間を提供するメモリデバイスと、
    オーバーフローストレージ空間を提供するストレージデバイスと、
    複数のデータユニットを処理して結果情報を生成するように構成された少なくとも1つのプロセッサとを備えるコンピューティングシステムであって、前記処理が、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、前記データ操作の結果に関連する情報を、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報を前記オーバーフローストレージ空間に記憶して前記作業メモリ空間の少なくとも一部を解放し、前記複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対して前記データ操作を実行し、前記データ操作の結果に関連する情報を、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットに記憶すること、並びに、
    前記第1及び第2のセットを含む、1又は2以上のデータ構造の複数のセットを結合して前記結果情報を生成することを含み、
    前記データ操作の結果に関連する前記情報を1又は2以上のデータ構造のセットに記憶することが、少なくとも1つのデータユニットに対して、1又は2以上のデータ構造の前記セットに使用される前記作業メモリ空間の量を増加させずに1又は2以上のデータ構造の前記セット内の情報を変更する操作を実行することを含む、コンピューティングシステム。
  2. 前記作業メモリ空間に対するオーバーフロー条件が、1又は2以上のデータ構造の前記第1のセットに使用される前記作業メモリ空間の量が所定の閾値以上である場合に満たされる、請求項1に記載のコンピューティングシステム。
  3. 前記処理がさらに、前記オーバーフロー条件が満たされた後、且つ前記データユニットの第2のサブセットの各データユニットに対してデータ操作を実行する前に、1又は2以上のデータ構造の前記第1のセットを前記オーバーフローストレージ空間に記憶し、1又は2以上のデータ構造の前記第1のセットを前記作業メモリ空間から削除することを含む、請求項1に記載のコンピューティングシステム。
  4. 1又は2以上のデータ構造の複数のセットを結合することが、前記第1のセットからの少なくとも1つのデータ構造を前記第2のセットからの少なくとも1つのデータ構造とマージすることを含む、請求項1に記載のコンピューティングシステム。
  5. 前記第1のセットからの少なくとも1つのデータ構造を前記第2のセットからの少なくとも1つのデータ構造とマージすることが、1又は2以上のデータ構造の前記第1のセットからの前記データ構造内の第1のキーを、1又は2以上のデータ構造の前記第2のセットからの前記データ構造内の第2のキーと一致させ、前記第1のキーに関連する値と前記第2のキーに関連する値とに対して集約操作を実行することを含む、請求項4に記載のコンピューティングシステム。
  6. 前記処理がさらに、オーバーフロー条件が満たされた後、且つデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行する前に、前記複数のデータユニットからのデータユニットの第3のサブセットの各データユニットに対してデータ操作を実行し、前記データ操作の結果に関連する情報を、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶することを含む、請求項1に記載のコンピューティングシステム。
  7. 前記データユニットの第2のサブセットが、前記データユニットの第3のサブセットの前記データユニットのサブセットである、請求項6に記載のコンピューティングシステム。
  8. 前記処理がさらに、データユニットの第3のサブセットの第1のデータユニットに対してデータ操作を実行した後で、前記データ操作の結果に関連する情報を(1)作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶するか、それとも(2)オーバーフローストレージ空間に記憶するかを決定することを含む、請求項6に記載のコンピューティングシステム。
  9. 1又は2以上のデータ構造のセット中の情報を変更する操作が、作業メモリ空間内の位置に記憶された値を、前記作業メモリ空間内の同じ位置に記憶された異なる値で上書きするインプレースメモリ操作を含む、請求項8に記載のコンピューティングシステム。
  10. データ操作の結果に関連する情報をオーバーフローストレージ空間に記憶することが、第1のデータユニットの少なくとも一部の内容を前記オーバーフローストレージ空間に記憶することを含む、請求項8に記載のコンピューティングシステム。
  11. 第1のデータユニットに対してデータ操作を実行することが、前記第1のデータユニット内のキーを1又は2以上のデータ構造の第1のセット中の1又は2以上のキーと比較することを含み、前記比較の結果が一致している場合は、前記データ操作の結果に関連する情報が、作業メモリ空間に記憶された1又は2以上のデータ構造の前記第1のセットに記憶され、前記比較の結果が一致していない場合は、前記データ操作の結果に関連する前記情報がオーバーフローストレージ空間に記憶される、請求項8に記載のコンピューティングシステム。
  12. 前記処理がさらに、データソースから複数のデータユニットを生成することを含み、各データユニットが、前記データソースのフィールドの識別子と、前記データソースのレコード内の前記フィールドに現れる値とを含む、請求項1に記載のコンピューティングシステム。
  13. データ操作が、複数のデータユニットに含まれる値を、情報の集約元となる一致するデータユニットを選択するためのキーとして使用して、前記データユニットからの情報を集約することを含む、請求項12に記載のコンピューティングシステム。
  14. メモリデバイスが揮発性メモリデバイスを含む、請求項1に記載のコンピューティングシステム。
  15. ストレージデバイスが不揮発性ストレージデバイスを含む、請求項1に記載のコンピューティングシステム。
  16. 作業メモリ空間を提供する手段と、
    オーバーフローストレージ空間を提供する手段と、
    複数のデータユニットを処理して結果情報を生成する手段とを備えるコンピューティングシステムであって、前記処理が、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、前記データ操作の結果に関連する情報を、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報を前記オーバーフローストレージ空間に記憶して前記作業メモリ空間の少なくとも一部を解放し、前記複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対して前記データ操作を実行し、前記データ操作の結果に関連する情報を、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットに記憶すること、並びに、
    前記第1及び第2のセットを含む、1又は2以上のデータ構造の複数のセットを結合して前記結果情報を生成することを含み、
    前記データ操作の結果に関連する前記情報を1又は2以上のデータ構造のセットに記憶することが、少なくとも1つのデータユニットに対して、1又は2以上のデータ構造の前記セットに使用される前記作業メモリ空間の量を増加させずに1又は2以上のデータ構造の前記セット中の情報を変更する操作を実行することを含む、コンピューティングシステム。
  17. 複数のデータユニットを処理して結果情報を生成する方法であって、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、前記データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶するステップと、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶して前記作業メモリ空間の少なくとも一部を解放し、前記複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対して前記データ操作を実行し、前記データ操作の結果に関連する情報を、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットに記憶するステップと、
    前記第1及び第2のセットを含む1又は2以上のデータ構造の複数のセットを結合して前記結果情報を生成するステップとを含み、
    前記データ操作の結果に関連する前記情報を1又は2以上のデータ構造のセットに記憶するステップが、少なくとも1つのデータユニットに対して、1又は2以上のデータ構造の前記セットに使用される前記作業メモリ空間の量を増加させずに1又は2以上のデータ構造の前記セット中の情報を変更する操作を実行するステップを含む、方法。
  18. 複数のデータユニットを処理して結果情報を生成するための、コンピュータ可読媒体に記憶されたソフトウェアであって、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、前記データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶して前記作業メモリ空間の少なくとも一部を解放し、前記複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対して前記データ操作を実行し、前記データ操作の結果に関連する情報を、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットに記憶すること、並びに、
    前記第1及び第2のセットを含む1又は2以上のデータ構造の複数のセットを結合して前記結果情報を生成すること、をコンピューティングシステムに行わせるための命令を含み、
    前記データ操作の結果に関連する前記情報を1又は2以上のデータ構造のセットに記憶することが、少なくとも1つのデータユニットに対して、1又は2以上のデータ構造の前記セットに使用される前記作業メモリ空間の量を増加させずに1又は2以上のデータ構造の前記セット中の情報を変更する操作を実行することを含む、ソフトウェア。
  19. 作業メモリ空間を提供するメモリデバイスと、
    オーバーフローストレージ空間を提供するストレージデバイスと、
    複数のデータユニットを処理して結果情報を生成するように構成された少なくとも1つのプロセッサとを備えるコンピューティングシステムであって、前記処理が、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、前記データ操作の結果に関連する情報を、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること、及び、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、前記複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対して前記データ操作を実行し、前記データ操作の結果に関連する情報を(1)前記作業メモリ空間に記憶された1又は2以上のデータ構造の前記第1のセットに記憶するか、それとも(2)前記オーバーフローストレージ空間に記憶するかを決定することを含む、コンピューティングシステム。
  20. 前記作業メモリ空間に対するオーバーフロー条件が、1又は2以上のデータ構造の前記第1のセットに使用される前記作業メモリ空間の量が所定閾値以上である場合に満たされる、請求項19に記載のコンピューティングシステム。
  21. データ操作が各データユニット内のキー値に少なくとも部分的に基づき、決定することが、第1のセットのデータ構造の少なくとも1つの中で少なくとも1つのキー値を検索して、(1)作業メモリ空間中の1又は2以上のデータ構造の前記第1のセットのデータ構造内の前記キー値に関連する情報を更新するか、それとも(2)前記キー値に関連する情報をオーバーフローストレージ空間に記憶するかを決定することを含む、請求項19に記載のコンピューティングシステム。
  22. データ操作が、作業メモリ空間内の位置に記憶された値を、前記作業メモリ空間内の同じ位置に記憶された異なる値で上書きするインプレースメモリ操作を含む、請求項19に記載のコンピューティングシステム。
  23. データ操作の結果に関連する情報をオーバーフローストレージ空間に記憶することが、前記データ操作が実行されるデータユニットの少なくとも一部の内容を前記オーバーフローストレージ空間に記憶することを含む、請求項19に記載のコンピューティングシステム。
  24. 第1のデータユニットに対してデータ操作を実行することが、前記第1のデータユニット内のキーを1又は2以上のデータ構造の第1のセット中の1又は2以上のキーと比較することを含み、前記比較の結果が一致している場合は、前記データ操作の結果に関連する情報が、作業メモリ空間に記憶された1又は2以上のデータ構造の前記第1のセットに記憶され、前記比較の結果が一致していない場合は、前記データ操作の結果に関連する前記情報がオーバーフローストレージ空間に記憶される、請求項19に記載のコンピューティングシステム。
  25. 前記処理がさらに、複数のデータユニットをデータソースから生成することを含み、各データユニットが、前記データソースのフィールドの識別子と、前記データソースのレコード内で前記フィールドに現れる値とを含む、請求項19に記載のコンピューティングシステム。
  26. データ操作が、複数のデータユニットに含まれる値を、情報の集約元となる一致するデータユニットを選択するためのキーとして使用して、前記データユニットからの情報を集約することを含む、請求項25に記載のコンピューティングシステム。
  27. 複数のデータユニットを生成することが、データソースの少なくとも第1のフィールドと、前記データソースの少なくとも第2のフィールドとについてデータユニットを生成することを含む、請求項25に記載のコンピューティングシステム。
  28. 第2のサブセットの各データユニットに対してデータ操作を実行することが、第1のデータユニットに対して実行された前記データ操作の結果に関連する情報を1又は2以上のデータ構造の第1のセットに記憶し、第2のデータユニットに対して実行された前記データ操作の結果に関連する情報をオーバーフローストレージ空間に記憶することを含む、請求項27に記載のコンピューティングシステム。
  29. 第1のデータユニット及び第2のデータユニットが、データソースの同じフィールドについての、それぞれの識別子を含む、請求項28に記載のコンピューティングシステム。
  30. メモリデバイスが揮発性メモリデバイスを含む、請求項19に記載のコンピューティングシステム。
  31. ストレージデバイスが不揮発性ストレージデバイスを含む、請求項19に記載のコンピューティングシステム。
  32. 作業メモリ空間を提供する手段と、
    オーバーフローストレージ空間を提供する手段と、
    複数のデータユニットを処理して結果情報を生成する手段とを備えるコンピューティングシステムであって、前記処理が、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、前記データ操作の結果に関連する情報を、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること、及び、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、前記複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対して前記データ操作を実行し、前記データ操作の結果に関連する情報を(1)前記作業メモリ空間に記憶された1又は2以上のデータ構造の前記第1のセットに記憶するか、それとも(2)前記オーバーフローストレージ空間に記憶するかを決定することを含む、コンピューティングシステム。
  33. 複数のデータユニットを処理して結果情報を生成する方法であって、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、前記データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶するステップと、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、前記複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対して前記データ操作を実行し、前記データ操作の結果に関連する情報を(1)前記作業メモリ空間に記憶された1又は2以上のデータ構造の前記第1のセットに記憶するか、それとも(2)ストレージデバイスのオーバーフローストレージ空間に記憶するかを決定するステップとを含む方法。
  34. 複数のデータユニットを処理して結果情報を生成するための、コンピュータ可読媒体に記憶されたソフトウェアであって、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、前記データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること、及び、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、前記複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対して前記データ操作を実行し、前記データ操作の結果に関連する情報を(1)前記作業メモリ空間に記憶された1又は2以上のデータ構造の前記第1のセットに記憶するか、それとも(2)ストレージデバイスのオーバーフローストレージ空間に記憶するかを決定すること、をコンピューティングシステムに行わせるための命令を含むソフトウェア。
  35. 作業メモリ空間を提供するメモリデバイスと、
    オーバーフローストレージ空間を提供するストレージデバイスと、
    複数のデータユニットを処理して結果情報を生成するように構成された少なくとも1つのプロセッサとを備えるコンピューティングシステムであって、前記処理が、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行することであって、前記データ操作が、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットの少なくとも1つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第1のセットの少なくとも1つのデータ構造内の情報を修正し、前記値が検出されなかった場合に、前記第1のセットの少なくとも1つのデータ構造に情報を追加することを含むものであること、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報を前記オーバーフローストレージ空間に記憶して、前記作業メモリ空間の少なくとも一部を解放し、前記複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対して前記データ操作を実行することであって、前記データ操作が、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットの少なくとも1つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第2のセットの少なくとも1つのデータ構造内の情報を修正することを含むものであること、並びに、
    前記第1及び第2のセットを含む、1又は2以上のデータ構造の複数のセットを結合して前記結果情報を生成することを含む、コンピューティングシステム。
  36. 前記作業メモリ空間に対するオーバーフロー条件が、1又は2以上のデータ構造の前記第1のセットに使用される前記作業メモリ空間の量が所定閾値以上である場合に満たされる、請求項35に記載のコンピューティングシステム。
  37. 前記処理がさらに、前記オーバーフロー条件が満たされた後、且つ前記データユニットの第2のサブセットの各データユニットについて検索を実行する前に、1又は2以上のデータ構造の前記第1のセットを前記オーバーフローストレージ空間に記憶し、1又は2以上のデータ構造の前記第1のセットを前記作業メモリ空間から削除することを含む、請求項35に記載のコンピューティングシステム。
  38. 1又は2以上のデータ構造の複数のセットを結合することが、前記第1のセットからの少なくとも1つのデータ構造を前記第2のセットからの少なくとも1つのデータ構造とマージすることを含む、請求項35に記載のコンピューティングシステム。
  39. 前記第1のセットからの少なくとも1つのデータ構造を前記第2のセットからの少なくとも1つのデータ構造とマージすることが、1又は2以上のデータ構造の前記第1のセットからの前記データ構造内の第1のキーを、1又は2以上のデータ構造の前記第2のセットからの前記データ構造内の第2のキーと一致させ、前記第1のキーに関連する値と前記第2のキーに関連する値とに対して集約操作を実行することを含む、請求項38に記載のコンピューティングシステム。
  40. 前記処理がさらに、オーバーフロー条件が満たされた後、且つ前記データユニットの第2のサブセットの各データユニットについて検索を実行する前に、前記複数のデータユニットからのデータユニットの第3のサブセットの各データユニットに対して、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットの少なくとも1つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第1のセットの前記少なくとも1つのデータ構造内の情報を修正することを含む、請求項35に記載のコンピューティングシステム。
  41. 前記データユニットの第2のサブセットが、前記データユニットの第3のサブセットの前記データユニットのサブセットである、請求項40に記載のコンピューティングシステム。
  42. 前記情報を修正することが、前記作業メモリ空間内の位置に記憶された値を、前記作業メモリ空間内の同じ位置に記憶された異なる値で上書きするインプレースメモリ操作を実行することを含む、請求項35に記載のコンピューティングシステム。
  43. 前記処理がさらに、データソースから前記複数のデータユニットを生成することを含み、各データユニットが、前記データソースのフィールドの識別子と、前記データソースのレコード内の前記フィールドに現れる値とを含む、請求項35に記載のコンピューティングシステム。
  44. 1又は2以上のデータ構造の前記第1のセットが、キーと値のペアのエントリの、複数の連想配列を含む、請求項43に記載のコンピューティングシステム。
  45. 前記作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットの少なくとも1つのデータ構造内でデータユニット内の値を検索することが、キーと値のペアのエントリの連想配列のうちの選択された前記連想配列内のエントリのキーとして前記値を検索することを含む、請求項44に記載のコンピューティングシステム。
  46. キーと値のペアのエントリの連想配列のうちの選択された連想配列が、データユニット内の識別子に対応する、請求項45に記載のコンピューティングシステム。
  47. 前記第1のセットの少なくとも1つのデータ構造内の情報を修正することが、検出されたキーと値のペアのエントリの値をインクリメントすることを含む、請求項45に記載のコンピューティングシステム。
  48. 前記第1のセットの少なくとも1つのデータ構造に情報を追加することが、データユニット内の値をキーとして有し、1のカウントを値として有する新しいキーと値のペアのエントリを、前記選択されたアレイに追加することを含む、請求項45に記載のコンピューティングシステム。
  49. メモリデバイスが揮発性メモリデバイスを含む、請求項35に記載のコンピューティングシステム。
  50. ストレージデバイスが不揮発性ストレージデバイスを含む、請求項35に記載のコンピューティングシステム。
  51. 作業メモリ空間を提供する手段と、
    オーバーフローストレージ空間を提供する手段と、
    複数のデータユニットを処理して結果情報を生成する手段とを備えるコンピューティングシステムであって、前記処理が、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行することであって、前記データ操作が、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットの少なくとも1つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第1のセットの少なくとも1つのデータ構造内の情報を修正し、前記値が検出されなかった場合に、前記第1のセットの少なくとも1つのデータ構造に情報を追加することを含むものであること、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報を前記オーバーフローストレージ空間に記憶して前記作業メモリ空間の少なくとも一部を解放し、前記複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対して前記データ操作を実行することであって、前記データ操作が、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットの少なくとも1つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第2のセットの少なくとも1つのデータ構造内の情報を修正することを含むものであること、並びに、
    前記第1及び第2のセットを含む1又は2以上のデータ構造の複数のセットを結合して前記結果情報を生成することを含む、コンピューティングシステム。
  52. 複数のデータユニットを処理して結果情報を生成する方法であって、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行するステップであって、前記データ操作が、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットの少なくとも1つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第1のセットの少なくとも1つのデータ構造内の情報を修正し、前記値が検出されなかった場合に、前記第1のセットの少なくとも1つのデータ構造に情報を追加することを含むものであるステップと、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶して前記作業メモリ空間の少なくとも一部を解放し、前記複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対して前記データ操作を実行するステップであって、前記データ操作が、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットの少なくとも1つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第2のセットの少なくとも1つのデータ構造内の情報を修正することを含むものであるステップと、
    前記第1及び第2のセットを含む、1又は2以上のデータ構造の複数のセットを結合して前記結果情報を生成するステップとを含む方法。
  53. 複数のデータユニットを処理して結果情報を生成するための、コンピュータ可読媒体に記憶されたソフトウェアであって、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行することであって、前記データ操作が、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットの少なくとも1つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第1のセットの少なくとも1つのデータ構造内の情報を修正し、前記値が検出されなかった場合に、前記第1のセットの少なくとも1つのデータ構造に情報を追加することを含むものであること、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶して前記作業メモリ空間の少なくとも一部を解放し、前記複数のデータユニットからのデータユニットの第2のサブセットの各データユニットに対して前記データ操作を実行することであって、前記データ操作が、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第2のセットの少なくとも1つのデータ構造内で前記データユニット内の値を検索して、前記値が検出された場合に、前記第2のセットの少なくとも1つのデータ構造内の情報を修正することを含むものであること、並びに、
    前記第1及び第2のセットを含む1又は2以上のデータ構造の複数のセットを結合して前記結果情報を生成すること、をコンピューティングシステムに行わせるための命令を含むソフトウェア。
  54. 作業メモリ空間を提供するメモリデバイスと、
    オーバーフローストレージ空間を提供するストレージデバイスと、
    複数のデータユニットを処理して結果情報を生成するように構成された少なくとも1つのプロセッサとを備えるコンピューティングシステムであって、前記処理が、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、前記データ操作の結果に関連する情報を、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報を前記オーバーフローストレージ空間に記憶すること、及び、
    前記複数のデータユニットの前記処理中にオーバーフロー処理手順を複数回繰り返すことを含み、前記オーバーフロー処理手順が、前記オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、前記作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することを含む、コンピューティングシステム。
  55. 作業メモリ空間に対するオーバーフロー条件が、1又は2以上のデータ構造の第1のセットに使用される前記作業メモリ空間の量が所定閾値以上である場合に満たされる、請求項54に記載のコンピューティングシステム。
  56. 処理がさらに、オーバーフロー条件が満たされた後、且つデータユニットの第2のサブセットの各データユニットに対してデータ操作を実行する前に、1又は2以上のデータ構造の第1のセットを移動済みセットとしてオーバーフローストレージ空間に記憶し、1又は2以上のデータ構造の前記第1のセットを作業メモリ空間から削除することを含む、請求項54に記載のコンピューティングシステム。
  57. オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することが、前記オーバーフローストレージ空間に記憶された1又は2以上のデータ構造の移動済みセットからの少なくとも1つのデータ構造からの情報を、前記作業メモリ空間に記憶された1又は2以上のデータ構造の前記新しいセットからの少なくとも1つのデータ構造とマージすることを含む、請求項56に記載のコンピューティングシステム。
  58. マージすることが、1又は2以上のデータ構造の移動済みセットからのデータ構造内の第1のキーを、1又は2以上のデータ構造の新しいセットからのデータ構造内の第2のキーと一致させ、前記第1のキーに関連する値と前記第2のキーに関連する値とに対して集約操作を実行することを含む、請求項57に記載のコンピューティングシステム。
  59. オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することが、前記オーバーフローストレージ空間に記憶されたデータユニット内の第1のキーを、1又は2以上のデータ構造の前記新しいセットからのデータ構造内の第2のキーと一致させ、前記第2のキーに関連する値をインクリメントすることを含む、請求項54に記載のコンピューティングシステム。
  60. オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することが、前記作業メモリ空間内の位置に記憶された値を、前記作業メモリ空間内の同じ位置に記憶された異なる値で上書きするインプレースメモリ操作を含む、請求項54に記載のコンピューティングシステム。
  61. 処理がさらに、複数のデータユニットをデータソースから生成することを含み、各データユニットが、前記データソースのフィールドの識別子と、前記データソースのレコード内で前記フィールドに現れる値とを含む、請求項54に記載のコンピューティングシステム。
  62. データ操作が、複数のデータユニットに含まれる値を、情報の集約元となる一致するデータユニットを選択するためのキーとして使用して、前記データユニットからの情報を集約することを含む、請求項61に記載のコンピューティングシステム。
  63. 1又は2以上のデータ構造の第1のセットが、キーと値のペアのエントリの、複数の連想配列を含む、請求項61に記載のコンピューティングシステム。
  64. 第1のデータユニットに対するデータ操作が、前記第1のデータユニット内の値をキーとして使用して、キーと値のペアのエントリの連想配列のうちの選択された連想配列内で検索することを含む、請求項63に記載のコンピューティングシステム。
  65. キーと値のペアのエントリの連想配列のうちの選択された連想配列が、第1のデータユニット内の識別子に対応する、請求項64に記載のコンピューティングシステム。
  66. メモリデバイスが揮発性メモリデバイスを含む、請求項54に記載のコンピューティングシステム。
  67. ストレージデバイスが不揮発性ストレージデバイスを含む、請求項54に記載のコンピューティングシステム。
  68. 作業メモリ空間を提供する手段と、
    オーバーフローストレージ空間を提供する手段と、
    複数のデータユニットを処理して結果情報を生成する手段とを備えるコンピューティングシステムであって、前記処理が、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、前記データ操作の結果に関連する情報を、前記作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報を前記オーバーフローストレージ空間に記憶すること、及び、
    前記複数のデータユニットの前記処理中にオーバーフロー処理手順を複数回繰り返すことを含み、前記オーバーフロー処理手順が、前記オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、前記作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することを含む、コンピューティングシステム。
  69. 複数のデータユニットを処理して結果情報を生成する方法であって、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、前記データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶するステップと、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶するステップと、
    前記複数のデータユニットの前記処理中にオーバーフロー処理手順を複数回繰り返すステップとを含み、前記オーバーフロー処理手順が、前記オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、前記作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することを含む、方法。
  70. 複数のデータユニットを処理して結果情報を生成するための、コンピュータ可読媒体に記憶されたソフトウェアであって、
    前記複数のデータユニットからのデータユニットの第1のサブセットの各データユニットに対してデータ操作を実行し、前記データ操作の結果に関連する情報を、メモリデバイスの作業メモリ空間に記憶された1又は2以上のデータ構造の第1のセットに記憶すること、
    前記作業メモリ空間に対するオーバーフロー条件が満たされた後で、情報をストレージデバイスのオーバーフローストレージ空間に記憶すること、及び、
    前記複数のデータユニットの前記処理中にオーバーフロー処理手順を複数回繰り返すこと、をコンピューティングシステムに行わせるための命令を含み、前記オーバーフロー処理手順が、前記オーバーフローストレージ空間に記憶された少なくとも一部の情報を使用して、前記作業メモリ空間に記憶された1又は2以上のデータ構造の新しいセットを更新することを含む、ソフトウェア。
JP2016514115A 2013-05-17 2014-05-16 データ操作のための、メモリ及びストレージ空間の管理 Active JP6387399B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361824686P 2013-05-17 2013-05-17
US61/824,686 2013-05-17
PCT/US2014/038345 WO2014186673A2 (en) 2013-05-17 2014-05-16 Managing memory and storage space for a data operation

Publications (2)

Publication Number Publication Date
JP2016530584A true JP2016530584A (ja) 2016-09-29
JP6387399B2 JP6387399B2 (ja) 2018-09-05

Family

ID=50977109

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016514115A Active JP6387399B2 (ja) 2013-05-17 2014-05-16 データ操作のための、メモリ及びストレージ空間の管理

Country Status (9)

Country Link
US (2) US9235505B2 (ja)
EP (2) EP3379415B1 (ja)
JP (1) JP6387399B2 (ja)
KR (1) KR102201510B1 (ja)
CN (1) CN105556474B (ja)
AU (2) AU2014265246B2 (ja)
CA (1) CA2912420C (ja)
HK (1) HK1224050A1 (ja)
WO (1) WO2014186673A2 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9230371B2 (en) * 2013-09-19 2016-01-05 GM Global Technology Operations LLC Fuel control diagnostic systems and methods
EP3594821B1 (en) 2014-03-07 2023-08-16 AB Initio Technology LLC Managing data profiling operations related to data type
US9805080B2 (en) * 2014-08-22 2017-10-31 Xcalar, Inc. Data driven relational algorithm formation for execution against big data
US9361937B2 (en) * 2014-08-26 2016-06-07 Seagate Technology Llc Shingled magnetic recording data store
CN106468560B (zh) * 2016-09-13 2019-05-28 Oppo广东移动通信有限公司 基于计步器消息的数据输出方法及装置
US10209913B2 (en) * 2017-01-31 2019-02-19 International Business Machines Corporation System, method and computer program product for accelerating iterative graph algorithms by memory layout optimization
WO2019089593A1 (en) * 2017-10-31 2019-05-09 Ab Initio Technology Llc Managing a computing cluster using time interval counters
US11210018B2 (en) * 2019-05-20 2021-12-28 Honeywell International Inc. Holistic linking of data across data sources
KR20230034695A (ko) * 2021-09-03 2023-03-10 삼성전자주식회사 전자장치 및 그 제어방법

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1063576A (ja) * 1996-08-27 1998-03-06 Hitachi Ltd 階層ディスク装置およびその制御方法
US20120191938A1 (en) * 2011-01-26 2012-07-26 Katsuki Uwatoko Information processing apparatus and write control method
WO2013051129A1 (ja) * 2011-10-06 2013-04-11 株式会社 日立製作所 格納データの重複排除方法、格納データの重複排除装置、及び重複排除プログラム

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5966072A (en) 1996-07-02 1999-10-12 Ab Initio Software Corporation Executing computations expressed as graphs
WO2005029369A2 (en) 2003-09-15 2005-03-31 Ab Initio Software Corporation Data profiling
US7716630B2 (en) 2005-06-27 2010-05-11 Ab Initio Technology Llc Managing parameters for graph-based computations
US8229902B2 (en) * 2006-11-01 2012-07-24 Ab Initio Technology Llc Managing storage of individually accessible data units
US8762333B2 (en) * 2009-07-08 2014-06-24 Pivotal Software, Inc. Apparatus and method for read optimized bulk data storage
JP5663044B2 (ja) * 2010-03-10 2015-02-04 アビニシオ テクノロジー エルエルシー 個別にアクセス可能なデータ単位の記憶の管理
US9785470B2 (en) * 2011-06-20 2017-10-10 Microsoft Technology Licensing, Llc Memory management model and interface for unmodified applications
EP3594821B1 (en) * 2014-03-07 2023-08-16 AB Initio Technology LLC Managing data profiling operations related to data type

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1063576A (ja) * 1996-08-27 1998-03-06 Hitachi Ltd 階層ディスク装置およびその制御方法
US20120191938A1 (en) * 2011-01-26 2012-07-26 Katsuki Uwatoko Information processing apparatus and write control method
JP2012155561A (ja) * 2011-01-26 2012-08-16 Toshiba Corp 情報処理装置及び書き込み制御方法
WO2013051129A1 (ja) * 2011-10-06 2013-04-11 株式会社 日立製作所 格納データの重複排除方法、格納データの重複排除装置、及び重複排除プログラム
US20140229452A1 (en) * 2011-10-06 2014-08-14 Hitachi, Ltd. Stored data deduplication method, stored data deduplication apparatus, and deduplication program

Also Published As

Publication number Publication date
JP6387399B2 (ja) 2018-09-05
EP2997472B1 (en) 2018-07-11
CN105556474A (zh) 2016-05-04
US9235505B2 (en) 2016-01-12
EP3379415B1 (en) 2019-11-06
AU2014265246A1 (en) 2015-11-26
AU2018211280B2 (en) 2018-11-29
KR20160011212A (ko) 2016-01-29
CA2912420C (en) 2020-09-15
EP3379415A1 (en) 2018-09-26
US20160092139A1 (en) 2016-03-31
US9411531B2 (en) 2016-08-09
HK1224050A1 (zh) 2017-08-11
AU2018211280A1 (en) 2018-08-23
KR102201510B1 (ko) 2021-01-11
CA2912420A1 (en) 2014-11-20
EP2997472A2 (en) 2016-03-23
CN105556474B (zh) 2019-04-30
US20140344508A1 (en) 2014-11-20
WO2014186673A2 (en) 2014-11-20
AU2014265246B2 (en) 2018-05-17

Similar Documents

Publication Publication Date Title
JP6387399B2 (ja) データ操作のための、メモリ及びストレージ空間の管理
JP6427592B2 (ja) データ型に関連するデータプロファイリング操作の管理
US10891264B2 (en) Distributed, scalable key-value store
US11461304B2 (en) Signature-based cache optimization for data preparation
JP2010027058A (ja) コンピュータによって実現される方法、コンピュータ読取可能媒体およびデータベースから情報を抽出するための装置
US20090249004A1 (en) Data caching for distributed execution computing
US10642815B2 (en) Step editor for data preparation
CN107209707B (zh) 基于云的分级系统保存
US10740316B2 (en) Cache optimization for data preparation
US11288447B2 (en) Step editor for data preparation
Shkapsky A declarative language for advanced analytics and its scalable implementation
Dodabelle Prakash IncRDD: Incremental Updates for RDD in Apache Spark

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170407

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170414

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180301

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180228

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20180530

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180720

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: 20180731

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180813

R150 Certificate of patent or registration of utility model

Ref document number: 6387399

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