(57)【特許請求の範囲】
【請求項１】
記憶されたデータを管理するためのコンピューティングシステムであって、
複数のデータユニットを含む作業データを記憶するように構成されたメモリモジュールと、
１又は２以上のデータユニットの複数の組を含むリカバリデータを記憶するように構成されたストレージシステムと、
前記メモリモジュールと前記ストレージシステムとの間のデータユニットの転送を管理するように構成された少なくとも１つのプロセッサとを含み、管理することが、
前記作業データに含まれる前記複数のデータユニットの間の順序を維持することであって、前記順序が、前記複数のデータユニットのうちの１又は２以上を含む第１の連続する部分及び前記複数のデータユニットのうちの１又は２以上を含む第２の連続する部分を規定する、維持すること、並びに
複数の時間間隔のそれぞれに関して、前記時間間隔中に前記作業データからアクセスされたデータユニットを特定し、アクセスされたデータユニットを含む前記第１の連続する部分からの１又は２以上のデータユニット及び前記リカバリデータに既に追加された少なくとも１つのデータユニットを含む前記第２の連続する部分からの１又は２以上のデータユニットを含む２又は３以上のデータユニットの組を前記リカバリデータに追加することを含む、コンピューティングシステム。
【請求項２】
管理することが、時間の複数の間隔のそれぞれに関して、作業データにやはり含まれるいずれかのデータユニットが１又は２以上のデータユニットの少なくとも１つのその他の組に記憶される１又は２以上のデータユニットの少なくとも１つの組をリカバリデータから削除することをさらに含む、請求項１に記載のコンピューティングシステム。
【請求項３】
管理することが、複数の時間間隔のそれぞれに関して、前記時間間隔中に作業データから削除されたデータユニットを特定することをさらに含む、請求項１に記載のコンピューティングシステム。
【請求項４】
第２の連続する部分が、削除されたデータユニットを除外する、請求項２又は３に記載のコンピューティングシステム。
【請求項５】
管理することが、時間の複数の間隔のそれぞれに関して、削除されたデータユニットを特定する情報をリカバリデータに追加することをさらに含む、請求項２〜４のいずれかに記載のコンピューティングシステム。
【請求項６】
時間間隔中に作業データからアクセスされたデータユニットを特定することが、前記時間間隔中に前記作業データからアクセスされたデータユニットを第１の連続する部分に移すことを含む、請求項１〜５のいずれかに記載のコンピューティングシステム。
【請求項７】
作業データに含まれる複数のデータユニットの間の順序が、データユニットがどれだけ最近にアクセスされたかに基づく、請求項１〜６のいずれかに記載のコンピューティングシステム。
【請求項８】
第１の連続する部分が、作業データに含まれる複数のデータユニットのすべてのうちの最も最近アクセスされたデータユニットと、自身の最も最近のアクセス以降にリカバリデータに追加されていない前記複数のデータユニットのサブセットのうちの最も最近アクセスされていないデータユニットとを含む、請求項１〜７のいずれかに記載のコンピューティングシステム。
【請求項９】
第２の連続する部分が第１の連続する部分と重ならない、請求項１〜８のいずれかに記載のコンピューティングシステム。
【請求項１０】
第２の連続する部分が、自身の最も最近のアクセス以降にリカバリデータに追加された少なくとも１つのデータユニットを含む、請求項１〜９のいずれかに記載のコンピューティングシステム。
【請求項１１】
第２の連続する部分からの１又は２以上のデータユニットが、第１の連続する部分からの１又は２以上のデータユニット内のデータユニットの数の約半分と前記第１の連続する部分からの前記１又は２以上のデータユニット内のデータユニットの数の約２倍との間であるデータユニットの数に制限される、請求項１〜１０のいずれかに記載のコンピューティングシステム。
【請求項１２】
第１の連続する部分が、第２の連続する部分のデータユニットのいずれよりも最近アクセスされたデータユニットを含む、請求項１〜１１のいずれかに記載のコンピューティングシステム。
【請求項１３】
データユニットがどれだけ最近にアクセスされたかを示す時間が、前記データユニットへの排他的なアクセスが開始された時間に対応する、請求項１に記載のコンピューティングシステム。
【請求項１４】
データユニットがどれだけ最近にアクセスされたかを示す時間が、前記データユニットへの排他的なアクセスが終了した時間に対応する、請求項１に記載のコンピューティングシステム。
【請求項１５】
管理することが、障害に応じてリカバリデータを用いて作業データの状態を復元することをさらに含む、請求項１に記載のコンピューティングシステム。
【請求項１６】
作業データに含まれる複数のデータユニットが、それぞれ、キー値に関連付けられる、請求項１に記載のコンピューティングシステム。
【請求項１７】
作業データに含まれるデータユニットのうちの少なくとも１つが、前記データユニットに関連するキー値に基づいてアクセス可能な１又は２以上の値を含む、請求項１６に記載のコンピューティングシステム。
【請求項１８】
作業データに含まれる異なるデータユニットに関連する異なるキー値の総数が、約１，０００を超える、請求項１６に記載のコンピューティングシステム。
【請求項１９】
時間間隔が互いに重ならない、請求項１に記載のコンピューティングシステム。
【請求項２０】
時間間隔中に作業データからアクセスされたデータユニットを特定することが、前記時間間隔中に前記作業データに追加されたデータユニット、前記時間間隔中に前記作業データから読まれたデータユニット、又は前記時間間隔中に前記作業データ内で更新されたデータユニットのうちの少なくとも１つを特定することを含む、請求項１に記載のコンピューティングシステム。
【請求項２１】
メモリモジュールが揮発性メモリデバイスを含む、請求項１に記載のコンピューティングシステム。
【請求項２２】
ストレージシステムが不揮発性ストレージデバイスを含む、請求項１に記載のコンピューティングシステム。
【請求項２３】
コンピューティングシステムのメモリモジュールと前記コンピューティングシステムのストレージシステムとの間のデータユニットの転送を管理するための方法であって、
前記メモリモジュールに、複数のデータユニットを含む作業データを記憶するステップと、
前記ストレージシステムに、１又は２以上のデータユニットの複数の組を含むリカバリデータを記憶するステップと、
前記作業データに含まれる前記複数のデータユニットの間の順序を維持するステップであって、前記順序が、前記複数のデータユニットのうちの１又は２以上を含む第１の連続する部分及び前記複数のデータユニットのうちの１又は２以上を含む第２の連続する部分を規定する、維持するステップと、
複数の時間間隔のそれぞれに関して、前記時間間隔中に前記作業データからアクセスされたデータユニットを特定し、アクセスされたデータユニットを含む前記第１の連続する部分からの１又は２以上のデータユニット及び前記リカバリデータに既に追加された少なくとも１つのデータユニットを含む前記第２の連続する部分からの１又は２以上のデータユニットを含む２又は３以上のデータユニットの組を前記リカバリデータに追加するステップとを含む、方法。
【請求項２４】
コンピューティングシステムのメモリモジュールと前記コンピューティングシステムのストレージシステムとの間のデータユニットの転送を管理するための、コンピュータ可読媒体上に非一時的形態で記憶されるソフトウェアであって、前記コンピューティングシステムに、
前記メモリモジュールに、複数のデータユニットを含む作業データを記憶することと、
前記ストレージシステムに、１又は２以上のデータユニットの複数の組を含むリカバリデータを記憶することと、
前記作業データに含まれる前記複数のデータユニットの間の順序を維持することであって、前記順序が、前記複数のデータユニットのうちの１又は２以上を含む第１の連続する部分及び前記複数のデータユニットのうちの１又は２以上を含む第２の連続する部分を規定する、維持することと、
複数の時間間隔のそれぞれに関して、前記時間間隔中に前記作業データからアクセスされたデータユニットを特定し、アクセスされたデータユニットを含む前記第１の連続する部分からの１又は２以上のデータユニット及び前記リカバリデータに既に追加された少なくとも１つのデータユニットを含む前記第２の連続する部分からの１又は２以上のデータユニットを含む２又は３以上のデータユニットの組を前記リカバリデータに追加することとを行わせるための命令を含む、ソフトウェア。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１３年１０月２１日に出願した米国特許出願第６１／８９３，４３９号明細書の優先権を主張するものである。
【０００２】
本明細書は、データユニットの集合のチェックポイント作成に関する。
【背景技術】
【０００３】
障害又はその他の予期しない事態に応じてリカバリ又は再始動する能力が役立つさまざまな種類のデータ処理システムが、存在する。例えば、リアルタイムストリーム処理又は複合イベント処理システムにおいては、入力データ及び／又は入力データに対して実行される計算に関する状態情報などのシステム情報を保存することが役立つ。チェックポイント作成は、システムが最近保存された一貫性のある状態からリカバリすることができるようにシステム情報を周期的に保存する方法の例である。データの連続するフローに対して動作するデータ処理システムのためのチェックポイント作成技術の一例が、参照により本明細書に組み込まれている米国特許第６，５８４，５８１号明細書に記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第６，５８４，５８１号明細書
【発明の概要】
【課題を解決するための手段】
【０００５】
一態様においては、概して、記憶されたデータを管理するためのコンピューティングシステムが、複数のデータユニットを含む作業データ（working data）を記憶するように構成されたメモリモジュールと、１又は２以上のデータユニットの複数の組を含むリカバリデータを記憶するように構成されたストレージシステムと、メモリモジュールとストレージシステムとの間のデータユニットの転送を管理するように構成された少なくとも１つのプロセッサとを含む。管理することは、作業データに含まれる複数のデータユニットの間の順序を維持することであって、順序が、複数のデータユニットのうちの１又は２以上を含む第１の連続する部分及び複数のデータユニットのうちの１又は２以上を含む第２の連続する部分を規定する、維持することと、複数の時間間隔のそれぞれに関して、時間間隔中に作業データからアクセスされたデータユニットを特定し、アクセスされたデータユニットを含む第１の連続する部分からの１又は２以上のデータユニット及びリカバリデータに既に追加された少なくとも１つのデータユニットを含む第２の連続する部分からの１又は２以上のデータユニットを含む２又は３以上のデータユニットの組をリカバリデータに追加することとを含む。
【０００６】
態様は、以下の特徴のうちの１又は２以上を含み得る。
【０００７】
管理することは、時間の複数の間隔のそれぞれに関して、作業データにやはり含まれる任意のデータユニットが１又は２以上のデータユニットの少なくとも１つのその他の組に記憶される１又は２以上のデータユニットの少なくとも１つの組をリカバリデータから削除することをさらに含む。
【０００８】
管理することは、複数の時間間隔のそれぞれに関して、時間間隔中に作業データから削除されたデータユニットを特定することをさらに含む。
【０００９】
第２の連続する部分は、削除されたデータユニットを除外する。
【００１０】
管理することは、時間の複数の間隔のそれぞれに関して、削除されたデータユニットを特定する情報をリカバリデータに追加することをさらに含む。
【００１１】
時間間隔中に作業データからアクセスされたデータユニットを特定することは、時間間隔中に作業データからアクセスされたデータユニットを第１の連続する部分に移すことを含む。
【００１２】
作業データに含まれる複数のデータユニットの間の順序は、データユニットがどれだけ最近にアクセスされたかに基づく。
【００１３】
第１の連続する部分は、作業データに含まれる複数のデータユニットのすべてのうちの最も最近アクセスされた（most-recently-accessed）データユニットと、自身の最も最近のアクセス以降にリカバリデータに追加されていない複数のデータユニットのサブセットのうちの最も最近アクセスされていない（least-recently-accessed）データユニットとを含む。
【００１４】
第２の連続する部分は、第１の連続する部分と重ならない。
【００１５】
第２の連続する部分は、自身の最も最近のアクセス以降にリカバリデータに追加された少なくとも１つのデータユニットを含む。
【００１６】
第２の連続する部分からの１又は２以上のデータユニットは、第１の連続する部分からの１又は２以上のデータユニット内のデータユニットの数の約半分と第１の連続する部分からの１又は２以上のデータユニット内のデータユニットの数の約２倍との間であるデータユニットの数に制限される。
【００１７】
第１の連続する部分は、第２の連続する部分のデータユニットのいずれよりも最近アクセスされたデータユニットを含む。
【００１８】
データユニットがどれだけ最近にアクセスされたかを示す時間が、データユニットへの排他的なアクセスが開始された時間に対応する。
【００１９】
データユニットがどれだけ最近にアクセスされたかを示す時間が、データユニットへの排他的なアクセスが終了した時間に対応する。
【００２０】
管理することは、障害に応じてリカバリデータを用いて作業データの状態を復元することをさらに含む。
【００２１】
作業データに含まれる複数のデータユニットは、それぞれ、キー値に関連付けられる。
【００２２】
作業データに含まれるデータユニットのうちの少なくとも１つは、データユニットに関連するキー値に基づいてアクセス可能な１又は２以上の値を含む。
【００２３】
作業データに含まれる異なるデータユニットに関連する異なるキー値の総数は、約１，０００を超える。
【００２４】
時間間隔は、互いに重ならない。
【００２５】
時間間隔中に作業データからアクセスされたデータユニットを特定することは、時間間隔中に作業データに追加されたデータユニット、時間間隔中に作業データから読まれたデータユニット、又は時間間隔中に作業データ内で更新されたデータユニットのうちの少なくとも１つを特定することを含む。
【００２６】
メモリモジュールは、揮発性メモリデバイスを含む。
【００２７】
ストレージシステムは、不揮発性ストレージデバイスを含む。
【００２８】
別の態様においては、概して、コンピューティングシステムのメモリモジュールとコンピューティングシステムのストレージシステムとの間のデータユニットの転送を管理するための方法が、メモリモジュールに、複数のデータユニットを含む作業データを記憶するステップと、ストレージシステムに、１又は２以上のデータユニットの複数の組を含むリカバリデータを記憶するステップと、作業データに含まれる複数のデータユニットの間の順序を維持するステップであって、順序が、複数のデータユニットのうちの１又は２以上を含む第１の連続する部分及び複数のデータユニットのうちの１又は２以上を含む第２の連続する部分を規定する、維持するステップと、複数の時間間隔のそれぞれに関して、時間間隔中に作業データからアクセスされたデータユニットを特定し、アクセスされたデータユニットを含む第１の連続する部分からの１又は２以上のデータユニット及びリカバリデータに既に追加された少なくとも１つのデータユニットを含む第２の連続する部分からの１又は２以上のデータユニットを含む２又は３以上のデータユニットの組をリカバリデータに追加するステップとを含む。
【００２９】
別の態様においては、概して、コンピューティングシステムのメモリモジュールとコンピューティングシステムのストレージシステムとの間のデータユニットの転送を管理するためのソフトウェアが、コンピュータ可読媒体上に非一時的形態で記憶される。ソフトウェアは、コンピューティングシステムに、メモリモジュールに、複数のデータユニットを含む作業データを記憶することと、ストレージシステムに、１又は２以上のデータユニットの複数の組を含むリカバリデータを記憶することと、作業データに含まれる複数のデータユニットの間の順序を維持することであって、順序が、複数のデータユニットのうちの１又は２以上を含む第１の連続する部分及び複数のデータユニットのうちの１又は２以上を含む第２の連続する部分を規定する、維持することと、複数の時間間隔のそれぞれに関して、時間間隔中に作業データからアクセスされたデータユニットを特定し、アクセスされたデータユニットを含む第１の連続する部分からの１又は２以上のデータユニット及びリカバリデータに既に追加された少なくとも１つのデータユニットを含む第２の連続する部分からの１又は２以上のデータユニットを含む２又は３以上のデータユニットの組をリカバリデータに追加することとを行わせるための命令を含む。
【００３０】
態様は、以下の利点のうちの１又は２以上を含む可能性がある。
【００３１】
一部のデータ処理システムにおいて、システムによって維持される情報は、処理が進むときに定期的に更新されているデータユニットの集合を含む作業データを含む。例えば、複合イベント処理（ＣＥＰ，complex event processing）システムにおいては、イベントのストリームが処理され、集約される一方、同時に、結果に基づいてアクションが行われる。ＣＥＰシステムのための作業データの組は、異なる株式記号（stock symbol）に関連する価格などのデータの異なるそれぞれのストリームが受信されているエントリを表す複数のデータユニットに関する状態を含む可能性がある。特定のデータユニットによって表される状態は、一意キー（例えば、数値）によってアクセス可能である状態オブジェクトとして記憶される可能性がある。株式記号の例において、システムは、株式記号毎に１つの状態オブジェクトを維持する。各状態オブジェクトは、（例えば、株式に関連する値に関する）スカラ、ベクトル（例えば、履歴的な価格データ）などの値を記憶する１又は２以上のフィールドを有する可能性がある。一部の例において、状態オブジェクトのフィールドは、対応する株式記号に関するそれぞれの新しい価格値に関して増加的に更新される、集約関数（例えば、合計、カウント、最大、及び平均）などの適用された関数の結果を表す計算された値を記憶する可能性がある。システム内に状態オブジェクトの複数の集合が、存在する可能性があり、各集合が、フィールドの特定の組を有する状態オブジェクトを含む可能性がある。集合は、新しい状態オブジェクトが追加されること及び古い状態オブジェクトが削除されることによってサイズが変わる可能性があるが、集合内の変化するデータのほとんどは、状態オブジェクトのある一部に記憶された実際のデータが更新されることが原因である可能性がある。
【００３２】
一部の実装形態において、システムのための作業データは、揮発性メモリ（例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ，Dynamic Random Access Memory））であってもよい多量の比較的高速なメモリに記憶される。作業データの永続性を保証するために、必要とされるリソース（例えば、データ転送時間及びデータストレージ空間）の観点でのコストが効率的に管理されることを同時に保証しながら、より安定しており、信頼性のあるストレージデバイス（例えば、ハードディスクドライブ、ソリッドステートドライブ、又はその他の不揮発性ストレージ媒体）に各状態オブジェクトの最新のバージョンを定期的に記憶するためのチェックポイント作成方式を使用することが特に有用である可能性がある。作業データは（上述の状態オブジェクトなどの）多数のデータユニットを含む可能性があるが、（「チェックポイント間隔」と呼ばれる）チェックポイント動作間の任意の所与の期間に、それらのデータユニットのわずかな部分が変わる可能性がある。チェックポイント作成方式は、最近変わったデータユニット及び最近変わっていないデータユニットを含め、各データユニットの最も最近の状態が障害の場合にリカバリされることを可能にすべきである。
【００３３】
そのようなシステムにおいて効率的にチェックポイントを作成するための技術は、特に、管理されるデータユニットの数が特別多いとき、難しい可能性がある。例えば、１つの筋書きにおいては、作業データがそれぞれ数バイトの約１０億個のデータユニットの集合を含み、各チェックポイント間隔中に、１パーセントの約１０分の１（１００万個のデータユニット）が変更される。もちろん、各チェックポイント間隔で、変わったデータユニットの組は、異なる（しかし重なる可能性がある）組である可能性がある。リカバリのために、任意の特定のデータユニットの最も最近の状態だけが必要とされることがさらに仮定される。
【００３４】
第１の手法は、データユニットの集合全体をそれぞれのチェックポイントファイルへの各チェックポイント間隔でストレージデバイスに記憶することである。その集合内の各データユニットの最新の状態をリカバリするために、システムは、単に（１又は２以上の）チェックポイントファイルを読む可能性がある。この第１の手法は、データ転送のコストが法外に高い可能性があり、数ギガバイトの作業データ及び数秒のチェックポイント間隔では、ストレージデバイスにデータユニットのすべてを書き込むのに十分な時間さえない可能性がある。
【００３５】
第２の手法は、最後のチェックポイント間隔以降に変わったデータユニットだけをそれぞれのチェックポイントファイルへの各チェックポイント間隔でストレージデバイスに記憶することである。この第２の手法は各チェックポイントにおける転送時間を削減するが、各データユニットの最新の状態をリカバリするためには、第１のチェックポイントファイルが書き込まれてから変わらなかった可能性がある何らかのデータユニットの最新の状態がリカバリされることを保証するために、システムがチェックポイント作成プロセスの初めからあらゆるチェックポイントファイルを読む必要があるので、リカバリは、時間が進むにつれてより一層コストがかかるようになる。
【００３６】
第２の手法のあり得る改良は、システムがストレージデバイス内のチェックポイントファイルを走査し、最も最近記憶されたチェックポイントファイル内に表されたより新しい状態を有するデータユニットの古いコピーだけで構成されるチェックポイントファイルを削除するオフラインプロセスをシステムが実行することである。第２の手法の別の改良は、プロセスがチェックポイントファイルを走査し、データユニットのそのような古いコピーを削除するためにチェックポイントファイルを書き直し、少なくとも１つのより新しいチェックポイントファイルにそれぞれの削除されるデータユニットの少なくとも１つのより最近のコピーを残すことである。チェックポイントファイルは、ゼロ個のデータユニットに減るとき、ストレージ空間を解放するためにストレージデバイスから削除される可能性がある。この改良のいくつかの潜在的な課題は、（ａ）統合プロセスが、概してシステムをより信頼できなくする可能性がある、管理されるべき別のプロセスを導入すること、及び（ｂ）統合プロセスが、チェックポイントファイル内に表されたチェックポイントデータを読む少なくとも１つの段階を含むが、チェックポイントデータを読み、書き込むいくつかの段階を含む可能性がある計算時間のコストを有することである。
【００３７】
第３の手法は、システムがあらゆるデータユニットに関して別々のチェックポイントファイルを記憶することである。各チェックポイント間隔において、特定の更新されたデータユニットに関して書き込まれた新しいチェックポイントファイルが、そのデータユニットに関する前のチェックポイントファイルを置き換える可能性がある。これは、（変更されたエントリだけが記憶される必要があるので）膨大なデータ転送のコストを避け、（ほとんど失効したデータのチェックポイントファイルが際限なく蓄積されないので）膨大なデータストレージのコストを避け、（これはクリーンアッププロセスを必要としないので）複雑性を減らす。しかし、この第３の手法では法外にコストがかかる可能性がある潜在的な理由は、ファイルがストレージ空間に関して比較的コストが高いことである。作業データがそれぞれ数バイトだけの数１０億個のデータユニットからなる場合、ファイルシステムが、ファイル作成及び管理動作によって圧倒される可能性があり、ファイルシステムのメタデータのためのオーバーヘッドストレージ空間が、結局データユニットの実際の中身よりも多くのストレージ空間を消費することになる可能性がある。
【００３８】
以下で説明されるチェックポイントを作成するための技術の一部は、上記の手法及び改良の利点の少なくとも一部を有する。例えば、（ファイルシステムのオーバーヘッドを含む）データストレージのコスト及びデータ転送時間は、リカバリデータが同じチェックポイントファイル内に、潜在的に変更されるデータユニットの新しいコピーと（異なる）チェックポイントファイルに前に追加されたデータユニットの古いコピーとの両方を含む可能性があるという認識に基づいて制限される可能性がある。増加的に古いコピーをより新しいチェックポイントファイルにマイグレーションするこのプロセスは、チェックポイント間隔内に行われる追加的な仕事の量を制限し、古いチェックポイントファイルがデータユニットの冗長なバックアップコピーだけを記憶するので、それらの古いチェックポイントファイルが破棄され得るまで、最も最近アクセスされていないデータユニットのより古いコピーを徐々に統合するようにして行われ得る。この統合プロセスは、チェックポイントファイルを記憶する同じチェックポイント作成プロセスによって実行され、したがって、オフラインの統合プロセスよりも潜在的に単純で、より信頼性がある可能性がある。古いチェックポイントファイルを削除しなくても、同じチェックポイントファイル内の複数のデータユニット（すなわち、異なるキーを有するデータユニット）に関する最新の状態を記憶することが、特に、データユニットに割り振られた異なるキーの数が多い（例えば、約１，０００を超えるか、約１，０００，０００を超えるか、又は約１，０００，０００，０００を超える）とき、ファイルシステムのオーバーヘッドが原因である潜在的なデータストレージのコストを削減する。
【００３９】
本発明のその他の特徴及び利点は、以下の説明及び請求項から明らかになるであろう。
【図面の簡単な説明】
【００４０】
【図１】データ処理システムのブロック図である。
【図２Ａ−２Ｂ】チェックポイント作成及びデータ処理動作のタイムラインを示す図である。
【図３Ａ−３Ｂ】それぞれチェックポイント作成及びリカバリアルゴリズムの流れ図である。
【図４Ａ】作業データの状態の概略図である。
【図４Ｂ−４Ｄ】チェックポイントファイルの概略図である。
【図４Ｅ−４Ｆ】作業データの状態の概略図である。
【図５】経時的なポインタの動きの概略図である。
【発明を実施するための形態】
【００４１】
図１は、チェックポイント技術が使用され得るデータ処理システム１００の例を示す。システム１００は、ストレージデバイス又はオンラインデータソースなどのデータの１又は２以上のソースを含み得るデータソース１０２を含み、それらの１又は２以上のソースのそれぞれは、さまざまなフォーマット（例えば、データベーステーブル、スプレッドシートファイル、フラットテキストファイル、又はメインフレームによって使用されるネイティブフォーマット）のいずれかでデータを記憶又は提供し得る。実行環境１０４は、処理モジュール１０６（例えば、１又は２以上の処理コアを有する少なくとも１つの中央演算処理装置）及びメモリモジュール１０８（例えば、ＤＲＡＭ又はその他の形態の比較的高速なメモリ媒体などの１又は２以上のメモリデバイス）を含む。実行環境１０４は、例えば、ＵＮＩＸオペレーティングシステムのバージョンなど好適なオペレーティングシステムの制御下の１又は２以上の汎用コンピュータでホストされる可能性がある。例えば、実行環境１０４は、ローカルの（例えば、対称型マルチプロセッシング（ＳＭＰ，symmetric multi-processing）コンピュータなどのマルチプロセッサシステム）又はローカルに分散された（例えば、クラスタ若しくは超並列処理（ＭＰＰ，massively parallel processing）システムとして接続された複数のプロセッサか、或いは遠隔の又は遠隔に分散された（例えば、ローカルエリアネットワーク（ＬＡＮ，local area network）及び／若しくは広域ネットワーク（ＷＡＮ，wide-area network）を介して接続された複数のプロセッサ）か、或いはこれらの任意の組合せかのいずれかの複数の中央演算処理装置（ＣＰＵ，central processing unit）或いはプロセッサコアを用いるコンピュータシステムの構成を含むマルチノード並列コンピューティング環境を含む可能性がある。
【００４２】
データソース１０２を提供するストレージデバイスは、実行環境１０４のローカルにあり、例えば、実行環境１０４をホストするコンピュータに接続されたストレージ媒体１１０に記憶される可能性があり、又は実行環境１０４のリモートにあり、例えば、リモート接続（例えば、データフィードをストリーミングするサーバ接続）を介して実行環境１０４をホストするコンピュータと通信するリモートシステム（例えば、メインフレーム１１２）でホストされる可能性がある。実行環境１０４内のデータ処理から生成される出力データは、データソース１０２若しくはその他のストレージ媒体に記憶し直されるか、又はそうでなければ使用される可能性がある。
【００４３】
処理モジュール１０６は、さまざまな応用（例えば、複合イベント処理）のいずれかのためにデータソース１０２からのデータを処理し、処理中に、メモリモジュール１０８に記憶された作業データ１１４にアクセスする。また、処理モジュール１０６は、実行環境１０４内のアクセス可能なデータストレージシステム１１６（例えば、実行環境１０４をホストするコンピュータのハードドライブ）に作業データ１１４の一部を記憶するチェックポイント作成プロセスを周期的に実行する。チェックポイント作成プロセスは、作業データ１１４の特定の一部をそっくりそのまま記憶する可能性があり、一方、その他の部分は、最後のチェックポイント間隔以降に変わっていない特定のデータを重複してバックアップすることを避けるために選択的に記憶されるのみである。例えば、作業データ１１４は、チェックポイント作成プロセスがデータユニットの間で維持される順序に従って１組のチェックポイントファイル１２０に選択的に記憶する１組のデータユニットを含み得る。データ処理に関連するその他のインメモリ状態（in-memory state）などの作業データ１１４のその他の部分は、別個のチェックポイントファイルに記憶される可能性がある。
【００４４】
データユニットの間の順序は、より大きなデータ処理プログラムの一部である可能性があり又は作業データ１１４を管理する別個のプロセスであってもよい管理プログラムによって維持される。一部の実装形態において、データユニットは、メモリモジュール１０８において、最も最近アクセスされていない（ＬＲＡ，least-recently-accessed）ものから最も最近アクセスされた（ＭＲＡ，most-recently-accessed）ものに向かう順序で編成されたキー値対のエントリの連想配列内に記憶される。例えば、連想配列は、ハッシュテーブルとして実装される可能性があり、テーブルのエントリは、維持された順序に従って双方向連結リストポインタ構成を用いて一緒に数珠つなぎにされる可能性がある。テーブルの各エントリは、一意キーに基づいてアクセスされ、上述のキーの付いた状態オブジェクトなどの囲い込むデータオブジェクト内の（任意の数の変数の個々の値又はその他の状態情報を表す）そのキーに対応するデータを記憶することができる。管理プログラムは、テーブルのＭＲＡエントリを指すＭＲＡポインタと、テーブルのＬＲＡエントリを指すＬＲＡポインタとを維持する。管理プログラムは、最も最近チェックポイントを作成されていない（ＬＲＣ，least-recently-checkpointed）ポインタ及び最も最近チェックポイントを作成された（ＭＲＣ，most-recently-checkpointed）ポインタも維持する。また、テーブルの各エントリは、（もしあれば）そのエントリが最後に保存されたチェックポイントファイルに対応するチェックポイント番号（ＣＰＮ，checkpoint number）を記憶する関連するプロパティを有する。これらのポインタ及びフィールドは、以下でより詳細に説明されるように、任意の所与のチェックポイント間隔においてエントリのうちのどれが新しいチェックポイントファイルにコピーされるのかを選択的に決定するために使用される。
【００４５】
エントリは、アクセスされる度に、最も最近アクセスされたエントリになる−−つまり、ＭＲＡポインタが、そのエントリのメモリアドレスに割り振られ、（例えば、テーブル内のその古いロケーションの隣接するエントリに関する）連結リスト内のその他のポインタが、適切に調節される。一部の実装形態において、エントリは、エントリのキーがそのエントリに記憶されたデータを取り出すために使用される場合に、又はエントリがテーブルに追加されたときにアクセスされたと考えられる。そのような実装形態においては、プログラムがエントリのデータを読むためにそのエントリのデータを変更することなく取り出すとき、エントリは、やはりアクセスされたと考えられる。一部の実装形態において、管理プログラムは、いつエントリが実際に変更された（例えば、最も最近変更されたか又は最も最近変更されていない）かに基づいて順序を維持し、エントリのデータを変更することなく読むことが順序に影響を与えると考えない。そのような実装形態は、例えば、各エントリのデータをそのエントリのアクセスによって変更した各エントリに関する「ダーティビット」を使用する可能性がある。下の例においては、アクセスがエントリに記憶されたデータを変更した可能性があると仮定する、より単純な方式が使用される。また、管理プログラムは、いつエントリがもはや必要とされず、テーブルから削除されるべきであるかを決定する。例えば、一部の実装形態においては、メモリ又は時間の制約によって決まるとき、最も最近アクセスされていないエントリをはじめとしてテーブルからエントリが削除される。
【００４６】
データ処理システム１００は、定期的なチェックポイント間隔でチェックポイント作成プロセスを実行することによって増分チェックポイント作成（incremental checkpointing）方式を提供する。例えば、チェックポイント作成プロセスは、予め決められた量の時間の後、又はシステムが予め決められた数の入力レコードを受信した後にトリガされる可能性がある。チェックポイント作成プロセスは、トリガされるとき、最も最近のチェックポイント間隔中にアクセスされたデータユニットの「新しい」コピーと、最も最近のチェックポイント間隔中にアクセスされておらず、チェックポイントファイルに既に記憶されているデータユニットの同様の数の「古い」コピーとを有するチェックポイントファイルを記憶し、以下でより詳細に説明されるように、ＭＲＣポインタを調節する。チェックポイント作成プロセスによって実行されるこれらのチェックポイント作成動作は、管理プログラムがデータ処理動作のための作業データ１１４へのアクセスを管理し続ける間に行われる可能性があり、又はチェックポイント作成プロセスが実行される間、作業データ１１４へのアクセスを一時的に遮断する可能性がある。図２Ａ及び２Ｂは、最も最近のチェックポイント間隔に関するチェックポイント処理動作のタイミングの例の（時間が右に向かって増加する）タイムラインを示す。図２Ａの例において、チェックポイント作成プロセスは、チェックポイント間隔２０２Ｂの間継続するデータ処理動作２０４と同時に、前のチェックポイント間隔２０２Ａの間に行われた活動の作業データの状態を保存するためのチェックポイント作成動作２００を実行する。代替的に、図２Ｂの例において、チェックポイント作成プロセスは、チェックポイント間隔２０２Ｂの間にデータ処理動作２０４’が再開する前に、前のチェックポイント間隔２０２Ａの間に行われた活動に関するチェックポイント作成動作２００’を完了する。リカバリ中に作業データ１１４の適切な再構築を可能にするために、チェックポイント作成プロセスは、（例えば、各データユニットに関するフラグを用いて、又は別々のセクションのチェックポイントファイルにデータユニットを書き込んで）新しいコピーが古いコピーと区別されることを可能にするようにしてデータユニットを記憶する。チェックポイント作成プロセスは、古いデータユニットをより新しいチェックポイントファイルに書き込むので、以下でより詳細に説明されるように、特定の条件が満たされるとき、（より新しいチェックポイントファイルに今や記憶されている）それらのデータユニットを前に記憶したチェックポイントファイルを削除することができる。
【００４７】
管理プログラムは、通常のデータ処理中に作業データ１１４にアクセスするとき、次のチェックポイント間隔で行われるチェックポイント作成プロセスを準備するためにＭＲＡポインタ及びＭＲＣポインタを適切に更新する。例えば、連結リストとして編成された上述のエントリのテーブルに関して、ＭＲＣエントリがアクセスされる場合、ＭＲＣエントリは、テーブルの一端のＭＲＡエントリになり、ＭＲＣポインタは、テーブルのＬＲＡ端の方に１段階進んだエントリを指すように調節される。次のチェックポイント作成プロセスが行われるとき、ＭＲＡ（包含的）ポインタとＭＲＣ（排他的）ポインタとの間のエントリのみが、記憶される必要がある。ＭＲＣポインタとＭＲＡポインタとの間のエントリがチェックポイントファイルに記憶された後、チェックポイント作成プロセスは、次のチェックポイント間隔を準備するために、ＭＲＣポインタをＭＲＡポインタによって特定されるエントリに設定する。
【００４８】
リカバリ中のテーブルの適切な再構築に関連する作業データ１１４及びチェックポイントファイル１２０を管理する別の態様は、作業データ１１４から削除された（又はもはや使用されていないと示される）データユニット（例えば、テーブルのエントリ）を追跡することである。削除されたデータユニットを含め、データ処理のはじめから存在した各データユニットを曖昧性なく特定する目的で、一意識別子（ＩＤ，identifier）が、各データユニットに割り振られる。テーブルのエントリに関するキーは、一意であるので、削除されたエントリに関するキーが再利用されない限りこの一意ＩＤとして使用され得る。そうではなく、キーが再利用される場合、別の一意ＩＤが、各エントリに割り振られる可能性がある。以下の例においては、新しいエントリがテーブルに追加される度に増大する８バイトの整数が、この一意ＩＤとエントリのキーとの両方として働く。チェックポイント間隔中にエントリがテーブルから削除されるとき、管理プログラムは、その管理プログラムがチェックポイントファイルの一部として記憶する、そのチェックポイント間隔に関する削除されたエントリのリストにそのエントリのＩＤを追加する。
【００４９】
したがって、特定のチェックポイント間隔に関するチェックポイントファイルは、以下の２種類のアイテムを記憶するデータ構造（例えば、テーブル）を含み得る。
（１）最後のチェックポイント間隔以降に削除されたエントリのキーを記憶するアイテム、及び
（２）最後のチェックポイント間隔以降にアクセスされたエントリ（キーと対応するデータとの両方）のコピーを記憶するアイテム。
【００５０】
１つのあり得るリカバリ手順は、あらゆるチェックポイントファイルをそれらの作成順に読むことを含む。各チェックポイントファイルに関して、処理モジュール１０６によって実行されるリカバリプロセスは、以下のステップを実行する。
（１）キーがチェックポイントファイルの種類（１）のアイテムに記憶されるエントリを削除し、それから、
（２）チェックポイントファイルの種類（２）のアイテムに記憶されたエントリを追加又は更新する。
【００５１】
これまでに記憶された第１のチェックポイントファイルからのあらゆるチェックポイントファイルを読むことは正しい挙動につながるが、リカバリプロセスが、リカバリ時にあらゆるチェックポイントファイルを読み、チェックポイント作成のはじめからテーブルへのあらゆる変更を再現するように要求されないようになされ得る改善がある。古いチェックポイントファイルに前にコピーされたエントリを新しいチェックポイントファイルに増分コピーすることによって、チェックポイント作成プロセスは、最後には、もはや必要とされないより古いチェックポイントファイルを削除することができる。これは、より迅速なリカバリプロセスを可能にし、データストレージのコストを削減する。
【００５２】
（最も最近完了したチェックポイント間隔の時点で）古いチェックポイントファイルが、テーブルの各エントリの最も最近の状態をリカバリするために必要ないかなる保存された状態も失わずに安全に削除され得ることを保証するために、管理プログラム及びチェックポイント作成プロセスは、一緒に、どの古いエントリがより新しいチェックポイントファイルにコピーされたかを追跡するために、ＬＲＣポインタがＬＲＡ端からＭＲＡ端に向かって資格のあるエントリを増加的にくまなく巡ることを可能にする。各チェックポイント間隔に関して、チェックポイント作成プロセスは、そのチェックポイント作成プロセスが保存するＭＲＡ端からの新しいエントリと同じだけ多くのＬＲＡ端からの古いエントリを保存する。このようにして、チェックポイント作成プロセスは、データ転送のコストを、最後のチェックポイント間隔以降にアクセスされたエントリの数に比例するように制限する。チェックポイント作成プロセスは、ＬＲＡ端からの古いエントリをより新しいチェックポイントファイルに書き込むとき、それらの古いエントリが前に一部をなしていたチェックポイントファイルを、それらのチェックポイントファイルがより新しいチェックポイントファイルにまだコピーされていない古いエントリをさらに記憶しない限り削除することができる。そのとき、リカバリは、最も古いものから最も新しいものに向かう順序で残りのチェックポイントファイルを読むことによって最も最近のテーブルを復元することができる。
【００５３】
データ処理システム１００がデータの処理と、メモリモジュール１０８に記憶された作業データ１１４の管理を開始するとき、最初のチェックポイント作成プロセスが新しいデータユニットのみを有する１又は２以上のチェックポイントファイル１２０の最初の組を構築する最初のいくつかのチェックポイント作成間隔が存在する可能性がある。例えば、この最初のチェックポイント作成プロセスは、ＭＲＣポインタ（排他的）とＭＲＡポインタ（包含的）との間のテーブルのＭＲＡ端の新しいエントリを記憶する。ＬＲＣポインタは、この最初のチェックポイント作成プロセスのために使用されない。いくつかの最初のチェックポイントファイル１２０が記憶された後、新しいデータユニットと同様古いデータユニット（すなわち、テーブルのエントリ）も記憶する通常の（定常状態の）チェックポイント作成プロセスが始まる。通常のチェックポイント作成プロセスが始まるとき、ＬＲＣポインタは、最初、ＬＲＡポインタに設定される。そして、チェックポイント作成プロセスは、どちらがより小さいかに拘わらず、ＬＲＣポインタ（包含的）とＭＲＣポインタ（排他的）との間の又はＬＲＣポインタ（包含的）からチェックポイントを作成される新しいエントリの数までのテーブルのＬＲＡ端の限られた数の古いエントリを記憶する。
【００５４】
擬似コードで書かれた、チェックポイント作成プロセスによって使用されるアルゴリズムの以下の例。擬似コードは、擬似コードのステートメント及び関数の機能を説明するコメントを含む。擬似コードは、条件ステートメント（例えば、「if」ステートメント）及びループ（例えば、「while」及び「for」ループ）並びに（プレフィックス「//」が前に置かれる）コメントに関して標準的なＣプログラミング言語の構文を用いる。この擬似コードのリストにおいて、ＭＲＡポインタは、変数「mra」内にあり、ＬＲＡポインタは、変数「lra」内にあり、ＭＲＣポインタは、変数「mrc」内にあり、ＬＲＣポインタは、変数「lrc」内にある。これらのポインタによって特定されるエントリの部分を表すために、これらの変数と共にドット表記が用いられる。特に、ドット表記「pointer.prev」及び「pointer.next」は、「pointer」によって指し示されるエントリからＭＲＡ端及びＬＲＡ端に１段階近いテーブル内の位置をそれぞれ表すために使用され、ドット表記「pointer.checkpoint_number」及び「pointer.key」及び「pointer.data」は、「pointer」によって指し示されるエントリのＣＰＮ及びキー及びデータをそれぞれ表すために使用される。ドット表記は、変数「item」によって表されるアイテムがプロパティ「<property>」を有するかどうかを試験するための「item.is_<property>()」など、変数に関連する特定の関数を呼び出すことを表すためにやはり使用される。以下のアルゴリズムが、各チェックポイント間隔に関してチェックポイント作成プロセスによって実行され得る。
// 削除するチェックポイントファイルの空のリストから開始する
files_to_remove = empty_list();
// 新しい（空の）チェックポイントファイルを開く
// （現在のチェックポイント番号を用いて命名される）
checkpoint_file = open_checkpoint_file(checkpoint_number);
// （第１の新しいエントリを見つけるために）ＭＲＣポインタを進める
mrc = mrc.prev;
// whileループが最も最近のチェックポイント間隔中に
// アクセスされたすべてのエントリ
// 及び等しい数の古いエントリをコピーする
while (mrc != mra) {
// 現在のチェックポイントファイルに現在の新しいエントリを書き込む
// 「Ｎｅｗ？」を真に設定する
write(checkpoint_file, checkpointed_entry(mrc, true));
// 現在の新しいエントリにチェックポイント番号を記録する
mrc.checkpoint_number = checkpoint_number;
// ＭＲＣポインタを進める
mrc = mrc.prev;
// ＬＲＣがＭＲＣに追いついていない場合．．．
if (lrc != mrc) {
// ．．．現在のチェックポイントファイルにＬＲＣエントリを書き込む
// 「Ｎｅｗ？」を偽に設定する
write(checkpoint_file, checkpointed_entry(lrc, false));
// ＬＲＣエントリがそのエントリの古いチェックポイントファイルにおいて
// 最も最近のエントリであった場合、そのファイルを削除する
if (lrc.checkpoint_number != lrc.prev.checkpoint_number)
files_to_remove.add(lrc.checkpoint_number);
// 新しいチェックポイント番号を記録する
lrc.checkpoint_number = checkpoint_number;
// ＬＲＣポインタを進める
lrc = lrc.prev;
}
}
// （whileループの出口から）ＭＲＣは今やＭＲＡである
// ＬＲＣがＭＲＣに追いついた場合、ＬＲＣをＬＲＡに戻す
if (lrc == mrc)
lrc = lra;
// この間隔中に削除されたすべてのエントリのキーを用いて削除タイプのアイテムを記録する
for (key in removed_keys)
write(checkpoint_file, checkpointed_removal(key));
// ＬＲＣキーを用いてＬＲＣタイプのアイテムを記録する
write(checkpoint_file, checkpointed_lrc(lrc.key));
// チェックポイント番号を進める
checkpoint_number++;
// 削除のために挙げられたファイルを削除する
for (file in files_to_remove)
remove_checkpoint_file(file);
【００５５】
上のアルゴリズムは、図３Ａの流れ図にも表される。チェックポイント作成プロセスは、削除するチェックポイントファイルの空のリスト及び新しい空のチェックポイントファイル、並びに第１の新しいエントリへと進められたＭＲＣポインタによってチェックポイントファイルを初期化する（３００）。プロセスは、ＭＲＣポインタがＭＲＡポインタと等しくなるまでループを続けるループ条件を有するwhileループ３０２を実行する。whileループ３０２において、プロセスは、現在のチェックポイントファイルに現在の新しいエントリを書き込み（３０４）、現在のＭＲＣエントリに現在のＣＰＮを記録し（３０６）、ＭＲＣポインタを進める（３０８）。プロセスは、ＬＲＣがＭＲＣに達したかどうかを判定するために検査を行い（３１０）、達している場合、次のwhileループの反復のために元に戻り、達していない場合、先に進む。whileループ３０２内を進む場合、プロセスは、現在のチェックポイントファイルにＬＲＣエントリを書き込む（３１２）。それから、プロセスは、ＬＲＣエントリがその古いチェックポイントファイルの最も最近のエントリであったかどうかを判定するために検査を行い（３１４）、最も最近のエントリであった場合、そのＬＲＣエントリを削除されるチェックポイントファイルのリストに追加することによって、そのチェックポイントファイルに削除のための印を付ける（３１６）。そして、プロセスは、現在のＬＲＣエントリに現在のＣＰＮを記録し（３１８）、次のwhileループの反復に戻る前にＬＲＣポインタを進める（３２０）。whileループ３０２を抜けた後、プロセスは、ＬＲＣがＭＲＣに達したかどうかを判定するために検査を行い（３２２）、達している場合、ＬＲＣをＬＲＡに戻す。そして、プロセスは、このチェックポイント間隔中に削除されたすべてのエントリのキーを用いて削除タイプのアイテムを記録し（３２６）、ＬＲＣタイプのアイテムを記録し（３２８）、ＣＰＮを進め（３３０）、削除のために印を付けられたチェックポイントファイルを削除する（３３２）。
【００５６】
以下は、擬似コードで書かれた、リカバリプロセスによって使用されるアルゴリズムの例である。以下のアルゴリズムが、障害の後にエントリのテーブルの最も最近の一貫性のある状態（つまり、最も最近チェックポイントを作成された状態）をリカバリするために実行され得る。
mra = null;
lra = null;
// 各チェックポイントファイル（最も古いものから最も新しいものまで）に関する外側のForループ
for (checkpoint_file in checkpoint_file_list) {
// チェックポイントファイルの各アイテムに関する内側のForループ
for (item in checkpoint_file) {
// アイテムが削除タイプである場合、指定されたキーを有するエントリを削除する
if (item.is_removal())
remove(item.key);
// アイテムがエントリタイプである場合、それを作成又は更新する
if (item.is_entry()) {
// 指定されたキーを有するエントリを発見し（及びテーブルから削除し）、
// 指定されたデータを用いてエントリを更新するか、
// 又は見つからない場合、指定されたキー／データを有するエントリを作成する
entry = get_entry(item.key, item.data);
// ポインタを設定することによってテーブルの適切な位置に更新された／作成されたエントリを挿入する
if (item.is_new()) {
entry.next = mra; 
if (mra != null)
mra.prev = entry;
mra = entry;
} else {
if (lra == null)
lra = entry;
else {
lra.prev = entry;
entry.next = lra;
}
}
}
// アイテムがＬＲＣキーを有するＬＲＣタイプのアイテムである場合、ＬＲＣを設定する
if (item.is_lrc())
lrc = get_entry(item.key);
}
}
// ＭＲＣをＭＲＡに設定する
mrc = mra;
【００５７】
上のアルゴリズムは、図３Ｂの流れ図にも表される。リカバリプロセスは、ＭＲＡポインタ及びＬＲＡポインタをヌル値に初期化する（３４０）。そして、リカバリプロセスは、チェックポイントファイル（最も古いものから最も新しいものまで）に関して反復する外側のforループ３４４及び各チェックポイントファイルのアイテムに関して反復する内側のforループ３４６による入れ子にされたforループを実行する。内側のforループ３４６の中で、プロセスは、アイテムが削除タイプである場合、そのアイテムを削除する。それから、プロセスは、アイテムがエントリタイプであるかどうかを検査し（３５０）、エントリタイプである場合、指定されたキーを有するエントリを発見し（３５２）、指定されたデータを用いてエントリを更新するか、又はそのエントリが見つからない場合、指定されたキー及びデータを有するエントリを作成する。そして、更新又は作成されたエントリが、ポインタを設定することによってテーブルの適切な位置に挿入される（３５４）。挿入の後、又はアイテムがエントリタイプではない場合、プロセスは、そのアイテムがＬＲＣタイプである場合、ＬＲＣを、指定されたキーを有するエントリに設定する（３５６）。そして、両方のforループが、次の反復のために元に戻る。両方のforループが終了した後、プロセスは、ＭＲＣをＭＲＡに設定する。
【００５８】
チェックポイント作成プロセスによって使用され得るアルゴリズムのその他の例は、その他のステップを含む可能性がある。例えば、チェックポイントファイルが、圧縮される可能性がある。チェックポイントファイルは、チェックポイント間隔毎に１つに満たない物理ファイルに組み合わされる可能性がある。例えば、一定時間の動作によってチェックポイント作成プロセスがより新しいコピーを既に記憶させたテーブルのエントリのより古いコピーを削除することを可能にする周期的な移行があり得る。エントリの順序付けられたリストが、単なるアクセスではなくエントリの修正に基づいて維持される可能性がある。ＬＲＣポインタが進められているときに削除されることになるチェックポイントファイルのそれぞれのチェックポイント番号を記録するのではなく、プロセスは、単純に、最後のＬＲＣエントリに関するチェックポイント番号よりも小さいチェックポイント番号に関連するすべてのチェックポイントファイルを削除する可能性がある。チェックポイントファイル内で新しいエントリ及び古いエントリをインターリーブし、フラグを用いてそれらのエントリを区別するのではなく、プロセスは、新しいエントリをそれらのエントリが書き込まれているときに数え、同じ（又は同様の）数の古いエントリを、新しいエントリが書き込まれた後にチェックポイントファイルの別々のセクションに書き込む可能性がある（例えば、新しいエントリのためのセクション、古いエントリのためのセクション、削除されたキーを有するアイテムのためのセクション、及びＬＲＣエントリのキーを有するアイテムのためのセクション）。
【００５９】
図４Ａ〜４Ｆは、エントリのテーブルの異なる状態及び作業データ１１４内のその他のインメモリ状態の例と、チェックポイントファイル１２０の異なる状態の例との図を示す。図４Ａは、キー／データの対のエントリを、そのキー／データの対が記憶される最新のチェックポイントファイルを特定するＣＰＮと一緒に記憶するテーブル４００の一部と、ＭＲＡポインタ、ＬＲＡポインタ、ＭＲＣポインタ、及びＬＲＣポインタの位置とを示す。図４Ａは、削除されたキーのリスト４０２も示す。テーブル４００及びリスト４０２は、チェックポイント作成プロセスがＣＰＮ２０１を有するチェックポイントファイルを生成する直前の状態に関して示される。簡単にするために、所与のキーに関するデータの内容は、示される例において単一の文字によって表される。
【００６０】
図４Ｂ及び４Ｃは、ＣＰＮ２０１を有するチェックポイントファイルが生成される直前の（ＣＰＮ１９３〜２００を有する）既存のチェックポイントファイルの組の一部を示す。図４Ｂは、以前のチェックポイントファイル１９３〜１９４を示し、図４Ｃは、最新のチェックポイントファイル１９８〜２００を示す。この例において、チェックポイントファイルは、テーブルの行としてアイテムを有するテーブルとして示される。各アイテムは、「Ｔｙｐｅ」フィールドの３つのあり得る値、すなわち、Ｅ（エントリタイプ）、Ｒ（削除タイプ）、又はＬ（ＬＲＣタイプ）のうちの１つを有する。エントリタイプのアイテムは、「Ｋｅｙ」フィールドのキー値、「Ｄａｔａ」フィールドのデータ値、及びエントリが「新しい」エントリであるか又は「古い」エントリであるかをそれぞれ示す「Ｎｅｗ？」フィールドのＴ（真）か又はＦ（偽）かのどちらかを有する。上述のように、「古い」エントリは、以前のチェックポイントファイルに既に記憶され、より新しいチェックポイントファイルに今再び記憶されているエントリである。削除タイプのアイテム及びＬＲＣタイプのアイテムは、「Ｋｅｙ」フィールドのキー値を有するが、「Ｄａｔａ」フィールド又は「Ｎｅｗ？」フィールドの値を持たない。
【００６１】
上の擬似コードで記述された例示的なアルゴリズムを実行して、図４Ａに示されたテーブル４００及びリスト４０２及び図４Ｂ〜４Ｃに示されたチェックポイントファイルで終わったチェックポイント間隔に関して、チェックポイント作成プロセスは、図４Ｄに示されたＣＰＮ２０１を有する新しいチェックポイントファイルを記憶する。また、チェックポイント作成プロセスは、ＣＰＮ１９３を有するチェックポイントファイルに最後にチェックポイントを作成されたエントリからＣＰＮ１９４を有するチェックポイントファイルに最後にチェックポイントを作成されたエントリへのＬＲＣポインタの遷移が、ＣＰＮ１９３を有するチェックポイントファイル内に必要とされるエントリのいかなるコピーももはや存在しないことを示したので、ＣＰＮ１９３を有するチェックポイントファイルを削除する。チェックポイント作成プロセスがＣＰＮ２０１を有するチェックポイントファイルを記憶した後、及び図４Ａの状態以降にいずれかのエントリがアクセスされる機会を持つより前に、テーブル４００及びリスト４０２は、図４Ｅに示された状態を有する。
【００６２】
ＣＰＮ２０１を有するチェックポイントファイルの記憶後にシステム障害が起こる場合、システムは、（ＣＰＮ１９４〜２０１を有する）残りのチェックポイントファイルのみをそれらのチェックポイントファイルのＣＰＮの順序で処理することによって、リカバリプロセスを実行して（図４Ｅに示された）テーブル４００及びリスト４０２の状態をリカバリすることができる。図４Ｆは、テーブル４００が再構築されているときのテーブル４００の状態の一連のスナップショットを示す。第１のチェックポイントファイル１９４の処理の後、及び各チェックポイントファイル１９８〜２００の処理の後のテーブル４００の状態の一部が、示される。そして、チェックポイントファイル２０１を処理した後、（図４Ｅに示された）テーブル４００へのポインタを含む、テーブル４００の完全にリカバリされた状態が復元される。ＭＲＡポインタ及びＭＲＣポインタは、テーブル４００の第１のエントリに設定され、ＬＲＡポインタは、テーブル４００の最後のエントリに設定される。ＬＲＣポインタの値は、この例においてはチェックポイントファイル２０１であるチェックポイントファイルのうちの最後のチェックポイントファイルのＬＲＣタイプのアイテムを用いて復元される。
【００６３】
図５は、各チェックポイント間隔に関する棒がテーブルの異なるセクションを表すために模様分けされるようにして、異なるポインタが一連の９つの異なるチェックポイント間隔の間に経時的にどのように移動するかの図を示す。経時的な異なるセクションの変化するサイズは、ＬＲＣポインタがＭＲＣポインタに追いつき、ＬＲＡポインタに循環して戻ることを示す。この例においては、この一連のチェックポイント間隔中にアクセスされた安定した数のデータユニット及び安定したサイズのテーブルが存在する。それぞれの棒の下にあるのは、そのチェックポイント間隔の間に書き込まれるチェックポイントファイルに関する現在のＣＰＮであり、現在のＣＰＮの下にあるのは、（古いチェックポイントファイルが削除された後の）テーブルの状態を記憶する残りのアクティブなチェックポイントファイルのＣＰＮのリストである。この例を含むほとんどの使用事例において、１組の残りのチェックポイントファイルは非常に安定しており、チェックポイント間隔毎に平均で１つのチェックポイントファイルが削除される。
【００６４】
上述のチェックポイント作成手法は、例えば、好適なソフトウェア命令を実行するプログラミング可能なコンピューティングシステムを用いて実装される可能性があり、又はフィールドプログラマブルゲートアレイ（ＦＰＧＡ，field-programmable gate array）などの好適なハードウェアで、若しくは何らかの混成の形態で実装される可能性がある。例えば、プログラミングされる手法において、ソフトウェアは、それぞれが少なくとも１つのプロセッサ、（揮発性及び／又は不揮発性メモリ及び／又はストレージ要素を含む）少なくとも１つのデータストレージシステム、（少なくとも１つの入力デバイス又はポートを用いて入力を受け取るため、及び少なくとも１つの出力デバイス又はポートを用いて出力を与えるための）少なくとも１つのユーザインターフェースを含む（分散、クライアント／サーバ、又はグリッドなどのさまざまなアーキテクチャであってもよい）１又は２以上のプログラミングされた又はプログラミング可能なコンピューティングシステムで実行される１又は２以上のコンピュータプログラムの手順を含み得る。ソフトウェアは、例えば、データフローグラフの設計、構成、及び実行に関連するサービスを提供する、より大きなプログラムの１又は２以上のモジュールを含む可能性がある。プログラムのモジュール（例えば、データフローグラフの要素）は、データリポジトリに記憶されたデータモデルに準拠するデータ構造又はその他の編成されたデータとして実装され得る。
【００６５】
ソフトウェアは、ＣＤ−ＲＯＭ又は（例えば、汎用若しくは専用のコンピューティングシステム若しくはデバイスによって読み取り可能な）その他のコンピュータ可読媒体などの有形の非一時的媒体で提供されるか、或いはそのソフトウェアが実行されるコンピューティングシステムの有形の非一時的媒体にネットワークの通信媒体を介して配信される（例えば、伝播信号で符号化される）可能性がある。処理の一部又はすべては、専用のコンピュータで、又はコプロセッサ若しくはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）若しくは専用の特定用途向け集積回路（ＡＳＩＣ，application-specific integrated circuit）などの専用のハードウェアを用いて実行される可能性がある。処理は、ソフトウェアによって指定された計算の異なる部分が異なる計算要素によって実行される分散された方法で実装される可能性がある。それぞれのそのようなコンピュータプログラムは、本明細書において説明された処理を実行するためにストレージデバイスの媒体がコンピュータによって読み取られるときにコンピュータを構成し、動作させるために、汎用又は専用のプログラミング可能なコンピュータによってアクセス可能なストレージデバイスのコンピュータ可読ストレージ媒体（例えば、ソリッドステートメモリ若しくは媒体、又は磁気式若しくは光学式媒体）に記憶されるか又はダウンロードされることが好ましい。本発明のシステムは、コンピュータプログラムで構成された有形の非一時的媒体として実装されると考えられる可能性もあり、そのように構成された媒体は、本明細書において説明された処理ステップのうちの１又は２以上を実行するために特定の予め定義された方法でコンピュータを動作させる。
【００６６】
本発明のいくつかの実施形態が、説明された。しかしながら、上述の説明は、添付の請求項の範囲によって規定される本発明の範囲を例示するように意図されており、限定するように意図されていないことを理解されたい。したがって、その他の実施形態も、添付の請求項の範囲内にある。例えば、本発明の範囲を逸脱することなくさまざまな修正がなされ得る。さらに、上述のステップの一部は、順序に依存しない可能性があり、したがって、説明された順序とは異なる順序で実行され得る。
【図１】
0006400695.tif 000002
【図２Ａ】
0006400695.tif 000003
【図２Ｂ】
0006400695.tif 000004
【図３Ａ】
0006400695.tif 000005
【図３Ｂ】
0006400695.tif 000006
【図４Ａ】
0006400695.tif 000007
【図４Ｂ】
0006400695.tif 000008
【図４Ｃ】
0006400695.tif 000009
【図４Ｄ】
0006400695.tif 000010
【図４Ｅ】
0006400695.tif 000011
【図４Ｆ】
0006400695.tif 000012
【図５】
0006400695.tif 000013