(57)【特許請求の範囲】
【請求項１】
命令を備える非一時的なコンピュータ読取可能媒体であって、前記命令は、プロセッサによって実行されるとき方法を実行し、前記方法は、
トランザクションのためのトランザクションオブジェクトを作成するステップを備え、前記トランザクションオブジェクトは、トランザクションオブジェクトＩＤ（ＴＯＩ）によって識別され、オブジェクトＩＤ（ＯＩＤ）によって識別されるオブジェクトに関連付けられ、前記方法はさらに、
前記トランザクションオブジェクトのための第１の目次エントリ（ＴＥ）およびメタデータ（ＭＤ）フラグを永続性ストレージに格納するステップを備え、前記第１のＴＥは、前記ＭＤフラグを参照し、前記ＭＤフラグは、前記オブジェクトを識別し、前記方法はさらに、
前記トランザクションの一部として前記トランザクションオブジェクトにデータを書込むための書込要求を受取るステップを備え、前記書込要求は、前記ＴＯＩおよびオフセットを指定し、前記方法はさらに、
前記書込要求に応答して、第２のＴＥおよびデータフラグを前記永続性ストレージに格納するステップを備え、前記第２のＴＥは、前記ＴＯＩおよびオフセットを指定し、前記第２のＴＥは、前記データフラグを参照し、前記データフラグは、前記データを備え、前記方法はさらに、
前記書込要求に応答して、ハッシュ値と前記データフラグの物理アドレスとを備えるエントリをインメモリデータ構造に格納するステップを備え、前記ハッシュ値は、前記ＴＯＩおよび前記オフセットから導き出され、前記方法はさらに、
前記トランザクションをコミットするためのコミット要求を受取るステップと、
前記コミット要求に応答して、前記トランザクションオブジェクトのための第３のＴＥおよび第２のメタデータ（ＭＤ）フラグを永続性ストレージに格納するステップを備え、第３のＴＥは、前記第２のＭＤフラグを参照し、前記第２のＭＤフラグは、前記オブジェクトを識別して、前記トランザクションがコミットされることを指定し、前記方法はさらに、
前記コミット要求に応答して、第２のハッシュ値と第２のデータフラグのための第２の物理アドレスとを備える第２のエントリを、前記第２の物理アドレスが前記物理アドレスと置き換えられるように前記インメモリデータ構造において更新するステップを備え、前
記第２のハッシュ値は、前記ＯＩＤおよび前記オフセットから導き出される、非一時的なコンピュータ読取可能媒体。
【請求項２】
前記コミット要求が処理される前は、前記オブジェクトにおけるデータは、前記ＯＩＤおよび前記オフセットを用いてアクセス可能であり、前記トランザクションに関連付けられるがコミットされない前記データフラグにおける前記データは、前記ＴＯＩおよび前記オフセットを用いてアクセス可能である、請求項１に記載の非一時的なコンピュータ読取可能媒体。
【請求項３】
前記コミット要求が処理された後は、前記データフラグにおける前記データは、前記ＯＩＤおよび前記オフセットを用いてアクセス可能であり、前記第２のデータフラグにおける第２のデータは、アクセス不可能である、請求項２に記載の非一時的なコンピュータ読取可能媒体。
【請求項４】
前記永続性ストレージは、ソリッドステートメモリである、請求項１に記載の非一時的なコンピュータ読取可能媒体。
【請求項５】
前記コミット要求は、前記ＴＯＩを指定し、前記ＯＩＤを指定しない、請求項１に記載の非一時的なコンピュータ読取可能媒体。
【請求項６】
前記ＴＥを格納するステップは、前記永続性ストレージ内の目次（ＴＯＣ）ページに前記ＴＥを格納するステップを備える、請求項１に記載の非一時的なコンピュータ読取可能媒体。
【請求項７】
前記ＴＥおよび前記ＭＤフラグは、前記永続性ストレージ内のブロックにおける別々のページに格納される、請求項１に記載の非一時的なコンピュータ読取可能媒体。
【請求項８】
前記ＭＤフラグは、前記ＯＩＤを用いて前記オブジェクトを識別する、請求項１に記載の非一時的なコンピュータ読取可能媒体。
【請求項９】
前記コミット要求を処理する前に、前記ＭＤフラグは、前記トランザクションがコミットされないことを指定する、請求項１に記載の非一時的なコンピュータ読取可能媒体。
【請求項１０】
前記ＴＥは、−１に等しい第３のオフセットを含む、請求項１に記載の非一時的なコンピュータ読取可能媒体。
【請求項１１】
命令を備える非一時的なコンピュータ読取可能媒体であって、前記命令は、プロセッサによって実行されるとき方法を実行し、前記方法は、
トランザクションの一部としてデータを書込むための書込要求を受取るステップを備え、前記書込要求は、トランザクションオブジェクトのためのトランザクションオブジェクトＩＤ（ＴＯＩ）およびオフセットを指定し、前記ＴＯＩは、オブジェクトＩＤ（ＯＩＤ）によって識別されるオブジェクトに関連付けられ、前記方法はさらに、
前記書込要求に応答して、第１のＴＥおよびデータフラグを永続性ストレージに格納するステップを備え、前記ＴＥは、前記ＴＯＩおよび前記オフセットを指定し、前記第１のＴＥは、前記データフラグを参照し、前記データフラグは、前記データを備え、前記方法はさらに、
前記書込要求に応答して、ハッシュ値と前記データフラグの物理アドレスとを備えるエントリをインメモリデータ構造に格納するステップを備え、前記ハッシュ値は、前記ＴＯＩおよび前記オフセットから導き出され、前記方法はさらに、
第２のトランザクションの一部として第２のデータを書込むための第２の書込要求を受
取るステップを備え、前記第２の書込要求は、第２のトランザクションオブジェクトのための前記第２のＴＯＩおよび第２のオフセットを指定し、前記第２のＴＯＩは、第２のＯＩＤによって識別される第２のオブジェクトに関連付けられ、前記方法はさらに、
前記第２の書込要求に応答して、第２のＴＥおよび第２のデータフラグを前記永続性ストレージに格納するステップを備え、第２のＴＥは、前記第２のＴＯＩおよび前記第２のオフセットを指定し、前記第２のＴＥは、前記第２のデータフラグを参照し、前記第２のデータフラグは、前記第２のデータを備え、前記方法はさらに、
前記第２の書込要求に応答して、第２のハッシュ値と前記第２のデータフラグの第２の物理アドレスとを備える第２のエントリをインメモリデータ構造に格納するステップを備え、前記第２のハッシュ値は、前記第２のＴＯＩおよび前記第２のオフセットから導き出され、前記方法はさらに、
コミット要求を受取るステップを備え、前記コミット要求は、前記ＴＯＩと前記第２のＴＯＩとを備え、前記方法はさらに、
前記コミット要求に応答して、第３のＴＥおよび複合フラグを永続性ストレージに格納するステップを備え、第３のＴＥは、前記複合フラグを参照し、前記複合フラグは、第４のＴＥと第５のＴＥとを備え、前記第４のＴＥは、ＭＤフラグを参照し、前記ＭＤフラグは、前記ＴＯＩを識別して、前記トランザクションがコミットされることを指定し、前記第５のＴＥは、第２のＭＤフラグを参照し、前記第２のＭＤフラグは、前記第２のＴＯＩを識別して、前記第２のトランザクションがコミットされることを指定し、前記方法はさらに、
前記コミット要求に応答して、第３のハッシュ値と第３のデータフラグのための第３の物理アドレスとを備える第３のエントリを、前記第３の物理アドレスが前記物理アドレスと置き換えられるように前記インメモリデータ構造において更新するステップを備え、前記第３のハッシュ値は、前記ＯＩＤおよび前記オフセットから導き出され、前記方法はさらに、
前記コミット要求に応答して、第４のハッシュ値と第４のデータフラグのための第４の物理アドレスとを備える第４のエントリを、前記第４の物理アドレスが前記第２の物理アドレスと置き換えられるように前記インメモリデータ構造において更新するステップを備え、前記第４のハッシュ値は、前記第２のＯＩＤおよび前記第２のオフセットから導き出される、非一時的なコンピュータ読取可能媒体。
【請求項１２】
前記書込要求を受取る前に、
前記トランザクションオブジェクトを作成するステップと、
前記トランザクションオブジェクトのための第６のＴＥおよび第３のＭＤフラグを前記永続性ストレージに格納するステップとを備え、前記第６のＴＥは、前記第３のＭＤフラグを参照し、前記第３のＭＤフラグは、前記オブジェクトを識別し、前記方法はさらに、
前記第２のトランザクションオブジェクトを作成するステップと、
前記第２のトランザクションオブジェクトのための第７のＴＥおよび第４のＭＤフラグを前記永続性ストレージに格納するステップを備え、前記第７のＴＥは、前記第４のＭＤフラグを参照し、前記第４のＭＤフラグは、前記第２のオブジェクトを識別する、請求項１１に記載の非一時的なコンピュータ読取可能媒体。
【請求項１３】
前記複合フラグは、フラグページに格納される、請求項１１に記載の非一時的なコンピュータ読取可能媒体。
【請求項１４】
前記第３のＴＥは、目次ページに格納される、請求項１３に記載の非一時的なコンピュータ読取可能媒体。
【請求項１５】
前記フラグページおよび前記ＴＯＣページは、前記永続性ストレージ内のブロックに格納される、請求項１３に記載の非一時的なコンピュータ読取可能媒体。
【請求項１６】
前記第３のＴＥは、前記第３のＴＥが関連付けられるフラグのタイプを指定する、請求項１１に記載の非一時的なコンピュータ読取可能媒体。
【請求項１７】
前記第３のＴＥは、複合オブジェクトＩＤと、第５のオフセットとを備える、請求項１１に記載の非一時的なコンピュータ読取可能媒体。
【請求項１８】
前記第５のオフセットは−１である、請求項１７に記載の非一時的なコンピュータ読取可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
背景
アプリケーションは、一般に、さまざまなデータがトランザクションにおいてアトミックにコミットされることを必要とする。オブジェクトストレージシステムでは、トランザクションは、変更されるべきオブジェクトに対応する論理的な記憶場所（オフセット）と、各オフセットに書込まれるべき新たなデータとの組であり、当該新たなデータは全て目に見えるか、または障害が発生するとそのどれも目に見えなくなるが、変更の一部のみを有する他の中間状態は許可されない。トランザクションを実行するための従来の機構は、一般に、トランザクションの一部であるデータが、トランザクションをコミットするために複数回書込まれることを必要とし、その結果、処理オーバーヘッドが大きくなる。
【発明の概要】
【課題を解決するための手段】
【０００２】
概要
概して、一局面において、本発明は、命令を備える非一時的なコンピュータ読取可能媒体に関し、上記命令は、プロセッサによって実行されると方法を実行し、上記方法は、トランザクションのためのトランザクションオブジェクトを作成するステップを備え、上記トランザクションオブジェクトは、トランザクションオブジェクトＩＤ（ＴＯＩ）によって識別され、オブジェクトＩＤ（ＯＩＤ）によって識別されるオブジェクトに関連付けられ、上記方法はさらに、上記トランザクションオブジェクトのための目次エントリ（ＴＥ）およびメタデータ（ＭＤ）フラグを永続性ストレージに格納するステップを備え、ＴＥは、上記ＭＤフラグを参照し、上記ＭＤフラグは、上記オブジェクトを識別し、上記方法はさらに、上記トランザクションの一部として上記トランザクションオブジェクトにデータを書込むための書込要求を受取るステップを備え、上記書込要求は、上記ＴＯＩおよびオフセットを指定し、上記方法はさらに、上記書込要求に応答して、第２のＴＥおよびデータフラグを上記永続性ストレージに格納するステップを備え、上記第２のＴＥは、上記ＴＯＩおよびオフセットを指定し、上記第２のＴＥは、上記データフラグを参照し、上記データフラグは、上記データを備え、上記方法はさらに、上記書込要求に応答して、ハッシュ値と上記データフラグの物理アドレスとを備えるエントリをインメモリデータ構造に格納するステップを備え、上記ハッシュ値は、上記ＴＯＩおよび上記オフセットから導き出され、上記方法はさらに、上記トランザクションをコミットするためのコミット要求を受取るステップと、上記コミット要求に応答して、上記トランザクションオブジェクトのための第３のＴＥおよび第２のメタデータ（ＭＤ）フラグを永続性ストレージに格納するステップを備え、第３のＴＥは、上記第２のＭＤフラグを参照し、上記第２のＭＤフラグは、上記オブジェクトを識別して、上記トランザクションがコミットされることを指定し、上記方法はさらに、上記コミット要求に応答して、第２のハッシュ値と第２のデータフラグのための第２の物理アドレスとを備える第２のエントリを、上記第２の物理アドレスが上記物理アドレスと置き換えられるように上記インメモリデータ構造において更新するステップを備え、上記第２のハッシュ値は、上記ＯＩＤおよび上記オフセットから導き出される。
【０００３】
概して、一局面において、本発明は、命令を備える非一時的なコンピュータ読取可能媒体に関し、上記命令は、プロセッサによって実行されると方法を実行し、上記方法は、トランザクションの一部としてデータを書込むための書込要求を受取るステップを備え、上記書込要求は、トランザクションオブジェクトのためのトランザクションオブジェクトＩＤ（ＴＯＩ）およびオフセットを指定し、上記ＴＯＩは、オブジェクトＩＤ（ＯＩＤ）によって識別されるオブジェクトに関連付けられ、上記方法はさらに、上記書込要求に応答して、ＴＥおよびデータフラグを永続性ストレージに格納するステップを備え、ＴＥは、上記ＴＯＩおよび上記オフセットを指定し、上記ＴＥは、上記データフラグを参照し、上記データフラグは、上記データを備え、上記方法はさらに、上記書込要求に応答して、ハッシュ値と上記データフラグの物理アドレスとを備えるエントリをインメモリデータ構造に格納するステップを備え、上記ハッシュ値は、上記ＴＯＩおよび上記オフセットから導き出され、上記方法はさらに、第２のトランザクションの一部として第２のデータを書込むための第２の書込要求を受取るステップを備え、上記第２の書込要求は、第２のトランザクションオブジェクトのための上記第２のＴＯＩおよび第２のオフセットを指定し、上記第２のＴＯＩは、第２のＯＩＤによって識別される第２のオブジェクトに関連付けられ、上記方法はさらに、上記第２の書込要求に応答して、第２のＴＥおよび第２のデータフラグを上記永続性ストレージに格納するステップを備え、第２のＴＥは、上記第２のＴＯＩおよび上記第２のオフセットを指定し、上記第２のＴＥは、上記第２のデータフラグを参照し、上記第２のデータフラグは、上記第２のデータを備え、上記方法はさらに、上記第２の書込要求に応答して、第２のハッシュ値と上記第２のデータフラグの第２の物理アドレスとを備える第２のエントリをインメモリデータ構造に格納するステップを備え、上記第２のハッシュ値は、上記第２のＴＯＩおよび上記第２のオフセットから導き出され、上記方法はさらに、コミット要求を受取るステップを備え、上記コミット要求は、上記ＴＯＩと上記第２のＴＯＩとを備え、上記方法はさらに、上記コミット要求に応答して、第３のＴＥおよび複合フラグを永続性ストレージに格納するステップを備え、第３のＴＥは、上記複合フラグを参照し、上記複合フラグは、第４のＴＥと第５のＴＥとを備え、上記第４のＴＥは、ＭＤフラグを参照し、上記ＭＤフラグは、上記ＴＯＩを識別して、上記トランザクションがコミットされることを指定し、上記第５のＴＥは、第２のＭＤフラグを参照し、上記第２のＭＤフラグは、上記第２のＴＯＩを識別して、上記第２のトランザクションがコミットされることを指定し、上記方法はさらに、上記コミット要求に応答して、第３のハッシュ値と第３のデータフラグのための第３の物理アドレスとを備える第３のエントリを、上記第３の物理アドレスが上記物理アドレスと置き換えられるように上記インメモリデータ構造において更新するステップを備え、上記第３のハッシュ値は、上記ＯＩＤおよび上記オフセットから導き出され、上記方法はさらに、上記コミット要求に応答して、第４のハッシュ値と第４のデータフラグのための第４の物理アドレスとを備える第４のエントリを、上記第４の物理アドレスが上記第２の物理アドレスと置き換えられるように上記インメモリデータ構造において更新するステップを備え、上記第４のハッシュ値は、上記第２のＯＩＤおよび上記第２のオフセットから導き出される。
【０００４】
本発明の他の局面は、以下の説明および添付の特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【０００５】
【図１】本発明の１つ以上の実施例に係るシステムを示す。
【図２Ａ】本発明の１つ以上の実施例に係るソリッドステートメモリモジュールを示す。
【図２Ｂ】本発明の１つ以上の実施例に係るブロックを示す。
【図２Ｃ】本発明の１つ以上の実施例に係るフラグページを示す。
【図２Ｄ】本発明の１つ以上の実施例に係るＴＯＣページを示す。
【図２Ｅ】本発明の１つ以上の実施例に係るブロックを示す。
【図２Ｆ】本発明の１つ以上の実施例に係る目次（table of contents：ＴＯＣ）エントリを示す。
【図２Ｇ】本発明の１つ以上の実施例に係るデータフラグを示す。
【図２Ｈ】本発明の１つ以上の実施例に係るメタデータフラグを示す。
【図２Ｉ】本発明の１つ以上の実施例に係る複合フラグを示す。
【図３】本発明の１つ以上の実施例に係るオブジェクトおよび対応するＴＯＣエントリを示す。
【図４】本発明の１つ以上の実施例に係るシングルオブジェクトトランザクションを実行するためのフローチャートを示す。
【図５Ａ】本発明の１つ以上の実施例に係るマルチオブジェクトトランザクションを実行するためのフローチャートを示す。
【図５Ｂ】本発明の１つ以上の実施例に係るマルチオブジェクトトランザクションを実行するためのフローチャートを示す。
【図５Ｃ】本発明の１つ以上の実施例に係るマルチオブジェクトトランザクションを実行するためのフローチャートを示す。
【図６Ａ】本発明の１つ以上の実施例に係る例を示す。
【図６Ｂ】本発明の１つ以上の実施例に係る例を示す。
【図６Ｃ】本発明の１つ以上の実施例に係る例を示す。
【図６Ｄ】本発明の１つ以上の実施例に係る例を示す。
【図７Ａ】本発明の１つ以上の実施例に係る例を示す。
【図７Ｂ】本発明の１つ以上の実施例に係る例を示す。
【図７Ｃ】本発明の１つ以上の実施例に係る例を示す。
【図７Ｄ】本発明の１つ以上の実施例に係る例を示す。
【発明を実施するための形態】
【０００６】
詳細な説明
ここで、添付の図面を参照して、本発明の具体的な実施例について詳細に説明する。本発明がより完全に理解されるようにするために、以下の発明の実施例の詳細な説明には多数の具体的な詳細が記載されている。しかし、これらの具体的な詳細がなくても本発明が実施可能であるということは当業者に明らかであろう。他の例では、説明を不必要に複雑にすることを回避するために、周知の特徴については詳細に説明しなかった。
【０００７】
図１〜図７Ｄの以下の説明では、図に関連して記載されるいかなる構成要素も、本発明のさまざまな実施例においては、その他の図に関連して記載される１つ以上の同様の名前の構成要素と等価であり得る。簡潔にするために、これらの構成要素の説明は、各々の図に関して繰返されない。したがって、各々の図の構成要素の１つ１つの実施例は、引用により援用され、１つ以上の同様の名前の構成要素を有する他の全ての図内に任意に存在するものと想定される。さらに、本発明のさまざまな実施例によれば、図の構成要素のいかなる説明も、その他の図における対応する同様の名前の構成要素に関して記載される実施例に加えて、実施例とともに、または実施例の代わりに実現され得る任意の実施例であるものと解釈されるべきである。
【０００８】
概して、本発明の実施例は、ストレージシステムにおいてトランザクションを実行するための方法およびシステムに関する。より具体的には、本発明の実施例は、トランザクションを実行するためにトランザクションオブジェクトを使用し、各トランザクションは、更新されたデータが永続性ストレージに一度書込まれることを必要とするだけである。本発明の一実施例では、トランザクションは、単一のオブジェクト（例えば図４および図６Ａ〜図６Ｄを参照）または複数のオブジェクト（図５Ａ〜図５Ｃおよび図７Ａ〜図７Ｄを参照）に関連付けられ得る。さらに、本発明の実施例は、全ての中間状態の間およびトランザクションコミット後にデータの単一のコピーがトランザクションを表わすことを可能にする。
【０００９】
図１は、本発明の一実施例に係るシステムを示す。図１に示されるように、当該システムは、１つ以上のクライアント（１００）と、ストレージコントローラ（１０２）と、メモリ（１０４）と、ストレージアレイ（１０６）とを含む。
【００１０】
本発明の一実施例では、クライアント（１００）は、読取要求、書込要求、または（１つ以上のトランザクションオブジェクトを有する）コミット要求をストレージコントローラ（１０２）に発行するための機能を含むシステム上で実行される任意のシステムまたはプロセスである。本発明の一実施例では、クライアント（１００）は、各々、プロセッサ（図示せず）と、メモリ（図示せず）と、永続性ストレージ（図示せず）とを含み得る。本発明の一実施例では、ストレージコントローラ（１０２）は、１つ以上のクライアント（１００）に動作可能に接続され、トランザクションオブジェクトスキームを実行するように構成され、当該トランザクションオブジェクトスキームは、以下に記載されるトランザクションオブジェクトスキームと整合性がとれるように目次エントリおよびフラグをストレージアレイに書込むことを含む（例えば図４〜図５Ｃを参照）。本発明の一実施例では、ストレージコントローラ（１０２）は、本発明の１つ以上の実施例を実現するための命令を実行するように構成されたプロセッサ（図示せず）を含み、当該命令は、ストレージコントローラ（１０２）内に位置するか、またはストレージコントローラ（１０２）に動作可能に接続される非一時的なコンピュータ読取可能媒体（図示せず）に格納されている。代替的に、ストレージコントローラ（１０２）は、ハードウェアを用いて実現されてもよい。ストレージコントローラ（１０２）は、本発明から逸脱することなく、ソフトウェアおよび／またはハードウェアの任意の組合わせを用いて実現されてもよい。
【００１１】
本発明の一実施例では、ストレージコントローラ（１０２）は、メモリ（１０４）に動作可能に接続されている。メモリ（１０４）は、ダイナミック・ランダム・アクセス・メモリ（Dynamic Random-Access Memory：ＤＲＡＭ）、同期ＤＲＡＭ、ＳＤＲ  ＳＤＲＡＭおよびＤＤＲ  ＳＤＲＡＭを含むがこれらに限定されない任意の揮発性メモリであってもよい。本発明の一実施例では、メモリ（１０４）は、（目次エントリおよびフラグのためのデータを含む）さまざまなデータを、このようなデータがストレージアレイに格納される前に一時的に格納するように構成されている。
【００１２】
本発明の一実施例では、ストレージアレイ（１０６）は、いくつかの個々の永続性記憶装置を含み、当該永続性記憶装置は、磁気メモリデバイス、光メモリデバイス、ソリッドステートメモリデバイス、位相変化メモリデバイス、その他の好適なタイプの永続性メモリデバイス、またはこれらの任意の組合わせを含むが、これらに限定されるものではない。
【００１３】
図１に示されるシステム構成以外のシステム構成が、本発明から逸脱することなく使用されてもよい。
【００１４】
上記のように、ストレージアレイは、ソリッドステートメモリデバイスを含み得る。以下の説明では、ソリッドステートメモリデバイスを用いて実現された本発明の実施例について説明する。図２Ａを参照して、図２Ａは、本発明の１つ以上の実施例に係るソリッドステートメモリデバイス（図示せず）のソリッドステートメモリモジュールを示す。ソリッドステートメモリデバイス（図示せず）は、複数のソリッドステートメモリモジュールを含み得る。ソリッドステートメモリモジュール（２００）は、１つ以上のブロックを含む。本発明の一実施例では、ブロックは、ソリッドステートメモリモジュール（２００）内の最小の消去可能な記憶単位である。
【００１５】
図２Ｂは、本発明の１つ以上の実施例に係るブロックを示す。より具体的には、各ブロック（２０２）は、１つ以上のページを含む。本発明の一実施例では、ページは、ソリッドステートメモリモジュールにおける（ページへの最初の書込みを含む）読取および書込動作のための最小のアドレス可能な単位である。本発明の一実施例では、ブロック内でのページの再書込みは、ブロック全体を再書込みすることを必要とする。本発明の一実施例では、ブロック内の各ページは、フラグページ（図２Ｃを参照）またはＴＯＣページ（図２Ｄを参照）のいずれかである。
【００１６】
図２Ｃは、本発明の１つ以上の実施例に係るフラグページを示す。本発明の一実施例では、フラグページ（２０４）は、１つ以上のフラグを含む。本発明の一実施例では、フラグは、有限の量のユーザデータ（または、フラグページがメタデータフラグである場合にはメタデータ（図２Ｈを参照）、またはフラグが複合フラグである場合にはＴＯＣエントリ（図２Ｉを参照））に対応する。さらに、所与のページ内のフラグは、均一のサイズを有していてもよく、または不均一のサイズを有していてもよい。さらに、所与のブロック内のフラグは、均一のサイズを有していてもよく、または不均一のサイズを有していてもよい。本発明の一実施例では、所与のフラグは、ページのサイズ未満であってもよく、ちょうどページのサイズであってもよく、または１つ以上のページにまたがっていてもよい。本発明の一実施例では、フラグページは、フラグのみを含む。本発明の一実施例では、各フラグは、ユーザデータ（すなわちストレージアプライアンスに格納するためにクライアントによって提供されるデータ）（図２Ｇを参照）、オブジェクトのためのメタデータ（図２Ｈを参照）、またはフラグが複合フラグである場合にはＴＯＣエントリ（図２Ｉを参照）を含む。所与のフラグページは、単一のタイプのフラグまたは２つ以上のタイプのフラグを含み得る。
【００１７】
図２Ｄは、本発明の１つ以上の実施例に係るＴＯＣページを示す。本発明の一実施例では、ＴＯＣページ（２０６）は、１つ以上のＴＯＣエントリを含み、ＴＯＣエントリの各々は、所与のフラグのためのメタデータを含む。また、ＴＯＣページ（２０６）は、ブロック（２０２）における別のＴＯＣページへの参照を含み得る。本発明の一実施例では、ＴＯＣページは、ＴＯＣエントリ（および任意にブロックにおける別のＴＯＣページへの参照）のみを含み、いかなるフラグも含まない。本発明の一実施例では、各ＴＯＣエントリは、ブロック（２０２）におけるフラグ（図２Ｃを参照）に対応する。ＴＯＣエントリは、ブロック内のフラグに対応するのみである。別の言い方をすれば、ＴＯＣページは、ブロックに関連付けられ、当該ブロックにおけるフラグのためのＴＯＣエントリのみを含む。本発明の一実施例では、各々のソリッドステートメモリモジュール内の各ブロックにおいて欠陥がない最後のページが、ＴＯＣページである。
【００１８】
図２Ｅは、本発明の１つ以上の実施例に係るブロックを示す。より具体的には、図２Ｅは、ＴＯＣページ（２１０，２１２，２１４）とフラグページ（２１６，２１８，２２０，２２２，２２４，２２６）とを含むブロック（２０８）を示す。本発明の一実施例では、ブロック（２０８）は、概念上、「上」から「下」に向かって埋められる。さらに、フラグページにおけるフラグのためのＴＯＣエントリの蓄積サイズがページのサイズに等しくなると、ＴＯＣページが生成され、格納される。図２Ｅを参照して、例えば、フラグページ０（２１６）およびフラグページ１（２１８）がブロック（２０８）に格納される。フラグページ０（２１６）およびフラグページ１（２１８）におけるフラグ（図示せず）のための対応するＴＯＣエントリ（図示せず）は、ブロックにおけるページのサイズに等しい累計サイズを有する。したがって、（ブロックにおけるフラグに対応するＴＯＣエントリを用いて）ＴＯＣページ（２１２）が生成され、ブロック（２０８）に格納される。その後、フラグページ２（２２０）がブロック（２０８）に書込まれる。フラグページ２（２２０）におけるフラグ（図示せず）に対応するＴＯＣエントリが、ブロックにおけるページのサイズに等しい累計サイズを有するので、ＴＯＣページ（２１２）が作成され、ブロック（２０８）に格納される。さらに、ブロック（２０８）にはすでにＴＯＣページがあるので、ＴＯＣページ（２１２）は、ＴＯＣページ（２１４）への参照も含む。
【００１９】
このプロセスは、ブロック（２０８）に残っている埋めるべきページが１つだけになるまで繰返される。この時点で、ＴＯＣページ（２１０）が作成され、ブロック（２０８）の最後のページに格納される。当業者は、ＴＯＣページ（２１０）におけるＴＯＣエントリの累計サイズがページのサイズ未満であり得ることを理解するであろう。このような場合、ＴＯＣページは、ＴＯＣエントリの累積サイズとページサイズとの差に対処するためにパディングを含み得る。最後に、ブロック（２０８）には他のＴＯＣページがあるので、ＴＯＣページ（２１０）は、１つの他のＴＯＣページ（２１２）への参照を含む。
【００２０】
図２Ｅに示されるように、ＴＯＣページは、ブロックの「下」からページの「上」に連結され、そのため、当該ＴＯＣページの「下方」にあるＴＯＣページからの参照を辿ることによってＴＯＣページを取得することができる。例えば、ＴＯＣページ（２１２）は、ＴＯＣページ（２１０）における参照を用いてアクセスされ得る。
【００２１】
ブロック（２０８）はフラグページおよびＴＯＣページのみを含むが、ブロック（２０８）は、本発明から逸脱することなく、フラグページおよびＴＯＣページ以外のページ（例えばパリティデータを含むページ）を含んでいてもよいということを当業者は理解するであろう。このような他のページは、ブロック内に位置していてもよく、実現例によっては、ＴＯＣページとフラグページとの間にインターリーブされてもよい。
【００２２】
図２Ｆは、本発明の１つ以上の実施例に係るＴＯＣエントリを示す。本発明の一実施例では、各ＴＯＣエントリ（２３０）は、フラグのためのメタデータを含み、以下のフィールドのうちの１つ以上を含み得る。以下のフィールドとは、（ｉ）格納されるオブジェクトを識別するオブジェクトＩＤ（２３２）、（ｉｉ）ＴＯＣエントリに対応するフラグがストレージアレイに書込まれた時刻（例えば制御モジュールにおけるプロセッサのプロセッサクロック値）を指定する誕生時刻（birth time）（２３４）、（ｉｉｉ）（オブジェクトＩＤによって識別される）オブジェクトの冒頭に対してオブジェクト内の点を識別するオフセットＩＤ（２３６）、（ｉｖ）フラグのサイズを指定するフラグメントサイズ（２３８）、（ｖ）フラグが格納されるブロックにおけるページを識別するページＩＤ（２４０）、（ｖｉ）（ページＩＤによって識別される）ページにおけるフラグの開始位置を識別するバイト（２４２）、（ｖｉｉ）フラグにおけるユーザデータの非圧縮長を指定する論理長（２４４）、および（ｖｉｉｉ）フラグにおけるデータのタイプ（例えばオブジェクト、複合フラグなど）を指定するタイプ（２４６）である。ＴＯＣエントリ（２３０）は、本発明から逸脱することなく、（その他（２４８）によって示される）他のフィールドを含んでいてもよい。
【００２３】
本発明の一実施例では、＜オブジェクトＩＤ，オフセットＩＤ＞または＜オブジェクトＩＤ，オフセットＩＤ，誕生時刻＞は、例えばクライアントによって提供されるデータを識別する。さらに、＜オブジェクトＩＤ，オフセットＩＤ＞または＜オブジェクトＩＤ，オフセットＩＤ，誕生時刻＞は、特定のデータを識別するためにクライアントによって使用され得るが、ストレージアプライアンスは、ストレージアプライアンス内のデータを識別するために物理アドレスを使用する。当業者は、オブジェクトＩＤおよびオフセットＩＤの代わりにクライアントが論理アドレスを提供してもよいということを理解するであろう。
【００２４】
当業者は、ＴＯＣエントリが、本発明から逸脱することなく、図２Ｆに示されるフィールドよりもさらなるフィールドまたは少ないフィールドを含んでいてもよいということを理解するであろう。さらに、ＴＯＣエントリにおけるフィールドは、本発明から逸脱することなく、異なる順序で配置されてもよく、および／または、組合わせられてもよい。また、図２Ｆに示されるＴＯＣエントリにおけるフィールドは全てが同一のサイズを有しているように見えるが、ＴＯＣエントリにおけるさまざまなフィールドのサイズは不均一であってもよく、任意の所与のフィールドのサイズは、ＴＯＣエントリの実現例に基づいてさまざまである。
【００２５】
図２Ｇは、本発明の１つ以上の実施例に係るデータフラグを示す。データフラグ（２５０）は、クライアントからのデータのみを含む。例えば、データフラグにおけるデータは、ファイルにおけるデータに対応し、当該ファイルは、オブジェクトＩＤによって識別される。
【００２６】
図２Ｈは、本発明の１つ以上の実施例に係るメタデータフラグを示す。メタデータフラグ（２５２）は、メタデータフラグに関連付けられたＴＯＣエントリにおけるオブジェクトＩＤに対応するオブジェクトのためのオブジェクトメタデータを含む。別の言い方をすれば、オブジェクトのためのメタデータは、メタデータフラグに格納され、オブジェクトのためのオブジェクトＩＤとオフセット＝−１とを含むＴＯＣエントリに関連付けられる。本発明から逸脱することなく、−１以外の値が使用されてもよい。オブジェクトメタデータの例としては、オブジェクトタイプ、その最大サイズ、その作成時刻、その直近の変更時刻、および他のオブジェクト当たりの属性が挙げられ得るが、これらに限定されるものではない。本発明の一実施例では、ストレージアレイには各オブジェクトごとに１つのメタデータフラグがある。
【００２７】
図２Ｉは、本発明の１つ以上の実施例に係る複合フラグを示す。本発明の一実施例では、複合フラグ（２５４）は、他のフラグとは異なって、クライアントからのデータまたはオブジェクトのためのメタデータを含まない。それどころか、複合フラグ（２５４）は、２つ以上のＴＯＣエントリを含み、ＴＯＣエントリの各々は、トランザクションオブジェクトに関連付けられ、オフセット＝−１を有する。本発明の一実施例では、複合フラグにおけるＴＯＣエントリにおいて指定されるトランザクションオブジェクトは全て、単一のトランザクションに属する。
【００２８】
図３は、本発明の１つ以上の実施例に係るオブジェクト（３００）および対応するＴＯＣエントリを示す。より具体的には、図３は、本発明の一実施例に係るオブジェクトおよび対応するＴＯＣエントリの概念図を示す。図３に示されるように、オブジェクト（３００）は、オブジェクトのためのメタデータを含む、オフセット−１に位置するメタデータフラグを含む。さらに、オブジェクトは、オフセット３および６に位置する（１つ以上のフラグページに格納される、図示されない）２つのデータを含む。上記のフラグの各々は、（１つ以上のＴＯＣページに格納される、図示されない）ＴＯＣエントリに関連付けられる。
【００２９】
図４〜図５Ｃは、本発明の１つ以上の実施例に係るフローチャートを示す。フローチャートにおけるさまざまなステップは逐次的に示され、記載されているが、ステップのうちのいくつかまたは全ては、異なる順序で実行されてもよく、組合わせられるかまたは省略されてもよく、ステップのうちのいくつかまたは全ては、並列に実行されてもよいということを当業者は理解するであろう。本発明の一実施例では、図４〜図５Ｃに示されるステップは、本発明から逸脱することなく、図４〜図５Ｃに示されるその他のステップと並列に実行されてもよい。
【００３０】
図４を参照して、図４は、本発明の１つ以上の実施例に係るシングルオブジェクトトランザクションを実行するためのフローチャートを示す。ステップ４００において、トランザクションのための要求がストレージコントローラによって受取られ、当該要求は親オブジェクトを指定する。親オブジェクトは、トランザクションが実行されるオブジェクトに対応する（例えば図６Ａを参照。親オブジェクトは、オブジェクトＩＤ＝Ａを有するオブジェクトである）。
【００３１】
ステップ４０２において、当該トランザクションのためにトランザクションオブジェクトが作成される。トランザクションオブジェクトの作成は、トランザクションのためのオブジェクトＩＤを指定することを含み得る。ステップ４０４において、当該トランザクションオブジェクトのためにメタデータ（ＭＤ）フラグが作成される。メタデータフラグは、トランザクションオブジェクトＩＤ（ＴＯＩ）と、親オブジェクトのためのオブジェクトＩＤと、トランザクションがコミットされないことを示すフィールドとを含み得る。メタデータフラグは、トランザクションオブジェクトのための他のメタデータも含み得る。
【００３２】
ステップ４０６において、当該メタデータフラグのために目次（ＴＯＣ）エントリ（ＭＤ  ＴＥと称される）が作成される。ＭＤ  ＴＥは、ＴＯＩと、オフセット＝−１とを含む。ＭＤ  ＴＥは、本発明から逸脱することなく、他の情報を含んでいてもよい。ステップ４０８において、ＭＤフラグおよびＭＤ  ＴＥがその後ストレージアレイに格納される。本発明の一実施例では、ＭＤフラグは、フラグページの一部としてストレージアレイに格納され、ＭＤ  ＴＥは、ＴＯＣページの一部としてストレージアレイに格納される。上記のフラグ、ＴＥおよびページを書込むタイミングは、本発明の実施例が如何に実現されるかに基づいてさまざまであり得る。
【００３３】
ステップ４１０において、トランザクションを開始させたクライアントにＴＯＩが提供される。ＴＯＩは、本発明から逸脱することなく、トランザクションに参加している他のクライアントに提供されてもよい。ステップ４１２において、トランザクションの一部としてデータを書込むための書込要求が受取られる。書込要求は、ＴＯＩと、オフセットとを含む。
【００３４】
ステップ４１４において、書込要求において識別されたデータを有するデータフラグが、（通常はフラグページの一部として）ストレージアレイに格納される。ステップ４１６において、（ステップ４１４において格納された）データフラグのためのＴＥが作成され、（通常はＴＯＣページの一部として）ストレージアレイに格納される。データフラグのためのＴＥは、ＴＯＩと、オフセットとを含む。ＴＥは、親オブジェクトのためのオブジェクトＩＤを含まない。
【００３５】
ステップ４１８において、（ｉ）ＴＯＩおよびオフセットから導き出されるハッシュ値と、（ｉｉ）ステップ４１４において格納されたデータフラグの物理アドレスとを含むエントリを含むようにインメモリデータ構造が更新される。本発明の一実施例では、ハッシュ値は、関数（例えばＭＤ５、ＳＨＡ  １など）を＜ＴＯＩ，オフセット＞（またはＴＯＩおよびオフセットを用いて生成される値）に適用することによって導き出され得る。当業者は、本発明から逸脱することなく、任意の単射関数が使用されてもよいということを理解するであろう。図４に戻って、この段階では、ストレージコントローラは、ＴＯＩおよびオフセットを含む読取要求と、親オブジェクトのオブジェクトＩＤおよびオフセットを含む読取要求とを処理し得る。上記の読取要求を提供した結果として、通常は、２つの異なるデータ、すなわち＜ＴＯＩ，オフセット＞に対応するデータおよび＜親オブジェクトＩＤ，オフセット＞に対応するデータが取得され、これらのオフセットは同一である。
【００３６】
ステップ４２０において、トランザクションのためのさらなる書込要求があるか否かについて判断がなされる。トランザクションのためのさらなる書込要求があれば、プロセスはステップ４１２に進む。そうでなければ、プロセスはステップ４２２に進む。ステップ４２２において、ＴＯＩを指定するコミット要求がクライアントから受取られる。ステップ４２４において、トランザクションオブジェクトＩＤ（ＴＯＩ）と、親オブジェクトのためのオブジェクトＩＤと、トランザクションがコミットされることを示すフィールドとを含む第２のＭＤフラグがトランザクションオブジェクトのために作成される。
【００３７】
ステップ４２６において、第２のＭＤ  ＴＥが作成され、第２のＭＤ  ＴＥは、ＴＯＩと、オフセット＝−１とを含む。ステップ４２４および４２６は、ストレージアレイおよび／またはストレージコントローラがコピーオンライトスキームを実行するときに実行される。ストレージアレイおよび／またはストレージコントローラがコピーオンライトスキームを実行しない場合には、ステップ４２４および４２６は実行されなくてもよい。それどころか、ステップ４０４および４０６において作成されたＭＤ  ＴＥおよびＭＤフラグは、それぞれステップ４２４および４２６において作成されたＭＤ  ＴＥおよびＭＤフラグと同一の情報を含むように情報を含むように更新され得る。
【００３８】
ステップ４２８において、第２のＭＤフラグは、ストレージアレイに（通常はフラグページに）格納され、第２のＭＤ  ＴＥは、ストレージアレイに（通常はＴＯＣページに）格納される。ステップ４３０において、トランザクションがコミットされることを反映するようにインメモリデータ構造が更新される。具体的には、本発明の一実施例では、親オブジェクトＩＤから導き出されるハッシュ値とオフセットとを含むエントリが、データの物理アドレスを含むように更新され、物理アドレスは、以前は、ＴＯＩとオフセットとを含む別のエントリ（すなわちステップ４１８において作成されたエントリ）に存在していた。トランザクションにおいて２つ以上の書込要求が受取られ、処理されると（ステップ４１２〜４２０を参照）、インメモリデータ構造における複数のエントリが更新される。この段階で、コントローラは、＜親オブジェクトＩＤ，オフセット＞を使用して読取要求を提供し得るが、ＴＯＩを指定するいかなる要求も提供することができない。さらに、オフセットが、ステップ４１２において書込要求において受取られたオフセットに対応する場合に、＜親オブジェクトＩＤ，オフセット＞を含む読取要求が受取られると、その結果は、ステップ４１４においてデータフラグに格納されたデータである。
【００３９】
図５Ａ〜図５Ｃを参照して、図５Ａ〜図５Ｃは、本発明の１つ以上の実施例に係るマルチオブジェクトトランザクションを実行するためのフローチャートを示す。本発明の一実施例では、図５Ａ〜図５Ｃは、複数のオブジェクトに関連するトランザクションを実行するための方法を示し、各オブジェクトは、それ自体のトランザクションオブジェクトに関連付けられる。以下に記載されるように、各オブジェクトおよび対応するトランザクションオブジェクトは、（複数のオブジェクトを含む）トランザクション全体がコミットされるまで、その他のオブジェクトおよび対応するトランザクションオブジェクトから独立して動作し得る。したがって、以下の説明では、「トランザクション」は、単一のトランザクションオブジェクトを含むトランザクション、または複数のトランザクションオブジェクトを含むトランザクションのいずれかを指し得る。
【００４０】
図５Ａを参照して、ステップ５００において、トランザクションのための要求がストレージコントローラによって受取られ、当該要求は、親オブジェクトを指定する。親オブジェクトは、トランザクションが実行されるオブジェクトに対応する（例えば図７Ａを参照。親オブジェクトは、オブジェクトＩＤ＝Ａを有するオブジェクトである。）。ステップ５０２において、当該トランザクションのためにトランザクションオブジェクトが作成される。トランザクションオブジェクトの作成は、トランザクションのためのオブジェクトＩＤを指定することを含み得る。ステップ５０４において、当該トランザクションオブジェクトのためにメタデータ（ＭＤ）フラグが作成される。メタデータフラグは、トランザクションオブジェクトＩＤ（ＴＯＩ）と、親オブジェクトのためのオブジェクトＩＤと、トランザクションがコミットされないことを示すフィールドとを含み得る。メタデータフラグは、トランザクションオブジェクトのための他のメタデータも含み得る。
【００４１】
ステップ５０６において、当該メタデータフラグのために目次（ＴＯＣ）エントリ（ＭＤ  ＴＥと称される）が作成される。ＭＤ  ＴＥは、ＴＯＩと、オフセット＝−１とを含む。ＭＤ  ＴＥは、本発明から逸脱することなく、他の情報を含んでいてもよい。ステップ５０８において、ＭＤフラグおよびＭＤ  ＴＥがその後ストレージアレイに格納される。本発明の一実施例では、ＭＤフラグは、フラグページの一部としてストレージアレイに格納され、ＭＤ  ＴＥは、ＴＯＣページの一部としてストレージアレイに格納される。上記のフラグ、ＴＥおよびページを書込むタイミングは、本発明の実施例が如何に実現されるかに基づいてさまざまであり得る。
【００４２】
ステップ５１０において、トランザクションを開始させたクライアントにＴＯＩが提供される。ＴＯＩは、本発明から逸脱することなく、トランザクションに参加している他のクライアントに提供されてもよい。ステップ５１２において、作成されるさらなるトランザクションがあるか否かについて判断がなされる。もしあれば、プロセスはステップ５０２に進む。そうでなければ、プロセスはステップ５１４に進む。ステップ５１４において、トランザクションのうちの１つの一部としてデータを書込むための書込み要求が受取られる。書込要求は、ＴＯＩと、オフセットとを含む。ＴＯＩは、ステップ５０２の実行中に作成された任意のＴＯＩに対応し得る。ステップ５１６において、書込要求において識別されたデータを有するデータフラグが、（通常はフラグページの一部として）ストレージアレイにおけるデータフラグに格納される。ステップ５１８において、（ステップ５１６において格納された）データフラグのためのＴＥが作成され、（通常はＴＯＣページの一部として）ストレージアレイに格納される。データフラグのためのＴＥは、ＴＯＩと、オフセットとを含む。ＴＥは、親オブジェクトのためのオブジェクトＩＤを含まない。
【００４３】
ステップ５２０において、インメモリデータ構造は、（ｉ）ＴＯＩおよびオフセットから（図４に上記されたように）導き出されるハッシュ値と、（ｉｉ）ステップ５１６において格納されたデータフラグの物理アドレスとを含むエントリを含むように更新される。この段階で、ストレージコントローラは、ＴＯＩおよびオフセットを含む読取要求と、親オブジェクトのオブジェクトＩＤおよびオフセットを含む読取要求とを処理し得る。上記の読取要求を提供した結果として、通常は、２つの異なるデータ、すなわち＜ＴＯＩ，オフセット＞に対応するデータおよび＜親オブジェクトＩＤ，オフセット＞に対応するデータが取得され、これらのオフセットは同一である。ステップ５２２において、トランザクションのうちのいずれかのためのさらなる書込要求（すなわち、ステップ５０２の任意の実行中に作成されたＴＯＩのうちの１つを指定する書込要求）があるか否かについて判断がなされる。トランザクションのうちのいずれかのためのさらなる書込要求があれば、プロセスはステップ５１４に進む。そうでなければ、プロセスはステップ５２４に進む。
【００４４】
ステップ５２４において、２つ以上のＴＯＩを指定するコミット要求がクライアントから受取られる。ＴＯＩは、ステップ５０２において作成されたトランザクションに対応する。ステップ５２６において、対応するトランザクションオブジェクトＩＤ（ＴＯＩ）と、親オブジェクトのための対応するオブジェクトＩＤと、トランザクションがコミットされることを示すフィールドとを含む第２のＭＤフラグが、各トランザクションオブジェクト（すなわち、ステップ５０２において作成されたトランザクションに対応するトランザクションオブジェクト）ごとに作成される。また、上記の第２のＭＤフラグの各々のために第２のＭＤ  ＴＥが作成され、第２のＭＤ  ＴＥは、対応するＴＯＩと、オフセット＝−１とを含む。ステップ５２６は、ストレージアレイおよび／またはストレージコントローラがコピーオンライトスキームを実行するときに実行される。ストレージアレイおよび／またはストレージコントローラがコピーオンライトスキームを実行しない場合には、ステップ５２６は実行されなくてもよい。それどころか、ステップ５０４および５０６において作成されたＭＤ  ＴＥおよびＭＤフラグは、それぞれステップ４２４および４２６において作成されたＭＤ  ＴＥおよびＭＤフラグと同一の情報を含むように情報を含むように更新され得る。
【００４５】
ステップ５２８において、複合フラグが作成され、当該複合フラグは、複合オブジェクトに関連付けられ、ステップ５２６において作成されたＭＤ  ＴＥを含む。ステップ５３０において、複合フラグのためのＴＥが作成される。複合フラグのためのＴＥは、複合フラグのためのオブジェクトＩＤと、オフセット＝−１とを含む。複合フラグのためのＴＥは、複合ＴＥによって参照されるフラグが複合フラグであることも示し得る。ステップ５３２において、複合フラグ、複合フラグのためのＴＥ、および（ステップ５２６において作成された）ＭＤフラグが、ストレージアレイに格納される。複合フラグおよびＭＤフラグは、１つ以上のフラグページに格納され、複合フラグのためのＴＥは、ＴＯＣページに格納される。本発明の一実施例では、複合フラグの格納は、（トランザクションオブジェクトＩＤを介して）複合フラグにおいて指定された全てのトランザクションがコミットされたことを暗に示す。
【００４６】
ステップ５３４において、トランザクションがコミットされることを反映するようにインメモリデータ構造が更新される。具体的には、本発明の一実施例では、図４におけるステップ４３０に関して上記した態様で、インメモリデータ構造における複数のエントリが更新される。
【００４７】
図６Ａ〜図６Ｄは、本発明の１つ以上の実施例に係る例を示す。当該例は、本発明の範囲を限定するよう意図したものではない。
【００４８】
図６Ａを参照して、オブジェクトＩＤ＝Ａを有するオブジェクトがストレージアレイに存在するシナリオを考える。より具体的には、オブジェクトのためのＭＤ  ＴＯＣエントリおよびオブジェクトのための対応するＭＤフラグがあり、ＭＤフラグは、ハッシュ＜Ａ，−１＞を介してアクセス可能である。さらに、オブジェクトのためのデータを含むデータフラグ（データフラグＢ）があり、当該データは、＜Ａ，３＞に関連付けられる。上記のオブジェクトＩＤおよびオフセットは、ストレージアレイにおける対応するデータＴＥ（データＴＯＣエントリＢ）に格納される。この段階で、ストレージアレイには４つの項目があり、インメモリデータ構造には２つのエントリがある。インメモリデータ構造におけるエントリの各々は、上記のフラグのうちの１つを指し示す。
【００４９】
図６Ｂを参照して、オブジェクトＩＤ＝Ｂを指定するトランザクションをクライアントが要求するシナリオを考える。このシナリオでは、ＭＤフラグ（メタデータフラグＣ）が作成され、ストレージアレイに格納され、当該ＭＤフラグは、トランザクションオブジェクトＩＤ＝Ｂであり、オブジェクトＢのタイプがトランザクションであり、親オブジェクトＩＤ＝Ａであり、トランザクションがコミットされないことを指定する。対応するＭＤ  ＴＥ（メタデータＴＯＣエントリＣ）も作成され、ストレージアレイに格納され、ＭＤ  ＴＥは、オブジェクトＩＤ＝Ｂおよびオフセット＝−１を指定する。メタデータフラグＣのための対応するエントリも作成され、インメモリデータ構造に格納される。
【００５０】
図６Ｃを参照して、トランザクションのための書込要求がその後受取られ、処理されるシナリオを考える。書込要求を提供した結果は、データ（データ’）を有するデータフラグＤ、ならびに、オブジェクトＩＤ＝Ｂおよびオフセット＝３を指定する対応するデータＴＥ（データＴＯＣエントリＤ）である。データフラグＤのための対応するエントリも作成され、インメモリデータ構造に格納される。この段階で、ストレージアレイにおける４つの項目は、インメモリデータ構造における対応するエントリを介してアクセスされ得る。
【００５１】
図６Ｄを参照して、図６Ｃに関して上記したように書込要求が受取られ、処理された後、オブジェクトＩＤ＝Ｂを含むコミット要求が受取られると想定する。この段階で、トランザクションはコミットされる。トランザクションのコミットは、当該例に示されるように、（ｉ）オブジェクトＩＤ＝Ｂに対応するトランザクションがコミットされることを指定する新たなメタデータフラグＣを更新または作成することと、（ｉｉ）データフラグＢおよびデータＴＯＣエントリＢを無効にすることと、（ｉｉｉ）ハッシュ＜Ａ，３＞をデータフラグＤの物理アドレスに関連付けるようにインメモリデータ構造を更新することとを含み得る。
【００５２】
図７Ａ〜図７Ｄは、本発明の１つ以上の実施例に係る例を示す。当該例は、本発明の範囲を限定するよう意図したものではない。
【００５３】
２つのトランザクションがあり、１つが以下のトランザクションオブジェクト、すなわちオブジェクトＩＤ＝ＢおよびオブジェクトＩＤ＝Ｄの各々に関連付けられるシナリオを考える。さらに、オブジェクトＩＤ＝Ｂに関連付けられるトランザクションのための親オブジェクトＩＤはオブジェクトＩＤ＝Ａであり、オブジェクトＩＤ＝Ｄに関連付けられるトランザクションのための親オブジェクトＩＤはオブジェクトＩＤ＝Ｃであると想定する。最後に、オブジェクトＩＤ＝ＡおよびオブジェクトＩＤ＝Ｃの各々に関連付けられる（データフラグの形態の）データがあると想定する。図７Ａは、上記の想定に基づくストレージアレイの内容を示す。さらに、図７Ｂは、上記の想定に基づくインメモリデータ構造の内容を示す。
【００５４】
上記のトランザクションの各々について書込要求が提供され、その結果、２つのさらなるデータＴＥ（データＴＯＣエントリＢおよびデータＴＯＣエントリＤ）および２つのさらなるデータフラグ（データフラグＢおよびデータフラグＤ）がストレージアレイに格納され、データフラグＢは、データフラグＡと同一のオフセットに関連付けられ、データフラグＤは、データフラグＣと同一のオフセットに関連付けられると想定する。また、両方の書込要求が提供された後、オブジェクトＩＤ＝ＢおよびオブジェクトＩＤ＝Ｄを指定するコミット要求が受取られると想定する。当該コミット要求は、その後、複合フラグおよび対応するＭＤ  ＴＥ（メタデータＴＯＣエントリＥ）を作成してストレージアレイに格納することによって提供される。最後に、データフラグＡ、データＴＯＣエントリＡ、データフラグＣおよびデータＴＯＣエントリＣがストレージアレイにおいて無効にされ、インメモリデータ構造において対応するハッシュエントリを無効にする。図７Ｃは、上記の想定に基づくストレージアレイの内容を示す。さらに、図７Ｄは、上記の想定に基づくインメモリデータ構造の内容を示す。
【００５５】
本発明の一実施例では、最初のインメモリデータ構造は、全てのメタデータＴＯＣエントリおよび対応するフラグ（すなわちメタデータフラグまたは複合フラグ）において読取りを行うことによって生成され得る。このデータが取得されると、ストレージコントローラ（または関連のプロセス）は、インメモリデータ構造の最新の状態を再生成するためにメタデータフラグおよび複合フラグにおける情報を再検討することによってトランザクションを「リプレイする」ことができる。特に、オブジェクトがトランザクション（またはトランザクションオブジェクト）であり、トランザクションがコミットされないことを所与のＭＤフラグが示す場合、インメモリデータ構造においてエントリを作成するために、トランザクションに関連付けられたデータフラグ（すなわち、トランザクションオブジェクトＩＤを指定するＴＥと一致するデータフラグ）は使用されない。さらに、複合フラグが識別されると、ストレージコントローラ（または関連のプロセス）は、複合フラグにおけるメタデータＴＥを再帰的に処理する。
【００５６】
本発明の一実施例では、ソリッドステートメモリモジュールに格納された任意のデータに対して任意の動作（例えば読取動作、書込動作および／または消去動作）が行われる前に、インメモリデータ構造が生成される。
【００５７】
本発明は、ＴＯＣページとして確保されている各ブロックにおける最新のページに関連付けて説明されてきたが、本発明から逸脱することなく、ブロックにおける別のページを確保されたＴＯＣページとして設定することによって本発明の実施例が実現されてもよいということを当業者は理解するであろう。
【００５８】
本発明の実施例は、ソリッドステートメモリデバイスでの実現例に関連付けて説明されてきたが、本発明の実施例は、本発明から逸脱することなく、別のタイプの記憶装置を用いて実現されてもよい。
【００５９】
本発明の１つ以上の実施例は、システムにおける１つ以上のプロセッサによって実行される命令を用いて実現され得る。さらに、このような命令は、１つ以上の非一時的なコンピュータ読取可能媒体に格納されるコンピュータ読取可能命令に対応し得る。
【００６０】
本発明は、限られた数の実施例に関連付けて説明されてきたが、本明細書に開示されている本発明の範囲から逸脱しない他の実施例を考え出すことができるということを、本開示の利益を有する当業者は理解するであろう。したがって、本発明の範囲は、添付の特許請求の範囲によってのみ限定されるべきである。
【図１】
0005932171.tif 000002
【図２Ａ】
0005932171.tif 000003
【図２Ｂ】
0005932171.tif 000004
【図２Ｃ】
0005932171.tif 000005
【図２Ｄ】
0005932171.tif 000006
【図２Ｅ】
0005932171.tif 000007
【図２Ｆ】
0005932171.tif 000008
【図２Ｇ】
0005932171.tif 000009
【図２Ｈ】
0005932171.tif 000010
【図２Ｉ】
0005932171.tif 000011
【図３】
0005932171.tif 000012
【図４】
0005932171.tif 000013
【図５Ａ】
0005932171.tif 000014
【図５Ｂ】
0005932171.tif 000015
【図５Ｃ】
0005932171.tif 000016
【図６Ａ】
0005932171.tif 000017
【図６Ｂ】
0005932171.tif 000018
【図６Ｃ】
0005932171.tif 000019
【図６Ｄ】
0005932171.tif 000020
【図７Ａ】
0005932171.tif 000021
【図７Ｂ】
0005932171.tif 000022
【図７Ｃ】
0005932171.tif 000023
【図７Ｄ】
0005932171.tif 000024