(57)【特許請求の範囲】
【請求項１】
コンピュータ内のメモリを管理するコンピュータ実装方法であって、
前記コンピュータに関連付けられたプライマリメモリの使用量を監視することであって、前記プライマリメモリは、準備完了状態の圧縮されていないメモリブロックを格納する、ことと、
前記準備完了状態の前記圧縮されていないメモリブロックによるプライマリメモリ使用量が準備完了状態スレッショルドを超過していることに応じて、
前記準備完了状態の前記圧縮されていないメモリブロックの少なくともいくつかを圧縮して、圧縮されたメモリブロックを形成することと、
前記圧縮されていないメモリブロックの少なくともいくつかを準備完了および圧縮状態のメモリブロックとして前記プライマリメモリに格納することと、
前記圧縮されたメモリブロックを圧縮状態のメモリブロックとして前記プライマリメモリに格納することと、
前記準備完了および圧縮状態の前記メモリブロックによるプライマリメモリ使用量が解放スレッショルドを超えていることに応じて、前記準備完了および圧縮状態の前記メモリブロックの少なくともいくつかを解放することと、
前記圧縮状態の前記メモリブロックによるプライマリメモリ使用量が圧縮スレッショルドを超過していることに応じて、前記圧縮状態のメモリブロックの少なくともいくつかを前記コンピュータに関連付けられたセカンダリメモリに転送して、オンディスク状態のメモリブロックを形成することと
を含む、方法。
【請求項２】
前記コンピュータで実行されているモジュールからメモリブロックにアクセスする要求を受信することと、
前記要求されたメモリブロックが準備完了状態にあるかどうかを決定することと、
前記要求されたメモリブロックが準備完了状態にないという決定に応答して、前記要求されたメモリブロックを前記準備完了状態に変更することと、
前記アクセス要求に応答して、前記準備完了状態の前記要求されたメモリブロックを提供することと
をさらに含む、請求項１に記載の方法。
【請求項３】
プライマリメモリ使用量が使用量スレッショルドを下回ったことに応答して、前記オンディスク状態の少なくともいくつかのメモリブロックを前記セカンダリメモリから前記プライマリメモリに転送すること
をさらに含む、請求項１に記載の方法。
【請求項４】
前記セカンダリメモリから前記プライマリメモリに転送された前記メモリブロックは、前記圧縮状態で前記プライマリメモリに格納され、
前記オンディスク状態の前記転送されたメモリブロックを前記セカンダリメモリに保持することと、
前記圧縮スレッショルドを超えるプライマリメモリ使用量に応答して、前記セカンダリメモリから前記プライマリメモリに転送された前記圧縮状態で格納されているメモリブロックを解放すること
をさらに含む、請求項３に記載の方法。
【請求項５】
前記コンピュータ上で実行されているモジュールから、前記準備完了および圧縮状態のメモリブロックにアクセスする要求を受信することと、
前記アクセス要求が読み取り要求か書き込み要求かを決定することと、
前記アクセス要求が書き込み要求であると決定したことに応答して、
前記要求されたメモリブロックを前記準備完了状態に変更することと、
前記要求されたメモリブロックに対応する前記圧縮状態のメモリブロックを解放することと、
前記アクセス要求が読み込み要求であると決定したことに応答して、
前記準備完了および圧縮状態の前記メモリブロックを使用して前記読み取り要求に対応することと、
前記要求されたメモリブロックを前記準備完了および圧縮状態に維持することと
をさらに含む、請求項１に記載の方法。
【請求項６】
前記準備完了状態の前記圧縮されていないメモリブロックの少なくともいくつかを圧縮して前記圧縮されたメモリブロックを形成することは、
前記準備完了状態の前記圧縮されていないメモリブロックを、前記圧縮されていないメモリブロックの割り当てからの経過時間の昇順で圧縮すること
を含む、請求項１に記載の方法。
【請求項７】
前記プライマリメモリは、前記セカンダリメモリに比べて、メモリブロックへのより高速なアクセスを提供する、請求項１に記載の方法。
【請求項８】
コンピュータ内のメモリを管理するコンピュータシステムであって、
コンピュータ実行可能命令を格納する実行可能なコンピュータプログラム命令を格納する非一時的コンピュータ可読記憶媒体を備え、前記コンピュータ実行可能命令は、実行されるとコンピュータプロセッサに、
前記コンピュータに関連付けられたプライマリメモリの使用量を監視するステップであって、前記プライマリメモリは、準備完了状態の圧縮されていないメモリブロックを格納する、ステップと、
前記準備完了状態の前記圧縮されていないメモリブロックによるプライマリメモリ使用量が準備完了状態スレッショルドを超過していることに応じて、
前記準備完了状態の前記圧縮されていないメモリブロックの少なくともいくつかを圧縮して、圧縮されたメモリブロックを形成するステップと、
前記圧縮されていないメモリブロックの少なくともいくつかを準備完了および圧縮状態のメモリブロックとして前記プライマリメモリに格納するステップと、
前記圧縮されたメモリブロックを圧縮状態のメモリブロックとして前記プライマリメモリに格納するステップと、
前記準備完了および圧縮状態の前記メモリブロックによるプライマリメモリ使用量が解放スレッショルドを超えていることに応じて、前記準備完了および圧縮状態の前記メモリブロックの少なくともいくつかを解放するステップと、
前記圧縮状態の前記メモリブロックによるプライマリメモリ使用量が圧縮スレッショルドを超過していることに応じて、前記圧縮状態のメモリブロックの少なくともいくつかを前記コンピュータに関連付けられたセカンダリメモリに転送して、オンディスク状態のメモリブロックを形成するステップと
を含むステップを実行させる、システム。
【請求項９】
前記コンピュータプロセッサによって実行されるステップが、
前記コンピュータで実行されているモジュールからメモリブロックにアクセスする要求を受信するステップと、
前記要求されたメモリブロックが準備完了状態にあるかどうかを決定するステップと、
前記要求されたメモリブロックが準備完了状態にないという決定に応答して、前記要求されたメモリブロックを準備完了状態に変更するステップと、
前記アクセス要求に応答して、前記準備完了状態の前記要求されたメモリブロックを提供するステップと、
をさらに含む、請求項８に記載のシステム。
【請求項１０】
前記コンピュータプロセッサによって実行されるステップが、
プライマリメモリ使用量が使用量スレッショルドを下回ったことに応答して、前記オンディスク状態の少なくともいくつかのメモリブロックを前記セカンダリメモリから前記プライマリメモリに転送するステップ
をさらに含む、請求項８に記載のシステム。
【請求項１１】
前記セカンダリメモリから前記プライマリメモリに転送された前記メモリブロックは、前記圧縮状態で前記プライマリメモリに格納され、前記コンピュータプロセッサによって実行されるステップは、
前記オンディスク状態の前記転送されたメモリブロックを前記セカンダリメモリに保持するステップと、
プライマリメモリ使用量が前記圧縮スレッショルドを超えるに応答して、前記セカンダリメモリから前記プライマリメモリに転送された前記圧縮状態で格納されている前記メモリブロックを解放するステップと
をさらに含む、請求項１０に記載のシステム。
【請求項１２】
前記コンピュータプロセッサによって実行されるステップが、
前記コンピュータ上で実行されているモジュールから、前記準備完了および圧縮状態のメモリブロックにアクセスする要求を受信するステップと、
前記アクセス要求が読み取り要求か書き込み要求かを決定するステップと、
前記アクセス要求が書き込み要求であると決定したことに応答して、
前記要求されたメモリブロックを前記準備完了状態に変更するステップと、
前記要求されたメモリブロックに対応する前記圧縮状態のメモリブロックを解放するステップと、
前記アクセス要求が読み込み要求であると決定したことに応答して、
前記準備完了および圧縮状態の前記メモリブロックを使用して前記読み取り要求に対応するステップと、
前記要求されたメモリブロックを前記準備完了および圧縮状態に維持するステップと
をさらに含む、請求項８に記載のシステム。
【請求項１３】
前記準備完了状態の前記圧縮されていないメモリブロックの少なくともいくつかを圧縮して前記圧縮されたメモリブロックを形成することは、
前記準備完了状態の前記圧縮されていないメモリブロックを、前記圧縮されていないメモリブロックの割り当てからの経過時間の昇順で圧縮すること
を含む、請求項８に記載のシステム。
【請求項１４】
前記プライマリメモリは、前記セカンダリメモリに比べて、メモリブロックへのより高速なアクセスを提供する、請求項８に記載のシステム。
【請求項１５】
コンピュータ内のメモリを管理するための実行可能なコンピュータプログラム命令を格納する非一時的コンピュータ可読記憶媒体であって、前記コンピュータプログラム命令は、実行時にコンピュータプロセッサに、
前記コンピュータに関連付けられたプライマリメモリの使用量を監視することであって、前記プライマリメモリは、準備完了状態の圧縮されていないメモリブロックを格納する、ことと、
前記準備完了状態の前記圧縮されていないメモリブロックによるプライマリメモリ使用量が準備完了状態スレッショルドを超過していることに応じて、
前記準備完了状態の前記圧縮されていないメモリブロックの少なくともいくつかを圧縮して、圧縮されたメモリブロックを形成することと、
前記圧縮されていないメモリブロックの少なくともいくつかを準備完了および圧縮状態のメモリブロックとして前記プライマリメモリに格納することと、
前記圧縮されたメモリブロックを圧縮状態のメモリブロックとして前記プライマリメモリに格納することと、
前記準備完了および圧縮状態の前記メモリブロックによるプライマリメモリ使用量が解放スレッショルドを超えていることに応じて、前記準備完了および圧縮状態の前記メモリブロックの少なくともいくつかを解放することと、
前記圧縮状態の前記メモリブロックによるプライマリメモリ使用量が圧縮スレッショルドを超過していることに応じて、前記圧縮状態のメモリブロックの少なくともいくつかを前記コンピュータに関連付けられたセカンダリメモリに転送して、オンディスク状態のメモリブロックを形成することと
を行わせる命令を含む、コンピュータ可読記憶媒体。
【請求項１６】
前記コンピュータ内のメモリを管理するための前記コンピュータプログラム命令は、実行されると前記コンピュータプロセッサに、
前記コンピュータで実行されているモジュールからメモリブロックにアクセスする要求を受信することと、
前記要求されたメモリブロックが準備完了状態にあるかどうかを決定することと、
前記要求されたメモリブロックが準備完了状態にないという決定に応答して、前記要求されたメモリブロックを前記準備完了状態に変更することと、
前記アクセス要求に応答して、前記準備完了状態の前記要求されたメモリブロックを提供することと
を行わせる命令をさらに含む、請求項１５に記載のコンピュータ可読媒体。
【請求項１７】
前記コンピュータ内のメモリを管理するための前記コンピュータプログラム命令は、実行されると前記コンピュータプロセッサに、
プライマリメモリ使用量が使用量スレッショルドを下回ったことに応答して、前記オンディスク状態の少なくともいくつかのメモリブロックを前記セカンダリメモリから前記プライマリメモリに転送することと
を行わせる命令をさらに含む、請求項１５に記載のコンピュータ可読媒体。
【請求項１８】
前記セカンダリメモリから前記プライマリメモリに転送された前記メモリブロックは、前記圧縮状態で前記プライマリメモリに格納され、前記コンピュータ内のメモリを管理するための前記コンピュータプログラム命令は、実行されると、前記コンピュータのプロセッサに、
前記オンディスク状態の前記転送されたメモリブロックを前記セカンダリメモリに保持することと、
プライマリメモリ使用量が前記圧縮スレッショルドを超えるに応答して、前記セカンダリメモリから前記プライマリメモリに転送された前記圧縮状態で格納されている前記メモリブロックを解放することと
を行わせる命令をさらに含む、請求項１７に記載のコンピュータ可読媒体。
【請求項１９】
前記コンピュータ内のメモリを管理するための前記コンピュータプログラム命令は、実行されると前記コンピュータプロセッサに、
前記コンピュータ上で実行されているモジュールから、前記準備完了および圧縮状態のメモリブロックにアクセスする要求を受信することと、
前記アクセス要求が読み取り要求か書き込み要求かを決定することと、
前記アクセス要求が書き込み要求であると決定したことに応答して、
前記要求されたメモリブロックを前記準備完了状態に変更することと、
前記要求されたメモリブロックに対応する前記圧縮状態のメモリブロックを解放することと、
前記アクセス要求が読み込み要求であると決定したことに応答して、
前記準備完了および圧縮状態の前記メモリブロックを使用して前記読み取り要求に対応することと、
前記要求されたメモリブロックを前記準備完了および圧縮状態に維持することと
を行わせる命令をさらに含む、請求項１５に記載のコンピュータ可読媒体。
【請求項２０】
前記準備完了状態の前記圧縮されていないメモリブロックの少なくともいくつかを圧縮して前記圧縮されたメモリブロックを形成するための前記コンピュータプログラム命令は、
実行時に前記コンピュータプロセッサに、
前記準備完了状態の前記圧縮されていないメモリブロックを、前記圧縮されていないメモリブロックの割り当てからの経過時間の昇順で圧縮すること
を行わせる命令を含む、請求項１５に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
説明される実施形態は、一般に、コンピュータメモリ管理に関し、特に、大量のデータを処理しながらメモリを割り当てることに関する。
【背景技術】
【０００２】
ビッグデータ解析などのデータ解析プラットフォームの成長は、データ処理を、ビジネス価値のある情報を抽出するために大量のデータを処理するツールにまで拡大してきた。たとえば、小規模企業は、専用のコンピューティングおよび人的資源を使用するサードパーティのデータ解析環境を利用して、外部データプロバイダー、内部データソース（ローカルコンピュータのファイルなど）、ビッグデータストア、クラウドベースのデータ（ソーシャルメディア情報など）のような、様々なデータソースからの膨大な量のデータを、収集、処理、および解析する。データ解析で使用されるこのような大きなデータセットを、有用な定量的および定性的情報を抽出する方法で処理することは、典型的に、強力なコンピュータデバイスに実装された複雑なソフトウェアツールが必要である。
【０００３】
さらに、異なるデータソースからのデータの大量のセットにアクセスし、処理し、解析するにために、効率的なデータ処理技術が必要とされる。さもないと、パフォーマンスのボトルネックが発生し、データ解析プラットフォームの機能を妨げ、データの処理を遅延させ、データから抽出される情報の品質を低下させる可能性が生じる場合がある。たとえば、プラットフォーム内の１つ以上のプロセッサがタイムリーにデータを処理できず、プラットフォーム内の他のサブシステムがプロセッサからの出力を待つとき遅延が発生する場合がある。別の例では、処理されているデータの量が、プラットフォームで使用可能な作業メモリのサイズを超える場合がある。この後者の例では、データがメモリへおよびメモリから転送されるときに遅延が発生する場合がある。
【発明の概要】
【０００４】
上記および他の問題は、コンピュータ内のメモリを管理するための方法、コンピュータシステム、およびコンピュータ可読記憶媒体によって対処される。本方法の一実施形態は、コンピュータに関連付けられたプライマリメモリの使用量を監視することを含み、プライマリメモリは、準備完了状態のメモリブロックを格納する。本方法は、準備完了状態のメモリブロックによるプライマリメモリ使用量が準備完了状態スレッショルドを超過していることに応じて、準備完了状態のメモリブロックの少なくともいくつかを圧縮して、準備完了および圧縮状態のメモリブロックならびに圧縮状態のメモリブロックを形成する。本方法はさらに、準備完了および圧縮状態のメモリブロックによるプライマリメモリ使用量が解放スレッショルドを超えていることに応じて、準備完了および圧縮状態のメモリブロックの少なくともいくつかを解放することを含む。本方法は、圧縮状態のメモリブロックによるプライマリメモリの使用量が圧縮スレッショルドを超過していることに応じて、圧縮状態のメモリブロックの少なくともいくつかをコンピュータに関連付けられたセカンダリメモリに転送して、オンディスク状態のメモリブロックを形成することも含む。
【０００５】
コンピュータシステムの一実施形態は、コンピュータプログラム命令を実行するためのコンピュータプロセッサを含む。システムはまた、実行されるとコンピュータプロセッサにステップを実行させるコンピュータプログラム命令を格納する非一時的なコンピュータ可読記憶媒体も含む。本方法の一実施形態は、コンピュータに関連付けられたプライマリメモリの使用量を監視することを含み、プライマリメモリは、準備完了状態のメモリブロックを格納する。本方法は、準備完了状態のメモリブロックによるプライマリメモリ使用量が準備完了状態スレッショルドを超過していることに応じて、準備完了状態のメモリブロックの少なくともいくつかを圧縮して、準備完了および圧縮状態のメモリブロックならびに圧縮状態のメモリブロックを形成する。本方法はさらに、準備完了および圧縮状態のメモリブロックによるプライマリメモリ使用量が解放スレッショルドを超えていることに応じて、準備完了および圧縮状態のメモリブロックの少なくともいくつかを解放することを含む。本方法は、圧縮状態のメモリブロックによるプライマリメモリの使用量が圧縮スレッショルドを超過していることに応じて、圧縮状態のメモリブロックの少なくともいくつかをコンピュータに関連付けられたセカンダリメモリに転送して、オンディスク状態のメモリブロックを形成することも含む。
【０００６】
非一時的なコンピュータ可読記憶媒体の実施形態は、実行可能なコンピュータプログラム命令を格納する。命令は、コンピュータに関連付けられたプライマリメモリの使用量を監視するために実行可能である。プライマリメモリは、準備完了状態のメモリブロックを格納する。命令は、準備完了状態のメモリブロックによるプライマリメモリ使用量が準備完了スレッショルドを超過していることに応じて、準備完了状態のメモリブロックの少なくともいくつかを圧縮して、準備完了および圧縮状態のメモリブロックならびに圧縮状態のメモリブロックを形成するためにさらに実行可能である。命令はさらに、準備完了および圧縮状態のメモリブロックによるプライマリメモリ使用量が解放スレッショルドを超えていることに応じて、準備完了および圧縮状態のメモリブロックの少なくともいくつかを解放する。命令は、圧縮状態のメモリブロックによるプライマリメモリの使用量が圧縮スレッショルドを超過していることに応じて、圧縮状態のメモリブロックの少なくともいくつかをコンピュータに関連付けられたセカンダリメモリに転送して、オンディスク状態のメモリブロックを形成することも含む。
【図面の簡単な説明】
【０００７】
【図１】図１は、一実施形態によるデータ解析システムを含むデータ解析環境を示すブロック図である。
【図２】図２は、一実施形態による、データを処理するデータ解析システムを使用して作成されたワークフローを示すブロック図である。
【図３】図３は、実施形態による図１のデータ解析システムとして使用するための典型的なコンピュータシステムの機能図を示すハイレベルブロック図である。
【図４】図４は、一実施形態によるデータ解析システムのデータ解析アプリケーションのより詳細な図を示すブロック図である。
【図５】図５は、一実施形態によるメモリ管理モジュールのより詳細な図を示すブロック図である。
【図６】図６は、一実施形態による、データ解析アプリケーション内においてメモリを割り当てるプロセスを示すフローチャートである。
【図７】図７は、一実施形態による、データブロックへのアクセスを要求するツールモジュールにデータブロックを提供するプロセスを示すフローチャートである。
【０００８】
図面は、例示のみを目的としてさまざまな実施形態を示す。当業者は、本明細書に例示された構造および方法の代替的実施形態が、本明細書に記載の本発明の原理から逸脱することなく利用することができることを以下の説明から容易に認識する。種々の図面における同様の参照記号および表示は、同様の要素を指す。
【発明を実施するための形態】
【０００９】
図１は、一実施形態によるデータ解析システム１１０を含むデータ解析環境１００を示すブロック図である。環境１００は、ネットワーク１３０を介してデータ解析システム１１０に接続された複数のデータソース１２０をさらに含む。例示された環境１００は、複数のデータソース１２０に結合された１つのデータ解析システム１１０のみを含むが、実施形態は、複数のデータ解析システムおよび単一のデータソースを有することができる。
【００１０】
データ解析システム１１０は、大量のデータを処理および解析するために利用されるコンピュータベースのシステムである。データは、ネットワーク１３０を介して複数のデータソース１２０から回収（collect）、収集（gather）、またはアクセスされる。データ解析システム１１０は、多種多様なデータソースからのデータにアクセスし、準備し、混合し、解析する際に使用されるスケーラブルなソフトウェアツールおよびハードウェアリソースを実装することができる。例えば、データ解析システム１１０は、データ集約型のプロセスとワークフローの実行をサポートする。データ解析システム１１０は、本明細書で説明されるメモリ管理技術を含むデータ解析機能を実装するために使用されるコンピューティングデバイスとすることができる。
【００１１】
データ解析システム１１０は、データ解析アプリケーション１６０として図１に示される１つ以上のソフトウェアアプリケーションをサポートするように構成することもできる。データ解析アプリケーション１６０は、１つ以上のデータソース１２０から取得した大量のデータを処理および解析する。場合によっては、データ解析アプリケーション１６０は、複数のエンドユーザにネットワーク化されたまたはクラウドベースのデータ解析ツールおよびマクロへのアクセスをサポートするソフトウェアを提供する。一例として、データ解析アプリケーション１６０は、ユーザが、モバイルアプリケーションストアまたは他のクラウドベースのサービスと同様の方法で、解析を共有、閲覧、および消費することを可能にする。解析データ、マクロ、およびワークフローは、たとえば、データ解析システム１１０の他のユーザがアクセスできる、小規模でカスタマイズ可能な解析アプリケーション（つまり、アプリ）としてパッケージ化されて実行されることができる。場合によっては、公開された解析アプリへのアクセスは、データ解析システム１１０によって管理されることができる。つまり、アクセスを許可することまたは取り消すことにより、アクセス制御およびセキュリティ機能を提供する。データ解析アプリケーション１６０は、作成、展開、公開、反復、更新などの解析アプリに関連付けられた機能を実行できる。
【００１２】
さらに、データ解析アプリケーション１６０は、アクセス、準備、ブレンド、解析、および解析結果を出力する機能など、データ解析に関係するさまざまな段階で実行される機能をサポートできる。場合によっては、データ解析アプリケーション１６０はさまざまなデータソースにアクセスして、たとえばデータのストリーム内の生データを取得できる。データ解析アプリケーション１６０によって収集されたデータストリームは、生データの複数のレコードを含むことができ、生データは異なる形式および構造である。少なくとも１つのデータストリームを受信した後、データ解析アプリケーション１６０は、データストリームのレコードをデータ解析操作への入力として使用されるようになることを可能にする操作を実行することができる。さらに、予測解析（たとえば、予測モデリング、クラスタリング、データ調査）など、レコードの統計的、定性的、または定量的処理に関与する解析機能は、データ解析アプリケーション１６０によって実装されることができる。
【００１３】
データ解析アプリケーション１６０はまた、視覚的グラフィカルユーザーインターフェース（ＧＵＩ）を介して、反復可能なワークフローを設計および実行するソフトウェアツールをサポートすることができる。一例として、データ解析アプリケーション１６０に関連付けられたＧＵＩは、データ混合、データ処理、および高度なデータ解析のためのドラッグアンドドロップのワークフロー環境を提供する。さらに、ワークフローには、特定の処理操作またはデータ解析機能を実行する一連のデータ処理ツールを含めることができる。ワークフローの一部である各ツールは、ツールに固有のデータに関連する機能を実行する。例として、ワークフローは、入力/出力操作、準備操作、参加操作、予測的操作、空間的操作、調査操作、ならびに分析および変換（parse and transform）操作のうちの１つ以上を含むさまざまなデータ解析機能を実装するツールを含めることができる。ワークフローの詳細は、図２に関連して説明される。
【００１４】
図１の実施形態では、データ解析システム１１０は、プライマリメモリ１４０およびセカンダリメモリ１５０を含む。いくつかの実施形態では、プライマリメモリ１４０は相対的に小さなデータ記憶領域への相対的に高速なアクセスを提供し、セカンダリメモリ１５０は相対的に大きなデータ記憶領域への相対的に低速なアクセスを提供する（「相対的」はプライマリメモリとセカンダリメモリとの間の差を指す）。例えば、プライマリメモリ１４０は、データ解析システム１１０で利用可能なランダムアクセスメモリ（ＲＡＭ）の一部、例えば１６ＧＢを含むことができる。対照的に、セカンダリメモリ１５０は、テラバイトのデータを格納できるデータ解析システム１１０と通信するハードディスクドライブ（ＨＤＤ）および／またはソリッドステートドライブ（ＳＳＤ）などのストレージデバイスの一部を含むことができる。
【００１５】
一実施形態では、データ解析アプリケーション１６０は、指定されたワークフローに従ってデータソース１２０からのデータの効率的な処理を提供するためにプライマリメモリおよびセカンダリメモリの使用量を割り当てる。例えば、処理中のデータが、プライマリメモリ１４０で利用可能な記憶スペースの量を超える場合がある。加えて、セカンダリメモリ１５０がデータを供給できる速度は、データ解析アプリケーション１６０内のツールがデータを消費できる速度よりも遅い場合がある。データ解析アプリケーション１６０は、データがツールに供給される速度を最適化する方法でプライマリメモリ１４０およびセカンダリメモリ１５０のメモリ管理を実行することにより、これらの問題に対処する。このように、メモリ管理は、データ解析システム１１０のみならず、データ解析アプリケーション１６０のパフォーマンスも改善する。
【００１６】
上述のように、データソース１２０は、電子データをデータ解析システム１１０に提供する。データソース１２０は、コンピュータ、データベース、またはクラウドストレージシステムであり得る。データソース１２０は、別のソースからデータを取り出すことができるコンピュータシステムであってもよい。データソース１２０は、データ解析システム１１０から離れていてもよく、ネットワーク１３０を介してデータを提供してもよい。さらに、データソース１２０の一部またはすべてはデータ解析システムに直接結合され、ネットワーク１３０を介してデータを渡すことなく、データを提供してもよい。データソース１２０によって提供されるデータは典型的に、データレコードに編成され、各データレコードは１つ以上の値を含む。たとえば、データソースによって提供されるデータレコードは、一連のコンマ区切りされた値を含む場合がある。データは、データ解析システムを使用する企業に関連する情報を記述する。例えば、データソース１２０からのデータは、ウェブサイト上でアクセス可能なコンテンツおよび／またはソーシャルメディアアプリケーションとのコンピュータベースの相互作用（例えば、クリック追跡データ）を記述することができる。
【００１７】
ネットワーク１３０は、データ解析システム１１０とデータソース１２０との間の通信経路を表す。一実施形態では、ネットワーク１３０はインターネットであり、標準の通信技術および／またはプロトコルを使用する。ネットワーク１３０を介して交換されるデータは、ハイパーテキストマークアップ言語（ＨＴＭＬ）、拡張マークアップ言語（ＸＭＬ）などを含む技術および／またはフォーマットを使用して表されることができる。別の実施形態では、エンティティは、上記の技術の代わりに、またはそれに加えて、カスタムおよび/または専用のデータ通信技術を使用することができる。
【００１８】
図２は、一実施形態による、データを処理するデータ解析システム１１０を使用して作成されたワークフロー２００を示すブロック図である。一実施形態では、ワークフロー２００は、データ解析システム１１０のＧＵＩによってサポートされる視覚的なワークフロー環境を使用して作成される。視覚的なワークフロー環境は、ワークフローを設計するためのソフトウェアコードを提供する必要をなくす、およびワークフローによって実装される複雑な数式を識別する必要をなくす、ドラッグアンドドロップツールのセットを動作させる。別の実施形態では、ワークフロー２００は、拡張マークアップ言語（ＸＭＬ）文書などの文書で作成および記述される。ワークフロー２００は、データ解析システム１１０のコンピュータデバイスによって実行される。しかしながら、他の実施形態では、ワークフロー２００は、ネットワーク（例えば、ネットワーク１３０）を介してデータ解析システム１１０に通信可能に接続され得る別のコンピュータデバイスに配備される。
【００１９】
ワークフローは、特定の処理操作またはデータ解析機能を実行する一連のツールを含むことができる。一般的な例として、ワークフローのツールは、入力／出力操作、準備操作、参加操作、予測的操作、空間的操作、調査操作、ならびに分析および変換操作のうちの、データ解析機能の１つ以上を実行できる。ワークフローの実装は、データ解析プロセスの定義、実行、自動化を含むことができ、データがワークフロー内の各ツールに渡され、各ツールは受信したデータに対してそれぞれの処理操作を実行する。個々のレコードの集約グループを含むレコードは、ワークフローのツールを通して渡されることができ、このことは、個々の処理操作がデータに対してより効率的に動作することを可能にする。このようなデータ集約技術は、大量のデータを処理する場合でも、ワークフローの開発と実行の速度を上げることができる。ワークフローは、指定されたツールの操作シーケンスを指定して、反復可能な一連の操作を定義または構造化できる。場合によっては、ワークフローに含まれるツールが線型順序で実行される。別の場合データは、複数のツールを並行して実行できる。
【００２０】
図示のように、図２のワークフロー２００は、入力ツール２０５および２０６、ならびにブラウズツール２３０として示される入力／出力ツールを含む。入力ツール２０５および２０６は、特定のデータソース１２０からのレコードにアクセスするように機能する。入力ツール２０５および２０６は、アクセスされたレコードをワークフローに取り込み、ワークフロー２００の後続のツールにレコードを提供する。この例では、入力ツール２０５はアクセスされたレコードをフィルタツール２１０に提供し、入力ツール２０６はアクセスされたレコードを選択ツール２１１に提供する。ブラウズツール２３０は、ワークフロー２００の最後に位置し、ワークフロー２００の上流のツールのそれぞれの実行から生じる出力を受け取る。この例では、ブラウズツール２３０は、ワークフロー２００の最後に配置されているが、ワークフローの任意の点にブラウズツール２３０が追加され、ワークフローの上流ツールの実行の様々な結果をレビューおよび検証することができる。
【００２１】
図２の例を続けると、ワークフロー２００は、フィルタツール２１０、選択ツール２１１、フォーミュラツール２１５、およびサンプルツール２１２として示される準備ツールを含む。フィルタツール２１０は、式に基づいてレコードをクエリし、式を満たすレコードを含む真のストリームおよび式を満たさないレコードを含む偽のストリームの２つのストリームにデータを分ける。選択ツール２１１は、フィールドの選択、選択解除、並べ替え、および名前変更、フィールドタイプまたはサイズの変更、ならびに説明の割り当てを行うために使用されることができる。フォーミュラツール２１５は、多種多様な計算および/または演算を実行する１つ以上の式を使用してフィールドを作成または更新する。サンプルツール２１２は、受信したレコードのストリームを、レコードの数、割合、またはランダムなセットに限定する。ワークフロー２００は、複数のデータソースをブレンドするジョインツール２２０も含む。
【００２２】
ワークフロー２００は、複数のデータソースをブレンドするジョインツール２２０も含む。具体的には、ジョインツール２２０は、共通のフィールド（またはレコード位置）に基づいて２つの入力データストリームを組み合わせる。図２のワークフロー２００は、さらなる解析で使用されるフォーマットにデータを再構築および再形成することができる分析および変換ツールであるサマライズツール２２５を含むように示されている。サマライズツール２２５は、グループ化、合計、カウント、空間処理、および文字列連結によってデータの要約化を実行することもできる。一実施形態では、サマライズツール２２５によって生成された出力は、計算の結果を含む。
【００２３】
いくつかの実施形態では、ワークフロー２００の実行は、入力ツール２０５が、フィルタツール２１０およびフォーミュラツール２１５を通じて、すべてのレコードが処理されてジョインツール２２０に到達するまで、レコードを一度に１つ渡すことを生じさせる。その後、入力ツール２０６は、選択ツール２１１およびサンプルツール２１２を通じて、レコードが同じジョインツール２２０に渡されるまで、レコードを一度に１つ渡し始める。ワークフロー２００のいくつかの個々のツールは、データの最後のブロックを処理しながらデータのブロックの読み取りを開始したり、ソートツールなどのコンピュータ集約的な操作を複数の部分に分割したりするなど、独自の並列操作を実装する機能を持つことができる。ただし、一部の既存のワークフローテクニックでは、レコードのセットからの各レコードは、ワークフローのツールが複数のレコードを必要とする処理操作（たとえば、ソートツール、ジョインツール、サマライズツールなど）に到達するまで、ワークフローの各ツールによってパイプライン方式で一度に１レコードずつ個別に処理される。
【００２４】
図３は、実施形態による図１のデータ解析システム１１０として使用するための典型的なコンピュータシステム３００の機能図を示すハイレベルブロック図である。コンピュータシステム３００は、図２のワークフローを実装するためにデータ解析アプリケーション１６０を実行することができる。
【００２５】
例示されるコンピュータシステム３００は、チップセット３０４に結合された少なくとも１つのプロセッサ３０２を含む。プロセッサ３０２は、同じダイ上に複数のプロセッサコアを含むことができる。チップセット３０４には、プライマリメモリ１４０、セカンダリメモリ１５０、キーボード３１０、グラフィックスアダプタ３１２、ポインティングデバイス３１４、およびネットワークアダプタ３１６も結合されている。ディスプレイ３１８は、グラフィックスアダプタ３１２に結合されている。一実施形態では、チップセット３０４の機能は、メモリコントローラハブ３２０およびＩ／Ｏコントローラハブ３２２によって提供される。ネットワークアダプタ３１６は、コンピュータシステム３００をネットワーク１３０に結合する。
【００２６】
いくつかの実施形態では、コンピュータシステム３００は、追加のコンポーネント、より少ないコンポーネント、または異なるコンポーネントを有してもよく、コンポーネントは違うように結合されていてもよい。例えば、コンピュータシステム３００の実施形態は、ディスプレイおよび／またはキーボードを欠く場合がある。別の例として、コンピュータシステム３００は、複数のプライマリメモリ１４０および／またはセカンダリメモリ１５０を有してもよい。加えて、コンピュータシステム３００は、いくつかの実施形態では、ラックマウント型ブレードサーバーとして、またはクラウドサーバーインスタンスとしてインスタンス化されてもよい。
【００２７】
プライマリメモリ１４０は、非一時的なコンピュータ可読記憶媒体であり、プロセッサ３０２によって使用される命令およびデータを保持する。いくつかの実施形態では、プライマリメモリ１４０はランダムアクセスメモリである。データアクセスに要求される時間の長さは比較的短い。したがって、プロセッサによってアクセスされているデータ、または近いうちにアクセスされる可能性が高いデータをプライマリメモリ１４０内に格納することが有利である。
【００２８】
セカンダリメモリ１５０は、非一時的なコンピュータ可読記憶媒体であり、プロセッサ３０２によって使用される命令およびデータを保持する。セカンダリメモリは、本明細書で「セカンダリデータブロック」と呼ばれ、１つのユニットとしてアクセスされる、データブロックにデータを格納する。セカンダリデータブロックサイズは、セカンダリメモリ１５０のサイズに応じて異なり、１ＫＢから８ＫＢの範囲であり得る。
【００２９】
実施形態に応じて、セカンダリメモリ１５０は、セカンダリデータブロックへのランダムアクセスまたはシーケンシャルアクセスをサポートしてもよい（たとえば、セカンダリメモリがＨＤＤであるかＳＳＤであるかに応じて）。したがって、セカンダリメモリ１５０を伴うデータアクセスに必要な時間は、アクセスされるロケーションに応じて異なり得る。いずれにしても、セカンダリメモリ１５０を伴うデータアクセスに必要な時間の長さは、プライマリメモリ１４０を伴う同等のアクセスに必要な時間の長さよりも長い。したがって、プロセッサによってアクセスされている、または近いうちにアクセスされる可能性が高いデータをセカンダリメモリ１５０内に格納することは、コンピュータシステム３００の性能に有害である。
【００３０】
コンピュータシステム３００は、限られた量のプライマリメモリ１４０を含む。例えば、システム３００は、１６ＧＢまたは３２ＧＢのプライマリメモリを含み得る。しかしながら、コンピュータシステム３００は、事実上無制限の量のセカンダリメモリ１５０を含む。たとえば、システムは、数百ギガバイトまたはテラバイトのセカンダリメモリを含み得る。典型的に、データ解析システム１１０によって処理されているデータの量は、プライマリメモリ１４０の容量を超過する。したがって、データの少なくとも一部はセカンダリメモリ１５０に格納される。データがワークフローを通過するときに、データはプライマリメモリ１４０とセカンダリメモリ１５０との間で移動される。
【００３１】
コンピュータシステム３００は、本明細書で説明される機能を提供するためのコンピュータプログラムモジュールを実行するように適合されている。本明細書で使用される「モジュール」という用語は、特定の機能を提供するためのコンピュータプログラム命令およびその他のロジックを指す。モジュールはハードウェア、ファームウェア、および/またはソフトウェアで実装されることができる。モジュールはプロセスとして実行できる。さらに、プロセス内の１つ以上のスレッドとしてモジュールは実行されることができる。モジュールは典型的に、セカンダリメモリ３０８に格納され、プライマリメモリ３０６にロードされ、プロセッサ３０２によって実行される。
【００３２】
図４は、一実施形態によるデータ解析システム１１０のデータ解析アプリケーション１６０のより詳細な図を示すブロック図である。解析アプリケーション１６０は、データ受信モジュール４１０、ツールモジュール４２０、メモリ管理モジュール４３０、およびデータ提供モジュール４４０を含む。当業者は、他の実施形態がここで説明したものとは異なるおよび／または他のコンポーネントを有することができ、機能が異なる方法でコンポーネントの間に分散できることを認識するであろう。
【００３３】
データ受信モジュール４１０は、データソース１２０からデータレコードを受信し、データ解析アプリケーション１６０の他のモジュールにデータレコードを提供する。一実施形態では、データ受信モジュール４１０は、図２に示す入力ツール２０６のような、データ解析アプリケーションのツール間のインターフェースとして機能する。別の実施形態では、データ受信モジュール４１０は存在せず、データ受信モジュール４１０の機能はツールによって実行される。
【００３４】
ツールモジュール４２０は、入力／出力操作準備操作、参加操作、予測的操作、空間的操作、調査操作、ならびに分析および変換操作のうちの１つ以上を含む特定の処理操作またはデータ解析機能を実行するデータ処理ツールのセットを提供する。
【００３５】
ツールは、データ受信モジュール４１０によってデータソース１２０から受信されたデータレコードを操作する。ツールモジュール４２０は、図２に関連して説明したワークフロー２００に含まれるツールを提供する。一実施形態では、１つ以上のツールモジュール４２０は、ワークフローについてデータレコードを処理する間並行に実行し得る。そのようなツールモジュールは、各スレッドがプロセッサ３０２の個別のコアで動作する、複数の個別のスレッドとして実行し得る。たとえば、ジョインツールの実施形態は、ジョイン操作に関連付けられたタスクを複数のスレッドに分配して、プロセッサ３０２の並列処理機能を活用する。
【００３６】
さらに、ツールモジュール４２０によって提供されるツールは、メモリを使用して、ワークフロー内で処理されているデータレコードを格納する。ツールモジュール４２０は、メモリ管理モジュール４３０と対話して、処理中に使用するメモリを割り当て、処理が完了するとメモリを解放する。いくつかのツールは、データの処理中に特定のパターンでメモリを使用する場合がある。たとえば、ジョインツールは典型的に、複数のパスを使用してデータレコードを処理する。このようなツールは典型的に、処理中のデータレコードを格納するために大量のメモリを割り当て、最初のパスで各データレコードに１回アクセスし、次いで、その後のパスで各データレコードに再度アクセスする。
【００３７】
メモリ管理モジュール４３０は、データ解析アプリケーション１６０によるメモリ使用量を管理する。一実施形態では、メモリ管理モジュール４３０は、データ解析アプリケーション１６０専用である。メモリ管理モジュール４３０は、データ解析システム１１０によって提供されるメモリ管理機能と別個にインターフェースし得る。たとえば、メモリ管理モジュール４３０は、データ解析システム１１０上で実行されているオペレーティングシステムによって提供される異なるメモリ管理システムとインターフェースすし得る。メモリ管理モジュール４３０は、データ解析アプリケーション１６０のメモリ動作をオペレーティングシステムのメモリ管理システムから抽象化する。
【００３８】
この目的のために、メモリ管理モジュール４３０は、ツールがワークフローを実装するときに、ツールモジュール４２０のツールによって処理されているデータレコードを格納するためのメモリを割り当てて解放する。加えて、メモリ管理モジュール４３０は、割り当てられたメモリをプライマリメモリ１４０またはセカンダリメモリ１５０のいずれかに選択的に格納する。一般に、メモリ管理モジュール４３０は、ツールによって現在アクセスされているデータレコードをプライマリメモリ１４０に格納し、ツールによって現在アクセスされていないデータレコードをセカンダリメモリ１５０に格納する。メモリ管理４３０は、レコードがツールによってアクセスされるときに、プライマリメモリ１４０とセカンダリメモリ１５０との間でデータレコードを移動する。加えて、メモリ管理モジュール４３０は、プライマリメモリ１４０の限られた記憶容量を効果的に使用するために、プライマリメモリ１４０内のデータレコードを選択的に圧縮する。
【００３９】
一実施形態では、ツールは、ツールがデータレコードを含むメモリブロックにアクセスする可能性が高いときを示す通知をメモリ管理モジュール４３０に提供する。たとえば、ツールは、短い期間または長い期間内に特定のブロックにアクセスする可能性が高いかどうかを示す通知を提供してもよい。加えて、通知は、ツールがブロックに再びアクセスしようとするとき、およびブロックへのアクセスが完全に終了したときを、メモリ管理モジュール４３０に伝えてもよい。たとえば、通知は、ツールがブロックへのアクセスを一時的に終了したが、将来再びブロックにアクセスするときを、メモリ管理モジュール４３０に伝えてもよい。通知はまた、ツールがブロックに再びアクセスしないときをメモリ管理モジュール４３０に伝えてもよい。
【００４０】
メモリ管理モジュール４３０は、特定のメモリブロックをプライマリメモリ１４０およびセカンダリメモリ１５０に格納するかどうか、ならびにブロックを格納する状態（例えば、準備完了、圧縮）を決定するときにツールからの通知を使用できる。メモリ管理モジュール４３０は、通知を使用して、特定のブロックをいつ解放（例えば、リサイクル）するかを決定することもできる。さらに、一実施形態では、メモリ管理モジュール４３０は、通知を使用して、特定のブロックにアクセスするツールの数を記述するいくつかのカウントを維持する。メモリ管理モジュール４３０は、現在ブロックにアクセスしているツールの数を示すアクセスカウントと、将来ブロックにアクセスする可能性のあるツールの数を示すロックカウントを維持する。ロックカウントがゼロに達すると、メモリ管理モジュール４３０はブロックを解放することができる。
【００４１】
したがって、メモリ管理モジュール４３０は、ツールモジュール４２０のツールによってアクセスされるレコードを比較的高速なプライマリメモリ１４０に格納することにより、データ解析システム１１０およびデータ解析アプリケーション１６０の性能を向上させる。特に、メモリ管理モジュール４３０は、多数のデータレコードにわたる複数のパスを実行するジョインツールなどのツールのパフォーマンスを向上させる。
【００４２】
データ出力モジュール４４０は、データ解析アプリケーション１６０によって実行された処理の結果を出力する。すなわち、データ出力モジュール４４０は、ワークフロー２００の実行によって生成された処理済みデータレコードを受信し、他のシステムおよび／または人間のレビュアーがデータレコードを利用できるようにする。例えば、データ出力モジュール４４０は、企業に関連付けられた人間のレビュアーが企業に関連付けられたデータレコードの処理から生じるワークフロー２００の出力をレビューできるＧＵＩを提供してもよい。
【００４３】
図５は、一実施形態によるメモリ管理モジュール４３０のより詳細な図を示すブロック図である。メモリ管理モジュール４３０は、割り当てモジュール５１０、圧縮モジュール５２０、データ転送モジュール５３０、およびメモリ制御モジュール５４０を含む。他の実施形態がここで説明したものとは異なるおよび／または他のコンポーネントを有することができ、機能が異なる方法でコンポーネントの間に分散できる。
【００４４】
割り当てモジュール５１０は、ツールモジュール４２０および／またはデータ解析アプリケーション１６０内の他のモジュールからの要求に応じて、メモリブロックを割り当てて解放する。割り当てモジュール５１０は、データ解析アプリケーション１６０内の他のモジュールから割り当て要求を受け取り、それに応じてメモリのブロックを割り当てる。割り当て要求は、たとえば、ツールモジュール４２０のツールがワークフローを処理している間に、ツールから受信されてもよい。メモリ割り当てモジュール５１０は、無限に見えるように作られたブロックの仮想プールからブロックを割り当てる。これらの仮想ブロックは、メモリアーキテクチャの制限を考慮して、プライマリメモリ１４０またはセカンダリメモリ１５０にあってもよい。割り当てモジュール５１０によって割り当てられるメモリのブロックは、セカンダリメモリ１５０に関して説明されたセカンダリデータブロックとは異なる。
【００４５】
具体的には、割り当てモジュール５１０は、メモリ割り当て要求を受信し、要求に応じてメモリの論理的連続ブロックを割り当て、メモリのブロックのハンドルを要求者に返す。いくつかの実施形態では、割り当て要求はブロックサイズを指定し、割り当てモジュール５１０はブロックサイズに基づいてブロックを割り当てる。一実施形態では、割り当てモジュール５１０は、非圧縮メモリブロックおよび圧縮メモリブロックの２つの異なるタイプのブロックを割り当てる。非圧縮メモリブロックは、非圧縮データレコードを保持する。圧縮メモリブロックは、非圧縮メモリブロックよりも小さく、圧縮データレコード（つまり、圧縮された１つ以上の非圧縮メモリブロック）を保持する。割り当てモジュール５１０によって受信されるメモリ割り当て要求は、割り当てるメモリブロックのタイプを指定する。
【００４６】
割り当てモジュール５１０は、メモリのブロックへのハンドルを指定するメモリ解放要求も受信する。割り当てモジュール５１０は、そのようなメモリブロックを解放して、ブロックが後続の要求で再割り当てできるようにする。割り当てモジュール５１０は、再割り当てに利用可能な空きブロックのリストを保持する。
【００４７】
圧縮モジュール５２０は、プライマリメモリ使用量が閾値を超えるかまたは下回る場合、メモリブロックを選択的に圧縮および圧縮解除する。圧縮されたメモリブロックは、圧縮されていないメモリブロックよりもかなり少ないストレージスペースを占有する。圧縮に使用される場合、圧縮モジュール５２０が、データレコードを保持し、プライマリメモリ１４０に格納された非圧縮メモリブロックのハンドルとともに提供される。圧縮モジュール５２０は、非圧縮メモリブロックハンドルによって識別されるメモリブロック内のデータレコードを圧縮し、圧縮メモリブロックハンドルによって識別されるロケーションに圧縮データレコードを格納する。圧縮モジュール５２０は、圧縮メモリブロックハンドルを要求者に返す。圧縮が実行された後、非圧縮メモリブロックおよび圧縮メモリブロックの双方がプライマリメモリ１４０に残ることに留意されたい。一実施形態では、圧縮モジュール５２０は、専用の別個のスレッドを使用して圧縮操作および解凍操作を実行する。このようにして、データ解析システム１１０で実行される他のスレッドは、圧縮および解凍タスクによってブロックされない。
【００４８】
圧縮モジュール５２０は、圧縮を実行するときに、割り当てモジュール５１０に圧縮メモリブロックハンドルを要求する。割り当てモジュール５１０は、要求に応じて、新しい圧縮メモリブロックを割り当てる、または空きリストから圧縮メモリブロックを返す。圧縮メモリブロックは、準備完了ブロックより小さくてもよく、圧縮モジュール５２０は、１つより多くの圧縮メモリブロックを使用して、非圧縮メモリブロックのコンテンツを格納してもよい。
【００４９】
圧縮解除のために、圧縮モジュール５２０は、プライマリメモリ１４０に格納された圧縮メモリブロックを識別する圧縮メモリブロックハンドルを受け取る。圧縮モジュール５２０は、割り当てモジュール５１０から非圧縮メモリブロックについての１つ以上のハンドルを要求して受信し、１つ以上の圧縮メモリブロックを割り当てられた非圧縮メモリブロックに解凍する。解凍が実行されると、圧縮モジュール５２０は、圧縮メモリブロックを解放するか、それを使用して後続の圧縮要求を処理する。
【００５０】
圧縮モジュール５２０は、圧縮比について最適化されたアルゴリズムではなく、圧縮の速度に対して最適化されたロスレス圧縮アルゴリズムを使用する。たとえば、圧縮モジュール５２０は、Snappy圧縮アルゴリズムを使用してメモリブロックを圧縮し得る。圧縮モジュール５２０は、ハフマン（Huffman）符号化の変形およびレンペルジブ（Lempel-Ziv）圧縮などの他の圧縮アルゴリズムを使用してもよい。
【００５１】
データ転送モジュール５３０は、メモリ管理モジュール４３０内の他のモジュールからの要求に応答して、プライマリメモリ１４０とセカンダリメモリ１５０との間でデータブロックを選択的に移動する。一実施形態では、データ転送モジュール５３０は、圧縮メモリブロックをプライマリメモリ１４０とセカンダリメモリ１５０との間で移動させる。圧縮メモリブロックは、セカンダリメモリ１５０によって使用されるセカンダリデータブロックよりも大きくなりことができる。したがって、圧縮メモリブロックは、複数のセカンダリデータブロックを占有できます。データ転送モジュール５３０は、プライマリメモリ１４０とセカンダリメモリ１５０との間で、同じ圧縮メモリブロックからのデータを保持するセカンダリデータブロックをユニットとして移動する。
【００５２】
メモリ制御モジュール５４０は、メモリ管理モジュール４３０内の他のモジュールと相互作用して、プライマリメモリ１４０とセカンダリメモリ１５０との間でメモリブロックの選択的な圧縮／解凍および転送を制御する。メモリ制御モジュール５４０は、ツールがワークフローを処理する際にメモリブロックにアクセスするためのツールモジュール４２０による要求を監視する。メモリ制御モジュール５４０は、アクセスが要求される任意のメモリが非圧縮状態でプライマリメモリ１４０に格納されることを確実にする。このようなブロックは、「準備完了」状態にあると呼ばれる。
【００５３】
要求されたメモリブロックが準備完了状態にない場合、メモリ制御モジュール５４０は、セカンダリメモリ１５０からメモリブロックを取り出し、および／またはメモリブロックをプライマリメモリ１４０に解凍して、ブロックを準備完了状態にする。いくつかの実施形態では、メモリ制御モジュール５４０は、ツールモジュール４２０がアクセスを要求したときに所定のメモリブロックが既に準備完了状態である可能性を高めるために、メモリブロックを推論的に圧縮、解凍、および転送することができる。
【００５４】
このために、メモリ制御モジュール５４０は、メモリブロックを格納するために利用可能なプライマリメモリ１４０の総量を決定する。ワークフローが実行されると、メモリ制御モジュール５４０は、メモリブロックを格納するために実際に使用されているプライマリメモリ１４０の量を追跡し、さらに、追加のメモリブロックを格納するための空きのプライマリメモリの量を追跡する。加えて、メモリ制御モジュール５４０は、様々な異なる状態のメモリブロックを格納するために使用されるプライマリメモリの量を追跡する。
【００５５】
準備完了状態のメモリブロックによって占有されるプライマリメモリ使用量が「準備完了状態スレッショルド」と呼ばれる指定された制限を超えている場合、メモリ制御モジュール５４０は圧縮モジュール５２０を使用して、準備完了状態の少なくともいくつかのメモリブロックを「圧縮」状態へ推論的に圧縮する。一実施形態では、準備完了状態スレッショルドは、利用可能なプライマリメモリ１４０の８０％である。
【００５６】
メモリ制御モジュール５４０は、圧縮メモリブロックと対応する非圧縮メモリブロックの双方をプライマリメモリ１４０に維持する。圧縮メモリブロックは、プライマリメモリの使用量がさらに増加したときのセカンダリメモリ１５０への転送について準備完了となっている。プライマリメモリ１４０内の非圧縮メモリブロックであって、対応する圧縮ブロックもプライマリメモリに格納されている、非圧縮目厭離ブロックは、「準備完了および圧縮」状態にあると呼ばれる。ツールモジュール４２０が準備完了および圧縮状態のメモリブロックにアクセスする場合、メモリ制御モジュール５４０は、圧縮状態の対応するブロックを解放することにより（例えばリサイクルすることにより）、メモリブロックを準備完了状態に変換し得る。一実施形態において、メモリ制御モジュール５４０は、ツールモジュール４２０がメモリブロックに書き込む場合、メモリブロックを準備完了状態に変換し、準備完了状態の変換されたメモリブロックに書き込むことにより要求に応える。ツールモジュール４２０がメモリブロックから読み取る場合、メモリ制御モジュール５４０は、準備完了および圧縮状態のメモリブロックを使用して、メモリブロックをその状態のままにして、読み取りアクセスを提供し得る。
【００５７】
プライマリメモリ１４０の使用量が準備完了状態スレッショルドを超えて増加し続ける場合、メモリ制御モジュール５４０は、準備完了および圧縮状態の少なくともいくつかのメモリブロックを解放し、したがってこれらのブロックによって占有されたプライマリメモリを解放する。一実施形態では、プライマリメモリ１４０の使用量が準備完了状態スレッショルドよりも大きい解放スレッショルドを超える場合、メモリ制御モジュール５４０は、メモリブロックの新たな割り当てのための余地を作るために準備完了および圧縮状態のメモリブロックを解放する。一実施形態では、解放スレッショルドはプライマリメモリの１００％である。したがって、メモリ制御モジュール５４０は、プライマリメモリの使用量が１００％に達すると、準備完了および圧縮状態のメモリブロックを解放する。
【００５８】
さらに、メモリ制御モジュール５４０は、圧縮状態のメモリブロックをセカンダリメモリ１５０に転送することにより、プライマリメモリ１４０内のスペースを利用可能にする。一実施形態では、メモリ制御モジュール５４０は、圧縮状態のメモリブロックによって占有されたプライマリメモリ１４０の量を追跡する。圧縮状態のメモリブロックがプライマリメモリのスレッショルド量（「圧縮」スレッショルド）を超える場合、メモリ制御モジュール５４０は、圧縮ブロックをセカンダリメモリに書き込むことおよびブロックが保存されていたプライマリメモリ１４０を解放することにより、圧縮ブロックの少なくともいくつかをセカンダリメモリ１５０に転送する。セカンダリメモリ１５０に格納されたメモリブロックは、「オンディスク」状態にあると呼ばれる。
【００５９】
プライマリメモリ１４０の使用量が減少すると、メモリ制御モジュール５４０は、オンディスク状態のメモリブロックをセカンダリメモリ１５０からプライマリメモリに推論的に転送する。メモリ制御モジュール５４０は、プライマリメモリの使用量が使用量スレッショルドを下回ったとき（または逆に、プライマリメモリ内の未割り当ての空きスペースが閾値を超えたとき）を検出する。一実施形態では、使用量スレッショルドは５０％である。プライマリメモリ使用量が使用量スレッショルドを下回ったことに応答して、メモリ制御モジュール５４０は、オンディスク状態の少なくともいくつかのメモリブロックをプライマリメモリ１４０に転送する。
【００６０】
これらの転送されたメモリブロックは、圧縮状態でプライマリメモリ１４０に格納される。加えて、メモリ制御モジュール５４０は、転送されたメモリブロックをセカンダリメモリ１５０にオンディスク状態で保持する。したがって、これらのメモリブロックは、圧縮状態とオンディスク状態の双方で同時に保持される。プライマリメモリ１４０の使用量が増加し、例えば圧縮スレッショルドを超える場合、メモリ制御モジュール５４０は、対応するオンディスクメモリブロックを有する圧縮メモリブロックの少なくともいくつかを解放する。このようにして、プライマリメモリからセカンダリメモリ１５０にメモリブロックを転送する必要なく、プライマリメモリ１４０が回復される。同様に、ツールモジュール４２０が圧縮状態およびオンディスク状態の双方のメモリブロックにアクセスする場合、メモリ制御モジュール５４０はメモリブロックの圧縮バージョンを圧縮解除して準備完了状態にし、オンディスク状態のメモリブロックを解放する。
【００６１】
メモリ制御モジュール５４０の一実施形態は、特定のブロックがツールモジュール４２０によって割り当てられおよび／またはアクセスされたときに基づいて、メモリブロックに対して上述した動作を順番に実行する。ブロックを準備完了状態から準備完了および圧縮状態に変換する場合、メモリ制御モジュール５４０は、もっとも最近割り当てられたメモリブロックを最初に圧縮する。別の言い方をすると、メモリ制御モジュール５４０は、割り当てからの経過時間の昇順でブロックを圧縮する。メモリ制御モジュール５４０は、圧縮ブロックをセカンダリメモリ１５０に（たとえば、オンディスク状態に）移動するときにもこの順序を使用する。メモリ制御モジュール５４０はこの順序を使用する。なぜなら、データレコードに対して複数のパスを実行するツールは、割り当て時にブロックにアクセスし、第２パスまで再びアクセスしない傾向があるからである。したがって、最近より前に割り当てられたブロックがもっとも最近割り当てられたブロックよりも前にアクセスされるという仮定に基づいて、もっとも最近割り当てられたブロックが圧縮される。
【００６２】
メモリブロックをセカンダリメモリ１５０からプライマリメモリ１４０に転送するとき、メモリ制御モジュール５４０は、メモリブロックがセカンダリメモリ１５０に転送された時（すなわち、ブロックがオンディスク状態に変換された時）に基づく順序を使用する。メモリ制御モジュール５４０の実施形態は、もっとも最新でないブロックから開始してセカンダリメモリ１５０からメモリを取り出す。言い換えれば、メモリ制御モジュール５４０は、ブロックがセカンダリメモリ１５０に格納されてからの経過時間の降順でブロックを取り出す。メモリ制御モジュール５４０は、ツールモジュール４２０がより新しいブロックにアクセスする前により古いブロックにアクセスするという仮定に基づいてこの順序を使用する。
【００６３】
図６は、一実施形態による、データ解析アプリケーション内においてメモリを割り当てるプロセスを示すフローチャートである。いくつかの実施形態では、方法はメモリ制御モジュール５４０によって実行されるが、方法の動作の一部または全部は他の実施形態の他のエンティティによって実行されてもよい。いくつかの実施形態では、フローチャートの操作は異なる順序で実行され、異なるおよび/または追加のステップを含むことができる。
【００６４】
メモリ制御モジュール５４０は、メモリのブロックを割り当てるための割り当て要求を受信する６１０。メモリ制御モジュール５４０は、受信した割り当て要求を許可し６２０、プライマリメモリ１４０の使用量を決定する。例えば、メモリ制御モジュール５４０は、準備完了状態のメモリブロックおよび圧縮状態のメモリブロックによって占有されたプライマリメモリ１４０の量を決定する。準備完了状態スレッショルドを超えているプライマリメモリ使用量に応答して、メモリ制御モジュール５４０は準備完了状態のメモリブロックを圧縮して６３０、準備完了および圧縮状態のメモリブロックならびに圧縮状態のメモリブロックを生成する。解放スレッショルドを超えるプライマリメモリの使用量に応答して、メモリ制御モジュール５４０は、対応する圧縮状態のメモリブロックを保持する一方で、準備完了および圧縮状態のメモリブロックを解放する６４０。
【００６５】
圧縮スレッショルドを超える圧縮状態のメモリブロックに応答して、メモリ制御モジュール５４０は、圧縮メモリブロックをセカンダリメモリ１５０に転送し６５０、オンディスク状態のブロックを形成する。これらの圧縮メモリブロックは、圧縮状態およびオンディスク状態の双方で保持し得る。利用可能なプライマリメモリ１４０が増加する場合、例えば圧縮スレッショルドを超える場合、メモリ制御モジュール５４０は、対応するオンディスクメモリブロックを有する１つ以上の圧縮メモリブロックをプライマリメモリ１４０から解放することができる。
【００６６】
プライマリメモリ使用量が使用量スレッショルドを下回ったことに応答して、メモリ制御モジュール５４０は、オンディスク状態のメモリブロックをセカンダリメモリ１５０からプライマリメモリ１４０に転送する６６０。これらのメモリブロックは、オンディスク状態および圧縮状態の双方で維持され得る。
【００６７】
図７は、一実施形態による、データブロックへのアクセスを要求するツールモジュール４２０にデータブロックを提供するプロセスを示すフローチャートである。いくつかの実施形態では、方法はメモリ制御モジュール５４０によって実行されるが、方法の動作の一部または全部は他の実施形態の他のエンティティによって実行されてもよい。いくつかの実施形態では、フローチャートの操作は異なる順序で実行され、異なるおよび/または追加のステップを含むことができる。
【００６８】
メモリ制御モジュール５４０は、メモリブロックにアクセスする要求を受け取る７１０。場合によっては、要求はツールモジュール４２０によって行われます。いくつかの実施形態では、メモリ制御モジュール５４０は、要求されたブロックが準備完了状態にあるかどうかを決定する７２０。要求されたメモリブロックは、非圧縮状態でプライマリメモリ１４０に格納されていると、準備完了状態である。
【００６９】
要求されたメモリブロックが準備完了状態にないという決定に応答して、メモリ制御モジュール５４０は、要求されたメモリブロックの状態を準備完了状態に更新する７３０。たとえば、メモリ制御モジュール５４０は、要求されたメモリブロックが圧縮状態にあると決定されると、要求されたメモリブロックを解凍する。別の例として、メモリ制御モジュール５４０は、要求されたメモリブロックがオンディスク状態で格納されていると判断すると、要求されたメモリブロックをセカンダリメモリ１５０からプライマリメモリ１４０に転送する。メモリ制御モジュール５４０が、要求されたメモリブロックが準備完了状態にあると決定した場合、メモリ制御モジュール５４０は、要求されたメモリブロックの状態を変更せず、次のステップの実行に進むことができる。次いで、メモリ制御モジュール５４０は、アクセス要求に応答して、要求されたメモリブロックを提供する７４０。例えば、メモリ制御モジュール５４０は、要求されたメモリブロックを、アクセス要求を行ったツールモジュール４２０に送信する。
【００７０】
別の実施形態では、準備完了および圧縮状態のメモリブロックに対する読み取りアクセス要求を受信すると、メモリ制御モジュール５４０は、準備完了および圧縮状態のメモリブロックのバージョン（すなわち、ブロックの非圧縮バージョン）を使用して要求に対処し、およびメモリブロックのバージョンをプライマリメモリの圧縮状態のままにする。これにより、要求が満たされ、メモリブロックを圧縮するために実行された作業が保持される。
【００７１】
コンポーネントの特定の命名、用語の大文字化、属性、データ構造、またはその他のプログラミングまたは構造的側面は必須または重要ではなく、説明されている実施形態を実装するメカニズムは異なる名前、フォーマット、またはプロトコルを持っていてもよい。さらに、システムは、説明したようにハードウェアとソフトウェアの組み合わせを介して、または完全にハードウェア要素で実装され得る。また、本明細書で説明されるさまざまなシステムコンポーネント間の機能の特定の分割は単なる例示であり、必須ではない。単一のシステムコンポーネントによって実行される機能は、代わりに複数のコンポーネントによって実行され、複数のコンポーネントによって実行される機能は、代わりに単一のコンポーネントによって実行されてもよい。
【００７２】
上記の説明のいくつかの部分は、情報の操作のアルゴリズムおよび記号表現の観点から機能を示している。これらのアルゴリズムの説明と表現は、データ処理技術の当業者によって一般的に使用され、彼らの仕事の内容を他の当業者に効果的に伝える手段である。これらの操作は、機能的または論理的に説明されているが、コンピュータプログラムによって実装されると理解される。さらに、一般性を失うことなく、これらの操作の配置をモジュールと呼ぶこと、または機能名で呼ぶことが便利な場合もある。
【００７３】
上記の議論から明白であると特に明記しない限り、説明全体を通して、「処理」または「計算」または「計算」または「決定」または「表示」などの用語を利用する議論は、コンピュータシステムのメモリまたはレジスタ、またはその他の情報ストレージ、送信、表示デバイス内の物理（電子）量として表されるデータを操作および変換する、コンピュータシステムまたは同様の電子コンピューティングデバイスのアクションとプロセスと関連する。
【００７４】
本明細書で説明される特定の実施形態は、アルゴリズムの形で説明されるプロセスステップおよび命令を含む。実施形態のプロセスステップおよび命令は、ソフトウェア、ファームウェア、またはハードウェアで実施でき、ソフトウェアで実施した場合、ダウンロードしてリアルタイムネットワークオペレーティングシステムで使用される異なるプラットフォームに常駐し、そこから操作できることに留意されたい。
【００７５】
明細書で提示されるアルゴリズムおよび動作は、特定のコンピュータまたは他の装置に本質的に関連するものではない。本明細書の教示によるプログラムと共に様々な汎用システムを使用することもできるし、必要な方法ステップを実行するためのより特殊な装置を構築することが便利であることが判明する場合もある。これらのさまざまなシステムに必要な構造は、同等のバリエーションとともに、当業者には明らかであろう。さらに、本実施形態は、特定のプログラミング言語に関して説明されていない。本明細書で説明する実施形態の教示を実施するために、様々なプログラミング言語を使用できることが理解される。
【００７６】
実施形態は、多数のトポロジーにわたる多種多様なコンピュータネットワークシステムによく適している。この分野では、大規模ネットワークの構成と管理は、ストレージデバイスと、インターネットなどのネットワークを介して異なるコンピュータとストレージデバイスに通信可能に結合されたコンピュータを含む。
【００７７】
最後に、明細書で使用される文言は、主に読みやすさと教育目的のために選択されたものであり、本発明の主題を描写または制限するために選択されていない場合がある。したがって、実施形態の開示は、例示的であることを意図しているが、限定を意図するものでない。
【要約】モジュールは、コンピュータ内のメモリを管理する。モジュールは、コンピュータに関連付けられているプライマリメモリの使用量を監視する。プライマリメモリは、準備完了状態のメモリブロックを格納する。準備状態のメモリブロックによるプライマリメモリの使用量が準備完了状態スレッショルドを超えることに応答して、モジュールは準備完了状態のメモリブロックの少なくともいくつかを圧縮して、準備完了および圧縮状態のメモリブロックを形成する。準備完了および圧縮状態のメモリブロックによるプライマリメモリ使用量が解放スレッショルドを超えていることに応じて、モジュールは準備完了および圧縮状態のメモリブロックの少なくともいくつかを解放する。圧縮状態のメモリブロックによるメモリ右ブロックによるプライマリメモリ使用量が圧縮スレッショルドを超えていることに応じて、モジュールは圧縮状態のメモリブロックの少なくともいくつかをコンピュータに関連付けられたセカンダリメモリに転送する。【図１】
0006768989.tif 000002
【図２】
0006768989.tif 000003
【図３】
0006768989.tif 000004
【図４】
0006768989.tif 000005
【図５】
0006768989.tif 000006
【図６】
0006768989.tif 000007
【図７】
0006768989.tif 000008