少なくとも一つの記憶装置によって提供される記憶セットにおいてデータセットを記憶する方法であって、当該方法は、プロセッサを有するコンピュータに関わり:記憶装置上で、それぞれ検証子と関連付けられたデータセットを記憶するよう構成されたジャーナルを生成する段階と;前記記憶セット中のある位置にデータセットを記憶する要求を受領すると、前記データセットを前記ジャーナルに記憶する段階と;前記ジャーナルに記憶されたデータセットのバッチを選択する段階と;前記バッチのそれぞれのデータセットについて:前記データセットについての検証子を計算し;前記検証子を前記ジャーナルに記憶し;前記データセットおよび前記データセットの前記検証子を前記記憶セットに記憶し;前記データセットおよび前記データセットの前記検証子を前記記憶セットに記憶したのち、前記ジャーナルから前記データセットを除去する段階とを行なうよう構成された命令を前記プロセッサ上で実行することを含む、方法。前記命令が:前記ジャーナルの容量に関わるジャーナル容量イベント;前記ジャーナルに記憶されている前記データセットの継続時間に関わる継続時間イベント;前記ジャーナル内の少なくとも一つのデータセットを前記記憶セットにコミットする要求に関わるコミット要求イベント;および前記記憶セットの少なくとも一つの記憶装置の作業負荷に関わる記憶装置作業負荷イベントを含むコミットイベント集合から選択されるコミットイベントを検出したときに、前記記憶セットに記憶されるべきデータセットの前記バッチを選択するよう構成されている、請求項1記載の方法。データセットの前記バッチの選択が:前記ジャーナルに記憶されており、前記記憶セット中の第一の位置に記憶されるべき第一のデータセットを前記バッチに含めるよう選択し;前記ジャーナルに記憶されており、前記記憶セット中の前記第一の位置に近い第二の位置に記憶されるべき第二のデータセットを前記バッチに含めるよう選択することを含む、請求項1記載の方法。それぞれの要求がデータセットについて前記記憶セット中での位置を指定しており;データセットについての検証子を計算することが:前記ジャーナルに完全に記録されているデータセットについては、そのデータセットから検証子を計算し;前記ジャーナルに完全には記録されていないデータセットについては:前記記憶セット中での前記位置における前記データセットのもとのバージョンを読み;前記データセットの前記もとのバージョンのもとの検証子を読み;前記もとの検証子から前記データセットの前記もとのバージョンを除去し;前記もとの検証子に前記データセットを含める、ことを含む、請求項1記載の方法。前記コンピュータが揮発性メモリを有しており;前記命令が:前記揮発性メモリ中に、前記記憶装置上に記憶されている前記ジャーナルの揮発性メモリ表現を生成し;前記ジャーナルにデータセットを記憶するときに、前記ジャーナルの前記揮発性メモリ表現中に前記データセットを記憶するよう構成されている、請求項1記載の方法。請求項5記載の方法であって、前記命令は、データセットを読み出す要求を受領すると:前記データセットが前記揮発性メモリ内の前記ジャーナルの前記揮発性メモリ表現内に記憶されていることを判別すると、前記揮発性メモリ表現内に記憶されている前記データセットを提示し;前記データセットが前記記憶装置上の前記ジャーナルに記憶されていることを判別すると、前記ジャーナルに記憶されている前記データセットを提示し;前記データセットが前記記憶装置上の前記記憶セットに記憶されていることを判別すると、前記記憶装置の前記記憶セットに記憶されている前記データセットを提示するよう構成されている、方法。請求項5記載の方法であって、前記命令が、前記記憶セットにデータセットを記憶したのち、そのデータセットを前記ジャーナルの前記揮発性メモリ表現から除去するよう構成されている、方法。請求項7記載の方法であって:前記命令が:前記ジャーナルにデータセットを記憶するときに、前記ジャーナルの前記揮発性メモリ表現中に前記データセットを、除去不可能とマークして記憶し;前記記憶セットにデータセットを記憶するときに、前記ジャーナルの前記揮発性メモリ表現中に記憶されている前記データセットを、除去可能とマークするよう構成されており、データセットを前記揮発性メモリ中の前記ジャーナルの前記揮発性メモリ表現から除去することが、除去可能とマークされたデータセットのみを前記ジャーナルの前記揮発性メモリ表現から除去することを含む、方法。請求項5記載の方法であって:前記ジャーナルの前記揮発性メモリ表現がある容量のデータセットをもち;前記揮発性メモリ中に前記ジャーナルの前記揮発性メモリ表現を生成することが:前記ジャーナルの前記揮発性メモリ表現中の前記容量のデータセット;前記ジャーナルの前記揮発性メモリ表現の前記容量を含む前記データセットの前記検証子;前記ジャーナルに記憶されているデータセットが前記記憶セットに記憶されつつある間に前記記憶セットに記憶されるべきデータセットを記憶するよう構成されたバッファとを記憶するよう前記揮発性メモリ中の容量をリザーブしておくことを含む、方法。命令を有しているコンピュータ可読記憶媒体であって、前記命令は、装置のプロセッサ上で実行されたときに、少なくとも一つの記憶装置を含む記憶セット上にデータを記憶することを:記憶装置上で、レコードのシーケンス、頭部ポインタおよび尾部ポインタを有するジャーナルを生成する段階と;前記記憶セット中のある位置に記憶されるべきデータセットを受領すると:前記ジャーナルの頭部ポインタを新たなレコードを過ぎるところまで進め;前記新たなレコードに前記データセットを記憶し;前記ジャーナルの前記尾部ポインタの近くの少なくとも一つの選択されたデータセットを選択し;それぞれの選択されたデータセットについて:その選択されたデータセットについて検証子を計算し;前記選択されたデータセットの検証子を前記ジャーナルに記憶し;前記選択されたデータセットおよび該データセットの検証子を前記記憶セットにコミットし;前記ジャーナルの前記尾部ポインタを、前記少なくとも一つの選択されたデータセットを過ぎたところまで進める段階とを実行することによって行なう、コンピュータ可読媒体。この概要は、詳細な説明においてさらに後述される概念のセレクションを簡略化された形で紹介するために設けられている。この概要は、特許請求される主題の鍵となる因子または本質的な特徴を特定することは意図されていないし、特許請求される主題の範囲を限定するために使われることも意図されていない。記憶装置へのデータの書き込みは、非効率および潜在的な問題のいくつかの源を呈することがありうる。第一の例として、記憶装置に書き込まれるデータセットは、記憶装置上の一連の物理的アドレスに書き込まれるデータのようなデータのシーケンスに関わることがある。このシーケンスに従ってデータセットを書き込むことによってたとえば、データの連続的なブロックのシーケンシャルな書き込み、記憶装置はより高速なシーク時間、より高いスループットおよび/またはシーク時間および書き込み動作の低減に起因する低下した電力消費および物理的摩耗を達成しうる。しかしながら、さまざまな状況のため、記憶装置はデータのシーケンスを二つ以上のサブシーケンスとして書き込むことがあり、こうした効率を達成しないことがある。第一の例として、データセットを書き込む要求は、シーケンスの一部を書き込む二つ以上の要求たとえば、アドレス10001015を書き込む第一の要求およびアドレス10161031を書き込む第二の要求を含んでいることがあり、記憶装置は、シーケンス全体を一緒にコミットするのではなく、シーケンスの各部分を別個にコミットすることがある。第二の例として、記憶装置はいくつかの書き込み要求を受け取ることがあり、シーケンスの第一の部分とシーケンスの第二の部分の書き込みの間に、異なるデータセットを異なる位置に記憶することがありうる。これにより、第一の部分と第二の部分の間の二回の追加的シークが生じてしまう。これらおよびその他の状況は、パフォーマンス、電力効率および記憶装置の寿命における効率利得の機会を逃すこととして同定されうる。検証子に基づく記憶セットを記憶する際に生じうる第二の問題は、データセットの記憶とその検証子との間の遅延またはその逆に関わる。第一の例では、多くの記憶装置は一時に一つの位置たとえば、ハードディスクドライブの書き込みヘッドの下の位置または半導体記憶デバイスにおけるアドレスレジスタによって指定される位置への書き込みをサポートするだけであり、データのシーケンシャルな記憶は、検証子より前にデータセットを書き込むこと、あるいは逆にデータセットより前に検証子を書き込むことに関わる。第二の例として、データセットと検証子が異なる記憶装置上に記憶される場合、第一の記憶装置がデータセットを記憶する瞬間を第二の記憶装置がデータセットの検証子を記憶する瞬間と同期させることは難しいことがある。これらおよびその他の例において、データセットおよび対応する検証子の記憶は、同期的な仕方ではなく、シーケンシャルな仕方で行なわれうる。しかしながら、電力喪失、ハードウェア障害、ソフトウェアクラッシュまたは予期されなかったアレイからの記憶装置の除去といった記憶装置単数または複数の障害が、データセットの記憶後、検証子の記憶より前に起こることがありうる。結果として、検証子は検証子によって代表されるデータに一致しない。時にRAID書き込みホールRAIDwriteholeとして同定される、非原子的書き込みによって引き起こされるこの問題は、多くの結果として生ずる帰結として現われうる。たとえば、記憶装置単数または複数がいかにしてこのエラーを治癒するかを、たとえば不一致が誤った検証子を表わしているのか、データセットへの意図されない変化たとえば、記憶セットのビット誤り率BERbiterrorrateの表明を表わしているのか、あるいはデータセットもしくは検証子のいずれかの読み込み誤りを表わしているのかを、決定するのが難しいことがある。この情報欠如は、最近書き込まれていないデータセットの部分の正確さに対する信頼を危険にさらすことさえありうる。たとえば、記憶装置の一つが故障した場合、誤った検証子を使って残っている記憶装置からその記憶装置上のデータを復元する試みは、誤ったデータ再構成につながりうる。たとえば、失われたまたは破損して、修理されたまたは代わりの記憶装置をもって置換された特定のボリュームからのデータを復元するために、欠けている記憶装置上のデータの各語は同じ位置たとえば他の装置上の同じ物理的または論理的アドレスにある語ならびに前記アドレスにある語のセットについてのチェックサムをまとめてXORすることによって計算されてもよく、その結果が欠けている語を与える。しかしながら、チェックサムが意図せずして変わっていたら、XOR演算は正しくない結果を与え、代用されたボリューム上の語の正しくないデータによる置換につながる。もう一つの例として、検証子Cが部分AおよびBを含むデータセットのために記憶されていて、AおよびCを更新している間に破局的な障害が生じる場合、コンピュータはデータセットABと検証子Cの間の不一致を同定できることがありうる。この不可能性は、破局的な障害の瞬間に書き込みに参加していたAおよびCのみならず、長い間アクセスされてさえいないことがありうるBに対する信頼性をも損なうことがありうる。本稿では、RAID書き込みホールのような問題によって引き起こされる、データ損失および長引く回復時間のリスクを軽減するとともに、記憶セットの効率を改善するための技法が提示される。これらの技法によれば、記憶セットstoragesetの一つまたは複数の記憶装置上で、記憶セットにコミットされるべきデータセットを記憶するよう構成されたジャーナルが生成されてもよい。ジャーナルjournalは、たとえば、ループアレイとして構成されたレコードのシーケンスを有していてもよい。ここで、各レコードはデータセットおよび該データセットのために計算された検証子を記憶する容量をもつ。記憶セットに書き込まれるべきすべてのデータセットはまず、受領のシーケンシャルな順序で、該データセットについて計算された検証子とともに、ジャーナルに記憶されてもよい。これらの技法は、非原子的な書き込みが、記憶セット内の位置にコミットされる前に記憶装置の不揮発性メモリ上に記憶されうる機構を提供することによって、RAID書き込みホールの帰結を軽減しうる。データセットがジャーナルに書き込まれつつある間に障害が起こると、記憶セットに記憶されているデータセットのバージョンは手つかずのまま残り、データセットが記憶セットに書き込まれつつある間に障害が起こると、障害は、ジャーナルから記憶セットに、データセットの書き込みを再開始することによって復元されうる。さらに、ジャーナルの使用は、シーケンシャルな書き込みを増進することによって記憶装置のパフォーマンスを改善しうる。第一の例として、非シーケンシャルな諸データセットがまずシーケンシャルにジャーナルに書き込まれ、非シーケンシャルな諸データセットについてさえ、通して、迅速な、シーケンシャルな書き込みを提供する。第二の例として、ジャーナルは、書き込み要求と記憶セットとの間の書き込みバッファとして機能しうる。それにより、記憶装置の連続的な諸物理的位置に記憶されているデータのシーケンスを含む諸書き込み要求の融合を可能にする。さらなるパフォーマンス改善が、たとえば不揮発性記憶装置上に記憶されているジャーナルの揮発性メモリ表現を生成することによって、達成されうる。ここで、揮発性メモリ表現は、リーチreachキャッシュおよび/または書き込みバッファのはたらきをする。これらおよびその他の利点は、本稿に提示される技法の使用を通じて達成可能でありうる。上記および関係する目的の達成に向け、以下の記述および付属の図面はある種の例示的な側面および実装を記述する。これらは、一つまたは複数の側面が用いられうるさまざまな仕方のほんのいくつかを示す。本開示の他の側面、利点および新規な特徴は、付属の図面との関連で考慮されるとき、以下の詳細な記述から明白となるであろう。特許請求される主題についてここで図面を参照して述べる。図面を通じて、同様の要素を指すために同様の参照符号が使われる。以下の記述では、説明の目的で、特許請求される主題の十全な理解を与えるために、数多くの個別的詳細が記述される。しかしながら、特許請求される主題がそうした個別的詳細なしでも実施されうることは明白であろう。他方、特許請求される主題の記述を容易にするために、構造および装置がブロック図の形で示される。A.序コンピューティングの分野において、多くのシナリオは、一連のデータセットを有する記憶セットstoragesetの、一つまたは複数の記憶装置のセット上への記憶に関わる。たとえば、ユーザーは、一組のハードディスクドライブを横断してアーカイブを生成したいことがあり、該アーカイブ内に一つまたは複数のデータセットたとえばバイト、語、ブロックまたはデータ、ファイルもしくはレコードのシーケンスを記憶することがありうる。いくつかのシナリオでは、記憶装置はデータの記憶のために全体的に割り当てられていてもよい。たとえば、二テラバイトのハードディスクドライブは、二テラバイトの記憶セットを与えるよう構成されていてもよい。他のシナリオでは、記憶セットは、データへのアクセスしやすさおよび/または復元を増進する仕方で記憶装置上に冗長に記憶されてもよい。たとえば、一方のコピーが破損した場合にバックアップを提供するために、一テラバイトのデータセットが二つの一テラバイトハードディスクドライブ上に同一の形で記憶されてもよい。記憶セットを記憶するために、複数の記憶装置が、さまざまな仕方で協働するよう構成されていてもよい。多くのそのような記憶方式および特徴が、安価なディスクの冗長アレイRAIDの諸変形において含まれる。第二の例として、RAID0記憶方式では、二つ以上のハードディスクドライブの記憶スペース全体がデータの記憶に割り当てられてもよい。そのため、第一のハードディスクドライブは、記憶セットの一部に記憶されるデータへのアクセスを提供してもよく、一方、第二のハードディスクドライブは、記憶セットの別の部分に記憶されるデータへの並列アクセスを提供してもよく、事実上、データセットへのアクセスのレートを二倍にするそして可能性としては、他のハードディスクドライブ上に記憶される記憶セットの諸部分についてさらなる倍加を含む。第二の例として、RAID1記憶方式では、第一のハードディスクドライブは記憶セットを記憶するために全体的に割り当てられていてもよく、ミラーとして機能する追加的な諸ディスクドライブは記憶セットの同一のコピーを記憶してもよい。パフォーマンス改善は、異なるハードディスクドライブによって与えられる記憶セットへの同時並行アクセスを通じて達成されてもよい。さらに、記憶セットの完全なコピーが任意のハードディスクドライブ上でアクセスされてもよく、たとえば破損、無反応、不在または損傷のために障害を起こした任意のハードディスクドライブは、そこに含まれるデータの可用性を危険にさらすことなく、置き換えられる。しかしながら、RAID1方式は記憶セットの容量を有意に減らしてしまうたとえば、ハードディスクドライブの追加が記憶セットの容量を増さない。さらなるRAID変形は、記憶セットの容量を最大化しつつ、RAID0とRAID1アレイのアクセスしやすさ、パフォーマンスおよび故障回復属性のバランスを取りうる。たとえば、特定のサイズのハードディスクドライブのセットを有するRAID4アレイでは、一つを除いた全部のハードディスクドライブの全容量が記憶スペースを提供してもよく、取っておかれるハードディスクドライブは、他のハードディスクドライブ上に記憶されたデータセットそれぞれについてのパリティ情報たとえば排他的ORXOR計算を記憶しうる。この構成は、記憶スペースを最大にしたとえば、四つの一テラバイトハードディスクドライブを有するRAID4アレイは三テラバイトの記憶スペースを提供する、その一方で、一ドライブ障害に耐える。たとえば、ハードディスクドライブのどれか一つが完全に故障したとしても、故障したドライブは代わりのハードディスクドライブで置換されることができ、故障したハードディスクドライブ上のデータは残りのハードディスクドライブ上に記憶されているデータを使って再構成されうる。たとえば、障害パリティハードディスクドライブは、単に諸ハードディスクドライブ上に記憶されているそれぞれのデータセットについてのXOR値を計算し直すことによって再構成されうる。他のハードディスクドライブの障害を起こしたものに記憶されていたデータは、利用可能なデータセットおよびXORパリティ値の使用を通じて再構成されうる。しかしながら、一つまたは複数の記憶装置上のさまざまなデータセットを有する記憶セットの記憶に関わるシナリオ内では、記憶セットのパフォーマンスおよび/または信頼性に影響するさまざまな不十分および問題が生じうる。図1および図2は、本稿に提示される技法によって対処されうるそのような二つの問題の例を描いている。図1の例示的なシナリオ100では、一連のデータセット104たとえば、当該記憶セット102のさまざまなバイト、語、データブロック、ファイルまたはレコードを含む記憶セット102が記憶装置106たとえばハードディスクドライブ上に記憶されうる。記憶セット102を生成するまたは記憶セット102にアクセスするプロセスは、さまざまなデータセット104に関わる読み出しおよび/または書き込み要求のセットを生成してもよく、記憶装置106によって受領され、充足されてもよい。たとえば、ハードディスクドライブは、回転する物理的媒体上に懸下される読み書きヘッド108を有していてもよい。読み書きヘッド108は、該読み書きヘッド108の下で回転させられる物理的な媒体の任意のセクタのもとに記憶されているデータたとえば動径方向の線のデータを読むことができる。よって、記憶セット102中の第一の位置110に記憶されるべき第一のデータセット104が受領されるとき、ハードディスクドライブは、記憶セット102中の位置110に合致する物理的な位置が読み書きヘッド108の下に回転させられるまで、物理的な媒体を回転させてもよく、次いで、物理的な媒体にデータセット104を書き込んでもよい。しかしながら、そのようなハードディスクドライブのパフォーマンスはしばしば、物理的な媒体を適切な位置まで回転させる間の遅延によって制限される。この遅延は、シーケンシャルなアクセスを通じて緩和されうる。たとえば、物理的な媒体上の物理的な位置のシーケンスを含む三つのデータセット104が逐次書き込まれてもよく、それによりそれらの位置を読み書きヘッド108の下に正しく位置させることにおける回転遅延の数を3から1に減少させる。回転遅延はしばしばハードディスクドライブのスループットにおいて速度を制限する要因なので、シーケンシャルなアクセスは記憶装置106のスループットを著しく改善しうる。さらに、各データセット104について、検証子112各四バイトデータセット104について計算されるパリティバイトとして図1の例示的なシナリオ100において表現されているが計算され、データセット104とともに記憶され、データセット104の完全性を検証するために使用されうる。図1の例示的なシナリオ100は、セクタ中のデータセット104に検証子をアペンドし、それによりデータセット104と検証子112が一つの回転シークおよび書き込み要求を実行することによって記憶されうるようにすることによる効率改善を提示している。図1は、記憶セット102のデータセットの、記憶装置106への記憶を表わす例示的なシナリオ110を示している。この例示的なシナリオ100において、四つのデータセット104のシーケンスが記憶装置106によって受領され、処理される。第一の時点114では、第一のデータセット104が記憶セット102中の第一の位置110における記憶のために受領され、記憶装置106は、読み書きヘッド108を物理的な媒体上の対応する位置の上に位置させるために第一の回転シークを実行し、第一のデータセット104およびその検証子112を物理的な媒体に書き込む。第二の時点116では、第二のデータセット104が記憶セット102中の第一の位置110における記憶のために受領され、記憶装置106は、読み書きヘッド108を物理的な媒体上の対応する位置の上に位置させるために第二の回転シークを実行し、第二のデータセット104およびその検証子112を物理的な媒体に書き込む。第三の時点108および第四の時点110において、それぞれ第三のデータセット104および第四のデータセット104を記憶するために追加的な回転シーク動作が実行される。しかしながら、図1の例示的なシナリオ100は、記憶セット102へのデータセット104の書き込みにおける非効率のいくつかの源を描いている。第一の例として、第一のデータセット104および第三のデータセット104がシーケンスたとえば記憶セット102中の相続く位置110に記憶されたデータセット102をなし、第二のデータセット104および第四のデータセット104がシーケンスをなす。たとえば、第一のプロセスが記憶セット102への書き込みの第一のシーケンスを要求し、その間、第二のプロセスが並行して記憶セット102の異なる位置への書き込みの第二のシーケンスを要求してもよい。記憶装置106はインターリーブされた仕方でそれらの要求を受領してもよい。しかしながら、この例示的なシナリオ100では、記憶装置106はデータセット104を受領のシーケンシャル順に物理的な媒体に書き込み、よってデータセット104を書き込むために四回の回転シークを実行する。この書き込みプロセスは、書き込み要求が受領される順序を厳密に保存しうるものの、第一のデータセット104および第三のデータ102を記憶するための第一の回転シークおよび第二のデータセット104および第四のデータセット104を記憶するための第二の回転シークを実行することによってスループットの改善が達成されたところである。図1に描かれる非効率の第二の源は、その後の書き込みによってすぐに上書きされる記憶セット102へのデータを不要に書き込むことから生じる。第一の例として、第二のデータセット104および第四のデータセット104はいずれも記憶セット102中の同じ位置110に書き込まれる。上書きの認識があれば、最も後の書き込み202のみを書き込むことによって記憶装置106のパフォーマンスを改善する機会を提供しうる特に、上書きが先の書き込みと同じデータを書き込む場合。しかしながら、この例示的なシナリオ100における記憶装置はこの認識を達成せず、記憶セット102中の同じ位置110への同じデータセット104の二回の書き込みを不必要に実行する。第二の例として、第一の検証子112が、第一のデータセット104および第三のデータセット104を含むデータセット104の第一のセットたとえば位置0x00440047のために計算されてもよく、第二の検証子112が、第二のデータセット104および第四のデータセット104を含むデータセット104の第二のセットたとえば位置0xA0F0A0F3のために計算されてもよい。それらの書き込み要求が受領されるシーケンスのため、記憶装置106は各検証子110を二回計算し、書き込むたとえば、第一の検証子110の第一の計算が第一のデータセット104のために実行されて第一のデータセット104とともに記憶され、第二の検証子110の第一の計算が第二のデータセット104のために実行されて第二のデータセット104とともに記憶され、第一の検証子110の再計算が第三のデータセット104のために実行されて第三のデータセット104とともに記憶され、第二の検証子110の再計算が第四のデータセット104のために実行されて第四のデータセット104とともに記憶される。これらの再計算は、第一のデータセット104および第三のデータセット104について一回、第一の検証子112を計算し、第二のデータセット104および第四のデータセット104について一回、第二の検証子112を計算することによって、回避できたかもしれない。それにより計算および書き込みの数が削減される。これらおよび他の非効率は、記憶装置106が、記憶セット102中にシーケンシャルに記憶される諸データセット104のための諸書き込み要求のために含まれる、計算および/または書き込みを減らす機会を同定できないことから生ずることがありうる。図2は、記憶セット102において生じうる第二の型の問題を描く例示的なシナリオ200の図解を示している。この例示的なシナリオ200では、記憶装置106のセットが、検証子112のセットをもつ記憶セット102を記憶するために相互運用される。特に、記憶装置106のうちの三つが、特定の位置110に関連付けられた三つのデータセット104を記憶し、第四の記憶装置106がそれら三つのデータセット104についての検証子112を記憶する。たとえば、各データセット104は単一のビットを有していてもよく、検証子112は三つのビットを合わせてXORすることによって計算されてもよい。図2の例示的なシナリオ200は、以下の説明を簡単にするために各データセット104を単一のビットとして描いているが、データセット104がいかなるサイズであってもよいことは理解されるであろう。何らかのデータセット104が書き込まれるとき、第四の記憶装置106に記憶されている検証子112が、更新されたデータセット104に合致するよう更新される。しかしながら、この例示的なシナリオ200において示されるように、さまざまな記憶装置106への書き込みは、原子的かつ厳密に同時並行の仕方では行なわれないことがあり、異なる時刻に行なわれることがありうる。たとえば、ある記憶装置106に記憶されているデータセット104および第四の記憶装置106に記憶されている検証子112の両方を更新するよう要求が受領されることがありうるが、記憶装置106が、他の記憶装置106が書き込み動作に従事している間にアイドルでありうるならば、第一の記憶装置106は第二の記憶装置106より前にその書き込み動作を開始および/または完了することがありうる。パフォーマンスたとえば回転スピードおよび状況たとえば、物理的な媒体の現在の回転位置からの書き込み位置の距離における記憶装置104間の変動も、記憶装置106間のタイミング相違に寄与しうる。たとえば、第一の時点204において、第三の記憶装置106上に記憶されたデータセット104および第四の記憶装置106に記憶された対応する検証子112を更新するために書き込み202が要求されることがある。しかしながら、第三の記憶装置106は第一の時点204において書き込み202を開始および/または完了しうる一方、第四の記憶装置106は第二の時点206において検証子112への書き込み202を完了することがありうる。図2の例示的なシナリオ200において描かれている記憶装置106の不完全な同期は、記憶サービスの障害の際に非一貫性を生じうる。たとえば、第三の時点208において、第三の記憶装置106によって記憶されているデータセット104および第四の記憶装置106によって記憶されている対応する検証子112の両方に対してもう一つの書き込み202が要求されることがある。しかしながら、この書き込みプロセスの間にコンピューティング環境の障害210電源障害またはハードウェアもしくはソフトウェアのクラッシュが発生することがありうる。記憶装置106および記憶アレイはしばしば、多くのそのような障害210に耐えるよう設計されるものの、この障害210は第三の記憶装置106が更新されたデータセット104の書き込みを完了した後だが第四の記憶装置106が更新された検証子112を書き込む前に起こることがありうる。記憶装置106が再びアクセス可能であるたとえば電力が回復した第四の時点212において、第三の記憶装置106によって記憶されているデータセット104の更新と第四の記憶装置106が検証子112を更新していないこととは、非一貫性を呈する。検証子112はもはや対応するデータに合致しないのである。単一の記憶装置106の使用でも同様のシナリオは発生しうる。たとえば、単一の読み書きヘッド108による記憶装置106上に記憶されたデータセット104の冗長なコピーは、データセット104の第一のコピーと第二のコピーの更新の間に障害210が生じる場合には、非一貫性を呈することがありうる。時にRAID書き込みホールとして同定されるこの非一貫性は、いくつかの問題につながりうる。第一の例として、前記一つまたは複数のデータセット104および/または検証子112のどれが誤っているかを識別することが可能でないことがある。たとえば、同様に、障害は第四の記憶装置106が検証子112を更新した後だが第三の記憶装置106がデータセット104の更新を完了する前に発生したこともありうる。そのため、検証子112によって表わされるデータセット104すべて――書き込み202に関わってさえいなかった第一および第二の記憶装置106に記憶されているデータセット104さえも――の完全性を危機にさらすことになる。第二の例として、この非一貫性はすぐに発見されないことがあり、記憶セット102内に残ることがありうる。その後、記憶装置106が利用不能になったときたとえば第一の記憶装置106が完全に故障するまたは除去される場合、第一の記憶装置106上のデータを再構成しようとする試みは他の記憶装置上のデータを利用しうるが、非一貫性の結果として、データの正しくない再構成につながることがありうる。したがって、アレイは単一の記憶装置106の障害から回復する期待される機能を提供し損なう。これらおよびその他の問題は、関係するデータセット104を記憶セット102に記憶する間の諸記憶装置106の相互運用における不完全な同期から生じうる。B.提示される技法本稿に提示されるのは、可能性としては図1および図2の例示的なシナリオにおいて例解されているものを含む記憶シナリオにおいて生じうる問題および/または非効率のいくらかに対処するための技法である。これらの技法によれば、記憶セット102を記憶する記憶装置106の一つまたは複数上でジャーナルが生成されうる。記憶セット102に書き込まれるべきデータセット104および検証子112はまずジャーナルに書き込まれてもよい。さらに、ジャーナルは、データセット104の書き込み順のシーケンスにおいて構成されたデータセット104のシーケンスとして構成されてもよい。それにより、記憶セット102のさまざまなシーケンシャルでない位置においてデータセット104を書き込む要求のストリームを受領する記憶装置106はまず、ジャーナル中にシーケンシャルにデータセット104を記憶してもよい。さらに、記憶セット102中の要求された諸位置110にデータをコミットするために、バッチとして書き込まれてもよいいくつかのデータセットが選択されてもよい。たとえば、ジャーナルは、記憶セット102に書き込まれるべきデータセット104をシーケンシャルに待ち行列に入れてもよく、定期的に、待ち行列の前から、同じバッチ内で書き込みされうるデータセット104のセットを選択してもよい。図3は、記憶装置106の不揮発性媒体上に記憶されたジャーナル302の使用を通じた、記憶セット102へのデータセット104および対応する検証子112の記憶を描く例示的なシナリオ330の図解を示している。この例示的なシナリオ300では、記憶セットの少なくとも一部を含むデータセット104を記憶するよう構成された記憶装置106上で、データセット104および対応する検証子112を、かかるデータが記憶セット102にコミットされる前に記憶するよう構成されたジャーナル302が生成される。特に、この例示的なシナリオ300におけるジャーナル302は、データセット104、記憶セット102におけるデータセット104の位置110およびデータセット104についての検証子112を記憶するレコード304のシーケンスとして構成される。ジャーナル302のレコード304は、待ち行列の先頭すなわち、ジャーナル304中の最も古いデータセット104を同定する尾部ポインタ306および待ち行列の終端すなわち、ジャーナル304中に書き込まれる最も遅いデータセット104を同定する頭部ポインタ308によって待ち行列として構成される。第一の時点310において、ジャーナル302は初期には空であるすなわち、頭部ポインタ308および尾部ポインタ306が同じレコード304をポイントする。記憶セット102に記憶されるべき三つのデータセット104のシーケンスを受領すると、記憶装置106はそれら三つのデータセット104を順にジャーナル302に記録してもよいたとえば、頭部ポインタ308を動かしてレコード304を割り当て、次いでそれらのレコード304にデータセット104を書き込むことによって。第二の時点312では、三つの追加的なデータセット104を書き込む要求のシーケンスが受領されてもよく、頭部ポインタ308をインクリメントしてジャーナル302のレコード304にデータセット104を書き込むことによって、ジャーナル302に記憶されてもよい。さらに、第三の時点314において、記憶装置106は各データセット104についての検証子112を計算し、各検証子112をジャーナル302に書き込んでもよい可能性としては、ジャーナル302および/または記憶セット102に記憶されている他のデータセット104を使って。第四の時点316では、記憶装置106は、たとえばジャーナル392からコミットされるべきデータセット104のバッチ318を選択してそれらのデータセット104および対応する検証子112を記憶セット102に書き込むことによって、データセット104のバッチ318を記憶セット102にコミットしてもよい。次いで、記憶セット102にコミットされたデータセット104についてのレコード304がジャーナル302から除去されてもよいたとえば、尾部ポインタ306をそれらのレコード302を過ぎるところまで進めることによって。このようにして、本稿に提示される技法によれば、データセット104は記憶セット102にコミットされてもよい。本稿に提示される技法のいくつかの例示的な使用の図3の描出は、それにより達成されうるいくつかの潜在的な利点を示している。第一の例として、データセットのバッチ化は、記憶セット102中の位置110の連続的なシーケンスに書き込まれうる二つ以上のデータセット104を融合しうる。これは、たとえ該シーケンスをなすデータセット104についての書き込み要求が記憶セット102の他の位置110に記憶されるべき他のデータセット104とインターリーブされていたとしても;そのようなデータセット104が厳密なシーケンシャル順に受領されなくても;および/またはデータセット104を書き込む要求の間に短い遅延があったとしても、できる。第二の例として、データセット104のバッチ化は、短い時間フレームにおいて受領される同じデータの上書きを減らすことによって、記憶装置106の効率を改善しうる。たとえば、特定のデータセット104を上書きする複数の要求がバッチにグループ化されてもよく、記憶セット102内の位置110へのデータセット104の単一の書き込みを通じて充足されてもよい。たとえば、図3の例示的なシナリオ300におけるバッチ318の選択は、尾部ポインタに近いがジャーナル302に記憶されているその後の書き込み202によって上書きされるデータセット104を省略してもよい。第三の例として、同じ検証子112によって表わされるデータセット104を書き込む別個の諸要求は、同じバッチにグループ化されれば、検証子112のいくつかの別個の更新ではなく、検証子112の単一の計算および書き込みにつながりうる。第四の例として、バッチ318を保守的に選択するたとえばジャーナル302を積極的に空にするのではなく、その中のいくつかのレコード304を残すことによって、本技法は、将来の効率性利得のための機会を同定および達成しうる。たとえば、位置0x03C0に書き込まれるべきデータセット104はあたかも最近受領されたかのように、バッチ318のために選択されず、追加的なデータセット104を書き込む要求がすぐあとに続いてもよい。こうして、位置0x03C1にデータセット104を書き込むその後の要求が受領され、ジャーナル302に記憶されるとき、両方のデータセット104が将来のバッチ318のために選択されてもよい。それにより、両方のデータセット104が、二つの別個の書き込み220を発するのではなく、シーケンスをなして一緒にコミットされる。図3の例示的なシナリオ300に示される本願で開示される技法の第二の潜在的な利点は、RAID書き込みホールの発生および帰結の低減である。データセット104を更新する要求をまず記憶装置106の不揮発性媒体上のジャーナルにコミットして、次いでデータセット104および検証子112を記憶セット102に移すことは、両者の間の非一貫性を回避しうる。たとえば、データセット104および/または検証子112がジャーナルに書き込まれつつある間に障害210が発生する場合、回復プロセスはジャーナルの書き込みが不完全であったことを検出でき、ジャーナルの不完全な部分を破棄しうる。この破棄は書き込み202の喪失につながりうるが、そのような書き込み202はまだ記憶セット102にコミットされておらず、そのような書き込み202を要求するプロセスに対して確証されていなかったので、安全に喪失されることができる。さらに、記憶セット102の一貫性は、RAID書き込みホールに関わる不完全な書き込みによって損なわれない。さらに、ジャーナルの内容が記憶セット102にコミットされつつある間に障害が起こる場合、記憶装置106は、ジャーナルに記憶されているデータセット104を記憶セット102に再コミットすることによって、障害210から回復しうる。このようにして、記憶セット102への書き込み202は、改善されたパフォーマンスおよび/またはRAID書き込みホールのような問題によって引き起こされる非一貫性の低減した発生をもって充足されうる。これらおよびその他の利点は、本稿に提示される技法に基づく、記憶セット102へのデータセット104の記憶を通じて達成されうる。C.例示的実施形態図4は、少なくとも一つの記憶装置106によって提供される記憶セット102においてデータセット104を記憶する第一の例示的な方法400として描かれている、これらの技法の第一の例示的な実施形態の図解を示している。例示的な方法400は、たとえば装置のメモリコンポーネントたとえば、メモリ回路、ハードディスクドライブの円盤、半導体メモリコンポーネントまたは磁気もしくは光ディスクに記憶された命令のセットであって、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実行させるものとして実装されてもよい。例示的な方法400は、402において開始され、プロセッサ上で命令を実行する404ことに関わる。具体的には、前記命令は、少なくとも一つの記憶装置106上で、それぞれ検証子112と関連付けられたデータセット104を記憶するよう構成されたジャーナル302を生成する406よう構成されている。前記命令はまた、記憶セット102中の位置110にデータセット104を記憶する要求を受領すると、該データセット104をジャーナル302に記憶する408よう構成されている。前記命令はまた、記憶セット102にコミットされるべき、ジャーナル302に記憶された諸データセット104のバッチ318を選択する410よう構成されている。前記命令は、記憶セット102へのこのコミットを、バッチ318のそれぞれのデータセット104について412、検証子112を計算し414;検証子112をジャーナル302に記憶し416;データセット104およびデータセット104の検証子112を記憶セット102に記憶する418ことによって達成しうる。前記命令はまた、データセット104およびデータセット104の検証子112を記憶セット102に記憶した418のち、ジャーナル302から前記データセット104を除去するよう構成される。このようにして、前記命令は、本稿に提示される技法に基づく、記憶セット102へのデータセット104の記憶を達成し、よって例示的な方法400は420において終了する。図5は、少なくとも一つの記憶装置106によって提供される記憶セット102においてデータセット104を記憶する第二の例示的な方法500として描かれている、これらの技法の第二の例示的な実施形態の図解を示している。例示的な方法500は、たとえば装置のメモリコンポーネントたとえば、メモリ回路、ハードディスクドライブの円盤、半導体メモリコンポーネントまたは磁気もしくは光ディスクに記憶された命令のセットであって、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実行させるものとして実装されてもよい。例示的な方法500は、502において開始され、装置に命令を送る504ことに関わる。具体的には、前記命令は、記憶装置106上で、レコード304のシーケンス、頭部ポインタ308および尾部ポインタ306を有するジャーナル302を生成する506よう構成される。前記命令はまた、記憶セット102中の位置110に記憶されるべきデータセット104を受領する508と、ジャーナル302の頭部ポインタ308を新たなレコード304を過ぎるところまで進め510、新たなレコード304にデータセット104を記憶する512よう構成されている。前記命令はまた、記憶セット102へのコミットのために、ジャーナル302の尾部ポインタ306の近くの少なくとも一つの選択されたデータセット104を選択する514よう構成されている。それぞれの選択されたデータセット104について516、前記命令は、データセット104についての検証子112を計算し518;選択されたデータセット104の検証子112をジャーナル302に記憶し520;選択されたデータセット104およびデータセット104の検証子112を記憶セット102にコミットする522よう構成される。前記命令はまた、ジャーナル302の尾部ポインタ306を、前記少なくとも一つの選択されたデータセット104を含むレコード304を過ぎたところまで進める524よう構成される。このようにして、前記命令は、本稿に提示される技法に基づく、記憶セット102へのデータセット104の記憶を達成し、よって例示的な方法500は526において終了する。図6は、本稿に提示される技法を適用するよう構成されたプロセッサ実行可能命令602を有する例示的なコンピュータ可読媒体600として示される、これらの技法の第三の例示的な実施形態を提示している。そのようなコンピュータ可読媒体はたとえば、メモリ半導体たとえば、静的ランダムアクセスメモリSRAM、動的ランダムアクセスメモリDRAMおよび/または同期動的ランダムアクセスメモリSDRAM技術を利用した半導体、ハードディスクドライブの円盤、フラッシュメモリデバイスまたは磁気もしくは光ディスクたとえばCDR、DVDRまたはフロッピーディスクのような有体なデバイスに関わるコンピュータ可読記憶媒体を含んでいてもよく、コンピュータのような装置610のプロセッサ612によって実行されたときに該装置610に本稿に提示される技法を実装させるコンピュータ可読命令のセットをエンコードしていてもよい。そのようなコンピュータ可読媒体は、さまざまな物理現象を通じて伝搬させられうる信号たとえば電磁信号、音波信号または光信号のようなさまざまな型の通信媒体をもコンピュータ可読記憶媒体とは異なる技術のクラスとして含みうる。そのような伝搬は、さまざまな有線シナリオたとえばイーサネット登録商標または光ファイバーケーブルを介するおよび/または無線シナリオたとえばWiFiのような無線ローカルエリアネットワークWLAN、ブルートゥースのようなパーソナルエリアネットワークPANまたはセルラーもしくは電波ネットワークにおいてでありうる。そのような媒体は、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実装させるコンピュータ可読命令のセットをエンコードしていてもよい。あるそのような実施形態では、プロセッサ実行可能命令602は、図4の第一の例示的な方法400または図5の第二の例示的な方法500のような少なくとも一つの記憶装置106によって提供される記憶セットstorageset102にデータセット104を記憶する方法を実行するよう構成されていてもよい。本稿に提示される技法に基づいて動作するよう構成される、多くのそのようなコンピュータ可読媒体が当業者によって考案されうる。D.変形本稿で論じられる技法は、多くの側面における変形をもって考案されてもよい。いくつかの変形は、追加的な利点を提示し、および/またはこれらおよび他の技法の他の変形に関する不都合な点を軽減しうる。さらに、いくつかの変形は、組み合わせて実装されてもよく、いくつかの組み合わせは、相乗作用を通じて追加的な利点および/または軽減された不都合な点を特徴としうる。そうした変形は、さまざまな実施形態たとえば図4の第一の例示的な方法400および図5の第二の例示的な方法500に組み込まれてそのような実施形態に対して個別的および/または相乗的な利点を付与しうる。D1.シナリオこれらの技法の実施形態の間で変わりうる第一の側面は、そうした技法が利用されうるシナリオに関する。第一の変形として、これらの技法は、多くの型の記憶セット102およびデータセット104を管理するために使用されうる。それには、それぞれのアドレスに記憶されている値のセットをそれぞれ含む一つまたは複数のボリューム;それぞれファイルのセットを含むファイルシステム;それぞれレコードのセットを含むデータベース;それぞれメディアオブジェクトのセットを含むメディアライブラリ;それぞれアプリケーションのセットを含むアプリケーションセット;およびそれぞれボリュームおよび/または仮想マシンのメモリのセットを含むコンピューティング環境サーバーが含まれる。さらに、記憶セット102内でのデータセット104の識別は、種々のシナリオ間では粒度において異なりうる。たとえば、ボリュームを含む記憶セット102は、これらの技法を、ビット、バイト、さまざまな長さの語、さまざまな長さのデータブロックまたはセクタを含むデータセット104をジャーナリングし、記憶セット102にコミットするために利用してもよい。第二の変形として、これらの技法は、ハードディスクドライブ、半導体記憶デバイス、磁気もしくは光テープ記憶ドライブおよび磁気もしくは光ディスクを含むさまざまな型の揮発性および不揮発性記憶装置106上の記憶セット102およびデータセット104の記憶を管理するために使われてもよい。記憶セット102を記憶することに関わる記憶装置106の数も変わりうる。たとえば、これらの技法は、単一の記憶装置106上、小さな緊密に統合された記憶装置106のセットたとえばRAIDアレイ上または潜在的には大規模および/または潜在的には広範囲に分散していてもよい記憶装置106のゆるく統合されたセットたとえば、世界の異なる領域に展開され、インターネットを通じて通信する記憶装置106のセット上で記憶セット102の記憶を管理するために使われてもよい。ほんの一例として、これらの技法は、記憶装置106のさまざまな型のRAIDアレイにおいて実装される種々のRAIDレベルとともに使用するために適応されてもよい。さらに、記憶セット102を記憶する記憶装置106は、混合型であってもよく、さまざまな階層的な構成に従って編成されていてもよいたとえば、記憶セット102はまず比較的高性能の一次記憶装置106上に記憶されてもよく、該一次記憶装置が比較的低性能のオフサイトのアーカイブ記憶装置106にバックアップされる。本技法は、コスト、可用性、信頼性、および感度およびパフォーマンス要求および記憶セット102に適用されるセキュリティ施策および記憶装置106の機能を含む、記憶セット102および記憶装置106のさまざまな属性に鑑みて実装されてもよく、それに合わせて調整されていてもよい。この第一の側面の第三の変形は、特に記憶セット102が複数の記憶装置106にまたがる場合の、ジャーナルjournal302の記憶装置106との関係に関する。第一のそのような例として、ジャーナル302は、一つまたは複数の別個の記憶装置106にまたがって割り当てられた記憶セット102について、ある記憶装置106のみに記憶されてもよい。あるいはまた、ジャーナル302は、記憶セット102の一部または全部と同じ記憶装置106に記憶されてもよい。そのような第二の例として、複数のジャーナル302が諸記憶装置106の間で生成されてもよい。たとえば、いくつかの記憶装置106にまたがる記憶セット102について、各記憶装置106上でジャーナル302が、その記憶装置106上に記憶される記憶セット102の部分内に記憶される諸データセット104のために、生成されてもよい。あるいはまた、別個の諸記憶装置106上の諸ジャーナル302は記憶セット102内の特定の諸位置に関連付けられなくてもよい。たとえば、記憶セット102に書き込まれるべきデータセット104は、記憶セット102にコミットされる前は、どのジャーナルに記憶されていてもよい。この変形は、脱中央集中型のジャーナリングプロセスを提供しうる。たとえば、データセット104は、最も短いIO待ち行列をもつ記憶装置106のジャーナル302に書き込まれてもよく、あるいはまた、記憶装置106の地理的に分散されたセットの間で供給される記憶セット102については、書き込みプロセスに対して最も高いアクセス可能性を呈する記憶装置106たとえば、当該プロセスに地理的に最も近いおよび/または書き込みプロセスと通信する際に最も低いレイテンシーまたは最も高い帯域幅を示す記憶装置106に書き込まれてもよい。第三のそのような例として、ジャーナル302に対してさまざまなRAID記憶方式によって提供されるのと同様の障害耐性機能を与えるために、ジャーナル302は二つ以上のコピーとして同じ記憶装置106上に冗長に記憶されてもよく、二つ以上の記憶装置106上にミラーコピーとして記憶されてもよく、あるいは二つ以上の記憶装置106を横断してたとえばストライピングにより分散されてもよい。この第一の側面の第四の変形は、それぞれのデータセット104の完全性を検証するために使われる検証子112の型に関する。いくつかのシナリオでは、データセット104のXORとして計算されるパリティビットまたはデータセット104の和もしくはハッシュコードのような比較的単純な検証子112が使用されもよい。単純な検証子112は、比較的低価値の記憶セット102、比較的低パワーの記憶装置106たとえば比較的遅いハードウェア、限られた容量のメモリおよび限られたバッテリー寿命をもつポータブル装置上の記憶装置および/またはパフォーマンスがきわめて重要でありより高速に計算可能な検証子112が有利でありうるような記憶セット102に好適でありうる。他のシナリオでは、追加的なデータ安全性特徴を提供しうる、比較的複雑な検証子112が使用されてもよい。たとえば、データセット104が正確であるかどうかを判別するのみならずデータセット104および/または検証子112の一つへの変化によって非一貫性が引き起こされたかどうかをも判別するハミング符号のような誤り訂正型の検証子112が使用されてもよい。さらに、記憶セット102におけるデータセット104の異なるセットまたは型のために、異なる型の検証子112が利用されてもよいたとえば、より貴重なデータについてはより複雑だが堅牢な検証子112が利用されてもよい。当業者は、これらおよびその他の型の変形および詳細をもつ多くのシナリオにおいて、本稿に提示される技法を実装しうる。D2.要素実施形態の間で変わりうる第二の側面は、そうした技法の要素の変形に関わる。第一の変形としては、ジャーナル302を生成する406際に多くの技法が使用されうる。たとえば、ジャーナル302はアレイ、リンクされたリスト、テーブル、データベース、スタック、待ち行列、ヒープまたは二分木のような多くの型のデータ構造を含みうる。種々の実装はさまざまな利点および不都合な点を呈しうるたとえば、パフォーマンス、更新の容易さ、スペース効率、コンピューティング経済および記憶装置106および/または記憶セット102の特性との適合性。記憶セット102を記憶する異なる記憶装置106上で、および/または異なる型のデータセット104について、異なる型のジャーナル302が実装されてもよい。たとえば、頭部ポインタ308および尾部ポインタ306を含むアレイとして構成されたジャーナル302は、ジャーナル302の任意のレコード304への迅速なインデックスたとえばOのアクセス時間、頭部ポインタ308および尾部ポインタ306の操作を通じたレコード304の効率的な割り当ておよび再利用ならびにジャーナル302におけるデータセット104の効率的な記憶たとえば単に、ジャーナル302をなすレコード304のシーケンスに新たなデータセット104をアペンドすることによるという利点を提供しうる。この第二の側面の第二の変形として、記憶セット102にコミットされるべきバッチ318の選択410は、多くの仕方で実行されうる。第一の例として、選択410は、多くの型のイベントによって開始されてもよい。たとえば、装置610、記憶装置106またはこれらの技法を実装する他の型の装置が、多くの型のコミットイベントの検出に際してバッチ318の選択410を開始してもよい。例示的なコミットイベントセットをなすそのようなコミットイベントのいくつかの例は、ジャーナル302の容量に関わるジャーナル容量イベントたとえばジャーナル302がいっぱいになる;ジャーナル302に記憶されているデータセット104の継続時間に関わる継続時間イベントたとえば、1分前より前にジャーナル302に記憶されたデータセット104のような、ある年齢より古いデータセット104;ジャーナル302内の少なくとも一つのデータセット104を記憶セット102にコミットする要求に関わるコミット要求イベントたとえば、データセット104の書き込み202を要求したプロセスが記憶セット102への該データセット104のコミットを要求しうる;および記憶セット102の少なくとも一つの記憶装置106の作業負荷に関わる記憶装置作業負荷イベントたとえば、記憶装置106は、入出力作業のアイドルな瞬間を検出してもよく、該アイドルな瞬間を使っていくつかのデータセット104をジャーナル302からフラッシュしてもよいを含みうる。他の多くの型のイベントが、データセット104を記憶セット102にコミットするプロセスの開始を促しうる。この第二の側面のこの第二の変形の第二の例として、記憶セット102にコミットされるべきバッチ318の選択は、多くの仕方で実行されうる。たとえば、記憶セット102への第一のデータセット104のコミットを、その後の書き込み202が該第一のデータセット104の上書きを指定するおよび/またはシーケンシャルに第一のデータセット104に後続しよって記憶セット102に一緒に書き込みされうる追加的なデータセット104を提供する図3の例示的なシナリオ300において第四の時点316において描かれているように場合に備えて、書き込み要求の受領後、短時間遅らせることが有利であることがある。しかしながら、シーケンシャルに後続する第二のデータセット104をすぐ受領する低下した確率よりもデータセット104をジャーナル302のレコード304として記憶することに関わるコストおよび複雑さのほうが重みがあるには、データセット104のコミットを長期間遅らせることが不都合なことがある。さらに、記憶セット102へのコミットの効率を改善するためにバッチ318をなす諸データセット104を選択することが有利であることがある。第一のそのような例として、ジャーナル302に記憶された第一のデータセット104が記憶セット102内の第一の位置110に記憶されるべきバッチ318に含めるために選択される場合、ある実施形態は、やはりジャーナル302内に記憶されていて、記憶セット102内の第一の位置110に近い第二の位置110に記憶されるべき第二のデータセット104たとえば、記憶装置106の物理的な媒体上で連続しているまたは少なくとも物理的に近くにあり、同じバッチ318において一緒に書き込まれるのが効率的でありうるデータセット104も前記バッチ318に含めるために選択してもよい。第二のそのような例として、これらの技法のある実施形態は、バッチ318から、ジャーナル302に記憶されており、記憶セット102内のある位置110に記憶されるべき第一のデータセット104を、該実施形態が、ジャーナル302が該第一のデータセット104より新しく記憶セット102における同じ位置110に記憶されるべき第二のデータセット104すなわちその後の上書きを含んでいることを判別する場合には、省いてもよい。データセット104をバッチ318に含めるのではなく、この実施形態は、単に、ジャーナル302から古いほうのデータセット104を除去しうる。この第二の側面の第三の変形として、検証子112の計算が多くの仕方で行なわれうる。上記第一の側面の記載された変形として、多くの型の検証子112がそのようなシナリオにおいて利用されうるが、さらに、検証子112は利用可能なデータからさまざまな仕方で計算されうる。第一の例として、検証子112は、それにより表わされる現在データセット104に基づいて完全に再計算されてもよい。しかしながら、第二の例としては、検証子112がいくつかのデータセット104を表わし、そのうちの部分集合のデータセット104が変化する場合には、検証子112から古くなったデータセット104を除去し、検証子112に更新されたデータセット104を含めることが可能であることがあり、しばしば、現在データセット104から検証子112を再計算するより効率的であることがある。再計算は、記憶セット102からデータセット104の残りを取得することを含みうる。図7は、検証子112を計算する種々の仕方を表わす例示的なシナリオ700の例示を提示している。第一の時点702において、データセット104および対応する検証子112のためのスペースが記憶セット102において割り当てられている。しかしながら、データセット104のどの部分も検証子112もまだ記憶セット102に書き込まれてはいない。第二の時点704では、データセット104の一部が受領されており、データセット104を記憶セット102にコミットする要求が開始されている。検証子112を計算するために、これらの技法のある実施形態は、データセット104をなす残りのデータがジャーナル302にも記憶セット102にも存在しないことを識別しうる。よって、本実施形態は、データセット104の提供された部分を使って、検証子112を計算してもよく、データセット104の残りについてデフォルト値たとえばゼロを推定および使用してもよい。こうして、第二の時点704では、検証子112は、データセット104の存在する部分のみを使って計算される。第三の時点706では、検証子112は、データセット104についての現在データを使って計算される。たとえば、データセット104をフルに指定する新しい更新されたデータが提供されてもよくたとえば、フルデータセット104をなす一連の書き込み202がジャーナル302内に存在していてもよく、あるいはジャーナル302に存在しないデータセット104の部分が記憶セット102から取得されてもよい、検証子112は、データセット104をなす現在データを使ってたとえば現在データ全部のXORとして完全に再計算されてもよい。しかしながら、第四の時点708において、検証子112は、データセット104への変化に鑑みて、もとの検証子112ならびにデータセット104のもとのバージョンおよび新たなバージョンのみを使って再計算される。たとえば、新たな検証子112は、もとの検証子112をデータセット104のもとのバージョンとXORし、それによりもとの検証子112からデータセット104のその部分の加算を取り消し、次いでこの値をデータセット104の新たなバージョンとXORすることによって計算されてもよい。この再計算は、ジャーナル302に完全には記憶されていないデータセット104についてより効率的でありうる。たとえば、この再計算は、ジャーナル302に記憶されていないデータセット104の部分を記憶セット102から読むことを回避しうる。さらに、こうした再計算技法の間の選択は、データセット104のこの部分を記憶セット102から取り出すことの比較的なコストに基づいてなされてもよいたとえば、大きなデータセット104を表わす検証子112については、データセット104の小さな部分を除去してその更新を含め、データセット104の大きな部分の更新についての現在データから検証112を再計算することがより効率的でありうる。この第二の側面の第四の変形として、記憶セット102たとえば電力障害またはソフトウェアクラッシュおよび/または一つまたは複数の記憶装置106たとえば記憶装置106との通信の中断、記憶装置106のハードウェア、ファームウェアもしくはドライバの障害または記憶装置106の除去または記憶装置106への損傷およびそれに続く通信の再確立または記憶装置107の置換の障害210の場合、これらの技法のある実施形態は、障害210から回復するためにジャーナル302を多くの仕方で利用しうる。この第二の側面のこの第四の変形の第一の例として、これらの技法のある実施形態は、単に、ジャーナル302を概観して、ジャーナル302中の不完全なまたは一貫しないレコード304たとえば障害210の時点において不完全に書き込まれていたレコードを破棄し、次いでジャーナル302から記憶セット102へのデータセット104のコミットを再開してもよい。このプロセスにおいて、記憶セット102に不完全に書き込まれていたかもしれないデータセット104があったとしても、記憶セット102への該データセット104の不完全な書き込みを検出することさえなしに、復元プロセスの間に正しく再書き込みされうる。この第二の側面のこの第四の変形の第二の例として、障害210からの復元は、段階的な仕方で実行されてもよい。たとえば、記憶セット102へのアクセスが有効かつ一貫したデータを与えることをも保証しながら、できるだけ迅速に障害210から回復することが有利であることがあるたとえば記憶セット102を利用するサービスの休止時間を短縮するために。よって、復元の第一段階の間は、これらの技法のある実施形態は、記憶セット102へのアクセスがジャーナル302から充足されるべきかまたは記憶セット102から充足されるべきかを決定するために、まずジャーナル302の内容たとえば、データセット104がジャーナル302中に記憶されている記憶セット102内の位置110を読んでもよい。次いで、復元は、障害210によって引き起こされた、不完全におよび/または非一貫的に書き込まれたデータセット104を正すために、記憶セット102へのジャーナル302からのデータセット104のコミットを再開することに関わる第二の段階に進んでもよい。こうして、本実施形態はブロックしうる。復元プロセスの追加的な例示的な変形は、たとえば、記憶セット102の一部または全部をスキャンしてその完全性を検証すること;障害に関わった記憶装置106にのみ復元プロセスを適用することたとえば、一時的に除去された記憶装置106にジャーナル302からデータセット104を再書き込みするだけ;および異なる記憶装置106および/または異なるデータセット104について異なる復元プロセスを適用することたとえば、第一の記憶装置106に記憶されている第一のジャーナル302に前記復元プロセスを適用し、その復元を完了したあとで、第二の記憶装置106に記憶されている第二のジャーナル302に前記復元プロセスを適用することに関わっていてもよい。当業者は、種々のシナリオにおける適用のために、本稿に提示される技法の要素を変形する多くのそのような仕方を考案しうる。D3.ジャーナルの揮発性メモリ表現これらの技法の実施形態の間で変わりうる第三の側面は、そのような技法を実装する装置610の揮発性メモリにおける、ジャーナル302の揮発性メモリ表現の生成に関わる。たとえば、記憶装置106の不揮発性媒体上で生成されたジャーナル302に加えて、これらの技法のある実施形態は、やはりジャーナル302に記憶されているデータセット104を記憶する、ジャーナル302と同期を保たれる揮発性メモリ表現を生成してもよい。ジャーナル302への揮発性メモリ表現の生成および維持は複雑さを追加し、追加的な計算資源を消費することがありうるものの、揮発性メモリ表現はこれらの技法の諸実施形態において、多くの潜在的な用途および利点を提供する。第一の例示的な利点として、揮発性メモリ表現は、ジャーナル302への書き込みバッファのはたらきをしうる。たとえば、個々のデータセット104をジャーナル302に書き込む代わりに、ある実施形態は、最初、データセット104を揮発性メモリ表現に記憶してもよく、ジャーナル302にデータセット104のブロックをコミットしてもよい。それにより、ジャーナル302への書き込み202のバッチ化によるジャーナル302へのデータセット104のシーケンシャル書き込み202の効率性利得が拡張される。第二の例示的な利点として、揮発性メモリ表現は最近書き込まれたデータセット104の読み出しキャッシュのはたらきをしうる。たとえば、比較的遅い記憶装置106上に記憶されているジャーナル302から最近書き込まれたデータセット104を読む代わりに、ある実施形態は、揮発性メモリ表現から該データセット104を提供してもよい。よって、これらの技法のある実施形態は、ジャーナル302および揮発性メモリ表現におけるその可用性に従って、要求されたデータセット104を取得しようと努力しうる。たとえば、上記実施形態は、データセット104が揮発性メモリ内のジャーナル302の揮発性メモリ表現に記憶されていることを判別すると、該揮発性メモリ表現に記憶されているデータセット104を取得し、提示し;データセット104が記憶装置106上のジャーナル302に記憶されていることを判別すると、ジャーナル302に記憶されているデータセット104を取得し、提示し;それ以外の場合には、記憶装置106上の記憶セット102に記憶されているデータセット104を取得し、提示するのでもよい。データセット104はこれらの資源の二つ以上にまたがってもよい。たとえば、要求されたデータセット104の第一の部分はジャーナル302に存在し、ジャーナル302から取得されてもよく、一方、要求されたデータセット104の第二の部分は揮発性メモリ表現に存在し、該揮発性メモリ表現から取得されてもよいこの第二の部分がアクセス可能性アクセシビリティがより低いジャーナル302および/または記憶セット104に存在するか否かに関わりなく。第三の例示的な利点として、バッチ318の選択のような、ジャーナル302に記憶されているデータセット104に関する決定が、揮発性メモリ表現の内容を評価することによってより効率的に実行されうる。これはしばしば、ジャーナル302の内容を評価するよりも迅速なアクセスを提供する。装置610の高速だが揮発性のメモリにおいてデータセット104にアクセスできることのこれらの利点は、不揮発性記憶装置106上のジャーナル302における記憶を通じたデータセット104の耐久性と並行して達成されうる。この第三の側面の第一の変形として、揮発性メモリ表現は、ジャーナル302と同様に構成されてもよく、あるいは異なる仕方で生成されてもよい。たとえば、ハードディスクドライブのような記憶装置106上でのシーケンシャルな書き込みを増進するようジャーナル302を構成することが有利であることがあるが、この利点は、比較的等価なシーケンシャルアクセスおよびランダムアクセスを提供するメモリ回路においては減じられることがある。よって、揮発性メモリ表現は、ハッシュテーブルまたはアデルソンヴェルスキーランディス木AdelsonVelskiiLandistreeのようなB木のように、データセット104が記憶されるべき記憶セット102内の諸位置110に従ってインデックス付けされるなど、別の仕方で生成されてもよい。この第三の側面の第二の変形として、揮発性メモリ表現は、ジャーナル302に記憶されている同じデータセット104を記憶してもよいし、あるいは異なる記憶セット104を記憶してもよい。第一のそのような例として、揮発性メモリ表現は、書き込みバッファの仕方で、ジャーナル302に一緒に書き込まれるべき新しい諸データセット104を一時的に蓄積してもよい。第二のそのような例として、揮発性メモリ表現の余剰容量の揮発性メモリ読み出しキャッシュとしての使用を押し進めて、揮発性メモリ表現は、ジャーナル302から除去されるデータセット104を保持してもよい。たとえば、データセット104が記憶セット102にコミットされ、ジャーナル302から除去されそしておそらくは上書きさえされたのちに、該最近書き込まれたデータセット104をプロセスが要求しうる比較的高い確率のため、揮発性メモリ表現は、データセット104をメモリ内に保持していてもよい。ジャーナル302および/または記憶セット102へのデータセット104のコミット後の揮発性メモリ表現におけるデータセット104のこの保持は、揮発性メモリ表現に容量が残っている限り続けられてもよく、揮発性メモリ表現は、新たに受領された、まだコミットされていないデータセット104のための容量を提供するために、以前にコミットされたデータセット104を放逐evictしてもよい。このシナリオにおいては、揮発性メモリ表現にとって、ジャーナル302および/または記憶セット102にコミットされたデータセットを、コミットされていないデータセット104から区別することが有利でありうる。たとえば、ジャーナル302にデータセット104を記憶する際、ある実施形態は、該データセット104をジャーナル302の揮発性メモリ表現に記憶して、該データセット104を除去不可能とマークしてもよい。ジャーナル302に記憶されたデータセット104を記憶セット102にコミットすると、この実施形態は、揮発性メモリ表現に記憶されているデータセット104を除去可能とマークしてもよい。その後、揮発性メモリ表現における容量を解放するために、本実施形態は、ジャーナル302の揮発性メモリ表現から、除去可能とマークされているデータセット104だけを、安全に除去しうる。この変形は、揮発性メモリ表現の予備の容量を読み出しキャッシュとして有利に利用しながら、ジャーナル302および揮発性メモリ表現の同期を維持する。逆に、この第三の側面の第三の変形として、コミットされたまたはコミットされていないデータセット104を記憶することにおいて、揮発性メモリ表現の容量を使い尽くさずに、はいってくるデータセット104を記憶するために、揮発性メモリ内の揮発性メモリ表現内の十分な容量をリザーブしておくことが有利であることがある。特に、ジャーナル302が他のデータセット104をジャーナル302にコミットすることに関わっている間、記憶セット102に記憶されるべきデータセット104を記憶するよう構成されたバッファのために十分な容量がリザーブされてもよい。この変形はさらに、データセット104をジャーナル302から記憶セット102にコミットするタスクを記憶装置106に中断させることなく、揮発性メモリ表現を、はいってくるデータセット104を受け入れるための書き込みバッファとして利用する。この第三の側面の第四の変形として、障害210の回復は、ジャーナル302の揮発性メモリ表現802の再構築に関わっていてもよい。たとえば、回復プロセスは、揮発性メモリ表現302を再生成するためにジャーナル302を読むことによって始まってもよい。このようにして再構築を開始することは、たとえば、揮発性メモリ表現802の読み出しキャッシュおよび/または書き込みバッファ機能を再確立し、それによりジャーナル302を記憶する記憶装置106の読み出し/書き込み作業負荷を低減し、障害210によって引き起こされた不完全なまたは一貫しない書き込み202を上書きするためにジャーナル302中のデータセット104を記憶セット102にコミットするタスクを容易にすることによって、有利でありうる。図8は、不揮発性記憶装置106上で生成されたジャーナルが、装置610の揮発性メモリ内のジャーナル302の揮発性メモリ表現802と対にされている例示的なシナリオ800の図解を示している。この例示的なシナリオ800では、揮発性メモリ表現802は、ジャーナル302に記憶されているデータセット104の位置110の十六進アドレスに基づいて編成されたB木として記憶されている。第一の時点804において、ジャーナル302および揮発性メモリ表現802はデータセット104の特定のセット集合を記憶していてもよい。第二の時点806において、ジャーナル302に書き込まれるべき第二のデータセット104が受領されるとき、第二のデータセット104は揮発性メモリ表現802に記憶されてもよく、次いで直接的にまたは書き込みバッファを通じてジャーナル302に書き込まれてもよい。さらに、第三の時点806では、ジャーナル302に記憶されている一つまたは複数のデータセット104が記憶装置106上に記憶されている記憶セット102にコミットされるとき、データセット104はジャーナル302から除去されてもよいたとえば尾部ポインタ306をコミットされたデータセット104を含むレコード302を過ぎたところまで進めることによって。だが、揮発性メモリ表現802の予備の容量が利用可能である場合には、これらのデータセット104は揮発性メモリ表現802内に保持されてもよく、ただし除去可能とマークされてもよい図8の例示的なシナリオ800において破線の枠によって示したように。揮発性メモリ表現802はこのように、新たに受領されるデータセット104たとえば第四の時点810における第四のデータセット104の受領のための容量を提供してもよい。したがって、読み出し要求は、揮発性メモリ表現802、ジャーナル302および記憶セット102におけるデータセット104の可用性に従って充足されてもよい。たとえば、第五の時点812において、三つのデータセット104について三つの読み出し要求が受領されてもよい。そのうち第一のデータセット104は揮発性メモリ表現802から提供されてもよいジャーナル302からの放逐にもかかわらず揮発性メモリ表現802に存在;第二のデータセット104はジャーナル302から提供されてもよいジャーナル302にコミットされたのち揮発性メモリ表現802からは除去されていた;第三のデータセット104揮発性メモリ表現802およびジャーナル302から放逐されていたは記憶セット102から取得されて提供されてもよい。このように、図8の例示的なシナリオ800において示されるこうした技法の実施形態は、ジャーナル302の揮発性メモリ表現802の実装を通じていくつかの利点を達成する。当業者は、本稿に提示される技法に基づき、ジャーナル302のそのような揮発性メモリ表現802のそのような使用を考案しうる。D2.書き込みバッファとの相互運用これらの技法の実施形態の間で変わりうる第四の側面は、記憶セット102を記憶する記憶装置106に書き込みバッファを含めてこれを利用することに関する。多くの場合、記憶装置106は有利には、たとえばフラッシュ要求が開始されるまでデータセット104の書き込み202を揮発性メモリにおいてバッチ化して、データセット104の全部を記憶装置106上に記憶されている記憶セット102にコミットすることによって、パフォーマンスを改善するために、書き込みバッファを利用してもよい。しかしながら、記憶装置106上の書き込みバッファの動作は、本稿で提示される技法のパフォーマンスを低下させることがあり、実のところいくつかの問題を引き起こすことがある。たとえば、ジャーナル302にデータセット104を記憶する要求が揮発性書き込みバッファにおいて遅延される場合、障害210が発生すれば、該データセット104が失われることがありうる。特に、書き込みバッファはしばしば透明な仕方で実装され、フラッシュ動作が肯定的に要求され、完了したと検証されるのでない限りオペレーティングシステムまたは諸プロセスはデータセット104が実際にジャーナル302にコミットされたかどうかを、またさらには記憶装置104のために書き込みバッファが存在するか否かさえも判定することが難しいことがある。よって、プロセスがデータセット104をジャーナル302に書き込むことを要求するとき、たとえその書き込みがジャーナル302の不揮発性記憶ではなく揮発性書き込みバッファに記憶されるとしても、記憶装置106はすぐにそのプロセスに対して、要求が充足されたことを示すことがある。したがって、その適用は、あたかもデータセット104がコミットされたかのように、正しくない動作をすることがあり、記憶装置106がデータセット104を書き込みバッファからフラッシュする前に障害210が発生する場合、非一貫性および予期されないデータ損失が生じることがある。同様に、ジャーナル302と記憶セット102との間での書き込みバッファの動作は、データセット104が持続的に記憶されたかのように、ジャーナル302に正しくない動作をさせることがある。たとえば、ジャーナルは、まだ記憶セット102にコミットされていないデータセット104を除去し、それにより、書き込みバッファがフラッシュされるまでに障害210があった場合には、不完全で一貫しないデータセット104を生じることがある。さらに、書き込みバッファが提案しうる利点たとえば、バッチ化された書き込み202、逐次の諸書き込み202の融合および上書きの削減はすでに、本稿に提示される技法の他の構成要素によってすでに提供される。よって、書き込みバッファの存在および動作は追加される複雑さ、増加する費用、潜在的なパフォーマンス劣化および予期されない結果を引き起こすが、それでいて本稿に提示される技法によってすでに達成されていない利点はほとんどまたは全く提供しないことが理解されうる。これらの潜在的な不利益に鑑み、本技法のある実施形態は、書き込みバッファの存在に鑑みて調整されてもよい。この第四の側面の第一の変形として、本技法のある実施形態は、さまざまな仕方で書き込みバッファの使用および効果を回避してもよい。この第一の変形の第一の例として、データセット104および検証子112をジャーナル302に書き込むとき、たとえばジャーナル302への書き込みをライトスルー要求として発することによって、あるいは単に記憶装置106上の書き込みバッファを無効にすることによって、書き込みフィルタをバイパスする。この第一の変形の第二の例として、本実施形態は、ジャーナル302および/または記憶装置106に記憶されている記憶セット102への各書き込み202後にフラッシュ要求を開始することによって、書き込みバッファの効果を打ち消してもよい。フラッシュ要求を頻繁に発することは記憶装置106のパフォーマンスを低下させうるが、パフォーマンスの損失はさまざまな仕方で軽減されうる。たとえば、記憶セット102および/またはジャーナル302がそれぞれ書き込みバッファを有していてもいなくてもよい記憶装置106のセット上に分散されている場合、本技法のある実施形態は、最近書き込まれたデータセット104を記憶する記憶装置106のみにフラッシュ要求を発するよう構成されていてもよい。この第四の側面の第二の変形として、本技法のある実施形態は、書き込みバッファと相互運用されてもよく、書き込みバッファの動作を、ジャーナル302および/またはジャーナル302のメモリ内表現802の動作と協調させてもよい。この第二の変形の第一の例として、ジャーナル302を記憶している記憶装置106がフラッシュされるとき、ジャーナル302にフラッシュされたデータセット104ジャーナル302に対して書き込み要求が発されたが書き込みバッファに残っていることがありうるデータセット104ではなくを表わす、ジャーナル302のフラッシュ点flushpointが同定されてもよい。たとえば、ジャーナル302の揮発性メモリ表現802を備えるある実施形態では、揮発性メモリ表現802に記憶されているデータセット104は初期には除去不可能とマークされていてもよく、ジャーナル302のフラッシュ点がデータセット104を過ぎたところに動かされるまでそのようにマークされたままであってもよい。そのようにフラッシュ点が動かされた時点において、揮発性メモリ表現802はデータセット104を除去可能とマークしてもよい。図9は、ジャーナル302を記憶している記憶装置106の書き込みバッファ902と相互運用される揮発性メモリ表現802の適応を備える例示的なシナリオ900の図解を示している。この例示的なシナリオ900では、記憶セット102に書き込まれるべきデータセット104はまず揮発性メモリ表現802に記憶され、次いで記憶セット102にコミットされる前にジャーナル302に書き込まれる。しかしながら、書き込みバッファ902がジャーナル302を記憶する記憶装置106上に存在することがあり、非一貫性および問題を引き起こすことがある。たとえば、ジャーナル302に書き込まれたと想定されるデータセット104がそうではなく書き込みバッファ902の揮発性メモリに記憶されており、障害210によってデータセット104がジャーナル302に書き込まれることなく失われる場合である。よって、揮発性メモリ表現902はそれぞれのデータセット104の状態を記録してもよい。たとえば、第一の時点904において、データセット104のセット集合をジャーナル302に移す要求を開始すると、揮発性メモリ表現802はデータセット104の状態を、記憶装置106に書き込まれている過程にあるとして記録してもよいすなわち、記憶装置106にデータセット104を書き込む要求が開始されたが記憶装置106はまだ書き込み要求が受領されたことを示していないことを示す。第二の時点906において、記憶装置106はデータセット104が受領されたと応答する。しかしながら、揮発性メモリ表現はデータセット104がジャーナル302にコミットされたかどうか、あるいはデータセット104が書き込みバッファ902に存在するかどうかを判定できないことがありうる。よって、第二の時点906では、揮発性メモリ表現902は、データセット104を、記憶装置106によってバッファリングされたものとしてマークする。その間、記憶装置104がまだフルに受領したとアクノレッジしていない他のデータセット104は、記憶装置106に書き込まれる過程にあるとマークされ続けてもよい。第三の時点908において、揮発性メモリ表現802は、書き込みバッファ902をフラッシュする要求を発してもよく、書き込みバッファ902は、ジャーナル302を含む不揮発性記憶媒体にフルに受領されたデータセット104をコミットすることを開始してもよい。記憶装置106がフラッシュ要求が充足されたことを示す第四の時点910では、揮発性メモリ表現は、バッファリングされたと以前にマークされたデータセット104のすべてすなわち、記憶装置106が前記フラッシュ要求前にフルに受領されたとアクノレッジしたデータセット104のすべてを、フルにジャーナリングされたjournaledと、また任意的には除去可能とマークしてもよい。第五の時点912では、記憶装置106はその後、追加的なデータセット104がフルに受領されたことを示してもよく、揮発性メモリ表現802はこれらのデータセット104を、バッファリングされ、第二のフラッシュ要求を通じたジャーナル302へのコミットの準備ができているとマークしてもよい。このようにして、記憶装置106の書き込みバッファ902に関して、揮発性メモリ表現802はデータセット104の状態を追跡する。この第四の側面の第三の変形として、書き込みバッファ902が介在することがあり、データセット104のジャーナル302から記憶セット106へのコミットに干渉することがある。同様に、揮発性メモリ表現802および/またはジャーナル302に記憶されているデータセット104の状態が、該データセット104がジャーナル302から記憶セット102にフラッシュされたかどうかを示してもよい。たとえば、本技法のある実施形態は、書き込みバッファ902から記憶セット12へのデータセット104のコミットを検出するとたとえば、フラッシュ要求のアクノレッジ、ジャーナル302および/または揮発性メモリ表現902内のデータセット104に、コミット済みとしてマークしてもよく、ジャーナル302および揮発性メモリ表現902から、記憶セット104にコミット済みであるとマークされているデータセット104のみを除去してもよい。図10は、記憶セット102を記憶する記憶装置106の書き込みバッファ902と相互運用されるためのジャーナル302の調整を表わす例示的なシナリオ1000を示している。この例示的なシナリオ1000では、ジャーナル302は、三つの記憶装置106を横断して分散されている記憶セット102にコミットされるべきデータセット104を記憶している。各記憶装置は書き込みバッファ902を有する。データセット104が、記憶セット102を記憶している記憶装置106の物理的な媒体にフルにコミットされることを保証するために、ジャーナル302は、ジャーナル302が記憶セット102に書き込まれるよう要求したデータセット104の状態を記録してもよい。たとえば、第一の時点1002において、コミットされるべきデータセット104のバッチ318を同定すると、ジャーナル302は、各データセット104についての書き込み要求を、該データセット104を記憶する記憶装置106に送ってもよい。しかしながら、記憶装置106がデータセット104の受領をアクノレッジするとき、ジャーナル302は、データセット104が記憶セット102にコミットされたと想定することはできないが、各装置106の揮発性書き込みバッファ902に記憶されていることはありえ、よってジャーナル302内の各データセット104を、バッファリングされたものとしてマークしてもよい。第二の時点1004では、ジャーナル302は記憶装置106に特に、バッファリングされたデータセット106を記憶している記憶装置にのみフラッシュ要求を発してもよいたとえば、第三の記憶装置106は最近コミットされたデータセット104を一つも記憶しておらず、フラッシュ要求を発されない。記憶装置106がフラッシュ要求が充足されたことを示す第三の時点1004では、ジャーナル302はデータセット104を、コミット済みとしてマークしてもよい。ジャーナル302はまた、頭部ポインタ308と尾部ポインタ306との間のフラッシュ点1008を、フラッシュ点と尾部ポインタ306の間のすべてのデータセット104が記憶セット102にコミット済みとなるよう、同定してもよい。次いで第四の時点1010では、ジャーナル302は、尾部ポインタ308をフラッシュ点1008に動かすことによってデータセット104を放逐してもよい。途中にあるどのデータセット104も、記憶セット102にフルにコミットされているからである。このようにして、ジャーナル302は記憶セット102を記憶している諸記憶装置106の諸書き込みバッファ902の動作を考慮するよう適応されてもよい。当業者は、本稿に提示される技法を実装しながら、書き込みバッファ902の存在および動作を考慮する多くの仕方を考案しうる。E.コンピューティング環境図11は、本稿に提示される技法が実装されうるコンピューティング装置1102内の例示的なコンピューティング環境の図解を示している。例示的なコンピューティング装置は、これに限られないが、パーソナルコンピュータ、サーバーコンピュータ、ハンドヘルドもしくはラップトップ装置、モバイル装置携帯電話、携帯情報端末PDA、メディアプレーヤーなど、マルチプロセッサシステム、消費者電子装置、ミニコンピュータ、メインフレームコンピュータおよび上記のシステムもしくは装置のいずれかを含む分散式のコンピューティング環境を含む。図11は、本稿に提示される一つまたは複数の実施形態を実装するよう構成されているコンピューティング装置1102を有するシステム1100の例を示している。ある構成では、コンピューティング装置1102は少なくとも一つのプロセッサ1106および少なくとも一つのメモリコンポーネント1108を含む。コンピューティング装置の厳密な構成および型に依存して、メモリコンポーネント1108は揮発性たとえばRAM、不揮発性たとえばROM、フラッシュメモリなどまたは中間的もしくはハイブリッド型のメモリコンポーネントでありうる。この構成は、図11では破線1104によって示されている。いくつかの実施形態では、装置1102は追加的な特徴/機能を含んでいてもよい。たとえば、装置1102は、これに限られないがハードディスクドライブ、半導体記憶デバイスおよび/または他のリムーバブルもしくは非リムーバブルな磁気もしくは光学式媒体を含む一つまたは複数の追加的な記憶コンポーネント1110を含んでいてもよい。ある実施形態では、本稿で与えられる一つまたは複数の実施形態を実装するコンピュータ可読かつプロセッサ実行可能な命令が記憶コンポーネント1110に記憶される。記憶コンポーネント1110は、オペレーティングシステムのコンポーネント、一つまたは複数のアプリケーションをなす実行可能なバイナリー、プログラミングライブラリたとえば、アプリケーションプログラミングインターフェースAPI、メディアオブジェクトおよび文書類のような他のデータオブジェクトをも記憶していてもよい。コンピュータ可読命令は、プロセッサ1106による実行のためにメモリコンポーネント1108にロードされてもよい。コンピューティング装置1102はまた、コンピューティング装置1102に他の装置と通信することを許容する一つまたは複数の通信コンポーネント1116をも含んでいてもよい。一つまたは複数の通信コンポーネント1116はたとえばモデム、ネットワークインターフェースカードNIC、電波周波数送信機/受信機、赤外線ポートおよびユニバーサルシリアルバスUSBUSB接続を有していてもよい。そのような通信コンポーネント1116は有線接続物理的なコード、ケーブルまたはワイヤを通じてネットワークに接続するまたは無線接続可視光、赤外線または一つもしくは複数の電波周波数などを通じてネットワーキング装置と無線で通信するを有していてもよい。コンピューティング装置1102は、キーボード、マウス、ペン、音声入力装置、タッチ入力装置、赤外線カメラまたはビデオ入力装置のような一つまたは複数の入力コンポーネント1114および/または一つまたは複数のディスプレイ、スピーカーおよびプリンターのような一つまたは複数の出力コンポーネント1112を含んでいてもよい。入力コンポーネント1114および/または出力コンポーネント1112は有線接続、無線接続またはそれらの任意の組み合わせを介してコンピューティング装置1102に接続されてもよい。ある実施形態では、別のコンピューティング装置からの入力コンポーネント1114または出力コンポーネント1112がコンピューティング装置1102のための入力コンポーネント1114および/または出力コンポーネント1112として使用されてもよい。コンピューティング装置1102のコンポーネントは、バスのようなさまざまな相互接続によって接続されてもよい。そのような相互接続は、PCIエクスプレスのような周辺コンポーネント相互接続PCI、ユニバーサルシリアルバスUSB、ファイアワイヤIEEE1394、光学式バス構造などを含みうる。別の実施形態では、コンピューティング装置1102のコンポーネントはネットワークによって相互接続されてもよい。たとえば、メモリコンポーネント1108は、ネットワークによって相互接続された種々の物理的位置に位置されている複数の物理的メモリユニットから構成されてもよい。当業者は、コンピュータ可読命令を記憶するために利用される記憶装置がネットワークを横断して分散されてもよいことを認識するであろう。たとえば、ネットワーク1118を介してアクセス可能なコンピューティング装置1120が本稿で与えられる一つまたは複数の実施形態を実装するためのコンピュータ可読命令を記憶してもよい。コンピューティング装置1102はコンピューティング装置1120にアクセスし、コンピュータ可読命令の一部または全部を実行のためにダウンロードしてもよい。あるいはまた、コンピューティング装置1102は必要に応じてコンピュータ可読命令の諸片をダウンロードしてもよく、あるいはいくつかの命令はコンピューティング装置1102において実行され、いくつかはコンピューティング装置1120において実行されてもよい。F.用語の用法主題は構造的な特徴および/または方法論的な工程に固有の言辞で記述されているが、付属の請求項において定義される主題は必ずしも上記で述べた個別的な特徴や工程に限定されるものではないことは理解しておくものとする。むしろ、上記の個別的な特徴および工程は請求項を実装する例示的な形として開示されているのである。本願での用法では、用語コンポーネント、モジュール、システム、インターフェースなどは、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェアまたは実行中のソフトウェアのいずれであれコンピュータ関係のエンティティを指すことが一般に意図されている。たとえば、コンポーネントは、これに限られないが、プロセッサ上で走っているプロセス、プロセッサ、オブジェクト、実行可能物、実行のスレッド、プログラムおよび/またはコンピュータであってもよい。例として、コントローラ上で走るアプリケーションおよび前記コントローラの両方がコンポーネントであることができる。一つまたは複数のコンポーネントがプロセスおよび/または実行のスレッド内に存在することができ、コンポーネントは一つのコンピュータ上に局在することもできるし、および/または二つ以上のコンピュータの間で分散させられることもできる。さらに、特許請求される主題は、開示される主題を実装するようコンピュータを制御するためのソフトウェア、ファームウェア、ハードウェアまたはそれらの任意の組み合わせを製造するための標準的なプログラミングおよび/またはエンジニアリング技法を使って、方法、装置または製造物として実装されてもよい。本稿で用いるところの用語製造物は、任意のコンピュータ可読デバイス、担体または媒体からアクセス可能なコンピュータプログラムを包含することが意図されている。むろん、当業者は、特許請求される主題の範囲および精神から外れることなく、この構成に多くの修正がなしうることを認識するであろう。本稿では諸実施形態のさまざまな動作が与えられている。ある実施形態では、記載される動作の一つまたは複数は、一つまたは複数のコンピュータ可読媒体上に記憶されているコンピュータ可読命令であって、コンピューティング装置によって実行されたら、記載される動作を該コンピューティング装置に実行させるものをなしてもよい。動作の一部または全部が記載される順序は、それらの動作が必ず順序依存であることを含意するものと解釈すべきではない。代替的な順序付けが、本稿の恩恵を受ける当業者によって理解されるであろう。さらに、すべての動作が本稿で与えられる各実施形態において必ず存在するわけではないことは理解されるであろう。さらに、例示的という語は、本稿では、例、事例または例解のはたらきをすることを意味するために使われる。本稿に例示的として記載される任意の側面または設計は、必ずしも、他の側面または設計に対して有利であると解釈されるものではない。むしろ、例示的という語の使用は、概念を具体的な仕方で提示することを意図したものである。本願での用法では、用語またはは排他的なまたはではなく包含的なまたはを意味することが意図されている。すなわち、特に断わりのない限りまたは文脈から明らかではない限り、XはAまたはBを用いるは自然な包含的な置換の任意のものを意味することが意図されている。すなわち、XがAを用いる;XがBを用いる;またはXがAおよびBの両方を用いるのであれば、XはAまたはBを用いるは上記の事例のいずれかのもとで満たされる。さらに、本願および付属の請求項で使われるところの冠詞aおよびanは、そうでないことが記載されているまたは単数形に向けられていることが文脈から明らかなのでない限り、一つまたは複数を意味する。また、本開示は、一つまたは複数の実装に関して図示され記述されたが、本明細書および付属の図面を読み、理解することに基づいて、他の当業者にも等価な変更および修正が思いつくであろう。本開示はそのようなすべての修正および変更を含み、付属の請求項の範囲によってのみ限定される。特に上記のコンポーネントたとえば要素、資源などによって実行されるさまざまな機能に関し、そのようなコンポーネントを記述するために使われる用語は、特にそうでないことが示されていない限り、本開示の本稿で例解された例示的な実装における当該機能を実行する開示された構造と構造的に等価でないとしても、記述されるコンポーネントの指定される機能たとえば、機能的に等価なを実行する任意のコンポーネントに対応することが意図されている。さらに、本開示の特定の特徴はいくつかの実装の一つのみに関して開示されたことがありうるが、そのような特徴は、任意の所与のまたは特定の応用のために所望されるまたは有利でありうるように、他の実装の一つまたは複数の他の特徴と組み合わされてもよい。さらに、用語含む有するもつまたはそれらの変形が詳細な説明または請求項において使用される限りにおいて、そのような用語は用語comprisingと同様の仕方で包含的であることが意図されている。