(57)【特許請求の範囲】
【請求項１】
コンピュータのプロセッサが、少なくとも一つの不揮発性記憶装置によって提供される記憶セットにおいてデータセットを記憶する方法であって：
不揮発性記憶装置上で、それぞれ検証子と関連付けられたデータセットを記憶するよう構成されたジャーナルを生成する段階と；
前記記憶セット中のある位置にデータセットを記憶する要求を受領すると、前記データセットについての検証子を計算し；前記検証子および前記データセットを前記ジャーナルに記憶する段階と；
前記ジャーナルから、前記記憶セットにコミットされる第一のデータセットおよび第二のデータセットを含むバッチを、前記第一のデータセットおよび前記第二のデータセットを一緒に前記記憶セットを書き込むことが前記第一のデータセットおよび前記第二のデータセットを個々に前記記憶セットに書き込むより速くなるように選択する段階と；
前記バッチのそれぞれのデータセットについて前記第一のデータセット、前記第一のデータセットの前記検証子、前記第二のデータセットおよび前記第二のデータセットの前記検証子を前記記憶セットに記憶する段階と；
前記バッチの前記データセットすべてを前記記憶セットに記憶したのち、前記ジャーナルから前記バッチの前記第一のデータセットおよび前記第二のデータセットを除去する段階とを含む、
方法。
【請求項２】
前記ジャーナルがデータセットのシーケンスを含み、
前記ジャーナルにデータセットを記憶することが、該データセットを前記データセットのシーケンスにアペンドすることを含む、
請求項１記載の方法。
【請求項３】
バッチを選択する前記段階が：
前記ジャーナルの容量に関わるジャーナル容量イベント；
前記ジャーナルに記憶されている前記データセットの継続時間に関わる継続時間イベント；
前記ジャーナル内の少なくとも一つのデータセットを前記記憶セットにコミットする要求に関わるコミット要求イベント；および
前記記憶セットの少なくとも一つの不揮発性記憶装置の作業負荷に関わる記憶装置作業負荷イベント
を含むコミット・イベント集合から選択されるコミット・イベントを検出したときに、
前記記憶セットに記憶されるべき第一のデータセットおよび第二のデータセットを前記ジャーナルから選択することを含む、
請求項１記載の方法。
【請求項４】
データセットの前記バッチの選択が：
前記ジャーナルに記憶されており、前記記憶セット中の第一の位置に記憶されるべき第一のデータセットを前記バッチに含めるよう選択し；
前記ジャーナルに記憶されており、前記記憶セット中の前記第一の位置に近い第二の位置に記憶されるべき第二のデータセットを前記バッチに含めるよう選択することを含む、
請求項１記載の方法。
【請求項５】
データセットの前記バッチの選択が、前記ジャーナルに記憶されており、前記記憶セット中のある位置に記憶されるべき第一のデータセットを、前記ジャーナルが前記第一のデータセットより新しくかつ前記記憶セット中の前記位置に記憶されるべき第二のデータセットを含んでいる場合には、前記バッチから省略することを含む、請求項１記載の方法。
【請求項６】
それぞれの要求がデータセットについて前記記憶セット中での位置を指定しており；
データセットについての検証子を計算することが：
前記ジャーナルに完全に記録されているデータセットについては、そのデータセットから検証子を計算し；
前記ジャーナルに完全には記録されていないデータセットについては：
前記記憶セット中での前記位置における前記データセットのもとのバージョンを読み；
前記データセットの前記もとのバージョンのもとの検証子を読み；
前記もとの検証子から前記データセットの前記もとのバージョンを除去し；
前記もとの検証子に前記データセットを含める、
ことを含む、請求項１記載の方法。
【請求項７】
前記ジャーナルの揮発性メモリ表現を再構築する段階をさらに含み、該再構築が：
前記ジャーナル中に記憶されているそれぞれのデータセットについて、前記記憶セット中のそのデータセットの位置を読む段階と；
前記データセットの位置を読んだのちに、前記ジャーナル中の前記データセットを読む段階と；
前記データセットの位置を読んでいる間は、諸プロセスからの前記記憶セットにアクセスする要求をブロックする段階とを含む、
請求項１記載の方法。
【請求項８】
前記コンピュータが揮発性メモリを有しており；
当該方法が：
前記揮発性メモリ中に、前記不揮発性記憶装置上に記憶されている前記ジャーナルの揮発性メモリ表現を生成し；
前記ジャーナルにデータセットを記憶するときに、前記ジャーナルの前記揮発性メモリ表現中に前記データセットを記憶する段階を含む、
請求項１記載の方法。
【請求項９】
前記ジャーナルの前記揮発性メモリ表現が、前記記憶セット中で、前記データセットが記憶されるべき位置に従ってインデックス付けされる、請求項８記載の方法。
【請求項１０】
請求項８記載の方法であって、当該方法が、データセットを読み出す要求を受領すると：
前記データセットが前記揮発性メモリ内の前記ジャーナルの前記揮発性メモリ表現内に記憶されていることを判別すると、前記揮発性メモリ表現内に記憶されている前記データセットを提示し；
前記データセットが前記不揮発性記憶装置上の前記ジャーナルに記憶されていることを判別すると、前記ジャーナルに記憶されている前記データセットを提示し；
前記データセットが前記不揮発性記憶装置上の前記記憶セットに記憶されていることを判別すると、前記不揮発性記憶装置の前記記憶セットに記憶されている前記データセットを提示することを含む、
方法。
【請求項１１】
請求項８記載の方法であって、当該方法が、前記記憶セットにバッチを記憶したのち、そのバッチを前記ジャーナルの前記揮発性メモリ表現から除去する段階を含む、方法。
【請求項１２】
請求項１１記載の方法であって、当該方法が：
前記ジャーナルにデータセットを記憶するときに、前記ジャーナルの前記揮発性メモリ表現中に前記データセットを、除去不可能とマークして記憶し；
前記記憶セットにデータセットを記憶するときに、前記ジャーナルの前記揮発性メモリ表現中に記憶されている前記データセットを、除去可能とマークする段階を含み、
データセットを前記揮発性メモリ中の前記ジャーナルの前記揮発性メモリ表現から除去することが、除去可能とマークされたデータセットのみを前記ジャーナルの前記揮発性メモリ表現から除去することを含む、
方法。
【請求項１３】
前記コンピュータが、前記不揮発性記憶装置上に記憶されている前記ジャーナルに関連付けられた書き込みバッファを有しており、
当該方法が：
前記書き込みバッファから前記記憶セットへのデータセットのコミットを検出する段階と；
データセットのコミットを検出すると、前記ジャーナルの前記揮発性メモリ表現において、そのデータセットにコミット済みとマークする段階とを含み、
前記ジャーナルからデータセットを除去することが、コミット済みとマークされたデータセットのみを前記ジャーナルから除去することを含む、
請求項１１記載の方法。
【請求項１４】
請求項８記載の方法であって：
前記ジャーナルの前記揮発性メモリ表現がある容量のデータセットをもち；
前記揮発性メモリ中に前記ジャーナルの前記揮発性メモリ表現を生成することが：
前記ジャーナルの前記揮発性メモリ表現中の前記容量のデータセット；
前記ジャーナルの前記揮発性メモリ表現の前記容量を含む前記データセットの前記検証子；
前記ジャーナルに記憶されているデータセットが前記記憶セットに記憶されつつある間に前記記憶セットに記憶されるべきデータセットを記憶するよう構成されたバッファとを記憶するよう前記揮発性メモリ中の容量をリザーブしておくことを含む、
方法。
【請求項１５】
前記コンピュータの障害から回復したときに、
前記ジャーナルを使って、前記コンピュータの前記揮発性メモリ内に前記ジャーナルの前記揮発性メモリ表現を再構築し、
前記揮発性メモリ内に前記ジャーナルの前記揮発性メモリ表現を再構築したのち、前記記憶セットに記憶されるべき前記ジャーナルに記憶されているデータセットのバッチを選択することを再開始する段階をさらに含む、
請求項８記載の方法。
【請求項１６】
前記コンピュータが前記ジャーナルを記憶する前記不揮発性記憶装置に関連付けられた書き込みバッファを有しており、
当該方法は、前記ジャーナルにデータセットおよび検証子を書き込んでいる間、前記書き込みバッファをバイパスすることを含む、
請求項１記載の方法。
【請求項１７】
前記コンピュータが前記ジャーナルを記憶する前記不揮発性記憶装置に関連付けられた書き込みバッファを有しており、
当該方法は、前記ジャーナルを記憶している不揮発性記憶装置の書き込みバッファをフラッシュするときに、その不揮発性記憶装置にフラッシュされたデータセットを示すフラッシュ点を同定する段階を含む、
請求項１記載の方法。
【請求項１８】
少なくとも一つの不揮発性記憶装置が前記ジャーナルに関連付けられた書き込みバッファを有しており、
当該方法は、バッチの記憶セットを前記記憶セットに記憶したのち、前記不揮発性記憶装置の前記書き込みバッファをフラッシュする段階を含む、
請求項１記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は検証されたデータセットの不揮発性媒体ジャーナリング（journaling）に関する。
【背景技術】
【０００２】
コンピューティングの分野において、多くのシナリオは一つまたは複数の不揮発性記憶装置（たとえば円盤ベースの磁気および／または光ハードディスクドライブ、半導体記憶デバイスおよび不揮発性メモリ回路）上にデータを保存することに関わる。語サイズ、アドレッシング方法、記憶装置の記憶スペースの一つまたは複数のパーティションへの分割および記憶装置内の割り当てられたスペースをコンピューティング環境内の一つまたは複数のボリュームとして露出させることなど、データ記憶の多くの詳細は変わりうる。
【０００３】
多くのそのような記憶シナリオにおいて、データに対する意図されない変化を検出するための諸技法が利用されうる。たとえば、装置の読み出しまたは記憶論理におけるエラー、バッファー・アンダーランまたはオーバーラン、記憶媒体における欠陥または（宇宙線のような）外的な妨害が、時に記憶媒体上に記憶されているデータまたは記憶媒体からのデータの読み出しに意図しない変化を引き起こすことがある。したがって、そのような多くのシナリオにおいて、データは、それぞれのデータセット（たとえば、種々の語、セクタ、領域または他のデータのセット）について計算された検証子（たとえばパリティ・ビットまたはチェックサム）に関わる何らかの誤り検出方式に従って記憶装置に記憶される。検証子は、データセットの内容が有効に記憶装置に記憶されたおよび／または記憶装置から読み出されたことを確証するために使用されうる。そのような一つの例として、ビットのセットを含むデータセットを記憶するコンテキストでは、ビットに対して排他的OR（XOR）演算が適用され、結果としてパリティ・ビットを生じてもよく、そのパリティ・ビットが記憶されて、このデータセットと関連付けられてもよい。のちにデータセットが読まれるとき、もう一度XOR演算が適用されて、その結果が上記パリティ・ビットと比較される。任意の一ビットの変化はこれらのXOR計算の不一致につながり、それがデータが誤って記憶、変更されたまたは誤って記憶装置から読み出されたことを示す。多くの型の検証子が同定されてもよい。そうした検証子はいくつかの特徴において変わりうる（たとえば、計算の簡単さ、データセットのどのビットが変わったかの同定能力およびデータの誤って読まれた部分が訂正されうる誤り訂正能力）。
【０００４】
誤り検出方式はしばしば安価なディスクの冗長アレイ（RAID:  Redundant  Array  of  Inexpensive  Disks）のアレイ、たとえば改善されたスループットおよび自動データ・ミラーリングのようなさまざまな集合属性を達成するために一緒にプールされている一組のハードディスクドライブにおいて利用される。そのような一つの例として、RAID  4アレイは二つ以上のディスクのセットに関わる。ここで、一つのディスクはユーザー・データを記憶するためではなく、他のディスクに記憶されているデータの検証子を記憶するためにアレイに含められる。たとえば、それぞれが一テラバイトのデータを記憶する四つのディスクに関わるRAID  4アレイについて、最初の三つのディスクの容量はプールされてユーザー・データのための三テラバイトの記憶スペースをなし、四番目のディスクは最初の三つのディスクに記憶されているデータセットについての検証子を保持するためにアレイに含められる（たとえば、他の三つのディスクにそれぞれ記憶されている三つの64ビット語毎に、四番目のディスクは、それらの三つの64ビット語の完全性を検証する64ビットの検証子を含む）。RAIDアレイ・コントローラは、設けられる一組のドライブについて選択されたRAIDレベルの詳細を実装する（たとえば、データセットを受領すると、自動的に、三つのユーザー・ディスクを横断してデータを割り振り、データセットの検証子を計算し、四番目のディスク上に検証子を記憶する）よう構成されている回路を有する。使用されるRAID技法は、追加的な保護または特徴をも可能にしてもよい。たとえば、RAID  4アレイにおけるどれか一つの記憶装置が障害を起こしたら、障害を起こした装置に記憶されているデータが、残りの記憶装置の使用を通じてそっくり再構成されてもよい。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
この概要は、詳細な説明においてさらに後述される概念のセレクションを簡略化された形で紹介するために設けられている。この概要は、特許請求される主題の鍵となる因子または本質的な特徴を特定することは意図されていないし、特許請求される主題の範囲を限定するために使われることも意図されていない。
【０００６】
記憶装置へのデータの書き込みは、非効率および潜在的な問題のいくつかの源を呈することがありうる。第一の例として、記憶装置に書き込まれるデータセットは、記憶装置上の一連の物理的アドレスに書き込まれるデータのようなデータのシーケンスに関わることがある。このシーケンスに従ってデータセットを書き込むことによって（たとえば、データの連続的なブロックのシーケンシャルな書き込み）、記憶装置はより高速なシーク時間、より高いスループットおよび／またはシーク時間および書き込み動作の低減に起因する低下した電力消費および物理的摩耗を達成しうる。しかしながら、さまざまな状況のため、記憶装置はデータのシーケンスを二つ以上のサブシーケンスとして書き込むことがあり、こうした効率を達成しないことがある。第一の例として、データセットを書き込む要求は、シーケンスの一部を書き込む二つ以上の要求（たとえば、アドレス1000-1015を書き込む第一の要求およびアドレス1016-1031を書き込む第二の要求）を含んでいることがあり、記憶装置は、シーケンス全体を一緒にコミットするのではなく、シーケンスの各部分を別個にコミットすることがある。第二の例として、記憶装置はいくつかの書き込み要求を受け取ることがあり、シーケンスの第一の部分とシーケンスの第二の部分の書き込みの間に、異なるデータセットを異なる位置に記憶することがありうる。これにより、第一の部分と第二の部分の間の二回の追加的シークが生じてしまう。これらおよびその他の状況は、パフォーマンス、電力効率および記憶装置の寿命における効率利得の機会を逃すこととして同定されうる。
【０００７】
検証子に基づく記憶セットを記憶する際に生じうる第二の問題は、データセットの記憶とその検証子との間の遅延（またはその逆）に関わる。第一の例では、多くの記憶装置は一時に一つの位置（たとえば、ハードディスクドライブの書き込みヘッドの下の位置または半導体記憶デバイスにおけるアドレス・レジスタによって指定される位置）への書き込みをサポートするだけであり、データのシーケンシャルな記憶は、検証子より前にデータセットを書き込むこと、あるいは逆にデータセットより前に検証子を書き込むことに関わる。第二の例として、データセットと検証子が異なる記憶装置上に記憶される場合、第一の記憶装置がデータセットを記憶する瞬間を第二の記憶装置がデータセットの検証子を記憶する瞬間と同期させることは難しいことがある。これらおよびその他の例において、データセットおよび対応する検証子の記憶は、同期的な仕方ではなく、シーケンシャルな仕方で行なわれうる。しかしながら、電力喪失、ハードウェア障害、ソフトウェア・クラッシュまたは予期されなかったアレイからの記憶装置の除去といった記憶装置（単数または複数）の障害が、データセットの記憶後、検証子の記憶より前に起こることがありうる。結果として、検証子は検証子によって代表されるデータに一致しない。時にRAID書き込みホール（RAID  write  hole）として同定される、非原子的書き込みによって引き起こされるこの問題は、多くの結果として生ずる帰結として現われうる。たとえば、記憶装置（単数または複数）がいかにしてこのエラーを治癒するかを、たとえば不一致が誤った検証子を表わしているのか、データセットへの意図されない変化（たとえば、記憶セットのビット誤り率（BER:  bit  error  rate）の表明）を表わしているのか、あるいはデータセットもしくは検証子のいずれかの読み込み誤りを表わしているのかを、決定するのが難しいことがある。この情報欠如は、最近書き込まれていないデータセットの部分の正確さに対する信頼を危険にさらすことさえありうる。たとえば、記憶装置の一つが故障した場合、（誤った検証子を使って）残っている記憶装置からその記憶装置上のデータを復元する試みは、誤ったデータ再構成につながりうる。たとえば、失われたまたは破損して、修理されたまたは代わりの記憶装置をもって置換された特定のボリュームからのデータを復元するために、欠けている記憶装置上のデータの各語は同じ位置（たとえば他の装置上の同じ物理的または論理的アドレス）にある語ならびに前記アドレスにある語のセットについてのチェックサムをまとめてXORすることによって計算されてもよく、その結果が欠けている語を与える。しかしながら、チェックサムが意図せずして変わっていたら、XOR演算は正しくない結果を与え、代用されたボリューム上の語の正しくないデータによる置換につながる。もう一つの例として、検証子Cが部分AおよびBを含むデータセットのために記憶されていて、AおよびCを更新している間に破局的な障害が生じる場合、コンピュータはデータセット[A,B]と検証子Cの間の不一致を同定できることがありうる。この不可能性は、破局的な障害の瞬間に書き込みに参加していたAおよびCのみならず、長い間アクセスされてさえいないことがありうるBに対する信頼性をも損なうことがありうる。
【課題を解決するための手段】
【０００８】
本稿では、RAID書き込みホールのような問題によって引き起こされる、データ損失および長引く回復時間のリスクを軽減するとともに、記憶セットの効率を改善するための技法が提示される。これらの技法によれば、記憶セット（storage  set）の一つまたは複数の記憶装置上で、記憶セットにコミットされるべきデータセットを記憶するよう構成されたジャーナルが生成されてもよい。ジャーナル（journal）は、たとえば、ループ・アレイとして構成されたレコードのシーケンスを有していてもよい。ここで、各レコードはデータセットおよび該データセットのために計算された検証子を記憶する容量をもつ。記憶セットに書き込まれるべきすべてのデータセットはまず、受領のシーケンシャルな順序で、該データセットについて計算された検証子とともに、ジャーナルに記憶されてもよい。
【０００９】
これらの技法は、非原子的な書き込みが、記憶セット内の位置にコミットされる前に記憶装置の不揮発性メモリ上に記憶されうる機構を提供することによって、RAID書き込みホールの帰結を軽減しうる。データセットがジャーナルに書き込まれつつある間に障害が起こると、記憶セットに記憶されているデータセットのバージョンは手つかずのまま残り、データセットが記憶セットに書き込まれつつある間に障害が起こると、障害は、ジャーナルから記憶セットに、データセットの書き込みを再開始することによって復元されうる。さらに、ジャーナルの使用は、シーケンシャルな書き込みを増進することによって記憶装置のパフォーマンスを改善しうる。第一の例として、非シーケンシャルな諸データセットがまずシーケンシャルにジャーナルに書き込まれ、非シーケンシャルな諸データセットについてさえ、通して、迅速な、シーケンシャルな書き込みを提供する。第二の例として、ジャーナルは、書き込み要求と記憶セットとの間の書き込みバッファとして機能しうる。それにより、記憶装置の連続的な諸物理的位置に記憶されているデータのシーケンスを含む諸書き込み要求の融合を可能にする。さらなるパフォーマンス改善が、たとえば不揮発性記憶装置上に記憶されているジャーナルの揮発性メモリ表現を生成することによって、達成されうる。ここで、揮発性メモリ表現は、リーチ（reach）キャッシュおよび／または書き込みバッファのはたらきをする。これらおよびその他の利点は、本稿に提示される技法の使用を通じて達成可能でありうる。
【００１０】
上記および関係する目的の達成に向け、以下の記述および付属の図面はある種の例示的な側面および実装を記述する。これらは、一つまたは複数の側面が用いられうるさまざまな仕方のほんのいくつかを示す。本開示の他の側面、利点および新規な特徴は、付属の図面との関連で考慮されるとき、以下の詳細な記述から明白となるであろう。
【図面の簡単な説明】
【００１１】
【図１】記憶装置上の記憶セットを有するデータセットの例示的な記憶の図解である。
【図２】記憶セット内の書き込み動作中の障害の帰結を描く例示的なシナリオの図解である。
【図３】本稿に提示される技法に基づく、記憶装置上の記憶セットを有するデータセットの例示的な記憶の図解である。
【図４】本稿に提示される技法に基づく、少なくとも一つの記憶装置上の記憶セットを有するデータセットを記憶する第一の例示的な方法を示すフローチャートである。
【図５】本稿に提示される技法に基づく、少なくとも一つの記憶装置上の記憶セットを有するデータセットを記憶する第二の例示的な方法を示すフローチャートである。
【図６】本稿に提示される技法に基づく、少なくとも一つの記憶装置上の記憶セットを有するデータセットを記憶するよう構成されたプロセッサ実行可能命令を有する例示的なコンピュータ可読記憶媒体の図解である。
【図７】データセットの検証子を計算するためのさまざまな技法を表わす例示的なシナリオの図解である。
【図８】記憶装置の不揮発性媒体上に記憶されたジャーナルの揮発性メモリ表現の使用を表わす例示的なシナリオの図解である。
【図９】記憶装置上に記憶されるジャーナルと該ジャーナルの揮発性メモリ表現との間の、記憶装置の書き込みバッファとの対話を表わす第一の例示的なシナリオの図解である。
【図１０】記憶装置上に記憶されるジャーナルと該ジャーナルの揮発性メモリ表現との間の、記憶装置の書き込みバッファとの対話を表わす第二の例示的なシナリオの図解である。
【図１１】本稿に記載される仕組みの一つまたは複数が実装されうる例示的なコンピューティング環境を示す図である。
【発明を実施するための形態】
【００１２】
特許請求される主題についてここで図面を参照して述べる。図面を通じて、同様の要素を指すために同様の参照符号が使われる。以下の記述では、説明の目的で、特許請求される主題の十全な理解を与えるために、数多くの個別的詳細が記述される。しかしながら、特許請求される主題がそうした個別的詳細なしでも実施されうることは明白であろう。他方、特許請求される主題の記述を容易にするために、構造および装置がブロック図の形で示される。
【００１３】
〈Ａ．序〉
コンピューティングの分野において、多くのシナリオは、一連のデータセットを有する記憶セット（storage  set）の、一つまたは複数の記憶装置のセット上への記憶に関わる。たとえば、ユーザーは、一組のハードディスクドライブを横断してアーカイブを生成したいことがあり、該アーカイブ内に一つまたは複数のデータセット（たとえばバイト、語、ブロックまたはデータ、ファイルもしくはレコードのシーケンス）を記憶することがありうる。いくつかのシナリオでは、記憶装置はデータの記憶のために全体的に割り当てられていてもよい。たとえば、二テラバイトのハードディスクドライブは、二テラバイトの記憶セットを与えるよう構成されていてもよい。他のシナリオでは、記憶セットは、データへのアクセスしやすさおよび／または復元を増進する仕方で記憶装置上に冗長に記憶されてもよい。たとえば、一方のコピーが破損した場合にバックアップを提供するために、一テラバイトのデータセットが二つの一テラバイト・ハードディスクドライブ上に同一の形で記憶されてもよい。記憶セットを記憶するために、複数の記憶装置が、さまざまな仕方で協働するよう構成されていてもよい。
【００１４】
多くのそのような記憶方式および特徴が、安価なディスクの冗長アレイ（RAID）の諸変形において含まれる。第二の例として、RAID  0記憶方式では、二つ以上のハードディスクドライブの記憶スペース全体がデータの記憶に割り当てられてもよい。そのため、第一のハードディスクドライブは、記憶セットの一部に記憶されるデータへのアクセスを提供してもよく、一方、第二のハードディスクドライブは、記憶セットの別の部分に記憶されるデータへの並列アクセスを提供してもよく、事実上、データセットへのアクセスのレートを二倍にする（そして可能性としては、他のハードディスクドライブ上に記憶される記憶セットの諸部分についてさらなる倍加を含む）。第二の例として、RAID  1記憶方式では、第一のハードディスクドライブは記憶セットを記憶するために全体的に割り当てられていてもよく、ミラーとして機能する追加的な諸ディスクドライブは記憶セットの同一のコピーを記憶してもよい。パフォーマンス改善は、異なるハードディスクドライブによって与えられる記憶セットへの同時並行アクセスを通じて達成されてもよい。さらに、記憶セットの完全なコピーが任意のハードディスクドライブ上でアクセスされてもよく、（たとえば破損、無反応、不在または損傷のために）障害を起こした任意のハードディスクドライブは、そこに含まれるデータの可用性を危険にさらすことなく、置き換えられる。しかしながら、RAID  1方式は記憶セットの容量を有意に減らしてしまう（たとえば、ハードディスクドライブの追加が記憶セットの容量を増さない）。さらなるRAID変形は、記憶セットの容量を最大化しつつ、RAID  0とRAID  1アレイのアクセスしやすさ、パフォーマンスおよび故障回復属性のバランスを取りうる。たとえば、特定のサイズのハードディスクドライブのセットを有するRAID  4アレイでは、一つを除いた全部のハードディスクドライブの全容量が記憶スペースを提供してもよく、取っておかれるハードディスクドライブは、他のハードディスクドライブ上に記憶されたデータセットそれぞれについてのパリティ情報（たとえば排他的OR（XOR）計算）を記憶しうる。この構成は、記憶スペースを最大にし（たとえば、四つの一テラバイト・ハードディスクドライブを有するRAID  4アレイは三テラバイトの記憶スペースを提供する）、その一方で、一ドライブ障害に耐える。たとえば、ハードディスクドライブのどれか一つが完全に故障したとしても、故障したドライブは代わりのハードディスクドライブで置換されることができ、故障したハードディスクドライブ上のデータは残りのハードディスクドライブ上に記憶されているデータを使って再構成されうる。たとえば、障害パリティ・ハードディスクドライブは、単に諸ハードディスクドライブ上に記憶されているそれぞれのデータセットについてのXOR値を計算し直すことによって再構成されうる。他のハードディスクドライブの障害を起こしたものに記憶されていたデータは、利用可能なデータセットおよびXORパリティ値の使用を通じて再構成されうる。
【００１５】
しかしながら、一つまたは複数の記憶装置上のさまざまなデータセットを有する記憶セットの記憶に関わるシナリオ内では、記憶セットのパフォーマンスおよび／または信頼性に影響するさまざまな不十分および問題が生じうる。図１および図２は、本稿に提示される技法によって対処されうるそのような二つの問題の例を描いている。
【００１６】
図１の例示的なシナリオ１００では、一連のデータセット１０４（たとえば、当該記憶セット１０２のさまざまなバイト、語、データ・ブロック、ファイルまたはレコード）を含む記憶セット１０２が記憶装置１０６（たとえばハードディスクドライブ）上に記憶されうる。記憶セット１０２を生成するまたは記憶セット１０２にアクセスするプロセスは、さまざまなデータセット１０４に関わる読み出しおよび／または書き込み要求のセットを生成してもよく、記憶装置１０６によって受領され、充足されてもよい。たとえば、ハードディスクドライブは、回転する物理的媒体上に懸下される読み書きヘッド１０８を有していてもよい。読み書きヘッド１０８は、該読み書きヘッド１０８の下で回転させられる物理的な媒体の任意のセクタのもとに記憶されているデータ（たとえば動径方向の線のデータ）を読むことができる。よって、記憶セット１０２中の第一の位置１１０に記憶されるべき第一のデータセット１０４が受領されるとき、ハードディスクドライブは、記憶セット１０２中の位置１１０に合致する物理的な位置が読み書きヘッド１０８の下に回転させられるまで、物理的な媒体を回転させてもよく、次いで、物理的な媒体にデータセット１０４を書き込んでもよい。しかしながら、そのようなハードディスクドライブのパフォーマンスはしばしば、物理的な媒体を適切な位置まで回転させる間の遅延によって制限される。この遅延は、シーケンシャルなアクセスを通じて緩和されうる。たとえば、物理的な媒体上の物理的な位置のシーケンスを含む三つのデータセット１０４が逐次書き込まれてもよく、それによりそれらの位置を読み書きヘッド１０８の下に正しく位置させることにおける回転遅延の数を３から１に減少させる。回転遅延はしばしばハードディスクドライブのスループットにおいて速度を制限する要因なので、シーケンシャルなアクセスは記憶装置１０６のスループットを著しく改善しうる。さらに、各データセット１０４について、検証子１１２（各四バイト・データセット１０４について計算されるパリティ・バイトとして図１の例示的なシナリオ１００において表現されている）が計算され、データセット１０４とともに記憶され、データセット１０４の完全性を検証するために使用されうる。図１の例示的なシナリオ１００は、セクタ中のデータセット１０４に検証子をアペンドし、それによりデータセット１０４と検証子１１２が一つの回転シークおよび書き込み要求を実行することによって記憶されうるようにすることによる効率改善を提示している。
【００１７】
図１は、記憶セット１０２のデータセットの、記憶装置１０６への記憶を表わす例示的なシナリオ１１０を示している。この例示的なシナリオ１００において、四つのデータセット１０４のシーケンスが記憶装置１０６によって受領され、処理される。第一の時点１１４では、第一のデータセット１０４が記憶セット１０２中の第一の位置１１０における記憶のために受領され、記憶装置１０６は、読み書きヘッド１０８を物理的な媒体上の対応する位置の上に位置させるために第一の回転シークを実行し、第一のデータセット１０４およびその検証子１１２を物理的な媒体に書き込む。第二の時点１１６では、第二のデータセット１０４が記憶セット１０２中の第一の位置１１０における記憶のために受領され、記憶装置１０６は、読み書きヘッド１０８を物理的な媒体上の対応する位置の上に位置させるために第二の回転シークを実行し、第二のデータセット１０４およびその検証子１１２を物理的な媒体に書き込む。第三の時点１０８および第四の時点１１０において、それぞれ第三のデータセット１０４および第四のデータセット１０４を記憶するために追加的な回転シーク動作が実行される。
【００１８】
しかしながら、図１の例示的なシナリオ１００は、記憶セット１０２へのデータセット１０４の書き込みにおける非効率のいくつかの源を描いている。第一の例として、第一のデータセット１０４および第三のデータセット１０４がシーケンス（たとえば記憶セット１０２中の相続く位置１１０に記憶されたデータセット１０２）をなし、第二のデータセット１０４および第四のデータセット１０４がシーケンスをなす。たとえば、第一のプロセスが記憶セット１０２への書き込みの第一のシーケンスを要求し、その間、第二のプロセスが並行して記憶セット１０２の異なる位置への書き込みの第二のシーケンスを要求してもよい。記憶装置１０６はインターリーブされた仕方でそれらの要求を受領してもよい。しかしながら、この例示的なシナリオ１００では、記憶装置１０６はデータセット１０４を受領のシーケンシャル順に物理的な媒体に書き込み、よってデータセット１０４を書き込むために四回の回転シークを実行する。この書き込みプロセスは、書き込み要求が受領される順序を厳密に保存しうるものの、第一のデータセット１０４および第三のデータ１０２を記憶するための第一の回転シークおよび第二のデータセット１０４および第四のデータセット１０４を記憶するための第二の回転シークを実行することによってスループットの改善が達成されたところである。
【００１９】
図１に描かれる非効率の第二の源は、その後の書き込みによってすぐに上書きされる記憶セット１０２へのデータを不要に書き込むことから生じる。第一の例として、第二のデータセット１０４および第四のデータセット１０４はいずれも記憶セット１０２中の同じ位置１１０に書き込まれる。上書きの認識があれば、最も後の書き込み２０２のみを書き込むことによって記憶装置１０６のパフォーマンスを改善する機会を提供しうる（特に、上書きが先の書き込みと同じデータを書き込む場合）。しかしながら、この例示的なシナリオ１００における記憶装置はこの認識を達成せず、記憶セット１０２中の同じ位置１１０への同じデータセット１０４の二回の書き込みを不必要に実行する。第二の例として、第一の検証子１１２が、第一のデータセット１０４および第三のデータセット１０４を含むデータセット１０４の第一のセット（たとえば位置0x0044-0047）のために計算されてもよく、第二の検証子１１２が、第二のデータセット１０４および第四のデータセット１０４を含むデータセット１０４の第二のセット（たとえば位置0xA0F0-A0F3）のために計算されてもよい。それらの書き込み要求が受領されるシーケンスのため、記憶装置１０６は各検証子１１０を二回計算し、書き込む（たとえば、第一の検証子１１０の第一の計算が第一のデータセット１０４のために実行されて第一のデータセット１０４とともに記憶され、第二の検証子１１０の第一の計算が第二のデータセット１０４のために実行されて第二のデータセット１０４とともに記憶され、第一の検証子１１０の再計算が第三のデータセット１０４のために実行されて第三のデータセット１０４とともに記憶され、第二の検証子１１０の再計算が第四のデータセット１０４のために実行されて第四のデータセット１０４とともに記憶される）。これらの再計算は、第一のデータセット１０４および第三のデータセット１０４について一回、第一の検証子１１２を計算し、第二のデータセット１０４および第四のデータセット１０４について一回、第二の検証子１１２を計算することによって、回避できたかもしれない。それにより計算および書き込みの数が削減される。これらおよび他の非効率は、記憶装置１０６が、記憶セット１０２中にシーケンシャルに記憶される諸データセット１０４のための諸書き込み要求のために含まれる、計算および／または書き込みを減らす機会を同定できないことから生ずることがありうる。
【００２０】
図２は、記憶セット１０２において生じうる第二の型の問題を描く例示的なシナリオ２００の図解を示している。この例示的なシナリオ２００では、記憶装置１０６のセットが、検証子１１２のセットをもつ記憶セット１０２を記憶するために相互運用される。特に、記憶装置１０６のうちの三つが、特定の位置１１０に関連付けられた三つのデータセット１０４を記憶し、第四の記憶装置１０６がそれら三つのデータセット１０４についての検証子１１２を記憶する。たとえば、各データセット１０４は単一のビットを有していてもよく、検証子１１２は三つのビットを合わせてXORすることによって計算されてもよい。（図２の例示的なシナリオ２００は、以下の説明を簡単にするために各データセット１０４を単一のビットとして描いているが、データセット１０４がいかなるサイズであってもよいことは理解されるであろう。）何らかのデータセット１０４が書き込まれるとき、第四の記憶装置１０６に記憶されている検証子１１２が、更新されたデータセット１０４に合致するよう更新される。しかしながら、この例示的なシナリオ２００において示されるように、さまざまな記憶装置１０６への書き込みは、原子的かつ厳密に同時並行の仕方では行なわれないことがあり、異なる時刻に行なわれることがありうる。たとえば、ある記憶装置１０６に記憶されているデータセット１０４および第四の記憶装置１０６に記憶されている検証子１１２の両方を更新するよう要求が受領されることがありうるが、記憶装置１０６が、他の記憶装置１０６が書き込み動作に従事している間にアイドルでありうるならば、第一の記憶装置１０６は第二の記憶装置１０６より前にその書き込み動作を開始および／または完了することがありうる。パフォーマンス（たとえば回転スピード）および状況（たとえば、物理的な媒体の現在の回転位置からの書き込み位置の距離）における記憶装置１０４間の変動も、記憶装置１０６間のタイミング相違に寄与しうる。たとえば、第一の時点２０４において、第三の記憶装置１０６上に記憶されたデータセット１０４および第四の記憶装置１０６に記憶された対応する検証子１１２を更新するために書き込み２０２が要求されることがある。しかしながら、第三の記憶装置１０６は第一の時点２０４において書き込み２０２を開始および／または完了しうる一方、第四の記憶装置１０６は第二の時点２０６において検証子１１２への書き込み２０２を完了することがありうる。
【００２１】
図２の例示的なシナリオ２００において描かれている記憶装置１０６の不完全な同期は、記憶サービスの障害の際に非一貫性を生じうる。たとえば、第三の時点２０８において、第三の記憶装置１０６によって記憶されているデータセット１０４および第四の記憶装置１０６によって記憶されている対応する検証子１１２の両方に対してもう一つの書き込み２０２が要求されることがある。しかしながら、この書き込みプロセスの間にコンピューティング環境の障害２１０（電源障害またはハードウェアもしくはソフトウェアのクラッシュ）が発生することがありうる。記憶装置１０６および記憶アレイはしばしば、多くのそのような障害２１０に耐えるよう設計されるものの、この障害２１０は第三の記憶装置１０６が更新されたデータセット１０４の書き込みを完了した後だが第四の記憶装置１０６が更新された検証子１１２を書き込む前に起こることがありうる。記憶装置１０６が再びアクセス可能である（たとえば電力が回復した）第四の時点２１２において、第三の記憶装置１０６によって記憶されているデータセット１０４の更新と第四の記憶装置１０６が検証子１１２を更新していないこととは、非一貫性を呈する。検証子１１２はもはや対応するデータに合致しないのである。単一の記憶装置１０６の使用でも同様のシナリオは発生しうる。たとえば、単一の読み書きヘッド１０８による記憶装置１０６上に記憶されたデータセット１０４の冗長なコピーは、データセット１０４の第一のコピーと第二のコピーの更新の間に障害２１０が生じる場合には、非一貫性を呈することがありうる。
【００２２】
時に「RAID書き込みホール」として同定されるこの非一貫性は、いくつかの問題につながりうる。第一の例として、前記一つまたは複数のデータセット１０４および／または検証子１１２のどれが誤っているかを識別することが可能でないことがある。（たとえば、同様に、障害は第四の記憶装置１０６が検証子１１２を更新した後だが第三の記憶装置１０６がデータセット１０４の更新を完了する前に発生したこともありうる。）そのため、検証子１１２によって表わされるデータセット１０４すべて――書き込み２０２に関わってさえいなかった第一および第二の記憶装置１０６に記憶されているデータセット１０４さえも――の完全性を危機にさらすことになる。第二の例として、この非一貫性はすぐに発見されないことがあり、記憶セット１０２内に残ることがありうる。その後、記憶装置１０６が利用不能になったとき（たとえば第一の記憶装置１０６が完全に故障するまたは除去される場合）、第一の記憶装置１０６上のデータを再構成しようとする試みは他の記憶装置上のデータを利用しうるが、非一貫性の結果として、データの正しくない再構成につながることがありうる。したがって、アレイは単一の記憶装置１０６の障害から回復する期待される機能を提供し損なう。これらおよびその他の問題は、関係するデータセット１０４を記憶セット１０２に記憶する間の諸記憶装置１０６の相互運用における不完全な同期から生じうる。
【００２３】
〈Ｂ．提示される技法〉
本稿に提示されるのは、可能性としては図１および図２の例示的なシナリオにおいて例解されているものを含む記憶シナリオにおいて生じうる問題および／または非効率のいくらかに対処するための技法である。これらの技法によれば、記憶セット１０２を記憶する記憶装置１０６の一つまたは複数上でジャーナルが生成されうる。記憶セット１０２に書き込まれるべきデータセット１０４および検証子１１２はまずジャーナルに書き込まれてもよい。さらに、ジャーナルは、データセット１０４の書き込み順のシーケンスにおいて構成されたデータセット１０４のシーケンスとして構成されてもよい。それにより、記憶セット１０２のさまざまな（シーケンシャルでない）位置においてデータセット１０４を書き込む要求のストリームを受領する記憶装置１０６はまず、ジャーナル中にシーケンシャルにデータセット１０４を記憶してもよい。さらに、記憶セット１０２中の要求された諸位置１１０にデータをコミットするために、バッチとして書き込まれてもよいいくつかのデータセットが選択されてもよい。たとえば、ジャーナルは、記憶セット１０２に書き込まれるべきデータセット１０４をシーケンシャルに待ち行列に入れてもよく、定期的に、待ち行列の前から、同じバッチ内で書き込みされうるデータセット１０４のセットを選択してもよい。
【００２４】
図３は、記憶装置１０６の不揮発性媒体上に記憶されたジャーナル３０２の使用を通じた、記憶セット１０２へのデータセット１０４および対応する検証子１１２の記憶を描く例示的なシナリオ３３０の図解を示している。この例示的なシナリオ３００では、記憶セットの少なくとも一部を含むデータセット１０４を記憶するよう構成された記憶装置１０６上で、データセット１０４および対応する検証子１１２を、かかるデータが記憶セット１０２にコミットされる前に記憶するよう構成されたジャーナル３０２が生成される。特に、この例示的なシナリオ３００におけるジャーナル３０２は、データセット１０４、記憶セット１０２におけるデータセット１０４の位置１１０およびデータセット１０４についての検証子１１２を記憶するレコード３０４のシーケンスとして構成される。ジャーナル３０２のレコード３０４は、待ち行列の先頭（すなわち、ジャーナル３０４中の最も古いデータセット１０４）を同定する尾部ポインタ３０６および待ち行列の終端（すなわち、ジャーナル３０４中に書き込まれる最も遅いデータセット１０４）を同定する頭部ポインタ３０８によって待ち行列として構成される。第一の時点３１０において、ジャーナル３０２は初期には空である（すなわち、頭部ポインタ３０８および尾部ポインタ３０６が同じレコード３０４をポイントする）。記憶セット１０２に記憶されるべき三つのデータセット１０４のシーケンスを受領すると、記憶装置１０６はそれら三つのデータセット１０４を順にジャーナル３０２に記録してもよい（たとえば、頭部ポインタ３０８を動かしてレコード３０４を割り当て、次いでそれらのレコード３０４にデータセット１０４を書き込むことによって）。第二の時点３１２では、三つの追加的なデータセット１０４を書き込む要求のシーケンスが受領されてもよく、頭部ポインタ３０８をインクリメントしてジャーナル３０２のレコード３０４にデータセット１０４を書き込むことによって、ジャーナル３０２に記憶されてもよい。さらに、第三の時点３１４において、記憶装置１０６は各データセット１０４についての検証子１１２を計算し、各検証子１１２をジャーナル３０２に書き込んでもよい（可能性としては、ジャーナル３０２および／または記憶セット１０２に記憶されている他のデータセット１０４を使って）。第四の時点３１６では、記憶装置１０６は、たとえばジャーナル３９２からコミットされるべきデータセット１０４のバッチ３１８を選択してそれらのデータセット１０４および対応する検証子１１２を記憶セット１０２に書き込むことによって、データセット１０４のバッチ３１８を記憶セット１０２にコミットしてもよい。次いで、記憶セット１０２にコミットされたデータセット１０４についてのレコード３０４がジャーナル３０２から除去されてもよい（たとえば、尾部ポインタ３０６をそれらのレコード３０２を過ぎるところまで進めることによって）。このようにして、本稿に提示される技法によれば、データセット１０４は記憶セット１０２にコミットされてもよい。
【００２５】
本稿に提示される技法のいくつかの例示的な使用の図３の描出は、それにより達成されうるいくつかの潜在的な利点を示している。第一の例として、データセットのバッチ化は、記憶セット１０２中の位置１１０の連続的なシーケンスに書き込まれうる二つ以上のデータセット１０４を融合しうる。これは、たとえ該シーケンスをなすデータセット１０４についての書き込み要求が記憶セット１０２の他の位置１１０に記憶されるべき他のデータセット１０４とインターリーブされていたとしても；そのようなデータセット１０４が厳密なシーケンシャル順に受領されなくても；および／またはデータセット１０４を書き込む要求の間に短い遅延があったとしても、できる。第二の例として、データセット１０４のバッチ化は、短い時間フレームにおいて受領される同じデータの上書きを減らすことによって、記憶装置１０６の効率を改善しうる。たとえば、特定のデータセット１０４を上書きする複数の要求がバッチにグループ化されてもよく、記憶セット１０２内の位置１１０へのデータセット１０４の単一の書き込みを通じて充足されてもよい。たとえば、図３の例示的なシナリオ３００におけるバッチ３１８の選択は、尾部ポインタに近いがジャーナル３０２に記憶されているその後の書き込み２０２によって上書きされるデータセット１０４を省略してもよい。第三の例として、同じ検証子１１２によって表わされるデータセット１０４を書き込む別個の諸要求は、同じバッチにグループ化されれば、検証子１１２のいくつかの別個の更新ではなく、検証子１１２の単一の計算および書き込みにつながりうる。第四の例として、バッチ３１８を保守的に選択する（たとえばジャーナル３０２を積極的に空にするのではなく、その中のいくつかのレコード３０４を残す）ことによって、本技法は、将来の効率性利得のための機会を同定および達成しうる。たとえば、位置0x03C0に書き込まれるべきデータセット１０４はあたかも最近受領されたかのように、バッチ３１８のために選択されず、追加的なデータセット１０４を書き込む要求がすぐあとに続いてもよい。こうして、位置0x03C1にデータセット１０４を書き込むその後の要求が受領され、ジャーナル３０２に記憶されるとき、両方のデータセット１０４が将来のバッチ３１８のために選択されてもよい。それにより、両方のデータセット１０４が、二つの別個の書き込み２２０を発するのではなく、シーケンスをなして一緒にコミットされる。
【００２６】
図３の例示的なシナリオ３００に示される本願で開示される技法の第二の潜在的な利点は、RAID書き込みホールの発生および帰結の低減である。データセット１０４を更新する要求をまず記憶装置１０６の不揮発性媒体上のジャーナルにコミットして、次いでデータセット１０４および検証子１１２を記憶セット１０２に移すことは、両者の間の非一貫性を回避しうる。たとえば、データセット１０４および／または検証子１１２がジャーナルに書き込まれつつある間に障害２１０が発生する場合、回復プロセスはジャーナルの書き込みが不完全であったことを検出でき、ジャーナルの不完全な部分を破棄しうる。この破棄は書き込み２０２の喪失につながりうるが、そのような書き込み２０２はまだ記憶セット１０２にコミットされておらず、そのような書き込み２０２を要求するプロセスに対して確証されていなかったので、安全に喪失されることができる。さらに、記憶セット１０２の一貫性は、RAID書き込みホールに関わる不完全な書き込みによって損なわれない。さらに、ジャーナルの内容が記憶セット１０２にコミットされつつある間に障害が起こる場合、記憶装置１０６は、ジャーナルに記憶されているデータセット１０４を記憶セット１０２に再コミットすることによって、障害２１０から回復しうる。このようにして、記憶セット１０２への書き込み２０２は、改善されたパフォーマンスおよび／またはRAID書き込みホールのような問題によって引き起こされる非一貫性の低減した発生をもって充足されうる。これらおよびその他の利点は、本稿に提示される技法に基づく、記憶セット１０２へのデータセット１０４の記憶を通じて達成されうる。
【００２７】
〈Ｃ．例示的実施形態〉
図４は、少なくとも一つの記憶装置１０６によって提供される記憶セット１０２においてデータセット１０４を記憶する第一の例示的な方法４００として描かれている、これらの技法の第一の例示的な実施形態の図解を示している。例示的な方法４００は、たとえば装置のメモリ・コンポーネント（たとえば、メモリ回路、ハードディスクドライブの円盤、半導体メモリ・コンポーネントまたは磁気もしくは光ディスク）に記憶された命令のセットであって、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実行させるものとして実装されてもよい。例示的な方法４００は、４０２において開始され、プロセッサ上で命令を実行する（４０４）ことに関わる。具体的には、前記命令は、少なくとも一つの記憶装置１０６上で、それぞれ検証子１１２と関連付けられたデータセット１０４を記憶するよう構成されたジャーナル３０２を生成する（４０６）よう構成されている。前記命令はまた、記憶セット１０２中の位置１１０にデータセット１０４を記憶する要求を受領すると、該データセット１０４をジャーナル３０２に記憶する（４０８）よう構成されている。前記命令はまた、記憶セット１０２にコミットされるべき、ジャーナル３０２に記憶された諸データセット１０４のバッチ３１８を選択する（４１０）よう構成されている。前記命令は、記憶セット１０２へのこのコミットを、バッチ３１８のそれぞれのデータセット１０４について（４１２）、検証子１１２を計算し（４１４）；検証子１１２をジャーナル３０２に記憶し（４１６）；データセット１０４およびデータセット１０４の検証子１１２を記憶セット１０２に記憶する（４１８）ことによって達成しうる。前記命令はまた、データセット１０４およびデータセット１０４の検証子１１２を記憶セット１０２に記憶した（４１８）のち、ジャーナル３０２から前記データセット１０４を除去するよう構成される。このようにして、前記命令は、本稿に提示される技法に基づく、記憶セット１０２へのデータセット１０４の記憶を達成し、よって例示的な方法４００は４２０において終了する。
【００２８】
図５は、少なくとも一つの記憶装置１０６によって提供される記憶セット１０２においてデータセット１０４を記憶する第二の例示的な方法５００として描かれている、これらの技法の第二の例示的な実施形態の図解を示している。例示的な方法５００は、たとえば装置のメモリ・コンポーネント（たとえば、メモリ回路、ハードディスクドライブの円盤、半導体メモリ・コンポーネントまたは磁気もしくは光ディスク）に記憶された命令のセットであって、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実行させるものとして実装されてもよい。例示的な方法５００は、５０２において開始され、装置に命令を送る（５０４）ことに関わる。具体的には、前記命令は、記憶装置１０６上で、レコード３０４のシーケンス、頭部ポインタ３０８および尾部ポインタ３０６を有するジャーナル３０２を生成する（５０６）よう構成される。前記命令はまた、記憶セット１０２中の位置１１０に記憶されるべきデータセット１０４を受領する（５０８）と、ジャーナル３０２の頭部ポインタ３０８を新たなレコード３０４を過ぎるところまで進め（５１０）、新たなレコード３０４にデータセット１０４を記憶する（５１２）よう構成されている。前記命令はまた、記憶セット１０２へのコミットのために、ジャーナル３０２の尾部ポインタ３０６の近くの少なくとも一つの選択されたデータセット１０４を選択する（５１４）よう構成されている。それぞれの選択されたデータセット１０４について（５１６）、前記命令は、データセット１０４についての検証子１１２を計算し（５１８）；選択されたデータセット１０４の検証子１１２をジャーナル３０２に記憶し（５２０）；選択されたデータセット１０４およびデータセット１０４の検証子１１２を記憶セット１０２にコミットする（５２２）よう構成される。前記命令はまた、ジャーナル３０２の尾部ポインタ３０６を、前記少なくとも一つの選択されたデータセット１０４を含むレコード３０４を過ぎたところまで進める（５２４）よう構成される。このようにして、前記命令は、本稿に提示される技法に基づく、記憶セット１０２へのデータセット１０４の記憶を達成し、よって例示的な方法５００は５２６において終了する。
【００２９】
図６は、本稿に提示される技法を適用するよう構成されたプロセッサ実行可能命令６０２を有する例示的なコンピュータ可読媒体６００として示される、これらの技法の第三の例示的な実施形態を提示している。そのようなコンピュータ可読媒体はたとえば、メモリ半導体（たとえば、静的ランダム・アクセス・メモリ（SRAM）、動的ランダム・アクセス・メモリ（DRAM）および／または同期動的ランダム・アクセス・メモリ（SDRAM）技術を利用した半導体）、ハードディスクドライブの円盤、フラッシュメモリ・デバイスまたは磁気もしくは光ディスク（たとえばCD-R、DVD-Rまたはフロッピー(登録商標)ディスク）のような有体なデバイスに関わるコンピュータ可読記憶媒体を含んでいてもよく、コンピュータのような装置６１０のプロセッサ６１２によって実行されたときに該装置６１０に本稿に提示される技法を実装させるコンピュータ可読命令のセットをエンコードしていてもよい。そのようなコンピュータ可読媒体は、さまざまな物理現象を通じて伝搬させられうる信号（たとえば電磁信号、音波信号または光信号）のようなさまざまな型の通信媒体をも（コンピュータ可読記憶媒体とは異なる技術のクラスとして）含みうる。そのような伝搬は、さまざまな有線シナリオ（たとえばイーサネット〔登録商標〕または光ファイバーケーブルを介する）および／または無線シナリオ（たとえばWiFiのような無線ローカル・エリア・ネットワーク（WLAN）、ブルートゥースのようなパーソナル・エリア・ネットワーク（PAN）またはセルラーもしくは電波ネットワーク）においてでありうる。そのような媒体は、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実装させるコンピュータ可読命令のセットをエンコードしていてもよい。あるそのような実施形態では、プロセッサ実行可能命令６０２は、図４の第一の例示的な方法４００または図５の第二の例示的な方法５００のような少なくとも一つの記憶装置１０６によって提供される記憶セット（storage  set）１０２にデータセット１０４を記憶する方法を実行するよう構成されていてもよい。本稿に提示される技法に基づいて動作するよう構成される、多くのそのようなコンピュータ可読媒体が当業者によって考案されうる。
【００３０】
〈Ｄ．変形〉
本稿で論じられる技法は、多くの側面における変形をもって考案されてもよい。いくつかの変形は、追加的な利点を提示し、および／またはこれらおよび他の技法の他の変形に関する不都合な点を軽減しうる。さらに、いくつかの変形は、組み合わせて実装されてもよく、いくつかの組み合わせは、相乗作用を通じて追加的な利点および／または軽減された不都合な点を特徴としうる。そうした変形は、さまざまな実施形態（たとえば図４の第一の例示的な方法４００および図５の第二の例示的な方法５００）に組み込まれてそのような実施形態に対して個別的および／または相乗的な利点を付与しうる。
【００３１】
〈Ｄ１．シナリオ〉
これらの技法の実施形態の間で変わりうる第一の側面は、そうした技法が利用されうるシナリオに関する。第一の変形として、これらの技法は、多くの型の記憶セット１０２およびデータセット１０４を管理するために使用されうる。それには、それぞれのアドレスに記憶されている値のセットをそれぞれ含む一つまたは複数のボリューム；それぞれファイルのセットを含むファイル・システム；それぞれレコードのセットを含むデータベース；それぞれメディア・オブジェクトのセットを含むメディア・ライブラリ；それぞれアプリケーションのセットを含むアプリケーション・セット；およびそれぞれボリュームおよび／または仮想マシンのメモリのセットを含むコンピューティング環境サーバーが含まれる。さらに、記憶セット１０２内でのデータセット１０４の識別は、種々のシナリオ間では粒度において異なりうる。たとえば、ボリュームを含む記憶セット１０２は、これらの技法を、ビット、バイト、さまざまな長さの語、さまざまな長さのデータ・ブロックまたはセクタを含むデータセット１０４をジャーナリングし、記憶セット１０２にコミットするために利用してもよい。
【００３２】
第二の変形として、これらの技法は、ハードディスクドライブ、半導体記憶デバイス、磁気もしくは光テープ記憶ドライブおよび磁気もしくは光ディスクを含むさまざまな型の揮発性および不揮発性記憶装置１０６上の記憶セット１０２およびデータセット１０４の記憶を管理するために使われてもよい。記憶セット１０２を記憶することに関わる記憶装置１０６の数も変わりうる。たとえば、これらの技法は、単一の記憶装置１０６上、小さな緊密に統合された記憶装置１０６のセット（たとえばRAIDアレイ）上または潜在的には大規模および／または潜在的には広範囲に分散していてもよい記憶装置１０６のゆるく統合されたセット（たとえば、世界の異なる領域に展開され、インターネットを通じて通信する記憶装置１０６のセット）上で記憶セット１０２の記憶を管理するために使われてもよい。ほんの一例として、これらの技法は、記憶装置１０６のさまざまな型のRAIDアレイにおいて実装される種々のRAIDレベルとともに使用するために適応されてもよい。さらに、記憶セット１０２を記憶する記憶装置１０６は、混合型であってもよく、さまざまな階層的な構成に従って編成されていてもよい（たとえば、記憶セット１０２はまず比較的高性能の一次記憶装置１０６上に記憶されてもよく、該一次記憶装置が比較的低性能のオフサイトのアーカイブ記憶装置１０６にバックアップされる）。本技法は、コスト、可用性、信頼性、および感度およびパフォーマンス要求および記憶セット１０２に適用されるセキュリティ施策および記憶装置１０６の機能を含む、記憶セット１０２および記憶装置１０６のさまざまな属性に鑑みて実装されてもよく、それに合わせて調整されていてもよい。
【００３３】
この第一の側面の第三の変形は、特に記憶セット１０２が複数の記憶装置１０６にまたがる場合の、ジャーナル（journal）３０２の記憶装置１０６との関係に関する。第一のそのような例として、ジャーナル３０２は、一つまたは複数の別個の記憶装置１０６にまたがって割り当てられた記憶セット１０２について、ある記憶装置１０６のみに記憶されてもよい。あるいはまた、ジャーナル３０２は、記憶セット１０２の一部または全部と同じ記憶装置１０６に記憶されてもよい。そのような第二の例として、複数のジャーナル３０２が諸記憶装置１０６の間で生成されてもよい。たとえば、いくつかの記憶装置１０６にまたがる記憶セット１０２について、各記憶装置１０６上でジャーナル３０２が、その記憶装置１０６上に記憶される記憶セット１０２の部分内に記憶される諸データセット１０４のために、生成されてもよい。あるいはまた、別個の諸記憶装置１０６上の諸ジャーナル３０２は記憶セット１０２内の特定の諸位置に関連付けられなくてもよい。たとえば、記憶セット１０２に書き込まれるべきデータセット１０４は、記憶セット１０２にコミットされる前は、どのジャーナルに記憶されていてもよい。この変形は、脱中央集中型のジャーナリング・プロセスを提供しうる。たとえば、データセット１０４は、最も短いI/O待ち行列をもつ記憶装置１０６のジャーナル３０２に書き込まれてもよく、あるいはまた、記憶装置１０６の地理的に分散されたセットの間で供給される記憶セット１０２については、書き込みプロセスに対して最も高いアクセス可能性を呈する記憶装置１０６（たとえば、当該プロセスに地理的に最も近いおよび／または書き込みプロセスと通信する際に最も低いレイテンシーまたは最も高い帯域幅を示す記憶装置１０６）に書き込まれてもよい。第三のそのような例として、ジャーナル３０２に対してさまざまなRAID記憶方式によって提供されるのと同様の障害耐性機能を与えるために、ジャーナル３０２は二つ以上のコピーとして同じ記憶装置１０６上に冗長に記憶されてもよく、二つ以上の記憶装置１０６上にミラー・コピーとして記憶されてもよく、あるいは二つ以上の記憶装置１０６を横断して（たとえばストライピングにより）分散されてもよい。
【００３４】
この第一の側面の第四の変形は、それぞれのデータセット１０４の完全性を検証するために使われる検証子１１２の型に関する。いくつかのシナリオでは、データセット１０４のXORとして計算されるパリティ・ビットまたはデータセット１０４の和もしくはハッシュコードのような比較的単純な検証子１１２が使用されもよい。単純な検証子１１２は、比較的低価値の記憶セット１０２、比較的低パワーの記憶装置１０６（たとえば比較的遅いハードウェア、限られた容量のメモリおよび限られたバッテリー寿命をもつポータブル装置上の記憶装置）および／またはパフォーマンスがきわめて重要でありより高速に計算可能な検証子１１２が有利でありうるような記憶セット１０２に好適でありうる。他のシナリオでは、追加的なデータ安全性特徴を提供しうる、比較的複雑な検証子１１２が使用されてもよい。たとえば、データセット１０４が正確であるかどうかを判別するのみならずデータセット１０４および／または検証子１１２の一つへの変化によって非一貫性が引き起こされたかどうかをも判別するハミング符号のような誤り訂正型の検証子１１２が使用されてもよい。さらに、記憶セット１０２におけるデータセット１０４の異なるセットまたは型のために、異なる型の検証子１１２が利用されてもよい（たとえば、より貴重なデータについてはより複雑だが堅牢な検証子１１２が利用されてもよい）。当業者は、これらおよびその他の型の変形および詳細をもつ多くのシナリオにおいて、本稿に提示される技法を実装しうる。
【００３５】
〈Ｄ２．要素〉
実施形態の間で変わりうる第二の側面は、そうした技法の要素の変形に関わる。第一の変形としては、ジャーナル３０２を生成する（４０６）際に多くの技法が使用されうる。たとえば、ジャーナル３０２はアレイ、リンクされたリスト、テーブル、データベース、スタック、待ち行列、ヒープまたは二分木のような多くの型のデータ構造を含みうる。種々の実装はさまざまな利点および不都合な点を呈しうる（たとえば、パフォーマンス、更新の容易さ、スペース効率、コンピューティング経済および記憶装置１０６および／または記憶セット１０２の特性との適合性）。記憶セット１０２を記憶する異なる記憶装置１０６上で、および／または異なる型のデータセット１０４について、異なる型のジャーナル３０２が実装されてもよい。たとえば、頭部ポインタ３０８および尾部ポインタ３０６を含むアレイとして構成されたジャーナル３０２は、ジャーナル３０２の任意のレコード３０４への迅速なインデックス（たとえばO(1)のアクセス時間）、頭部ポインタ３０８および尾部ポインタ３０６の操作を通じたレコード３０４の効率的な割り当ておよび再利用ならびにジャーナル３０２におけるデータセット１０４の効率的な記憶（たとえば単に、ジャーナル３０２をなすレコード３０４のシーケンスに新たなデータセット１０４をアペンドすることによる）という利点を提供しうる。
【００３６】
この第二の側面の第二の変形として、記憶セット１０２にコミットされるべきバッチ３１８の選択４１０は、多くの仕方で実行されうる。第一の例として、選択４１０は、多くの型のイベントによって開始されてもよい。たとえば、装置６１０、記憶装置１０６またはこれらの技法を実装する他の型の装置が、多くの型のコミット・イベントの検出に際してバッチ３１８の選択４１０を開始してもよい。（例示的なコミット・イベント・セットをなす）そのようなコミット・イベントのいくつかの例は、ジャーナル３０２の容量に関わるジャーナル容量イベント（たとえばジャーナル３０２がいっぱいになる）；ジャーナル３０２に記憶されているデータセット１０４の継続時間に関わる継続時間イベント（たとえば、１分前より前にジャーナル３０２に記憶されたデータセット１０４のような、ある年齢より古いデータセット１０４）；ジャーナル３０２内の少なくとも一つのデータセット１０４を記憶セット１０２にコミットする要求に関わるコミット要求イベント（たとえば、データセット１０４の書き込み２０２を要求したプロセスが記憶セット１０２への該データセット１０４のコミットを要求しうる）；および記憶セット１０２の少なくとも一つの記憶装置１０６の作業負荷に関わる記憶装置作業負荷イベント（たとえば、記憶装置１０６は、入出力作業のアイドルな瞬間を検出してもよく、該アイドルな瞬間を使っていくつかのデータセット１０４をジャーナル３０２からフラッシュしてもよい）を含みうる。他の多くの型のイベントが、データセット１０４を記憶セット１０２にコミットするプロセスの開始を促しうる。
【００３７】
この第二の側面のこの第二の変形の第二の例として、記憶セット１０２にコミットされるべきバッチ３１８の選択は、多くの仕方で実行されうる。たとえば、記憶セット１０２への第一のデータセット１０４のコミットを、その後の書き込み２０２が該第一のデータセット１０４の上書きを指定するおよび／またはシーケンシャルに第一のデータセット１０４に後続しよって記憶セット１０２に一緒に書き込みされうる追加的なデータセット１０４を提供する（図３の例示的なシナリオ３００において第四の時点３１６において描かれているように）場合に備えて、書き込み要求の受領後、短時間遅らせることが有利であることがある。しかしながら、シーケンシャルに後続する第二のデータセット１０４をすぐ受領する低下した確率よりもデータセット１０４をジャーナル３０２のレコード３０４として記憶することに関わるコストおよび複雑さのほうが重みがあるには、データセット１０４のコミットを長期間遅らせることが不都合なことがある。さらに、記憶セット１０２へのコミットの効率を改善するためにバッチ３１８をなす諸データセット１０４を選択することが有利であることがある。第一のそのような例として、ジャーナル３０２に記憶された第一のデータセット１０４が記憶セット１０２内の第一の位置１１０に記憶されるべきバッチ３１８に含めるために選択される場合、ある実施形態は、やはりジャーナル３０２内に記憶されていて、記憶セット１０２内の第一の位置１１０に近い第二の位置１１０に記憶されるべき第二のデータセット１０４（たとえば、記憶装置１０６の物理的な媒体上で連続しているまたは少なくとも物理的に近くにあり、同じバッチ３１８において一緒に書き込まれるのが効率的でありうるデータセット１０４）も前記バッチ３１８に含めるために選択してもよい。第二のそのような例として、これらの技法のある実施形態は、バッチ３１８から、ジャーナル３０２に記憶されており、記憶セット１０２内のある位置１１０に記憶されるべき第一のデータセット１０４を、該実施形態が、ジャーナル３０２が該第一のデータセット１０４より新しく記憶セット１０２における同じ位置１１０に記憶されるべき第二のデータセット１０４（すなわちその後の上書き）を含んでいることを判別する場合には、省いてもよい。データセット１０４をバッチ３１８に含めるのではなく、この実施形態は、単に、ジャーナル３０２から古いほうのデータセット１０４を除去しうる。
【００３８】
この第二の側面の第三の変形として、検証子１１２の計算が多くの仕方で行なわれうる。上記第一の側面の記載された変形として、多くの型の検証子１１２がそのようなシナリオにおいて利用されうるが、さらに、検証子１１２は利用可能なデータからさまざまな仕方で計算されうる。第一の例として、検証子１１２は、それにより表わされる現在データセット１０４に基づいて完全に再計算されてもよい。しかしながら、第二の例としては、検証子１１２がいくつかのデータセット１０４を表わし、そのうちの部分集合のデータセット１０４が変化する場合には、検証子１１２から古くなったデータセット１０４を除去し、検証子１１２に更新されたデータセット１０４を含めることが可能であることがあり、しばしば、現在データセット１０４から検証子１１２を再計算するより効率的であることがある。再計算は、記憶セット１０２からデータセット１０４の残りを取得することを含みうる。
【００３９】
図７は、検証子１１２を計算する種々の仕方を表わす例示的なシナリオ７００の例示を提示している。第一の時点７０２において、データセット１０４および対応する検証子１１２のためのスペースが記憶セット１０２において割り当てられている。しかしながら、データセット１０４のどの部分も検証子１１２もまだ記憶セット１０２に書き込まれてはいない。第二の時点７０４では、データセット１０４の一部が受領されており、データセット１０４を記憶セット１０２にコミットする要求が開始されている。検証子１１２を計算するために、これらの技法のある実施形態は、データセット１０４をなす残りのデータがジャーナル３０２にも記憶セット１０２にも存在しないことを識別しうる。よって、本実施形態は、データセット１０４の提供された部分を使って、検証子１１２を計算してもよく、データセット１０４の残りについてデフォルト値（たとえばゼロ）を推定および使用してもよい。こうして、第二の時点７０４では、検証子１１２は、データセット１０４の存在する部分のみを使って計算される。第三の時点７０６では、検証子１１２は、データセット１０４についての現在データを使って計算される。たとえば、データセット１０４をフルに指定する新しい更新されたデータが提供されてもよく（たとえば、フル・データセット１０４をなす一連の書き込み２０２がジャーナル３０２内に存在していてもよく、あるいはジャーナル３０２に存在しないデータセット１０４の部分が記憶セット１０２から取得されてもよい）、検証子１１２は、データセット１０４をなす現在データを使って（たとえば現在データ全部のXORとして）完全に再計算されてもよい。しかしながら、第四の時点７０８において、検証子１１２は、データセット１０４への変化に鑑みて、もとの検証子１１２ならびにデータセット１０４のもとのバージョンおよび新たなバージョンのみを使って再計算される。たとえば、新たな検証子１１２は、もとの検証子１１２をデータセット１０４のもとのバージョンとXORし、それによりもとの検証子１１２からデータセット１０４のその部分の加算を取り消し、次いでこの値をデータセット１０４の新たなバージョンとXORすることによって計算されてもよい。この再計算は、ジャーナル３０２に完全には記憶されていないデータセット１０４についてより効率的でありうる。たとえば、この再計算は、ジャーナル３０２に記憶されていないデータセット１０４の部分を記憶セット１０２から読むことを回避しうる。さらに、こうした再計算技法の間の選択は、データセット１０４のこの部分を記憶セット１０２から取り出すことの比較的なコストに基づいてなされてもよい（たとえば、大きなデータセット１０４を表わす検証子１１２については、データセット１０４の小さな部分を除去してその更新を含め、データセット１０４の大きな部分の更新についての現在データから検証１１２を再計算することがより効率的でありうる）。
【００４０】
この第二の側面の第四の変形として、記憶セット１０２（たとえば電力障害またはソフトウェア・クラッシュ）および／または一つまたは複数の記憶装置１０６（たとえば記憶装置１０６との通信の中断、記憶装置１０６のハードウェア、ファームウェアもしくはドライバの障害または記憶装置１０６の除去または記憶装置１０６への損傷およびそれに続く通信の再確立または記憶装置１０７の置換）の障害２１０の場合、これらの技法のある実施形態は、障害２１０から回復するためにジャーナル３０２を多くの仕方で利用しうる。この第二の側面のこの第四の変形の第一の例として、これらの技法のある実施形態は、単に、ジャーナル３０２を概観して、ジャーナル３０２中の不完全なまたは一貫しないレコード３０４（たとえば障害２１０の時点において不完全に書き込まれていたレコード）を破棄し、次いでジャーナル３０２から記憶セット１０２へのデータセット１０４のコミットを再開してもよい。このプロセスにおいて、記憶セット１０２に不完全に書き込まれていたかもしれないデータセット１０４があったとしても、記憶セット１０２への該データセット１０４の不完全な書き込みを検出することさえなしに、復元プロセスの間に正しく再書き込みされうる。
【００４１】
この第二の側面のこの第四の変形の第二の例として、障害２１０からの復元は、段階的な仕方で実行されてもよい。たとえば、記憶セット１０２へのアクセスが有効かつ一貫したデータを与えることをも保証しながら、できるだけ迅速に障害２１０から回復することが有利であることがある（たとえば記憶セット１０２を利用するサービスの休止時間を短縮するために）。よって、復元の第一段階の間は、これらの技法のある実施形態は、記憶セット１０２へのアクセスがジャーナル３０２から充足されるべきかまたは記憶セット１０２から充足されるべきかを決定するために、まずジャーナル３０２の内容（たとえば、データセット１０４がジャーナル３０２中に記憶されている記憶セット１０２内の位置１１０）を読んでもよい。次いで、復元は、障害２１０によって引き起こされた、不完全におよび／または非一貫的に書き込まれたデータセット１０４を正すために、記憶セット１０２へのジャーナル３０２からのデータセット１０４のコミットを再開することに関わる第二の段階に進んでもよい。こうして、本実施形態はブロックしうる。
【００４２】
復元プロセスの追加的な例示的な変形は、たとえば、記憶セット１０２の一部または全部をスキャンしてその完全性を検証すること；障害に関わった記憶装置１０６にのみ復元プロセスを適用すること（たとえば、一時的に除去された記憶装置１０６にジャーナル３０２からデータセット１０４を再書き込みするだけ）；および異なる記憶装置１０６および／または異なるデータセット１０４について異なる復元プロセスを適用すること（たとえば、第一の記憶装置１０６に記憶されている第一のジャーナル３０２に前記復元プロセスを適用し、その復元を完了したあとで、第二の記憶装置１０６に記憶されている第二のジャーナル３０２に前記復元プロセスを適用すること）に関わっていてもよい。当業者は、種々のシナリオにおける適用のために、本稿に提示される技法の要素を変形する多くのそのような仕方を考案しうる。
【００４３】
〈Ｄ３．ジャーナルの揮発性メモリ表現〉
これらの技法の実施形態の間で変わりうる第三の側面は、そのような技法を実装する装置６１０の揮発性メモリにおける、ジャーナル３０２の揮発性メモリ表現の生成に関わる。たとえば、記憶装置１０６の不揮発性媒体上で生成されたジャーナル３０２に加えて、これらの技法のある実施形態は、やはりジャーナル３０２に記憶されているデータセット１０４を記憶する、ジャーナル３０２と同期を保たれる揮発性メモリ表現を生成してもよい。ジャーナル３０２への揮発性メモリ表現の生成および維持は複雑さを追加し、追加的な計算資源を消費することがありうるものの、揮発性メモリ表現はこれらの技法の諸実施形態において、多くの潜在的な用途および利点を提供する。第一の例示的な利点として、揮発性メモリ表現は、ジャーナル３０２への書き込みバッファのはたらきをしうる。たとえば、個々のデータセット１０４をジャーナル３０２に書き込む代わりに、ある実施形態は、最初、データセット１０４を揮発性メモリ表現に記憶してもよく、ジャーナル３０２にデータセット１０４のブロックをコミットしてもよい。それにより、ジャーナル３０２への書き込み２０２のバッチ化によるジャーナル３０２へのデータセット１０４のシーケンシャル書き込み２０２の効率性利得が拡張される。第二の例示的な利点として、揮発性メモリ表現は最近書き込まれたデータセット１０４の読み出しキャッシュのはたらきをしうる。たとえば、比較的遅い記憶装置１０６上に記憶されているジャーナル３０２から最近書き込まれたデータセット１０４を読む代わりに、ある実施形態は、揮発性メモリ表現から該データセット１０４を提供してもよい。よって、これらの技法のある実施形態は、ジャーナル３０２および揮発性メモリ表現におけるその可用性に従って、要求されたデータセット１０４を取得しようと努力しうる。たとえば、上記実施形態は、データセット１０４が揮発性メモリ内のジャーナル３０２の揮発性メモリ表現に記憶されていることを判別すると、該揮発性メモリ表現に記憶されているデータセット１０４を取得し、提示し；データセット１０４が記憶装置１０６上のジャーナル３０２に記憶されていることを判別すると、ジャーナル３０２に記憶されているデータセット１０４を取得し、提示し；それ以外の場合には、記憶装置１０６上の記憶セット１０２に記憶されているデータセット１０４を取得し、提示するのでもよい。データセット１０４はこれらの資源の二つ以上にまたがってもよい。たとえば、要求されたデータセット１０４の第一の部分はジャーナル３０２に存在し、ジャーナル３０２から取得されてもよく、一方、要求されたデータセット１０４の第二の部分は揮発性メモリ表現に存在し、該揮発性メモリ表現から取得されてもよい（この第二の部分がアクセス可能性〔アクセシビリティ〕がより低いジャーナル３０２および／または記憶セット１０４に存在するか否かに関わりなく）。第三の例示的な利点として、バッチ３１８の選択のような、ジャーナル３０２に記憶されているデータセット１０４に関する決定が、揮発性メモリ表現の内容を評価することによってより効率的に実行されうる。これはしばしば、ジャーナル３０２の内容を評価するよりも迅速なアクセスを提供する。装置６１０の高速だが揮発性のメモリにおいてデータセット１０４にアクセスできることのこれらの利点は、不揮発性記憶装置１０６上のジャーナル３０２における記憶を通じたデータセット１０４の耐久性と並行して達成されうる。
【００４４】
この第三の側面の第一の変形として、揮発性メモリ表現は、ジャーナル３０２と同様に構成されてもよく、あるいは異なる仕方で生成されてもよい。たとえば、ハードディスクドライブのような記憶装置１０６上でのシーケンシャルな書き込みを増進するようジャーナル３０２を構成することが有利であることがあるが、この利点は、比較的等価なシーケンシャル・アクセスおよびランダム・アクセスを提供するメモリ回路においては減じられることがある。よって、揮発性メモリ表現は、ハッシュテーブルまたはアデルソン・ヴェルスキー・ランディス木（Adelson-Velskii-Landis  tree）のようなB木のように、データセット１０４が記憶されるべき記憶セット１０２内の諸位置１１０に従ってインデックス付けされるなど、別の仕方で生成されてもよい。
【００４５】
この第三の側面の第二の変形として、揮発性メモリ表現は、ジャーナル３０２に記憶されている同じデータセット１０４を記憶してもよいし、あるいは異なる記憶セット１０４を記憶してもよい。第一のそのような例として、揮発性メモリ表現は、書き込みバッファの仕方で、ジャーナル３０２に一緒に書き込まれるべき新しい諸データセット１０４を一時的に蓄積してもよい。第二のそのような例として、揮発性メモリ表現の余剰容量の揮発性メモリ読み出しキャッシュとしての使用を押し進めて、揮発性メモリ表現は、ジャーナル３０２から除去されるデータセット１０４を保持してもよい。たとえば、データセット１０４が記憶セット１０２にコミットされ、ジャーナル３０２から除去され（そしておそらくは上書きさえされ）たのちに、該最近書き込まれたデータセット１０４をプロセスが要求しうる比較的高い確率のため、揮発性メモリ表現は、データセット１０４をメモリ内に保持していてもよい。（ジャーナル３０２および／または記憶セット１０２へのデータセット１０４のコミット後の）揮発性メモリ表現におけるデータセット１０４のこの保持は、揮発性メモリ表現に容量が残っている限り続けられてもよく、揮発性メモリ表現は、新たに受領された、まだコミットされていないデータセット１０４のための容量を提供するために、以前にコミットされたデータセット１０４を放逐（evict）してもよい。このシナリオにおいては、揮発性メモリ表現にとって、ジャーナル３０２および／または記憶セット１０２にコミットされたデータセットを、コミットされていないデータセット１０４から区別することが有利でありうる。たとえば、ジャーナル３０２にデータセット１０４を記憶する際、ある実施形態は、該データセット１０４をジャーナル３０２の揮発性メモリ表現に記憶して、該データセット１０４を除去不可能とマークしてもよい。ジャーナル３０２に記憶されたデータセット１０４を記憶セット１０２にコミットすると、この実施形態は、揮発性メモリ表現に記憶されているデータセット１０４を除去可能とマークしてもよい。その後、揮発性メモリ表現における容量を解放するために、本実施形態は、ジャーナル３０２の揮発性メモリ表現から、除去可能とマークされているデータセット１０４だけを、安全に除去しうる。この変形は、揮発性メモリ表現の予備の容量を読み出しキャッシュとして有利に利用しながら、ジャーナル３０２および揮発性メモリ表現の同期を維持する。
【００４６】
逆に、この第三の側面の第三の変形として、コミットされたまたはコミットされていないデータセット１０４を記憶することにおいて、揮発性メモリ表現の容量を使い尽くさずに、はいってくるデータセット１０４を記憶するために、揮発性メモリ内の揮発性メモリ表現内の十分な容量をリザーブしておくことが有利であることがある。特に、ジャーナル３０２が他のデータセット１０４をジャーナル３０２にコミットすることに関わっている間、記憶セット１０２に記憶されるべきデータセット１０４を記憶するよう構成されたバッファのために十分な容量がリザーブされてもよい。この変形はさらに、データセット１０４をジャーナル３０２から記憶セット１０２にコミットするタスクを記憶装置１０６に中断させることなく、揮発性メモリ表現を、はいってくるデータセット１０４を受け入れるための書き込みバッファとして利用する。
【００４７】
この第三の側面の第四の変形として、障害２１０の回復は、ジャーナル３０２の揮発性メモリ表現８０２の再構築に関わっていてもよい。たとえば、回復プロセスは、揮発性メモリ表現３０２を再生成するためにジャーナル３０２を読むことによって始まってもよい。このようにして再構築を開始することは、たとえば、揮発性メモリ表現８０２の読み出しキャッシュおよび／または書き込みバッファ機能を再確立し、それによりジャーナル３０２を記憶する記憶装置１０６の読み出し／書き込み作業負荷を低減し、障害２１０によって引き起こされた不完全なまたは一貫しない書き込み２０２を上書きするためにジャーナル３０２中のデータセット１０４を記憶セット１０２にコミットするタスクを容易にすることによって、有利でありうる。
【００４８】
図８は、不揮発性記憶装置１０６上で生成されたジャーナルが、装置６１０の揮発性メモリ内のジャーナル３０２の揮発性メモリ表現８０２と対にされている例示的なシナリオ８００の図解を示している。この例示的なシナリオ８００では、揮発性メモリ表現８０２は、ジャーナル３０２に記憶されているデータセット１０４の位置１１０の十六進アドレスに基づいて編成されたB木として記憶されている。第一の時点８０４において、ジャーナル３０２および揮発性メモリ表現８０２はデータセット１０４の特定のセット〔集合〕を記憶していてもよい。第二の時点８０６において、ジャーナル３０２に書き込まれるべき第二のデータセット１０４が受領されるとき、第二のデータセット１０４は揮発性メモリ表現８０２に記憶されてもよく、次いで（直接的にまたは書き込みバッファを通じて）ジャーナル３０２に書き込まれてもよい。さらに、第三の時点８０６では、ジャーナル３０２に記憶されている一つまたは複数のデータセット１０４が記憶装置１０６上に記憶されている記憶セット１０２にコミットされるとき、データセット１０４はジャーナル３０２から除去されてもよい（たとえば尾部ポインタ３０６をコミットされたデータセット１０４を含むレコード３０２を過ぎたところまで進めることによって）。だが、揮発性メモリ表現８０２の予備の容量が利用可能である場合には、これらのデータセット１０４は揮発性メモリ表現８０２内に保持されてもよく、ただし除去可能とマークされてもよい（図８の例示的なシナリオ８００において破線の枠によって示したように）。揮発性メモリ表現８０２はこのように、新たに受領されるデータセット１０４（たとえば第四の時点８１０における第四のデータセット１０４の受領）のための容量を提供してもよい。したがって、読み出し要求は、揮発性メモリ表現８０２、ジャーナル３０２および記憶セット１０２におけるデータセット１０４の可用性に従って充足されてもよい。たとえば、第五の時点８１２において、三つのデータセット１０４について三つの読み出し要求が受領されてもよい。そのうち第一のデータセット１０４は揮発性メモリ表現８０２から提供されてもよい（ジャーナル３０２からの放逐にもかかわらず揮発性メモリ表現８０２に存在）；第二のデータセット１０４はジャーナル３０２から提供されてもよい（ジャーナル３０２にコミットされたのち揮発性メモリ表現８０２からは除去されていた）；第三のデータセット１０４（揮発性メモリ表現８０２およびジャーナル３０２から放逐されていた）は記憶セット１０２から取得されて提供されてもよい。このように、図８の例示的なシナリオ８００において示されるこうした技法の実施形態は、ジャーナル３０２の揮発性メモリ表現８０２の実装を通じていくつかの利点を達成する。当業者は、本稿に提示される技法に基づき、ジャーナル３０２のそのような揮発性メモリ表現８０２のそのような使用を考案しうる。
【００４９】
〈Ｄ２．書き込みバッファとの相互運用〉
これらの技法の実施形態の間で変わりうる第四の側面は、記憶セット１０２を記憶する記憶装置１０６に書き込みバッファを含めてこれを利用することに関する。多くの場合、記憶装置１０６は有利には、たとえばフラッシュ要求が開始されるまでデータセット１０４の書き込み２０２を揮発性メモリにおいてバッチ化して、データセット１０４の全部を記憶装置１０６上に記憶されている記憶セット１０２にコミットすることによって、パフォーマンスを改善するために、書き込みバッファを利用してもよい。しかしながら、記憶装置１０６上の書き込みバッファの動作は、本稿で提示される技法のパフォーマンスを低下させることがあり、実のところいくつかの問題を引き起こすことがある。たとえば、ジャーナル３０２にデータセット１０４を記憶する要求が揮発性書き込みバッファにおいて遅延される場合、障害２１０が発生すれば、該データセット１０４が失われることがありうる。特に、書き込みバッファはしばしば透明な仕方で実装され、（フラッシュ動作が肯定的に要求され、完了したと検証されるのでない限り）オペレーティング・システムまたは諸プロセスはデータセット１０４が実際にジャーナル３０２にコミットされたかどうかを、またさらには記憶装置１０４のために書き込みバッファが存在するか否かさえも判定することが難しいことがある。よって、プロセスがデータセット１０４をジャーナル３０２に書き込むことを要求するとき、たとえその書き込みがジャーナル３０２の不揮発性記憶ではなく揮発性書き込みバッファに記憶されるとしても、記憶装置１０６はすぐにそのプロセスに対して、要求が充足されたことを示すことがある。したがって、その適用は、あたかもデータセット１０４がコミットされたかのように、正しくない動作をすることがあり、記憶装置１０６がデータセット１０４を書き込みバッファからフラッシュする前に障害２１０が発生する場合、非一貫性および予期されないデータ損失が生じることがある。同様に、ジャーナル３０２と記憶セット１０２との間での書き込みバッファの動作は、データセット１０４が持続的に記憶されたかのように、ジャーナル３０２に正しくない動作をさせることがある。たとえば、ジャーナルは、まだ記憶セット１０２にコミットされていないデータセット１０４を除去し、それにより、書き込みバッファがフラッシュされるまでに障害２１０があった場合には、不完全で一貫しないデータセット１０４を生じることがある。さらに、書き込みバッファが提案しうる利点（たとえば、バッチ化された書き込み２０２、逐次の諸書き込み２０２の融合および上書きの削減）はすでに、本稿に提示される技法の他の構成要素によってすでに提供される。よって、書き込みバッファの存在および動作は追加される複雑さ、増加する費用、潜在的なパフォーマンス劣化および予期されない結果を引き起こすが、それでいて本稿に提示される技法によってすでに達成されていない利点はほとんどまたは全く提供しないことが理解されうる。
【００５０】
これらの潜在的な不利益に鑑み、本技法のある実施形態は、書き込みバッファの存在に鑑みて調整されてもよい。この第四の側面の第一の変形として、本技法のある実施形態は、さまざまな仕方で書き込みバッファの使用および効果を回避してもよい。この第一の変形の第一の例として、データセット１０４および検証子１１２をジャーナル３０２に書き込むとき、たとえばジャーナル３０２への書き込みをライトスルー要求として発することによって、あるいは単に記憶装置１０６上の書き込みバッファを無効にすることによって、書き込みフィルタをバイパスする。この第一の変形の第二の例として、本実施形態は、ジャーナル３０２および／または記憶装置１０６に記憶されている記憶セット１０２への各書き込み２０２後にフラッシュ要求を開始することによって、書き込みバッファの効果を打ち消してもよい。フラッシュ要求を頻繁に発することは記憶装置１０６のパフォーマンスを低下させうるが、パフォーマンスの損失はさまざまな仕方で軽減されうる。たとえば、記憶セット１０２および／またはジャーナル３０２がそれぞれ書き込みバッファを有していてもいなくてもよい記憶装置１０６のセット上に分散されている場合、本技法のある実施形態は、最近書き込まれたデータセット１０４を記憶する記憶装置１０６のみにフラッシュ要求を発するよう構成されていてもよい。
【００５１】
この第四の側面の第二の変形として、本技法のある実施形態は、書き込みバッファと相互運用されてもよく、書き込みバッファの動作を、ジャーナル３０２および／またはジャーナル３０２のメモリ内表現８０２の動作と協調させてもよい。この第二の変形の第一の例として、ジャーナル３０２を記憶している記憶装置１０６がフラッシュされるとき、ジャーナル３０２にフラッシュされたデータセット１０４（ジャーナル３０２に対して書き込み要求が発されたが書き込みバッファに残っていることがありうるデータセット１０４ではなく）を表わす、ジャーナル３０２のフラッシュ点（flush  point）が同定されてもよい。たとえば、ジャーナル３０２の揮発性メモリ表現８０２を備えるある実施形態では、揮発性メモリ表現８０２に記憶されているデータセット１０４は初期には除去不可能とマークされていてもよく、ジャーナル３０２のフラッシュ点がデータセット１０４を過ぎたところに動かされるまでそのようにマークされたままであってもよい。そのようにフラッシュ点が動かされた時点において、揮発性メモリ表現８０２はデータセット１０４を除去可能とマークしてもよい。
【００５２】
図９は、ジャーナル３０２を記憶している記憶装置１０６の書き込みバッファ９０２と相互運用される揮発性メモリ表現８０２の適応を備える例示的なシナリオ９００の図解を示している。この例示的なシナリオ９００では、記憶セット１０２に書き込まれるべきデータセット１０４はまず揮発性メモリ表現８０２に記憶され、次いで記憶セット１０２にコミットされる前にジャーナル３０２に書き込まれる。しかしながら、書き込みバッファ９０２がジャーナル３０２を記憶する記憶装置１０６上に存在することがあり、非一貫性および問題を引き起こすことがある。たとえば、ジャーナル３０２に書き込まれたと想定されるデータセット１０４がそうではなく書き込みバッファ９０２の揮発性メモリに記憶されており、障害２１０によってデータセット１０４がジャーナル３０２に書き込まれることなく失われる場合である。よって、揮発性メモリ表現９０２はそれぞれのデータセット１０４の状態を記録してもよい。たとえば、第一の時点９０４において、データセット１０４のセット〔集合〕をジャーナル３０２に移す要求を開始すると、揮発性メモリ表現８０２はデータセット１０４の状態を、記憶装置１０６に書き込まれている過程にあるとして記録してもよい（すなわち、記憶装置１０６にデータセット１０４を書き込む要求が開始されたが記憶装置１０６はまだ書き込み要求が受領されたことを示していないことを示す）。第二の時点９０６において、記憶装置１０６はデータセット１０４が受領されたと応答する。しかしながら、揮発性メモリ表現はデータセット１０４がジャーナル３０２にコミットされたかどうか、あるいはデータセット１０４が書き込みバッファ９０２に存在するかどうかを判定できないことがありうる。よって、第二の時点９０６では、揮発性メモリ表現９０２は、データセット１０４を、記憶装置１０６によってバッファリングされたものとしてマークする。その間、記憶装置１０４がまだフルに受領したとアクノレッジしていない他のデータセット１０４は、記憶装置１０６に書き込まれる過程にあるとマークされ続けてもよい。第三の時点９０８において、揮発性メモリ表現８０２は、書き込みバッファ９０２をフラッシュする要求を発してもよく、書き込みバッファ９０２は、ジャーナル３０２を含む不揮発性記憶媒体にフルに受領されたデータセット１０４をコミットすることを開始してもよい。記憶装置１０６がフラッシュ要求が充足されたことを示す第四の時点９１０では、揮発性メモリ表現は、バッファリングされたと以前にマークされたデータセット１０４のすべて（すなわち、記憶装置１０６が前記フラッシュ要求前にフルに受領されたとアクノレッジしたデータセット１０４のすべて）を、フルにジャーナリングされた（journaled）と、また任意的には除去可能とマークしてもよい。第五の時点９１２では、記憶装置１０６はその後、追加的なデータセット１０４がフルに受領されたことを示してもよく、揮発性メモリ表現８０２はこれらのデータセット１０４を、バッファリングされ、第二のフラッシュ要求を通じたジャーナル３０２へのコミットの準備ができているとマークしてもよい。このようにして、記憶装置１０６の書き込みバッファ９０２に関して、揮発性メモリ表現８０２はデータセット１０４の状態を追跡する。
【００５３】
この第四の側面の第三の変形として、書き込みバッファ９０２が介在することがあり、データセット１０４のジャーナル３０２から記憶セット１０６へのコミットに干渉することがある。同様に、揮発性メモリ表現８０２および／またはジャーナル３０２に記憶されているデータセット１０４の状態が、該データセット１０４がジャーナル３０２から記憶セット１０２にフラッシュされたかどうかを示してもよい。たとえば、本技法のある実施形態は、書き込みバッファ９０２から記憶セット１２へのデータセット１０４のコミットを検出すると（たとえば、フラッシュ要求のアクノレッジ）、ジャーナル３０２および／または揮発性メモリ表現９０２内のデータセット１０４に、コミット済みとしてマークしてもよく、ジャーナル３０２および揮発性メモリ表現９０２から、記憶セット１０４にコミット済みであるとマークされているデータセット１０４のみを除去してもよい。
【００５４】
図１０は、記憶セット１０２を記憶する記憶装置１０６の書き込みバッファ９０２と相互運用されるためのジャーナル３０２の調整を表わす例示的なシナリオ１０００を示している。この例示的なシナリオ１０００では、ジャーナル３０２は、三つの記憶装置１０６を横断して分散されている記憶セット１０２にコミットされるべきデータセット１０４を記憶している。各記憶装置は書き込みバッファ９０２を有する。データセット１０４が、記憶セット１０２を記憶している記憶装置１０６の物理的な媒体にフルにコミットされることを保証するために、ジャーナル３０２は、ジャーナル３０２が記憶セット１０２に書き込まれるよう要求したデータセット１０４の状態を記録してもよい。たとえば、第一の時点１００２において、コミットされるべきデータセット１０４のバッチ３１８を同定すると、ジャーナル３０２は、各データセット１０４についての書き込み要求を、該データセット１０４を記憶する記憶装置１０６に送ってもよい。しかしながら、記憶装置１０６がデータセット１０４の受領をアクノレッジするとき、ジャーナル３０２は、データセット１０４が記憶セット１０２にコミットされたと想定することはできないが、各装置１０６の揮発性書き込みバッファ９０２に記憶されていることはありえ、よってジャーナル３０２内の各データセット１０４を、バッファリングされたものとしてマークしてもよい。第二の時点１００４では、ジャーナル３０２は記憶装置１０６に（特に、バッファリングされたデータセット１０６を記憶している記憶装置にのみ）フラッシュ要求を発してもよい（たとえば、第三の記憶装置１０６は最近コミットされたデータセット１０４を一つも記憶しておらず、フラッシュ要求を発されない）。記憶装置１０６がフラッシュ要求が充足されたことを示す第三の時点１００４では、ジャーナル３０２はデータセット１０４を、コミット済みとしてマークしてもよい。ジャーナル３０２はまた、頭部ポインタ３０８と尾部ポインタ３０６との間のフラッシュ点１００８を、フラッシュ点と尾部ポインタ３０６の間のすべてのデータセット１０４が記憶セット１０２にコミット済みとなるよう、同定してもよい。次いで第四の時点１０１０では、ジャーナル３０２は、尾部ポインタ３０８をフラッシュ点１００８に動かすことによってデータセット１０４を放逐してもよい。途中にあるどのデータセット１０４も、記憶セット１０２にフルにコミットされているからである。このようにして、ジャーナル３０２は記憶セット１０２を記憶している諸記憶装置１０６の諸書き込みバッファ９０２の動作を考慮するよう適応されてもよい。当業者は、本稿に提示される技法を実装しながら、書き込みバッファ９０２の存在および動作を考慮する多くの仕方を考案しうる。
【００５５】
〈Ｅ．コンピューティング環境〉
図１１は、本稿に提示される技法が実装されうるコンピューティング装置１１０２内の例示的なコンピューティング環境の図解を示している。例示的なコンピューティング装置は、これに限られないが、パーソナル・コンピュータ、サーバー・コンピュータ、ハンドヘルドもしくはラップトップ装置、モバイル装置（携帯電話、携帯情報端末（PDA）、メディア・プレーヤーなど）、マルチプロセッサ・システム、消費者電子装置、ミニコンピュータ、メインフレーム・コンピュータおよび上記のシステムもしくは装置のいずれかを含む分散式のコンピューティング環境を含む。
【００５６】
図１１は、本稿に提示される一つまたは複数の実施形態を実装するよう構成されているコンピューティング装置１１０２を有するシステム１１００の例を示している。ある構成では、コンピューティング装置１１０２は少なくとも一つのプロセッサ１１０６および少なくとも一つのメモリ・コンポーネント１１０８を含む。コンピューティング装置の厳密な構成および型に依存して、メモリ・コンポーネント１１０８は揮発性（たとえばRAM）、不揮発性（たとえばROM、フラッシュメモリなど）または中間的もしくはハイブリッド型のメモリ・コンポーネントでありうる。この構成は、図１１では破線１１０４によって示されている。
【００５７】
いくつかの実施形態では、装置１１０２は追加的な特徴／機能を含んでいてもよい。たとえば、装置１１０２は、これに限られないがハードディスクドライブ、半導体記憶デバイスおよび／または他のリムーバブルもしくは非リムーバブルな磁気もしくは光学式媒体を含む一つまたは複数の追加的な記憶コンポーネント１１１０を含んでいてもよい。ある実施形態では、本稿で与えられる一つまたは複数の実施形態を実装するコンピュータ可読かつプロセッサ実行可能な命令が記憶コンポーネント１１１０に記憶される。記憶コンポーネント１１１０は、オペレーティング・システムのコンポーネント、一つまたは複数のアプリケーションをなす実行可能なバイナリー、プログラミング・ライブラリ（たとえば、アプリケーション・プログラミング・インターフェース（API））、メディア・オブジェクトおよび文書類のような他のデータ・オブジェクトをも記憶していてもよい。コンピュータ可読命令は、プロセッサ１１０６による実行のためにメモリ・コンポーネント１１０８にロードされてもよい。
【００５８】
コンピューティング装置１１０２はまた、コンピューティング装置１１０２に他の装置と通信することを許容する一つまたは複数の通信コンポーネント１１１６をも含んでいてもよい。一つまたは複数の通信コンポーネント１１１６は（たとえば）モデム、ネットワーク・インターフェース・カード（NIC）、電波周波数送信機／受信機、赤外線ポートおよびユニバーサル・シリアル・バス（USB）USB接続を有していてもよい。そのような通信コンポーネント１１１６は有線接続（物理的なコード、ケーブルまたはワイヤを通じてネットワークに接続する）または無線接続（可視光、赤外線または一つもしくは複数の電波周波数などを通じてネットワーキング装置と無線で通信する）を有していてもよい。
【００５９】
コンピューティング装置１１０２は、キーボード、マウス、ペン、音声入力装置、タッチ入力装置、赤外線カメラまたはビデオ入力装置のような一つまたは複数の入力コンポーネント１１１４および／または一つまたは複数のディスプレイ、スピーカーおよびプリンターのような一つまたは複数の出力コンポーネント１１１２を含んでいてもよい。入力コンポーネント１１１４および／または出力コンポーネント１１１２は有線接続、無線接続またはそれらの任意の組み合わせを介してコンピューティング装置１１０２に接続されてもよい。ある実施形態では、別のコンピューティング装置からの入力コンポーネント１１１４または出力コンポーネント１１１２がコンピューティング装置１１０２のための入力コンポーネント１１１４および／または出力コンポーネント１１１２として使用されてもよい。
【００６０】
コンピューティング装置１１０２のコンポーネントは、バスのようなさまざまな相互接続によって接続されてもよい。そのような相互接続は、PCIエクスプレスのような周辺コンポーネント相互接続（PCI）、ユニバーサル・シリアル・バス（USB）、ファイアワイヤ（IEEE1394）、光学式バス構造などを含みうる。別の実施形態では、コンピューティング装置１１０２のコンポーネントはネットワークによって相互接続されてもよい。たとえば、メモリ・コンポーネント１１０８は、ネットワークによって相互接続された種々の物理的位置に位置されている複数の物理的メモリ・ユニットから構成されてもよい。
【００６１】
当業者は、コンピュータ可読命令を記憶するために利用される記憶装置がネットワークを横断して分散されてもよいことを認識するであろう。たとえば、ネットワーク１１１８を介してアクセス可能なコンピューティング装置１１２０が本稿で与えられる一つまたは複数の実施形態を実装するためのコンピュータ可読命令を記憶してもよい。コンピューティング装置１１０２はコンピューティング装置１１２０にアクセスし、コンピュータ可読命令の一部または全部を実行のためにダウンロードしてもよい。あるいはまた、コンピューティング装置１１０２は必要に応じてコンピュータ可読命令の諸片をダウンロードしてもよく、あるいはいくつかの命令はコンピューティング装置１１０２において実行され、いくつかはコンピューティング装置１１２０において実行されてもよい。
【００６２】
〈Ｆ．用語の用法〉
主題は構造的な特徴および／または方法論的な工程に固有の言辞で記述されているが、付属の請求項において定義される主題は必ずしも上記で述べた個別的な特徴や工程に限定されるものではないことは理解しておくものとする。むしろ、上記の個別的な特徴および工程は請求項を実装する例示的な形として開示されているのである。
【００６３】
本願での用法では、用語「コンポーネント」、「モジュール」、「システム」、「インターフェース」などは、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェアまたは実行中のソフトウェアのいずれであれコンピュータ関係のエンティティを指すことが一般に意図されている。たとえば、コンポーネントは、これに限られないが、プロセッサ上で走っているプロセス、プロセッサ、オブジェクト、実行可能物、実行のスレッド、プログラムおよび／またはコンピュータであってもよい。例として、コントローラ上で走るアプリケーションおよび前記コントローラの両方がコンポーネントであることができる。一つまたは複数のコンポーネントがプロセスおよび／または実行のスレッド内に存在することができ、コンポーネントは一つのコンピュータ上に局在することもできるし、および／または二つ以上のコンピュータの間で分散させられることもできる。
【００６４】
さらに、特許請求される主題は、開示される主題を実装するようコンピュータを制御するためのソフトウェア、ファームウェア、ハードウェアまたはそれらの任意の組み合わせを製造するための標準的なプログラミングおよび／またはエンジニアリング技法を使って、方法、装置または製造物として実装されてもよい。本稿で用いるところの用語「製造物」は、任意のコンピュータ可読デバイス、担体または媒体からアクセス可能なコンピュータ・プログラムを包含することが意図されている。むろん、当業者は、特許請求される主題の範囲および精神から外れることなく、この構成に多くの修正がなしうることを認識するであろう。
【００６５】
本稿では諸実施形態のさまざまな動作が与えられている。ある実施形態では、記載される動作の一つまたは複数は、一つまたは複数のコンピュータ可読媒体上に記憶されているコンピュータ可読命令であって、コンピューティング装置によって実行されたら、記載される動作を該コンピューティング装置に実行させるものをなしてもよい。動作の一部または全部が記載される順序は、それらの動作が必ず順序依存であることを含意するものと解釈すべきではない。代替的な順序付けが、本稿の恩恵を受ける当業者によって理解されるであろう。さらに、すべての動作が本稿で与えられる各実施形態において必ず存在するわけではないことは理解されるであろう。
【００６６】
さらに、「例示的」という語は、本稿では、例、事例または例解のはたらきをすることを意味するために使われる。本稿に「例示的」として記載される任意の側面または設計は、必ずしも、他の側面または設計に対して有利であると解釈されるものではない。むしろ、例示的という語の使用は、概念を具体的な仕方で提示することを意図したものである。本願での用法では、用語「または」は排他的な「または」ではなく包含的な「または」を意味することが意図されている。すなわち、特に断わりのない限りまたは文脈から明らかではない限り、「XはAまたはBを用いる」は自然な包含的な置換の任意のものを意味することが意図されている。すなわち、XがAを用いる；XがBを用いる；またはXがAおよびBの両方を用いるのであれば、「XはAまたはBを用いる」は上記の事例のいずれかのもとで満たされる。さらに、本願および付属の請求項で使われるところの冠詞「a」および「an」は、そうでないことが記載されているまたは単数形に向けられていることが文脈から明らかなのでない限り、「一つまたは複数」を意味する。
【００６７】
また、本開示は、一つまたは複数の実装に関して図示され記述されたが、本明細書および付属の図面を読み、理解することに基づいて、他の当業者にも等価な変更および修正が思いつくであろう。本開示はそのようなすべての修正および変更を含み、付属の請求項の範囲によってのみ限定される。特に上記のコンポーネント（たとえば要素、資源など）によって実行されるさまざまな機能に関し、そのようなコンポーネントを記述するために使われる用語は、特にそうでないことが示されていない限り、本開示の本稿で例解された例示的な実装における当該機能を実行する開示された構造と構造的に等価でないとしても、記述されるコンポーネントの指定される機能（たとえば、機能的に等価な）を実行する任意のコンポーネントに対応することが意図されている。さらに、本開示の特定の特徴はいくつかの実装の一つのみに関して開示されたことがありうるが、そのような特徴は、任意の所与のまたは特定の応用のために所望されるまたは有利でありうるように、他の実装の一つまたは複数の他の特徴と組み合わされてもよい。さらに、用語「含む」「有する」「もつ」またはそれらの変形が詳細な説明または請求項において使用される限りにおいて、そのような用語は用語「comprising」と同様の仕方で包含的であることが意図されている。
【図１】
0006026538.tif 000002
【図２】
0006026538.tif 000003
【図３】
0006026538.tif 000004
【図４】
0006026538.tif 000005
【図５】
0006026538.tif 000006
【図６】
0006026538.tif 000007
【図７】
0006026538.tif 000008
【図８】
0006026538.tif 000009
【図９】
0006026538.tif 000010
【図１０】
0006026538.tif 000011
【図１１】
0006026538.tif 000012