(58)【調査した分野】(Int.Cl.,DB名)
プライマリメモリ使用量が使用量スレッショルドを下回ったことに応答して、前記オンディスク状態の少なくともいくつかのメモリブロックを前記セカンダリメモリから前記プライマリメモリに転送すること
をさらに含む、請求項1に記載の方法。
前記セカンダリメモリから前記プライマリメモリに転送された前記メモリブロックは、前記圧縮状態で前記プライマリメモリに格納され、前記コンピュータプロセッサによって実行されるステップは、
前記オンディスク状態の前記転送されたメモリブロックを前記セカンダリメモリに保持するステップと、
プライマリメモリ使用量が前記圧縮スレッショルドを超えるに応答して、前記セカンダリメモリから前記プライマリメモリに転送された前記圧縮状態で格納されている前記メモリブロックを解放するステップと
をさらに含む、請求項10に記載のシステム。
コンピュータ内のメモリを管理するための実行可能なコンピュータプログラム命令を格納する非一時的コンピュータ可読記憶媒体であって、前記コンピュータプログラム命令は、実行時にコンピュータプロセッサに、
前記コンピュータに関連付けられたプライマリメモリの使用量を監視することであって、前記プライマリメモリは、準備完了状態の圧縮されていないメモリブロックを格納する、ことと、
前記準備完了状態の前記圧縮されていないメモリブロックによるプライマリメモリ使用量が準備完了状態スレッショルドを超過していることに応じて、
前記準備完了状態の前記圧縮されていないメモリブロックの少なくともいくつかを圧縮して、圧縮されたメモリブロックを形成することと、
前記圧縮されていないメモリブロックの少なくともいくつかを準備完了および圧縮状態のメモリブロックとして前記プライマリメモリに格納することと、
前記圧縮されたメモリブロックを圧縮状態のメモリブロックとして前記プライマリメモリに格納することと、
前記準備完了および圧縮状態の前記メモリブロックによるプライマリメモリ使用量が解放スレッショルドを超えていることに応じて、前記準備完了および圧縮状態の前記メモリブロックの少なくともいくつかを解放することと、
前記圧縮状態の前記メモリブロックによるプライマリメモリ使用量が圧縮スレッショルドを超過していることに応じて、前記圧縮状態のメモリブロックの少なくともいくつかを前記コンピュータに関連付けられたセカンダリメモリに転送して、オンディスク状態のメモリブロックを形成することと
を行わせる命令を含む、コンピュータ可読記憶媒体。
前記セカンダリメモリから前記プライマリメモリに転送された前記メモリブロックは、前記圧縮状態で前記プライマリメモリに格納され、前記コンピュータ内のメモリを管理するための前記コンピュータプログラム命令は、実行されると、前記コンピュータのプロセッサに、
前記オンディスク状態の前記転送されたメモリブロックを前記セカンダリメモリに保持することと、
プライマリメモリ使用量が前記圧縮スレッショルドを超えるに応答して、前記セカンダリメモリから前記プライマリメモリに転送された前記圧縮状態で格納されている前記メモリブロックを解放することと
を行わせる命令をさらに含む、請求項17に記載のコンピュータ可読媒体。
【発明を実施するための形態】
【0009】
図1は、一実施形態によるデータ解析システム110を含むデータ解析環境100を示すブロック図である。環境100は、ネットワーク130を介してデータ解析システム110に接続された複数のデータソース120をさらに含む。例示された環境100は、複数のデータソース120に結合された1つのデータ解析システム110のみを含むが、実施形態は、複数のデータ解析システムおよび単一のデータソースを有することができる。
【0010】
データ解析システム110は、大量のデータを処理および解析するために利用されるコンピュータベースのシステムである。データは、ネットワーク130を介して複数のデータソース120から回収(collect)、収集(gather)、またはアクセスされる。データ解析システム110は、多種多様なデータソースからのデータにアクセスし、準備し、混合し、解析する際に使用されるスケーラブルなソフトウェアツールおよびハードウェアリソースを実装することができる。例えば、データ解析システム110は、データ集約型のプロセスとワークフローの実行をサポートする。データ解析システム110は、本明細書で説明されるメモリ管理技術を含むデータ解析機能を実装するために使用されるコンピューティングデバイスとすることができる。
【0011】
データ解析システム110は、データ解析アプリケーション160として
図1に示される1つ以上のソフトウェアアプリケーションをサポートするように構成することもできる。データ解析アプリケーション160は、1つ以上のデータソース120から取得した大量のデータを処理および解析する。場合によっては、データ解析アプリケーション160は、複数のエンドユーザにネットワーク化されたまたはクラウドベースのデータ解析ツールおよびマクロへのアクセスをサポートするソフトウェアを提供する。一例として、データ解析アプリケーション160は、ユーザが、モバイルアプリケーションストアまたは他のクラウドベースのサービスと同様の方法で、解析を共有、閲覧、および消費することを可能にする。解析データ、マクロ、およびワークフローは、たとえば、データ解析システム110の他のユーザがアクセスできる、小規模でカスタマイズ可能な解析アプリケーション(つまり、アプリ)としてパッケージ化されて実行されることができる。場合によっては、公開された解析アプリへのアクセスは、データ解析システム110によって管理されることができる。つまり、アクセスを許可することまたは取り消すことにより、アクセス制御およびセキュリティ機能を提供する。データ解析アプリケーション160は、作成、展開、公開、反復、更新などの解析アプリに関連付けられた機能を実行できる。
【0012】
さらに、データ解析アプリケーション160は、アクセス、準備、ブレンド、解析、および解析結果を出力する機能など、データ解析に関係するさまざまな段階で実行される機能をサポートできる。場合によっては、データ解析アプリケーション160はさまざまなデータソースにアクセスして、たとえばデータのストリーム内の生データを取得できる。データ解析アプリケーション160によって収集されたデータストリームは、生データの複数のレコードを含むことができ、生データは異なる形式および構造である。少なくとも1つのデータストリームを受信した後、データ解析アプリケーション160は、データストリームのレコードをデータ解析操作への入力として使用されるようになることを可能にする操作を実行することができる。さらに、予測解析(たとえば、予測モデリング、クラスタリング、データ調査)など、レコードの統計的、定性的、または定量的処理に関与する解析機能は、データ解析アプリケーション160によって実装されることができる。
【0013】
データ解析アプリケーション160はまた、視覚的グラフィカルユーザーインターフェース(GUI)を介して、反復可能なワークフローを設計および実行するソフトウェアツールをサポートすることができる。一例として、データ解析アプリケーション160に関連付けられたGUIは、データ混合、データ処理、および高度なデータ解析のためのドラッグアンドドロップのワークフロー環境を提供する。さらに、ワークフローには、特定の処理操作またはデータ解析機能を実行する一連のデータ処理ツールを含めることができる。ワークフローの一部である各ツールは、ツールに固有のデータに関連する機能を実行する。例として、ワークフローは、入力/出力操作、準備操作、参加操作、予測的操作、空間的操作、調査操作、ならびに分析および変換(parse and transform)操作のうちの1つ以上を含むさまざまなデータ解析機能を実装するツールを含めることができる。ワークフローの詳細は、
図2に関連して説明される。
【0014】
図1の実施形態では、データ解析システム110は、プライマリメモリ140およびセカンダリメモリ150を含む。いくつかの実施形態では、プライマリメモリ140は相対的に小さなデータ記憶領域への相対的に高速なアクセスを提供し、セカンダリメモリ150は相対的に大きなデータ記憶領域への相対的に低速なアクセスを提供する(「相対的」はプライマリメモリとセカンダリメモリとの間の差を指す)。例えば、プライマリメモリ140は、データ解析システム110で利用可能なランダムアクセスメモリ(RAM)の一部、例えば16GBを含むことができる。対照的に、セカンダリメモリ150は、テラバイトのデータを格納できるデータ解析システム110と通信するハードディスクドライブ(HDD)および/またはソリッドステートドライブ(SSD)などのストレージデバイスの一部を含むことができる。
【0015】
一実施形態では、データ解析アプリケーション160は、指定されたワークフローに従ってデータソース120からのデータの効率的な処理を提供するためにプライマリメモリおよびセカンダリメモリの使用量を割り当てる。例えば、処理中のデータが、プライマリメモリ140で利用可能な記憶スペースの量を超える場合がある。加えて、セカンダリメモリ150がデータを供給できる速度は、データ解析アプリケーション160内のツールがデータを消費できる速度よりも遅い場合がある。データ解析アプリケーション160は、データがツールに供給される速度を最適化する方法でプライマリメモリ140およびセカンダリメモリ150のメモリ管理を実行することにより、これらの問題に対処する。このように、メモリ管理は、データ解析システム110のみならず、データ解析アプリケーション160のパフォーマンスも改善する。
【0016】
上述のように、データソース120は、電子データをデータ解析システム110に提供する。データソース120は、コンピュータ、データベース、またはクラウドストレージシステムであり得る。データソース120は、別のソースからデータを取り出すことができるコンピュータシステムであってもよい。データソース120は、データ解析システム110から離れていてもよく、ネットワーク130を介してデータを提供してもよい。さらに、データソース120の一部またはすべてはデータ解析システムに直接結合され、ネットワーク130を介してデータを渡すことなく、データを提供してもよい。データソース120によって提供されるデータは典型的に、データレコードに編成され、各データレコードは1つ以上の値を含む。たとえば、データソースによって提供されるデータレコードは、一連のコンマ区切りされた値を含む場合がある。データは、データ解析システムを使用する企業に関連する情報を記述する。例えば、データソース120からのデータは、ウェブサイト上でアクセス可能なコンテンツおよび/またはソーシャルメディアアプリケーションとのコンピュータベースの相互作用(例えば、クリック追跡データ)を記述することができる。
【0017】
ネットワーク130は、データ解析システム110とデータソース120との間の通信経路を表す。一実施形態では、ネットワーク130はインターネットであり、標準の通信技術および/またはプロトコルを使用する。ネットワーク130を介して交換されるデータは、ハイパーテキストマークアップ言語(HTML)、拡張マークアップ言語(XML)などを含む技術および/またはフォーマットを使用して表されることができる。別の実施形態では、エンティティは、上記の技術の代わりに、またはそれに加えて、カスタムおよび/または専用のデータ通信技術を使用することができる。
【0018】
図2は、一実施形態による、データを処理するデータ解析システム110を使用して作成されたワークフロー200を示すブロック図である。一実施形態では、ワークフロー200は、データ解析システム110のGUIによってサポートされる視覚的なワークフロー環境を使用して作成される。視覚的なワークフロー環境は、ワークフローを設計するためのソフトウェアコードを提供する必要をなくす、およびワークフローによって実装される複雑な数式を識別する必要をなくす、ドラッグアンドドロップツールのセットを動作させる。別の実施形態では、ワークフロー200は、拡張マークアップ言語(XML)文書などの文書で作成および記述される。ワークフロー200は、データ解析システム110のコンピュータデバイスによって実行される。しかしながら、他の実施形態では、ワークフロー200は、ネットワーク(例えば、ネットワーク130)を介してデータ解析システム110に通信可能に接続され得る別のコンピュータデバイスに配備される。
【0019】
ワークフローは、特定の処理操作またはデータ解析機能を実行する一連のツールを含むことができる。一般的な例として、ワークフローのツールは、入力/出力操作、準備操作、参加操作、予測的操作、空間的操作、調査操作、ならびに分析および変換操作のうちの、データ解析機能の1つ以上を実行できる。ワークフローの実装は、データ解析プロセスの定義、実行、自動化を含むことができ、データがワークフロー内の各ツールに渡され、各ツールは受信したデータに対してそれぞれの処理操作を実行する。個々のレコードの集約グループを含むレコードは、ワークフローのツールを通して渡されることができ、このことは、個々の処理操作がデータに対してより効率的に動作することを可能にする。このようなデータ集約技術は、大量のデータを処理する場合でも、ワークフローの開発と実行の速度を上げることができる。ワークフローは、指定されたツールの操作シーケンスを指定して、反復可能な一連の操作を定義または構造化できる。場合によっては、ワークフローに含まれるツールが線型順序で実行される。別の場合データは、複数のツールを並行して実行できる。
【0020】
図示のように、
図2のワークフロー200は、入力ツール205および206、ならびにブラウズツール230として示される入力/出力ツールを含む。入力ツール205および206は、特定のデータソース120からのレコードにアクセスするように機能する。入力ツール205および206は、アクセスされたレコードをワークフローに取り込み、ワークフロー200の後続のツールにレコードを提供する。この例では、入力ツール205はアクセスされたレコードをフィルタツール210に提供し、入力ツール206はアクセスされたレコードを選択ツール211に提供する。ブラウズツール230は、ワークフロー200の最後に位置し、ワークフロー200の上流のツールのそれぞれの実行から生じる出力を受け取る。この例では、ブラウズツール230は、ワークフロー200の最後に配置されているが、ワークフローの任意の点にブラウズツール230が追加され、ワークフローの上流ツールの実行の様々な結果をレビューおよび検証することができる。
【0021】
図2の例を続けると、ワークフロー200は、フィルタツール210、選択ツール211、フォーミュラツール215、およびサンプルツール212として示される準備ツールを含む。フィルタツール210は、式に基づいてレコードをクエリし、式を満たすレコードを含む真のストリームおよび式を満たさないレコードを含む偽のストリームの2つのストリームにデータを分ける。選択ツール211は、フィールドの選択、選択解除、並べ替え、および名前変更、フィールドタイプまたはサイズの変更、ならびに説明の割り当てを行うために使用されることができる。フォーミュラツール215は、多種多様な計算および/または演算を実行する1つ以上の式を使用してフィールドを作成または更新する。サンプルツール212は、受信したレコードのストリームを、レコードの数、割合、またはランダムなセットに限定する。ワークフロー200は、複数のデータソースをブレンドするジョインツール220も含む。
【0022】
ワークフロー200は、複数のデータソースをブレンドするジョインツール220も含む。具体的には、ジョインツール220は、共通のフィールド(またはレコード位置)に基づいて2つの入力データストリームを組み合わせる。
図2のワークフロー200は、さらなる解析で使用されるフォーマットにデータを再構築および再形成することができる分析および変換ツールであるサマライズツール225を含むように示されている。サマライズツール225は、グループ化、合計、カウント、空間処理、および文字列連結によってデータの要約化を実行することもできる。一実施形態では、サマライズツール225によって生成された出力は、計算の結果を含む。
【0023】
いくつかの実施形態では、ワークフロー200の実行は、入力ツール205が、フィルタツール210およびフォーミュラツール215を通じて、すべてのレコードが処理されてジョインツール220に到達するまで、レコードを一度に1つ渡すことを生じさせる。その後、入力ツール206は、選択ツール211およびサンプルツール212を通じて、レコードが同じジョインツール220に渡されるまで、レコードを一度に1つ渡し始める。ワークフロー200のいくつかの個々のツールは、データの最後のブロックを処理しながらデータのブロックの読み取りを開始したり、ソートツールなどのコンピュータ集約的な操作を複数の部分に分割したりするなど、独自の並列操作を実装する機能を持つことができる。ただし、一部の既存のワークフローテクニックでは、レコードのセットからの各レコードは、ワークフローのツールが複数のレコードを必要とする処理操作(たとえば、ソートツール、ジョインツール、サマライズツールなど)に到達するまで、ワークフローの各ツールによってパイプライン方式で一度に1レコードずつ個別に処理される。
【0024】
図3は、実施形態による
図1のデータ解析システム110として使用するための典型的なコンピュータシステム300の機能図を示すハイレベルブロック図である。コンピュータシステム300は、
図2のワークフローを実装するためにデータ解析アプリケーション160を実行することができる。
【0025】
例示されるコンピュータシステム300は、チップセット304に結合された少なくとも1つのプロセッサ302を含む。プロセッサ302は、同じダイ上に複数のプロセッサコアを含むことができる。チップセット304には、プライマリメモリ140、セカンダリメモリ150、キーボード310、グラフィックスアダプタ312、ポインティングデバイス314、およびネットワークアダプタ316も結合されている。ディスプレイ318は、グラフィックスアダプタ312に結合されている。一実施形態では、チップセット304の機能は、メモリコントローラハブ320およびI/Oコントローラハブ322によって提供される。ネットワークアダプタ316は、コンピュータシステム300をネットワーク130に結合する。
【0026】
いくつかの実施形態では、コンピュータシステム300は、追加のコンポーネント、より少ないコンポーネント、または異なるコンポーネントを有してもよく、コンポーネントは違うように結合されていてもよい。例えば、コンピュータシステム300の実施形態は、ディスプレイおよび/またはキーボードを欠く場合がある。別の例として、コンピュータシステム300は、複数のプライマリメモリ140および/またはセカンダリメモリ150を有してもよい。加えて、コンピュータシステム300は、いくつかの実施形態では、ラックマウント型ブレードサーバーとして、またはクラウドサーバーインスタンスとしてインスタンス化されてもよい。
【0027】
プライマリメモリ140は、非一時的なコンピュータ可読記憶媒体であり、プロセッサ302によって使用される命令およびデータを保持する。いくつかの実施形態では、プライマリメモリ140はランダムアクセスメモリである。データアクセスに要求される時間の長さは比較的短い。したがって、プロセッサによってアクセスされているデータ、または近いうちにアクセスされる可能性が高いデータをプライマリメモリ140内に格納することが有利である。
【0028】
セカンダリメモリ150は、非一時的なコンピュータ可読記憶媒体であり、プロセッサ302によって使用される命令およびデータを保持する。セカンダリメモリは、本明細書で「セカンダリデータブロック」と呼ばれ、1つのユニットとしてアクセスされる、データブロックにデータを格納する。セカンダリデータブロックサイズは、セカンダリメモリ150のサイズに応じて異なり、1KBから8KBの範囲であり得る。
【0029】
実施形態に応じて、セカンダリメモリ150は、セカンダリデータブロックへのランダムアクセスまたはシーケンシャルアクセスをサポートしてもよい(たとえば、セカンダリメモリがHDDであるかSSDであるかに応じて)。したがって、セカンダリメモリ150を伴うデータアクセスに必要な時間は、アクセスされるロケーションに応じて異なり得る。いずれにしても、セカンダリメモリ150を伴うデータアクセスに必要な時間の長さは、プライマリメモリ140を伴う同等のアクセスに必要な時間の長さよりも長い。したがって、プロセッサによってアクセスされている、または近いうちにアクセスされる可能性が高いデータをセカンダリメモリ150内に格納することは、コンピュータシステム300の性能に有害である。
【0030】
コンピュータシステム300は、限られた量のプライマリメモリ140を含む。例えば、システム300は、16GBまたは32GBのプライマリメモリを含み得る。しかしながら、コンピュータシステム300は、事実上無制限の量のセカンダリメモリ150を含む。たとえば、システムは、数百ギガバイトまたはテラバイトのセカンダリメモリを含み得る。典型的に、データ解析システム110によって処理されているデータの量は、プライマリメモリ140の容量を超過する。したがって、データの少なくとも一部はセカンダリメモリ150に格納される。データがワークフローを通過するときに、データはプライマリメモリ140とセカンダリメモリ150との間で移動される。
【0031】
コンピュータシステム300は、本明細書で説明される機能を提供するためのコンピュータプログラムモジュールを実行するように適合されている。本明細書で使用される「モジュール」という用語は、特定の機能を提供するためのコンピュータプログラム命令およびその他のロジックを指す。モジュールはハードウェア、ファームウェア、および/またはソフトウェアで実装されることができる。モジュールはプロセスとして実行できる。さらに、プロセス内の1つ以上のスレッドとしてモジュールは実行されることができる。モジュールは典型的に、セカンダリメモリ308に格納され、プライマリメモリ306にロードされ、プロセッサ302によって実行される。
【0032】
図4は、一実施形態によるデータ解析システム110のデータ解析アプリケーション160のより詳細な図を示すブロック図である。解析アプリケーション160は、データ受信モジュール410、ツールモジュール420、メモリ管理モジュール430、およびデータ提供モジュール440を含む。当業者は、他の実施形態がここで説明したものとは異なるおよび/または他のコンポーネントを有することができ、機能が異なる方法でコンポーネントの間に分散できることを認識するであろう。
【0033】
データ受信モジュール410は、データソース120からデータレコードを受信し、データ解析アプリケーション160の他のモジュールにデータレコードを提供する。一実施形態では、データ受信モジュール410は、
図2に示す入力ツール206のような、データ解析アプリケーションのツール間のインターフェースとして機能する。別の実施形態では、データ受信モジュール410は存在せず、データ受信モジュール410の機能はツールによって実行される。
【0034】
ツールモジュール420は、入力/出力操作準備操作、参加操作、予測的操作、空間的操作、調査操作、ならびに分析および変換操作のうちの1つ以上を含む特定の処理操作またはデータ解析機能を実行するデータ処理ツールのセットを提供する。
【0035】
ツールは、データ受信モジュール410によってデータソース120から受信されたデータレコードを操作する。ツールモジュール420は、
図2に関連して説明したワークフロー200に含まれるツールを提供する。一実施形態では、1つ以上のツールモジュール420は、ワークフローについてデータレコードを処理する間並行に実行し得る。そのようなツールモジュールは、各スレッドがプロセッサ302の個別のコアで動作する、複数の個別のスレッドとして実行し得る。たとえば、ジョインツールの実施形態は、ジョイン操作に関連付けられたタスクを複数のスレッドに分配して、プロセッサ302の並列処理機能を活用する。
【0036】
さらに、ツールモジュール420によって提供されるツールは、メモリを使用して、ワークフロー内で処理されているデータレコードを格納する。ツールモジュール420は、メモリ管理モジュール430と対話して、処理中に使用するメモリを割り当て、処理が完了するとメモリを解放する。いくつかのツールは、データの処理中に特定のパターンでメモリを使用する場合がある。たとえば、ジョインツールは典型的に、複数のパスを使用してデータレコードを処理する。このようなツールは典型的に、処理中のデータレコードを格納するために大量のメモリを割り当て、最初のパスで各データレコードに1回アクセスし、次いで、その後のパスで各データレコードに再度アクセスする。
【0037】
メモリ管理モジュール430は、データ解析アプリケーション160によるメモリ使用量を管理する。一実施形態では、メモリ管理モジュール430は、データ解析アプリケーション160専用である。メモリ管理モジュール430は、データ解析システム110によって提供されるメモリ管理機能と別個にインターフェースし得る。たとえば、メモリ管理モジュール430は、データ解析システム110上で実行されているオペレーティングシステムによって提供される異なるメモリ管理システムとインターフェースすし得る。メモリ管理モジュール430は、データ解析アプリケーション160のメモリ動作をオペレーティングシステムのメモリ管理システムから抽象化する。
【0038】
この目的のために、メモリ管理モジュール430は、ツールがワークフローを実装するときに、ツールモジュール420のツールによって処理されているデータレコードを格納するためのメモリを割り当てて解放する。加えて、メモリ管理モジュール430は、割り当てられたメモリをプライマリメモリ140またはセカンダリメモリ150のいずれかに選択的に格納する。一般に、メモリ管理モジュール430は、ツールによって現在アクセスされているデータレコードをプライマリメモリ140に格納し、ツールによって現在アクセスされていないデータレコードをセカンダリメモリ150に格納する。メモリ管理430は、レコードがツールによってアクセスされるときに、プライマリメモリ140とセカンダリメモリ150との間でデータレコードを移動する。加えて、メモリ管理モジュール430は、プライマリメモリ140の限られた記憶容量を効果的に使用するために、プライマリメモリ140内のデータレコードを選択的に圧縮する。
【0039】
一実施形態では、ツールは、ツールがデータレコードを含むメモリブロックにアクセスする可能性が高いときを示す通知をメモリ管理モジュール430に提供する。たとえば、ツールは、短い期間または長い期間内に特定のブロックにアクセスする可能性が高いかどうかを示す通知を提供してもよい。加えて、通知は、ツールがブロックに再びアクセスしようとするとき、およびブロックへのアクセスが完全に終了したときを、メモリ管理モジュール430に伝えてもよい。たとえば、通知は、ツールがブロックへのアクセスを一時的に終了したが、将来再びブロックにアクセスするときを、メモリ管理モジュール430に伝えてもよい。通知はまた、ツールがブロックに再びアクセスしないときをメモリ管理モジュール430に伝えてもよい。
【0040】
メモリ管理モジュール430は、特定のメモリブロックをプライマリメモリ140およびセカンダリメモリ150に格納するかどうか、ならびにブロックを格納する状態(例えば、準備完了、圧縮)を決定するときにツールからの通知を使用できる。メモリ管理モジュール430は、通知を使用して、特定のブロックをいつ解放(例えば、リサイクル)するかを決定することもできる。さらに、一実施形態では、メモリ管理モジュール430は、通知を使用して、特定のブロックにアクセスするツールの数を記述するいくつかのカウントを維持する。メモリ管理モジュール430は、現在ブロックにアクセスしているツールの数を示すアクセスカウントと、将来ブロックにアクセスする可能性のあるツールの数を示すロックカウントを維持する。ロックカウントがゼロに達すると、メモリ管理モジュール430はブロックを解放することができる。
【0041】
したがって、メモリ管理モジュール430は、ツールモジュール420のツールによってアクセスされるレコードを比較的高速なプライマリメモリ140に格納することにより、データ解析システム110およびデータ解析アプリケーション160の性能を向上させる。特に、メモリ管理モジュール430は、多数のデータレコードにわたる複数のパスを実行するジョインツールなどのツールのパフォーマンスを向上させる。
【0042】
データ出力モジュール440は、データ解析アプリケーション160によって実行された処理の結果を出力する。すなわち、データ出力モジュール440は、ワークフロー200の実行によって生成された処理済みデータレコードを受信し、他のシステムおよび/または人間のレビュアーがデータレコードを利用できるようにする。例えば、データ出力モジュール440は、企業に関連付けられた人間のレビュアーが企業に関連付けられたデータレコードの処理から生じるワークフロー200の出力をレビューできるGUIを提供してもよい。
【0043】
図5は、一実施形態によるメモリ管理モジュール430のより詳細な図を示すブロック図である。メモリ管理モジュール430は、割り当てモジュール510、圧縮モジュール520、データ転送モジュール530、およびメモリ制御モジュール540を含む。他の実施形態がここで説明したものとは異なるおよび/または他のコンポーネントを有することができ、機能が異なる方法でコンポーネントの間に分散できる。
【0044】
割り当てモジュール510は、ツールモジュール420および/またはデータ解析アプリケーション160内の他のモジュールからの要求に応じて、メモリブロックを割り当てて解放する。割り当てモジュール510は、データ解析アプリケーション160内の他のモジュールから割り当て要求を受け取り、それに応じてメモリのブロックを割り当てる。割り当て要求は、たとえば、ツールモジュール420のツールがワークフローを処理している間に、ツールから受信されてもよい。メモリ割り当てモジュール510は、無限に見えるように作られたブロックの仮想プールからブロックを割り当てる。これらの仮想ブロックは、メモリアーキテクチャの制限を考慮して、プライマリメモリ140またはセカンダリメモリ150にあってもよい。割り当てモジュール510によって割り当てられるメモリのブロックは、セカンダリメモリ150に関して説明されたセカンダリデータブロックとは異なる。
【0045】
具体的には、割り当てモジュール510は、メモリ割り当て要求を受信し、要求に応じてメモリの論理的連続ブロックを割り当て、メモリのブロックのハンドルを要求者に返す。いくつかの実施形態では、割り当て要求はブロックサイズを指定し、割り当てモジュール510はブロックサイズに基づいてブロックを割り当てる。一実施形態では、割り当てモジュール510は、非圧縮メモリブロックおよび圧縮メモリブロックの2つの異なるタイプのブロックを割り当てる。非圧縮メモリブロックは、非圧縮データレコードを保持する。圧縮メモリブロックは、非圧縮メモリブロックよりも小さく、圧縮データレコード(つまり、圧縮された1つ以上の非圧縮メモリブロック)を保持する。割り当てモジュール510によって受信されるメモリ割り当て要求は、割り当てるメモリブロックのタイプを指定する。
【0046】
割り当てモジュール510は、メモリのブロックへのハンドルを指定するメモリ解放要求も受信する。割り当てモジュール510は、そのようなメモリブロックを解放して、ブロックが後続の要求で再割り当てできるようにする。割り当てモジュール510は、再割り当てに利用可能な空きブロックのリストを保持する。
【0047】
圧縮モジュール520は、プライマリメモリ使用量が閾値を超えるかまたは下回る場合、メモリブロックを選択的に圧縮および圧縮解除する。圧縮されたメモリブロックは、圧縮されていないメモリブロックよりもかなり少ないストレージスペースを占有する。圧縮に使用される場合、圧縮モジュール520が、データレコードを保持し、プライマリメモリ140に格納された非圧縮メモリブロックのハンドルとともに提供される。圧縮モジュール520は、非圧縮メモリブロックハンドルによって識別されるメモリブロック内のデータレコードを圧縮し、圧縮メモリブロックハンドルによって識別されるロケーションに圧縮データレコードを格納する。圧縮モジュール520は、圧縮メモリブロックハンドルを要求者に返す。圧縮が実行された後、非圧縮メモリブロックおよび圧縮メモリブロックの双方がプライマリメモリ140に残ることに留意されたい。一実施形態では、圧縮モジュール520は、専用の別個のスレッドを使用して圧縮操作および解凍操作を実行する。このようにして、データ解析システム110で実行される他のスレッドは、圧縮および解凍タスクによってブロックされない。
【0048】
圧縮モジュール520は、圧縮を実行するときに、割り当てモジュール510に圧縮メモリブロックハンドルを要求する。割り当てモジュール510は、要求に応じて、新しい圧縮メモリブロックを割り当てる、または空きリストから圧縮メモリブロックを返す。圧縮メモリブロックは、準備完了ブロックより小さくてもよく、圧縮モジュール520は、1つより多くの圧縮メモリブロックを使用して、非圧縮メモリブロックのコンテンツを格納してもよい。
【0049】
圧縮解除のために、圧縮モジュール520は、プライマリメモリ140に格納された圧縮メモリブロックを識別する圧縮メモリブロックハンドルを受け取る。圧縮モジュール520は、割り当てモジュール510から非圧縮メモリブロックについての1つ以上のハンドルを要求して受信し、1つ以上の圧縮メモリブロックを割り当てられた非圧縮メモリブロックに解凍する。解凍が実行されると、圧縮モジュール520は、圧縮メモリブロックを解放するか、それを使用して後続の圧縮要求を処理する。
【0050】
圧縮モジュール520は、圧縮比について最適化されたアルゴリズムではなく、圧縮の速度に対して最適化されたロスレス圧縮アルゴリズムを使用する。たとえば、圧縮モジュール520は、Snappy圧縮アルゴリズムを使用してメモリブロックを圧縮し得る。圧縮モジュール520は、ハフマン(Huffman)符号化の変形およびレンペルジブ(Lempel-Ziv)圧縮などの他の圧縮アルゴリズムを使用してもよい。
【0051】
データ転送モジュール530は、メモリ管理モジュール430内の他のモジュールからの要求に応答して、プライマリメモリ140とセカンダリメモリ150との間でデータブロックを選択的に移動する。一実施形態では、データ転送モジュール530は、圧縮メモリブロックをプライマリメモリ140とセカンダリメモリ150との間で移動させる。圧縮メモリブロックは、セカンダリメモリ150によって使用されるセカンダリデータブロックよりも大きくなりことができる。したがって、圧縮メモリブロックは、複数のセカンダリデータブロックを占有できます。データ転送モジュール530は、プライマリメモリ140とセカンダリメモリ150との間で、同じ圧縮メモリブロックからのデータを保持するセカンダリデータブロックをユニットとして移動する。
【0052】
メモリ制御モジュール540は、メモリ管理モジュール430内の他のモジュールと相互作用して、プライマリメモリ140とセカンダリメモリ150との間でメモリブロックの選択的な圧縮/解凍および転送を制御する。メモリ制御モジュール540は、ツールがワークフローを処理する際にメモリブロックにアクセスするためのツールモジュール420による要求を監視する。メモリ制御モジュール540は、アクセスが要求される任意のメモリが非圧縮状態でプライマリメモリ140に格納されることを確実にする。このようなブロックは、「準備完了」状態にあると呼ばれる。
【0053】
要求されたメモリブロックが準備完了状態にない場合、メモリ制御モジュール540は、セカンダリメモリ150からメモリブロックを取り出し、および/またはメモリブロックをプライマリメモリ140に解凍して、ブロックを準備完了状態にする。いくつかの実施形態では、メモリ制御モジュール540は、ツールモジュール420がアクセスを要求したときに所定のメモリブロックが既に準備完了状態である可能性を高めるために、メモリブロックを推論的に圧縮、解凍、および転送することができる。
【0054】
このために、メモリ制御モジュール540は、メモリブロックを格納するために利用可能なプライマリメモリ140の総量を決定する。ワークフローが実行されると、メモリ制御モジュール540は、メモリブロックを格納するために実際に使用されているプライマリメモリ140の量を追跡し、さらに、追加のメモリブロックを格納するための空きのプライマリメモリの量を追跡する。加えて、メモリ制御モジュール540は、様々な異なる状態のメモリブロックを格納するために使用されるプライマリメモリの量を追跡する。
【0055】
準備完了状態のメモリブロックによって占有されるプライマリメモリ使用量が「準備完了状態スレッショルド」と呼ばれる指定された制限を超えている場合、メモリ制御モジュール540は圧縮モジュール520を使用して、準備完了状態の少なくともいくつかのメモリブロックを「圧縮」状態へ推論的に圧縮する。一実施形態では、準備完了状態スレッショルドは、利用可能なプライマリメモリ140の80%である。
【0056】
メモリ制御モジュール540は、圧縮メモリブロックと対応する非圧縮メモリブロックの双方をプライマリメモリ140に維持する。圧縮メモリブロックは、プライマリメモリの使用量がさらに増加したときのセカンダリメモリ150への転送について準備完了となっている。プライマリメモリ140内の非圧縮メモリブロックであって、対応する圧縮ブロックもプライマリメモリに格納されている、非圧縮目厭離ブロックは、「準備完了および圧縮」状態にあると呼ばれる。ツールモジュール420が準備完了および圧縮状態のメモリブロックにアクセスする場合、メモリ制御モジュール540は、圧縮状態の対応するブロックを解放することにより(例えばリサイクルすることにより)、メモリブロックを準備完了状態に変換し得る。一実施形態において、メモリ制御モジュール540は、ツールモジュール420がメモリブロックに書き込む場合、メモリブロックを準備完了状態に変換し、準備完了状態の変換されたメモリブロックに書き込むことにより要求に応える。ツールモジュール420がメモリブロックから読み取る場合、メモリ制御モジュール540は、準備完了および圧縮状態のメモリブロックを使用して、メモリブロックをその状態のままにして、読み取りアクセスを提供し得る。
【0057】
プライマリメモリ140の使用量が準備完了状態スレッショルドを超えて増加し続ける場合、メモリ制御モジュール540は、準備完了および圧縮状態の少なくともいくつかのメモリブロックを解放し、したがってこれらのブロックによって占有されたプライマリメモリを解放する。一実施形態では、プライマリメモリ140の使用量が準備完了状態スレッショルドよりも大きい解放スレッショルドを超える場合、メモリ制御モジュール540は、メモリブロックの新たな割り当てのための余地を作るために準備完了および圧縮状態のメモリブロックを解放する。一実施形態では、解放スレッショルドはプライマリメモリの100%である。したがって、メモリ制御モジュール540は、プライマリメモリの使用量が100%に達すると、準備完了および圧縮状態のメモリブロックを解放する。
【0058】
さらに、メモリ制御モジュール540は、圧縮状態のメモリブロックをセカンダリメモリ150に転送することにより、プライマリメモリ140内のスペースを利用可能にする。一実施形態では、メモリ制御モジュール540は、圧縮状態のメモリブロックによって占有されたプライマリメモリ140の量を追跡する。圧縮状態のメモリブロックがプライマリメモリのスレッショルド量(「圧縮」スレッショルド)を超える場合、メモリ制御モジュール540は、圧縮ブロックをセカンダリメモリに書き込むことおよびブロックが保存されていたプライマリメモリ140を解放することにより、圧縮ブロックの少なくともいくつかをセカンダリメモリ150に転送する。セカンダリメモリ150に格納されたメモリブロックは、「オンディスク」状態にあると呼ばれる。
【0059】
プライマリメモリ140の使用量が減少すると、メモリ制御モジュール540は、オンディスク状態のメモリブロックをセカンダリメモリ150からプライマリメモリに推論的に転送する。メモリ制御モジュール540は、プライマリメモリの使用量が使用量スレッショルドを下回ったとき(または逆に、プライマリメモリ内の未割り当ての空きスペースが閾値を超えたとき)を検出する。一実施形態では、使用量スレッショルドは50%である。プライマリメモリ使用量が使用量スレッショルドを下回ったことに応答して、メモリ制御モジュール540は、オンディスク状態の少なくともいくつかのメモリブロックをプライマリメモリ140に転送する。
【0060】
これらの転送されたメモリブロックは、圧縮状態でプライマリメモリ140に格納される。加えて、メモリ制御モジュール540は、転送されたメモリブロックをセカンダリメモリ150にオンディスク状態で保持する。したがって、これらのメモリブロックは、圧縮状態とオンディスク状態の双方で同時に保持される。プライマリメモリ140の使用量が増加し、例えば圧縮スレッショルドを超える場合、メモリ制御モジュール540は、対応するオンディスクメモリブロックを有する圧縮メモリブロックの少なくともいくつかを解放する。このようにして、プライマリメモリからセカンダリメモリ150にメモリブロックを転送する必要なく、プライマリメモリ140が回復される。同様に、ツールモジュール420が圧縮状態およびオンディスク状態の双方のメモリブロックにアクセスする場合、メモリ制御モジュール540はメモリブロックの圧縮バージョンを圧縮解除して準備完了状態にし、オンディスク状態のメモリブロックを解放する。
【0061】
メモリ制御モジュール540の一実施形態は、特定のブロックがツールモジュール420によって割り当てられおよび/またはアクセスされたときに基づいて、メモリブロックに対して上述した動作を順番に実行する。ブロックを準備完了状態から準備完了および圧縮状態に変換する場合、メモリ制御モジュール540は、もっとも最近割り当てられたメモリブロックを最初に圧縮する。別の言い方をすると、メモリ制御モジュール540は、割り当てからの経過時間の昇順でブロックを圧縮する。メモリ制御モジュール540は、圧縮ブロックをセカンダリメモリ150に(たとえば、オンディスク状態に)移動するときにもこの順序を使用する。メモリ制御モジュール540はこの順序を使用する。なぜなら、データレコードに対して複数のパスを実行するツールは、割り当て時にブロックにアクセスし、第2パスまで再びアクセスしない傾向があるからである。したがって、最近より前に割り当てられたブロックがもっとも最近割り当てられたブロックよりも前にアクセスされるという仮定に基づいて、もっとも最近割り当てられたブロックが圧縮される。
【0062】
メモリブロックをセカンダリメモリ150からプライマリメモリ140に転送するとき、メモリ制御モジュール540は、メモリブロックがセカンダリメモリ150に転送された時(すなわち、ブロックがオンディスク状態に変換された時)に基づく順序を使用する。メモリ制御モジュール540の実施形態は、もっとも最新でないブロックから開始してセカンダリメモリ150からメモリを取り出す。言い換えれば、メモリ制御モジュール540は、ブロックがセカンダリメモリ150に格納されてからの経過時間の降順でブロックを取り出す。メモリ制御モジュール540は、ツールモジュール420がより新しいブロックにアクセスする前により古いブロックにアクセスするという仮定に基づいてこの順序を使用する。
【0063】
図6は、一実施形態による、データ解析アプリケーション内においてメモリを割り当てるプロセスを示すフローチャートである。いくつかの実施形態では、方法はメモリ制御モジュール540によって実行されるが、方法の動作の一部または全部は他の実施形態の他のエンティティによって実行されてもよい。いくつかの実施形態では、フローチャートの操作は異なる順序で実行され、異なるおよび/または追加のステップを含むことができる。
【0064】
メモリ制御モジュール540は、メモリのブロックを割り当てるための割り当て要求を受信する610。メモリ制御モジュール540は、受信した割り当て要求を許可し620、プライマリメモリ140の使用量を決定する。例えば、メモリ制御モジュール540は、準備完了状態のメモリブロックおよび圧縮状態のメモリブロックによって占有されたプライマリメモリ140の量を決定する。準備完了状態スレッショルドを超えているプライマリメモリ使用量に応答して、メモリ制御モジュール540は準備完了状態のメモリブロックを圧縮して630、準備完了および圧縮状態のメモリブロックならびに圧縮状態のメモリブロックを生成する。解放スレッショルドを超えるプライマリメモリの使用量に応答して、メモリ制御モジュール540は、対応する圧縮状態のメモリブロックを保持する一方で、準備完了および圧縮状態のメモリブロックを解放する640。
【0065】
圧縮スレッショルドを超える圧縮状態のメモリブロックに応答して、メモリ制御モジュール540は、圧縮メモリブロックをセカンダリメモリ150に転送し650、オンディスク状態のブロックを形成する。これらの圧縮メモリブロックは、圧縮状態およびオンディスク状態の双方で保持し得る。利用可能なプライマリメモリ140が増加する場合、例えば圧縮スレッショルドを超える場合、メモリ制御モジュール540は、対応するオンディスクメモリブロックを有する1つ以上の圧縮メモリブロックをプライマリメモリ140から解放することができる。
【0066】
プライマリメモリ使用量が使用量スレッショルドを下回ったことに応答して、メモリ制御モジュール540は、オンディスク状態のメモリブロックをセカンダリメモリ150からプライマリメモリ140に転送する660。これらのメモリブロックは、オンディスク状態および圧縮状態の双方で維持され得る。
【0067】
図7は、一実施形態による、データブロックへのアクセスを要求するツールモジュール420にデータブロックを提供するプロセスを示すフローチャートである。いくつかの実施形態では、方法はメモリ制御モジュール540によって実行されるが、方法の動作の一部または全部は他の実施形態の他のエンティティによって実行されてもよい。いくつかの実施形態では、フローチャートの操作は異なる順序で実行され、異なるおよび/または追加のステップを含むことができる。
【0068】
メモリ制御モジュール540は、メモリブロックにアクセスする要求を受け取る710。場合によっては、要求はツールモジュール420によって行われます。いくつかの実施形態では、メモリ制御モジュール540は、要求されたブロックが準備完了状態にあるかどうかを決定する720。要求されたメモリブロックは、非圧縮状態でプライマリメモリ140に格納されていると、準備完了状態である。
【0069】
要求されたメモリブロックが準備完了状態にないという決定に応答して、メモリ制御モジュール540は、要求されたメモリブロックの状態を準備完了状態に更新する730。たとえば、メモリ制御モジュール540は、要求されたメモリブロックが圧縮状態にあると決定されると、要求されたメモリブロックを解凍する。別の例として、メモリ制御モジュール540は、要求されたメモリブロックがオンディスク状態で格納されていると判断すると、要求されたメモリブロックをセカンダリメモリ150からプライマリメモリ140に転送する。メモリ制御モジュール540が、要求されたメモリブロックが準備完了状態にあると決定した場合、メモリ制御モジュール540は、要求されたメモリブロックの状態を変更せず、次のステップの実行に進むことができる。次いで、メモリ制御モジュール540は、アクセス要求に応答して、要求されたメモリブロックを提供する740。例えば、メモリ制御モジュール540は、要求されたメモリブロックを、アクセス要求を行ったツールモジュール420に送信する。
【0070】
別の実施形態では、準備完了および圧縮状態のメモリブロックに対する読み取りアクセス要求を受信すると、メモリ制御モジュール540は、準備完了および圧縮状態のメモリブロックのバージョン(すなわち、ブロックの非圧縮バージョン)を使用して要求に対処し、およびメモリブロックのバージョンをプライマリメモリの圧縮状態のままにする。これにより、要求が満たされ、メモリブロックを圧縮するために実行された作業が保持される。
【0071】
コンポーネントの特定の命名、用語の大文字化、属性、データ構造、またはその他のプログラミングまたは構造的側面は必須または重要ではなく、説明されている実施形態を実装するメカニズムは異なる名前、フォーマット、またはプロトコルを持っていてもよい。さらに、システムは、説明したようにハードウェアとソフトウェアの組み合わせを介して、または完全にハードウェア要素で実装され得る。また、本明細書で説明されるさまざまなシステムコンポーネント間の機能の特定の分割は単なる例示であり、必須ではない。単一のシステムコンポーネントによって実行される機能は、代わりに複数のコンポーネントによって実行され、複数のコンポーネントによって実行される機能は、代わりに単一のコンポーネントによって実行されてもよい。
【0072】
上記の説明のいくつかの部分は、情報の操作のアルゴリズムおよび記号表現の観点から機能を示している。これらのアルゴリズムの説明と表現は、データ処理技術の当業者によって一般的に使用され、彼らの仕事の内容を他の当業者に効果的に伝える手段である。これらの操作は、機能的または論理的に説明されているが、コンピュータプログラムによって実装されると理解される。さらに、一般性を失うことなく、これらの操作の配置をモジュールと呼ぶこと、または機能名で呼ぶことが便利な場合もある。
【0073】
上記の議論から明白であると特に明記しない限り、説明全体を通して、「処理」または「計算」または「計算」または「決定」または「表示」などの用語を利用する議論は、コンピュータシステムのメモリまたはレジスタ、またはその他の情報ストレージ、送信、表示デバイス内の物理(電子)量として表されるデータを操作および変換する、コンピュータシステムまたは同様の電子コンピューティングデバイスのアクションとプロセスと関連する。
【0074】
本明細書で説明される特定の実施形態は、アルゴリズムの形で説明されるプロセスステップおよび命令を含む。実施形態のプロセスステップおよび命令は、ソフトウェア、ファームウェア、またはハードウェアで実施でき、ソフトウェアで実施した場合、ダウンロードしてリアルタイムネットワークオペレーティングシステムで使用される異なるプラットフォームに常駐し、そこから操作できることに留意されたい。
【0075】
明細書で提示されるアルゴリズムおよび動作は、特定のコンピュータまたは他の装置に本質的に関連するものではない。本明細書の教示によるプログラムと共に様々な汎用システムを使用することもできるし、必要な方法ステップを実行するためのより特殊な装置を構築することが便利であることが判明する場合もある。これらのさまざまなシステムに必要な構造は、同等のバリエーションとともに、当業者には明らかであろう。さらに、本実施形態は、特定のプログラミング言語に関して説明されていない。本明細書で説明する実施形態の教示を実施するために、様々なプログラミング言語を使用できることが理解される。
【0076】
実施形態は、多数のトポロジーにわたる多種多様なコンピュータネットワークシステムによく適している。この分野では、大規模ネットワークの構成と管理は、ストレージデバイスと、インターネットなどのネットワークを介して異なるコンピュータとストレージデバイスに通信可能に結合されたコンピュータを含む。
【0077】
最後に、明細書で使用される文言は、主に読みやすさと教育目的のために選択されたものであり、本発明の主題を描写または制限するために選択されていない場合がある。したがって、実施形態の開示は、例示的であることを意図しているが、限定を意図するものでない。
モジュールは、コンピュータ内のメモリを管理する。モジュールは、コンピュータに関連付けられているプライマリメモリの使用量を監視する。プライマリメモリは、準備完了状態のメモリブロックを格納する。準備状態のメモリブロックによるプライマリメモリの使用量が準備完了状態スレッショルドを超えることに応答して、モジュールは準備完了状態のメモリブロックの少なくともいくつかを圧縮して、準備完了および圧縮状態のメモリブロックを形成する。準備完了および圧縮状態のメモリブロックによるプライマリメモリ使用量が解放スレッショルドを超えていることに応じて、モジュールは準備完了および圧縮状態のメモリブロックの少なくともいくつかを解放する。圧縮状態のメモリブロックによるメモリ右ブロックによるプライマリメモリ使用量が圧縮スレッショルドを超えていることに応じて、モジュールは圧縮状態のメモリブロックの少なくともいくつかをコンピュータに関連付けられたセカンダリメモリに転送する。