(57)【特許請求の範囲】
【請求項１】
データユニットの記憶を管理するためのシステムであって、
複数のデータブロックを記憶するように構成されたデータ記憶システムであって、前記データブロックの少なくとも一部が、複数のデータユニットを含み、少なくとも１つのグループが、隣接して記憶される前記データブロックを含み、それによって、前記グループの少なくとも２つの隣接するデータブロックからデータユニットを取り出す第１の読み取り操作をサポートする、データ記憶システムと、
前記データ記憶システムに接続され、データユニットに関連する１又は２以上の操作を実行するように構成された、少なくとも１つのプロセッサを含むインターフェースであって、前記操作が、第１のデータユニットを含む第１のデータブロックを、前記第１のデータユニットを含まない第２のデータブロックで置き換え、前記第１のデータユニットについての情報及びオーバーヘッド情報を記憶する削除操作を含み、前記第１のデータユニットについての情報及び前記オーバーヘッド情報の両方が前記第２のデータブロック内で記憶され、前記オーバーヘッド情報のサイズが、前記第１のデータユニットについての情報及び前記オーバーヘッド情報が前記第２のデータブロック内に記憶された後に前記第２のデータブロックが前記第１のデータブロックと同じサイズを有するように、前記第１のデータユニットについての情報のサイズに依存する、前記インターフェースとを含む、前記システム。
【請求項２】
第２のデータブロックが、データ記憶システム内で第１のデータブロックに隣接していたデータブロックに隣接している、請求項１に記載のシステム。
【請求項３】
第２のデータブロックが、第１のデータブロックと同じ記憶空間に記憶される、請求項１又は２に記載のシステム。
【請求項４】
削除操作が、第１のデータブロック以外のデータブロックを、前記削除操作が実行される前に前記データブロックが記憶されていたデータ記憶システム内の同じ記憶位置に維持する、請求項１、２、及び３のいずれかに記載のシステム。
【請求項５】
データ記憶システムが、データブロックの少なくとも一部に関して、前記データブロックからの１又は２以上のデータユニットの以前の削除についての対応する履歴情報を記憶するように構成され、前記削除が、前記データブロックのデータユニットの少なくとも一部のアドレスに影響を与える、請求項１〜４のいずれかに記載のシステム。
【請求項６】
操作が、特定のデータブロックに対応する任意の記憶された履歴情報に基づいて解釈されたアドレス情報に従って前記特定のデータブロックに記憶された少なくとも第２のデータユニットにアクセスする、第１の読み取り操作とは異なる第２の読み取り操作を含む、請求項５に記載のシステム。
【請求項７】
削除操作が、第２のデータブロックに対応する履歴情報に第１のデータユニットについての情報を記憶する、請求項５又は６に記載のシステム。
【請求項８】
履歴情報の少なくとも一部が、データ記憶システムに記憶される、請求項５、６、及び７のいずれかに記載のシステム。
【請求項９】
履歴情報の少なくとも一部が、異なるデータブロックの間にインターリーブされる、請求項８に記載のシステム。
【請求項１０】
特定のデータブロックに対応する履歴情報の少なくとも一部が、前記特定のデータブロックの所定の部分に記憶される、請求項８又は９に記載のシステム。
【請求項１１】
データブロックの少なくとも一部が、圧縮されたデータブロックである、請求項１〜１０のいずれかに記載のシステム。
【請求項１２】
第２の読み取り操作が、特定の圧縮されたデータブロックを解凍して１組の解凍されたデータユニットを復元し、前記特定の圧縮されたデータブロックに対応する履歴情報に少なくとも部分的に基づいて基準位置から特定のオフセットにある読み取られるデータユニットを取り出す、請求項１１に記載のシステム。
【請求項１３】
第１の読み取り操作が、複数の圧縮されたデータブロックを解凍し、複数の解凍されたデータユニットを順次読み取る、請求項１１又は１２に記載のシステム。
【請求項１４】
削除操作が、第２の圧縮されたデータブロックと第１の圧縮されたデータブロックとの間のサイズの差を補償するために前記第２の圧縮されたデータブロックの記憶されるサイズを拡張する、請求項１１〜１３のいずれかに記載のシステム。
【請求項１５】
第２の圧縮されたデータブロックの記憶されるサイズが、前記第２の圧縮されたデータブロックに対応する履歴情報に加えて前記第２の圧縮されたデータブロックに関連するオーバーヘッド情報を記憶することによって拡張される、請求項１４に記載のシステム。
【請求項１６】
削除操作が、第２の圧縮されたデータブロックに関連する新しい誤り検出符号を記憶して、第１の圧縮されたデータブロックに関連する誤り検出符号を置き換える、請求項１１〜１５のいずれかに記載のシステム。
【請求項１７】
操作が、１組の最近追加されたデータユニットに関連して追加されるデータユニットを記憶する追加操作を含む、請求項１１〜１６のいずれかに記載のシステム。
【請求項１８】
プロセッサが、１組の最近追加されたデータユニットを記憶媒体に記憶される圧縮されたデータブロックとして圧縮するようにさらに構成される、請求項１７に記載のシステム。
【請求項１９】
データ記憶システムが、グループのデータブロックを所定の記憶フォーマットに準拠するものとして特定するオーバーヘッド情報を記憶するように構成される、請求項１〜１８のいずれかに記載のシステム。
【請求項２０】
オーバーヘッド情報が、所定の記憶フォーマットを特定するグループの各データブロックのヘッダに識別子を含む、請求項１９に記載のシステム。
【請求項２１】
第１の読み取り操作が、所定の記憶フォーマットと親和性がある、請求項１９に記載のシステム。
【請求項２２】
データユニットの記憶を管理するためのシステムであって、
複数のデータブロックを記憶するための手段であって、前記データブロックの少なくとも一部が、複数のデータユニットを含み、少なくとも１つのグループが、隣接して記憶される前記データブロックを含み、それによって、前記グループの少なくとも２つの隣接するデータブロックからデータユニットを取り出す第１の読み取り操作をサポートする、前記手段と、
データユニットに関連する１又は２以上の操作を実行するための手段であって、前記操作が、第１のデータユニットを含む第１のデータブロックを、前記第１のデータユニットを含まない第２のデータブロックで置き換え、前記第１のデータユニットに関連する情報及びオーバーヘッド情報を記憶する削除操作を含み、前記第１のデータユニットについての情報及び前記オーバーヘッド情報の両方が前記第２のデータブロック内に記憶され、前記オーバーヘッド情報のサイズが、前記第１のデータユニットについての情報及び前記オーバーヘッド情報が前記第２のデータブロック内に記憶された後に第２のデータブロックが第１のデータブロックと同じサイズを有するように、前記第１のデータユニットについての情報のサイズに依存する、前記手段とを含む、前記システム。
【請求項２３】
データユニットの記憶を管理するための方法であって、
データ記憶システムに複数のデータブロックを記憶するステップであって、前記データブロックの少なくとも一部が、複数のデータユニットを含み、少なくとも１つのグループが、隣接して記憶される前記データブロックを含み、それによって、前記グループの少なくとも２つの隣接するデータブロックからデータユニットを取り出す第１の読み取り操作をサポートする、ステップと、
少なくとも１つのプロセッサを用いて、データユニットに関連する１又は２以上の操作を実行するステップであって、前記操作が、第１のデータユニットを含む第１のデータブロックを、前記第１のデータユニットを含まない第２のデータブロックで置き換え、前記第１のデータユニットについての情報及びオーバーヘッド情報を記憶する削除操作を含み、前記第１のデータユニットについての情報及び前記オーバーヘッド情報の両方が前記第２のデータブロック内に記憶され、前記オーバーヘッド情報のサイズが、前記第１のデータユニットについての情報及び前記オーバーヘッド情報が前記第２のデータブロック内に記憶された後に第２のデータブロックが第１のデータブロックと同じサイズを有するように、前記第１のデータユニットについての情報のサイズに依存する、ステップとを含む、前記方法。
【請求項２４】
データユニットの記憶を管理するための、コンピュータ可読媒体に記憶されたソフトウェアであって、コンピューティングシステムに、
データ記憶システムに複数のデータブロックを記憶することであって、前記データブロックの少なくとも一部が、複数のデータユニットを含み、少なくとも１つのグループが、隣接して記憶される前記データブロックを含み、それによって、前記グループの少なくとも２つの隣接するデータブロックからデータユニットを取り出す第１の読み取り操作をサポートする、記憶することと、
データユニットに関連する１又は２以上の操作を実行することであって、前記操作が、第１のデータユニットを含む第１のデータブロックを、前記第１のデータユニットを含まない第２のデータブロックで置き換え、前記第１のデータユニットについての情報及びオーバーヘッド情報を記憶する削除操作を含み、前記第１のデータユニットについての情報及び前記オーバーヘッド情報の両方が、前記第２のデータブロック内に記憶され、前記オーバーヘッド情報のサイズが、前記第１のデータユニットについての情報及び前記オーバーヘッド情報が前記第２のデータブロック内に記憶された後に第２のデータブロックが第１のデータブロックと同じサイズを有するように、前記第１のデータユニットについての情報のサイズに依存する、実行することとを行わせるための命令を含む、前記ソフトウェア。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１３年３月６日に出願した米国特許出願第１３／７８７，２０３号の優先権を主張するものである。
【背景技術】
【０００２】
この説明は、記憶されたデータユニットに対する操作を管理することに関する。
【０００３】
データ記憶システムは、データユニットを記憶するか、取り出すか、又は削除するためのさまざまな操作を提供する。「データユニット」は、取り出され得る記憶されたデータによって表される情報の任意の単位である（例えば、データユニットは、個々のレコードを表す可能性がある）。異なるシステムは、異なる記憶フォーマット、及び操作を実行するための異なる技術を使用する可能性がある。例えば、一部のシステムに関して、データユニットを削除することは、データユニットの位置を特定するためのポインタ若しくはインデックスのエントリを削除することをともなう可能性があり、又はデータユニットを上書きすることをともなう可能性がある。データユニットは、個々に記憶されるか、或いは（同じ又は異なる表現の）複数のデータユニットを含む「データブロック」（又は「データのブロック」若しくは「圧縮されたブロック」）内に記憶される可能性がある。一部のシステムは、操作の実施形態に影響を与えるか、又はどの操作がサポートされるかにさえも影響を与える可能性があるデータ圧縮又はデータ符号化などの特徴を提供する。例えば、データの単一のブロックに圧縮された複数のデータユニットを含む記憶フォーマットは、圧縮されたブロック（例えば、古い又は期限切れのブロック）のグループの削除をサポートする可能性があるが、それらのブロック内の個々のデータユニットの削除をサポートしない可能性がある。
【発明の概要】
【課題を解決するための手段】
【０００４】
一態様においては、概して、データユニットの記憶を管理するためのシステムが、複数のデータブロックを記憶するように構成されたデータ記憶システムであって、データブロックの少なくとも一部が、複数のデータユニットを含み、データブロックの少なくとも１グループが隣接（contiguously）して記憶され、それによって、グループの少なくとも２つの隣接（adjacent）するデータブロックからデータユニットを取り出す第１の読み取り操作をサポートする（例えば、第１の読み取り操作は、ストレージインターフェースモジュール１０４、又はデータ記憶システムへの別のインターフェースが実行するように構成されるある種の機能又はプログラムである可能性がある）、データ記憶システムを含む。システムは、データ記憶システムに接続され、データユニットに関連する１又は２以上の操作を実行するように構成された、少なくとも１つのプロセッサを含むインターフェースであって、操作が、第２のデータブロックが第１のデータブロックと同じサイズを有するようにして、削除されるデータユニットを含む第１のデータブロックを、削除されたデータユニットを含まない第２のデータブロックで置き換える削除操作を含む、インターフェースも含む。
【０００５】
態様は、以下の特徴のうちの１又は２以上を含み得る。
【０００６】
第２のデータブロックは、データ記憶システム内で第１のデータブロックに隣接していたデータブロックに隣接している。
【０００７】
第２のデータブロックは、第１のデータブロックと同じ記憶空間に記憶される。
【０００８】
削除操作は、第１のデータブロック以外のデータブロックを、削除操作が実行される前にそれらのデータブロックが記憶されていたデータ記憶システム内の同じ記憶位置に維持する。
【０００９】
データ記憶システムは、データブロックの少なくとも一部に関して、そのデータブロックからの１又は２以上のデータユニットの以前の削除についての対応する履歴情報を記憶するように構成され、削除は、そのデータブロックのデータユニットの少なくとも一部のアドレスに影響を与える。
【００１０】
操作は、特定のデータブロックに対応する任意の記憶された履歴情報に基づいて解釈されたアドレス情報に従って特定のデータブロックに記憶された少なくとも第１のデータユニットにアクセスする、第１の読み取り操作とは異なる第２の読み取り操作を含む。
【００１１】
削除操作は、第２のデータブロックに対応する履歴情報に削除されたデータユニットについての情報を記憶する。
【００１２】
履歴情報の少なくとも一部は、データ記憶システムに記憶される。
【００１３】
履歴情報の少なくとも一部は、異なるデータブロックの間にインターリーブされる。
【００１４】
特定のデータブロックに対応する履歴情報の少なくとも一部は、その特定のデータブロックの所定の部分に記憶される。
【００１５】
データブロックの少なくとも一部は、圧縮されたデータブロックである。
【００１６】
第２の読み取り操作は、特定の圧縮されたデータブロックを解凍して１組の解凍されたデータユニットを復元し、その特定の圧縮されたデータブロックに対応する履歴情報に少なくとも部分的に基づいて基準位置から特定のオフセットにある読み取られるデータユニットを取り出す。
【００１７】
第１の読み取り操作は、複数の圧縮されたデータブロックを解凍し、複数の解凍されたデータユニットを順次読み取る。
【００１８】
削除操作は、第２の圧縮されたデータブロックと第１の圧縮されたデータブロックとの間のサイズの差を補償するために第２の圧縮されたデータブロックの記憶されるサイズを拡張する。
【００１９】
第２の圧縮されたデータブロックの記憶されるサイズは、第２の圧縮されたデータブロックに対応する履歴情報に加えて第２の圧縮されたデータブロックに関連するオーバーヘッド情報を記憶することによって拡張される。
【００２０】
削除操作は、第２の圧縮されたデータブロックに関連する新しい誤り検出符号を記憶して、第１の圧縮されたデータブロックに関連する誤り検出符号を置き換える。
【００２１】
操作は、１組の最近追加されたデータユニットに関連して追加されるデータユニットを記憶する追加操作を含む。
【００２２】
プロセッサは、１組の最近追加されたデータユニットを記憶媒体に記憶される圧縮されたデータブロックとして圧縮するようにさらに構成される。
【００２３】
データ記憶システムは、グループのデータブロックを所定の記憶フォーマットに準拠するものとして特定するオーバーヘッド情報を記憶するように構成される。
【００２４】
オーバーヘッド情報は、所定の記憶フォーマットを特定するグループの各データブロックのヘッダに識別子を含む。
【００２５】
第１の読み取り操作は、所定の記憶フォーマットと親和性がある。
【００２６】
別の態様においては、概して、データユニットの記憶を管理するためのシステムが、複数のデータブロックを記憶するための手段であって、データブロックの少なくとも一部が、複数のデータユニットを含み、データブロックの少なくとも１グループが隣接して記憶され、それによって、グループの少なくとも２つの隣接するデータブロックからデータユニットを取り出す第１の読み取り操作をサポートする、手段を含む。システムは、データユニットに関連する１又は２以上の操作を実行するための手段であって、操作が、第２のデータブロックが第１のデータブロックと同じサイズを有するようにして、削除されるデータユニットを含む第１のデータブロックを、削除されたデータユニットを含まない第２のデータブロックで置き換える削除操作を含む、手段も含む。
【００２７】
別の態様においては、概して、データユニットの記憶を管理するための方法が、データ記憶システムに複数のデータブロックを記憶するステップであって、データブロックの少なくとも一部が、複数のデータユニットを含み、データブロックの少なくとも１グループが隣接して記憶され、それによって、グループの少なくとも２つの隣接するデータブロックからデータユニットを取り出す第１の読み取り操作をサポートする、ステップを含む。方法は、少なくとも１つのプロセッサを用いて、データユニットに関連する１又は２以上の操作を実行するステップであって、操作が、第２のデータブロックが第１のデータブロックと同じサイズを有するようにして、削除されるデータユニットを含む第１のデータブロックを、削除されたデータユニットを含まない第２のデータブロックで置き換える削除操作を含む、ステップも含む。
【００２８】
別の態様においては、概して、ソフトウェアが、データユニットの記憶を管理するためにコンピュータ可読媒体に記憶される。ソフトウェアは、コンピューティングシステムに、データ記憶システムに複数のデータブロックを記憶することであって、データブロックの少なくとも一部が、複数のデータユニットを含み、データブロックの少なくとも１グループが隣接して記憶され、それによって、グループの少なくとも２つの隣接するデータブロックからデータユニットを取り出す第１の読み取り操作をサポートする、記憶することと、データユニットに関連する１又は２以上の操作を実行することであって、操作が、第２のデータブロックが第１のデータブロックと同じサイズを有するようにして、削除されるデータユニットを含む第１のデータブロックを、削除されたデータユニットを含まない第２のデータブロックで置き換える削除操作を含む、実行することとを行わせる命令を含む。
【００２９】
別の態様においては、概して、データユニットの記憶を管理するためのシステムが、複数のデータブロックを記憶するように構成されたデータ記憶システムであって、データブロックの少なくとも一部が、複数のデータユニットを含み、データブロックの少なくとも１グループが隣接して記憶され、それによって、グループの少なくとも２つの隣接するデータブロックからデータユニットを取り出す第１の読み取り操作をサポートする（例えば、第１の読み取り操作は、ストレージインターフェースモジュール１０４、又はデータ記憶システムへの別のインターフェースが実行するように構成されるある種の機能又はプログラムである可能性がある）、データ記憶システムを含む。システムは、データ記憶システムに接続され、データユニットに関連する２又は３以上の操作を実行するように構成された、少なくとも１つのプロセッサを含むインターフェースも含む。操作は、読み取られるデータユニットを含むデータブロックのアドレスに少なくとも部分的に基づいて読み取られるデータユニットを取り出す、第１の読み取り操作とは異なる第２の読み取り操作、及び削除されるデータユニットを含む第１のデータブロックを、削除されたデータユニットを含まない第２のデータブロックで置き換える削除操作を含む。
【００３０】
態様は、以下の特徴のうちの１又は２以上を含み得る。
【００３１】
データ記憶システムは、データブロックの少なくとも一部に関して、そのデータブロックからの１又は２以上のデータユニットの以前の削除についての対応する履歴情報を記憶するように構成され、削除は、そのデータブロックのデータユニットの少なくとも一部のアドレスに影響を与える。
【００３２】
第２の読み取り操作は、特定のデータブロックに対応する任意の記憶された履歴情報に基づいて解釈されたアドレス情報に従って特定のデータブロックに記憶された少なくとも第１のデータユニットにアクセスする。
【００３３】
削除操作は、新しいデータブロックに対応する履歴情報に削除されたデータユニットについての情報を記憶する。
【００３４】
履歴情報の少なくとも一部は、データ記憶システムに記憶される。
【００３５】
履歴情報の少なくとも一部は、異なるデータブロックの間にインターリーブされる。
【００３６】
特定のデータブロックに対応する履歴情報の少なくとも一部は、その特定のデータブロックの所定の部分に記憶される。
【００３７】
データブロックの少なくとも一部は、圧縮されたデータブロックである。
【００３８】
第２の読み取り操作は、特定の圧縮されたデータブロックを解凍して１組の解凍されたデータユニットを復元し、その特定の圧縮されたデータブロックに対応する履歴情報に少なくとも部分的に基づいて基準位置から特定のオフセットにある読み取られるデータユニットを取り出す。
【００３９】
第１の読み取り操作は、複数の圧縮されたデータブロックを解凍し、複数の解凍されたデータユニットを順次読み取る。
【００４０】
削除操作は、第２の圧縮されたデータブロックと第１の圧縮されたデータブロックとの間のサイズの差を補償するために第２の圧縮されたデータブロックの記憶されるサイズを拡張する。
【００４１】
第２の圧縮されたデータブロックの記憶されるサイズは、第２の圧縮されたデータブロックに対応する履歴情報に加えて第２の圧縮されたデータブロックに関連するオーバーヘッド情報を記憶することによって拡張される。
【００４２】
削除操作は、第２の圧縮されたデータブロックに関連する新しい誤り検出符号を記憶して、第１の圧縮されたデータブロックに関連する誤り検出符号を置き換える。
【００４３】
操作は、１組の最近追加されたデータユニットに関連して追加されるデータユニットを記憶する追加操作を含む。
【００４４】
プロセッサは、１組の最近追加されたデータユニットを記憶媒体に記憶される圧縮されたデータブロックとして圧縮するようにさらに構成される。
【００４５】
第２の読み取り操作は、１組の解凍されたデータユニットを復元するために、特定の識別子を有するデータユニットを含むものとしてデータブロックを示すインデックスに基づいて読み取られるデータユニットを含むデータブロックの位置を特定し、解凍されたデータユニット内で読み取られるデータユニットを検索する。
【００４６】
データ記憶システムは、グループのデータブロックを所定の記憶フォーマットに準拠するものとして特定するオーバーヘッド情報を記憶するように構成される。
【００４７】
オーバーヘッド情報は、所定の記憶フォーマットを特定するグループの各データブロックのヘッダに識別子を含む。
【００４８】
第１の読み取り操作は、所定の記憶フォーマットと親和性がある。
【００４９】
別の態様においては、概して、データユニットの記憶を管理するためのシステムが、複数のデータブロックを記憶するための手段であって、データブロックの少なくとも一部が、複数のデータユニットを含み、データブロックの少なくとも１グループが隣接して記憶され、それによって、グループの少なくとも２つの隣接するデータブロックからデータユニットを取り出す第１の読み取り操作をサポートする、手段を含む。システムは、データユニットに関連する２又は３以上の操作を実行するための手段も含む。操作は、読み取られるデータユニットを含むデータブロックのアドレスに少なくとも部分的に基づいて読み取られるデータユニットを取り出す、第１の読み取り操作とは異なる第２の読み取り操作、及び削除されるデータユニットを含む第１のデータブロックを、削除されたデータユニットを含まない第２のデータブロックで置き換える削除操作を含む。
【００５０】
別の態様においては、概して、データユニットの記憶を管理するための方法が、データ記憶システムに複数のデータブロックを記憶するステップであって、データブロックの少なくとも一部が、複数のデータユニットを含み、データブロックの少なくとも１グループが隣接して記憶され、それによって、グループの少なくとも２つの隣接するデータブロックからデータユニットを取り出す第１の読み取り操作をサポートする、ステップを含む。方法は、少なくとも１つのプロセッサを用いて、データユニットに関連する２又は３以上の操作を実行するステップも含む。操作は、読み取られるデータユニットを含むデータブロックのアドレスに少なくとも部分的に基づいて読み取られるデータユニットを取り出す、第１の読み取り操作とは異なる第２の読み取り操作、及び削除されるデータユニットを含む第１のデータブロックを、削除されたデータユニットを含まない第２のデータブロックで置き換える削除操作を含む。
【００５１】
別の態様においては、概して、ソフトウェアが、データユニットの記憶を管理するためにコンピュータ可読媒体に記憶される。ソフトウェアは、コンピューティングシステムに、データ記憶システムに複数のデータブロックを記憶することであって、データブロックの少なくとも一部が、複数のデータユニットを含み、データブロックの少なくとも１グループが隣接して記憶され、それによって、グループの少なくとも２つの隣接するデータブロックからデータユニットを取り出す第１の読み取り操作をサポートする、記憶することと、データユニットに関連する２又は３以上の操作を実行することとを行わせるための命令を含む。操作は、読み取られるデータユニットを含むデータブロックのアドレスに少なくとも部分的に基づいて読み取られるデータユニットを取り出す、第１の読み取り操作とは異なる第２の読み取り操作、及び削除されるデータユニットを含む第１のデータブロックを、削除されたデータユニットを含まない第２のデータブロックで置き換える削除操作を含む。
【００５２】
別の態様においては、概して、データユニットの記憶を管理するためのシステムが、複数のデータブロックを記憶するように構成され、データブロックの少なくとも一部が複数のデータユニットを含むデータ記憶システムであって、データブロックの少なくとも一部に関して、そのデータブロックからの１又は２以上のデータユニットの以前の削除についての対応する履歴情報を記憶するように構成され、削除が、そのデータブロックのデータユニットの少なくとも一部のアドレスに影響を与える、データ記憶システムを含む。システムは、データ記憶システムに接続され、第１のデータブロックに対応する任意の記憶された履歴情報に基づいて解釈されたアドレス情報に従って第１のデータブロックに記憶された少なくとも第１のデータユニットにアクセスする少なくとも１つの操作を実行するように構成された、少なくとも１つのプロセッサを含むインターフェースも含む。
【００５３】
態様は、以下の特徴のうちの１又は２以上を含み得る。
【００５４】
第１のデータブロックに対応する履歴情報は、第１のデータブロックから解凍されたデータユニットの相対的なオフセットに影響を与える第１のデータブロックからの１又は２以上のデータユニットの以前の削除についての情報を含む。
【００５５】
データブロックの少なくとも一部は、圧縮されたデータブロックである。
【００５６】
インターフェースは、データユニットに関連する２又は３以上の操作を実行するように構成され、操作は、基準アドレスに対してデータユニットの位置を特定するアドレス情報に少なくとも部分的に基づいて読み取られるデータユニットを取り出す読み取り操作と、削除されるデータユニットを削除し、削除されるデータユニットの削除が原因である基準アドレスに対するあらゆるシフトを考慮に入れるためにその他のデータユニットに関するアドレス情報を解釈するための削除されたデータユニットについての履歴情報を記憶する削除操作とを含む。
【００５７】
インターフェースは、データユニットに関連する２又は３以上の操作を実行するように構成され、操作は、圧縮されたデータブロックに対応する履歴情報に少なくとも部分的に基づいて読み取られるデータユニットを取り出す第１の読み取り操作と、削除されるデータユニットを含む第１の圧縮されたデータブロックを、削除されたデータユニットを含まない第２の圧縮されたデータブロックで置き換え、第２の圧縮されたデータブロックに対応する履歴情報に削除されたデータユニットについての情報を記憶する削除操作とを含む。
【００５８】
第１の読み取り操作は、特定の圧縮されたデータブロックを解凍して１組の解凍されたデータユニットを復元し、その特定の圧縮されたデータブロックに対応する履歴情報に少なくとも部分的に基づいて基準位置から特定のオフセットにある読み取られるデータユニットを取り出す。
【００５９】
第１の読み取り操作は、履歴情報が１又は２以上の既に削除されたデータユニットについての情報を含むか否かを判定する。
【００６０】
履歴情報が１又は２以上の既に削除されたデータユニットについての情報を含む場合、第１の読み取り操作は、既に削除されたデータユニットのうちの少なくとも１つのオフセットを示す履歴情報内の値と特定のオフセットを比較することに基づいて特定のオフセットを調整すべきか否かを判定する。
【００６１】
特定のオフセットが調整されるべきである場合、第１の読み取り操作は、１又は２以上の既に削除されたデータユニットのオフセット及びサイズに基づいて特定のオフセットを調整する。
【００６２】
削除操作は、第２の圧縮されたデータブロックと第１の圧縮されたデータブロックとの間のサイズの差を補償するために第２の圧縮されたデータブロックの記憶されるサイズを拡張する。
【００６３】
第２の圧縮されたデータブロックの記憶されるサイズは、第２の圧縮されたデータブロックに対応する履歴情報に加えて第２の圧縮されたデータブロックに関連するオーバーヘッド情報を記憶することによって拡張される。
【００６４】
削除操作は、第２の圧縮されたデータブロックに関連する新しい誤り検出符号を記憶して、第１の圧縮されたデータブロックに関連する誤り検出符号を置き換える。
【００６５】
操作は、１組の最近追加されたデータユニットに関連して追加されるデータユニットを記憶する追加操作を含む。
【００６６】
プロセッサは、１組の最近追加されたデータユニットを記憶媒体に記憶される圧縮されたデータブロックとして圧縮するようにさらに構成される。
【００６７】
操作は、１又は２以上の圧縮されたデータブロックを解凍し、複数の解凍されたデータユニットを順次読み取る、第１の読み取り操作とは異なる第２の読み取り操作を含む。
【００６８】
操作は、１組の解凍されたデータユニットを復元するために、特定の識別子を有するデータユニットを含むものとしてインデックスによって示される特定の圧縮されたデータブロックを解凍し、解凍されたデータユニット内で特定の識別子を有するデータユニットを検索する、第１の及び第２の読み取り操作とは異なる第３の読み取り操作を含む。
【００６９】
履歴情報の少なくとも一部は、データ記憶システムに記憶される。
【００７０】
履歴情報の少なくとも一部は、異なるデータブロックの間にインターリーブされる。
【００７１】
特定のデータブロックに対応する履歴情報の少なくとも一部は、その特定のデータブロックの所定の部分に記憶される。
【００７２】
別の態様においては、概して、データユニットの記憶を管理するためのシステムが、複数のデータブロックを記憶するための、データブロックの少なくとも一部が複数のデータユニットを含む手段であって、データブロックの少なくとも一部に関して、そのデータブロックからの１又は２以上のデータユニットの以前の削除についての対応する履歴情報を記憶するように構成され、削除が、そのデータブロックのデータユニットの少なくとも一部のアドレスに影響を与える、手段を含む。システムは、第１のデータブロックに対応する任意の記憶された履歴情報に基づいて解釈されたアドレス情報に従って第１のデータブロックに記憶された少なくとも第１のデータユニットにアクセスする少なくとも１つの操作を実行するための手段も含む。
【００７３】
別の態様においては、概して、データユニットの記憶を管理するための方法が、データ記憶システムに複数のデータブロックを記憶するステップであって、データブロックの少なくとも一部が複数のデータユニットを含み、データ記憶システムが、データブロックの少なくとも一部に関して、そのデータブロックからの１又は２以上のデータユニットの以前の削除についての対応する履歴情報を記憶するように構成され、削除が、そのデータブロックのデータユニットの少なくとも一部のアドレスに影響を与える、ステップを含む。方法は、第１のデータブロックに対応する任意の記憶された履歴情報に基づいて解釈されたアドレス情報に従って第１のデータブロックに記憶された少なくとも第１のデータユニットにアクセスする少なくとも１つの操作を、少なくとも１つのプロセッサを用いて実行するステップも含む。
【００７４】
別の態様においては、概して、ソフトウェアが、データユニットの記憶を管理するためにコンピュータ可読媒体に記憶される。ソフトウェアは、コンピューティングシステムに、データ記憶システムに複数のデータブロックを記憶することであって、データブロックの少なくとも一部が複数のデータユニットを含み、データ記憶システムが、データブロックの少なくとも一部に関して、そのデータブロックからの１又は２以上のデータユニットの以前の削除についての対応する履歴情報を記憶するように構成され、削除が、そのデータブロックのデータユニットの少なくとも一部のアドレスに影響を与える、記憶することと、第１のデータブロックに対応する任意の記憶された履歴情報に基づいて解釈されたアドレス情報に従って第１のデータブロックに記憶された少なくとも第１のデータユニットにアクセスする少なくとも１つの操作を実行することとを行わせるための命令を含む。
【００７５】
態様は、以下の利点のうちの１又は２以上を含む可能性がある。
【００７６】
例えば、データが顧客の要求に応じて削除されることを必要とするプライバシーに関する法律を遵守するために有用である可能性がある、圧縮されたデータストアからデータユニットを完全に削除する削除操作が、提供される。特定のアドレスのデータユニットの位置を特定するポインタ、又は基準アドレスからの相対的なオフセットは、削除されたデータユニットの削除によって影響を受ける可能性がある。しかし、それらのポインタは、削除操作が実行される時に変更される必要がないか、又は位置を特定される必要さえない。その代わりに、ポインタは、それらのデータユニットが常に実際にアクセスされる場合、必要に応じて後で補正され得る。データストアの多くの使用に関して、そのような要求に応じたポインタの補正は、削除時にポインタの位置を特定し、補正するよりも効率的である。また、多ブロックの圧縮されたデータストアの圧縮されたブロックからの削除されたデータユニットの削除は、１又は２以上の圧縮されたデータブロックから復元された複数のデータユニットをスキャンすることによってデータユニットを読み取る操作との削除操作の親和性を保つようにして実行される。例えば、削除操作は、知られている圧縮フォーマット（例えば、ｇｚｉｐ）で記憶されたファイルに標準的な解凍機能（例えば、ｇｚｃａｔ）を適用し、（例えば、レコードフォーマットに従って）解凍されたデータを解釈して、インデックス又はその他のアドレス情報に頼ることなく個々のレコードをデータユニットとして順次復元するスキャン読み取り操作と親和性がある可能性がある。削除操作の後にファイルが、圧縮されたデータブロックの間にいかなる間隙も持たないことを保証することによって、スキャン読み取り操作は、ファイル全体が移動されるか又は書き直される必要なしに圧縮フォーマットを引き続き正しく解析することができる。加えて、履歴情報を用いて、削除操作は、いずれかのデータユニットが、圧縮されたデータストアから既に削除されたか否かに関わりなく、アドレス情報に確かに依存する読み取り操作が適切に機能し続けるように実装され得る。
【００７７】
本発明のその他の特徴及び利点は、以下の説明及び請求項から明らかになるであろう。
【図面の簡単な説明】
【００７８】
【図１】データ記憶システムのブロック図である。
【図２】データ記憶フォーマットの概略図である。
【図３Ａ−３Ｄ】データ操作の流れ図である。
【発明を実施するための形態】
【００７９】
図１は、データ記憶技術が使用され得るデータ処理システム１００の例を示す。実行環境１０２が、データ記憶システム１０６に記憶されたデータユニットに関連するデータ操作を実行するように構成されたストレージインターフェースモジュール１０４を含む。実行環境１０２は、例えば、あるバージョンのＵＮＩＸオペレーティングシステムなどの好適なオペレーティングシステムの制御下の１又は２以上の汎用コンピュータでホストされる可能性がある。例えば、実行環境１０２は、ローカルの（例えば、対称型マルチプロセッシング（ＳＭＰ，symmetric multi-processing）コンピュータなどのマルチプロセッサシステム）又はローカルに分散された（例えば、クラスタ若しくは超並列処理（ＭＰＰ，massively parallel processing）システムとして接続された複数のプロセッサ）か、或いは遠隔の又は遠隔に分散された（例えば、ローカルエリアネットワーク（ＬＡＮ，local area network）及び／若しくは広域ネットワーク（ＷＡＮ，wide-area network）を介して接続された複数のプロセッサ）か、或いはこれらの任意の組合せかのいずれかの複数の中央演算処理装置（ＣＰＵ，central processing unit）或いはプロセッサコアを用いるコンピュータシステムの構成を含むマルチノード並列コンピューティング環境を含む可能性もある。データ記憶システム１０６は、実行環境１０２のローカルにあり、例えば、実行環境１０２をホストするコンピュータに接続される可能性があり、又は実行環境１０２の遠隔にあり、例えば、リモート接続を介して実行環境１０２をホストするコンピュータと通信する可能性がある１又は２以上のストレージデバイスを含む。１又は２以上のストレージデバイスは、例えば、ランダムアクセスメモリ（ＲＡＭ，random access memory）などの揮発性メモリ、及び磁気又はソリッドステートドライブなどの不揮発性メモリを含み得る。データ処理システム１００は、ネットワーク１１０に接続された通信インターフェース１０８を介してその他のシステムからデータを受信するか又はその他のシステムにデータを提供するために使用され得る。
【００８０】
データ記憶システム１０６に記憶するためにさまざまなソースから受信された個々のアクセス可能なデータユニットは、あり得るヌル値を含む、それぞれのフィールド（「属性」又は「カラム」とも呼ばれる）の値を有するレコードとして編成される可能性がある。例えば、クレジットカード会社は、さまざまな小売り企業から個々の取引を表すデータを受信する可能性がある。それぞれの取引は、顧客名、日付、購入量などの属性を表す値に関連付けられる。ストレージインターフェースモジュール１０４は、取引に関連する値がレコードに記憶されるようにデータが所定のレコードフォーマットに従って書式設定されることを保証し得る。場合によっては、これは、ソースからのデータをレコードフォーマットに従って変換することを含む可能性がある。その他の場合、１又は２以上のソースが、レコードフォーマットに従って既に書式設定されたデータを提供する可能性がある。場合によっては、レコードフォーマットは、最初は知られていない可能性があり、その代わりに、ソース又はデータの分析後に決定される可能性がある。
【００８１】
ストレージインターフェースモジュール１０４は、データ記憶システム１０６に記憶されたデータを管理するための１組のデータ操作を提供する。例えば、プロセッサは、特定のデータ操作を実行する要求に応じてその特定のデータ操作のための記憶された命令を実行するように構成される。データ操作は、新しいデータユニットを追加するための追加操作、記憶されたデータユニットを削除するための削除操作、及び以下でより詳細に説明されるように異なる読み取りモードで記憶されたデータユニットを取り出し、読み取られるように要求された取り出されたデータユニットを返すための複数の読み取り操作を含む。データ操作は、ユーザから入力を受け取るユーザインターフェースを含むデータ処理システム１００の別の部分に応答して開始される可能性がある。
【００８２】
一部の実施形態において、データ記憶システム１０６は、複数のデータユニットを圧縮することによって圧縮されたデータブロックがそれぞれ形成される記憶フォーマットでデータを記憶する圧縮されたデータストア１１２を含む。この圧縮の結果得られるデータブロックは、概して、それらの複数のデータユニットを圧縮された形式で表す圧縮されたデータと、圧縮されたデータの前に現れる場合は「ヘッダ」と呼ばれる可能性があり、又は圧縮されたデータの後に現れる場合は「フッタ」と呼ばれる可能性がある、データブロックの一部であるが、圧縮されたデータ自体ではない任意のその他の情報であるオーバーヘッド情報との両方を含む。一部の実施形態において、データ記憶システム１０６は、必ずしも圧縮されないが、共通の基準位置に対して指定されるオフセットに記憶されるなど互いに関連付けられるデータユニットの組を記憶する。ストレージインターフェースモジュール１０４は、一部の実施形態においては、レコードを何らかの方法で組み合わせるさまざまな技術のいずれかを用いて（つまり、ブロックが単にレコードの連結された組ではないように）データブロックを生じさせるためにデータユニットを処理することができる。それから、複数のデータユニットを含むデータブロックは、個々のデータユニットを復元するために相補的な機能（例えば、解凍）を用いて処理され得る。データブロックに含まれるデータユニットは、そのデータユニットの元の形式で記憶されない可能性があり（例えば、そのデータユニットは、異なるビットによって表される可能性がある）、各データユニットとデータブロックの記憶されたビットとの間の１対１の対応によって個々に表されない可能性がある（例えば、圧縮されたデータブロック内の任意の特定のビットは、複数のデータユニットの関数である可能性がある）。圧縮は、使用される場合、所望の機能の実行の一部である可能性がある。例えば、一部の実施形態においては、モジュール１０４が、１組のレコードを処理して暗号化されたデータのブロックを生じさせる。異なるデータブロックの圧縮比（すなわち、圧縮されたサイズを未圧縮のサイズで割ったもの）は概して変化し、場合によっては、一部のデータブロックの圧縮比は１を超える可能性がある。
【００８３】
そのような記憶フォーマットの１つの例は、参照により本明細書に組み込まれている米国特許第７，８８５，９３２号に詳細に説明されている、個々の記憶されたデータユニットの位置を特定するための任意のインデックスを用いる圧縮されたレコードファイルである。例えば、圧縮されたレコードファイルを生じさせるために、ストレージインターフェースモジュール１０４は、各レコードを特定する主キー値（例えば、単一のレコードを特定する一意キー、又はレコードの複数の更新されたバージョンを特定するキーのどちらか）によって、受信されたレコードをソートし、レコードを主キー値の重ならない範囲に対応するレコードの組にグループ化する。レコードの各組は、所定の数のレコード（例えば、１００個のレコード）に対応する可能性がある。モジュール１０４は、レコードの各組をデータの圧縮されたブロックへと圧縮する。これらの圧縮されたブロックは、（例えば、ファイルの末尾に連続するブロックを追加することによって）圧縮されたレコードファイルを形成するために一緒に収集され、圧縮されたレコードファイルは、（例えば、１又は２以上のハードディスクドライブなどの不揮発性記憶媒体でホストされる）圧縮されたデータストア１１２に記憶される。任意の数の圧縮されたレコードファイルが、複合的な圧縮されたレコードファイルを形成するために組み合わされる可能性もある。一部の実施形態において、ストレージインターフェースモジュール１０４は、ブロックのそれぞれに関するエントリを含むインデックスを管理する。インデックスは、米国特許第７，８８５，９３２号に詳細に説明されているように、ブロックに含まれる可能性があるレコードの主キーの範囲を列挙することによって、所与のレコードを含む可能性があるそのブロックの位置を特定するために使用され得る。インデックスは、圧縮されたレコードファイルと同じ記憶媒体に記憶され得るが、概して、圧縮されたレコードファイルよりもずっと小さいので、比較的高速なメモリ（例えば、ダイナミックランダムアクセスメモリなどの揮発性記憶媒体）に記憶されることが好ましい可能性がある。
【００８４】
（追加操作によって）新しいデータユニットがデータ記憶システム１０６に記憶するために受信されるとき、データユニットは、最初、入力バッファ１１４に圧縮されていない形式で記憶される可能性がある。所定の閾値の後、例えば、特定の数のデータユニットが入力バッファ１１４に記憶された後、又は入力バッファ１１４が特定のサイズに達した後、又は特定の時間間隔の後、複数のデータユニットが、さまざまな圧縮フォーマットのいずれか（例えば、ｇｚｉｐフォーマット）を用いて単一の圧縮されたデータブロックへとまとめて圧縮される。そして、圧縮されたデータブロックが、圧縮されたデータストア１１２の圧縮されたレコードファイルのうちの１つの末尾に追加される可能性がある。
【００８５】
一部の実施形態においては、データが取り出され得るようにして柔軟性を提供するために、異なる読み取りモードのための異なる読み取り操作が存在する。読み取りモードのそれぞれに関して、読み取り操作によって特定される１又は２以上の圧縮されたデータブロックが解凍され、１組のデータユニットを生じる。しかし、異なる読み取りモードは、データブロックから復元された１組のデータユニットから、読み取り操作に応じて返されるデータユニットのうちの１又は２以上を取り出すために異なる技術を用いる。例えば、（「直接アドレス指定モード」と呼ばれる）第１の読み取りモードでは、（１又は２以上の）特定のデータユニットが、データユニットを含むデータブロック、データユニットの始まりの（復元された組の始まりに対する）オフセット、及びデータユニットの長さを指定するアドレス情報に基づいて取り出される。場合によっては、オフセットは、以下でより詳細に説明されるように、以前の削除が原因である潜在的な変更を補正するのに十分な、そのデータブロックからの１又は２以上のデータユニットのその以前の削除についての情報を含む履歴情報に基づいて更新される必要がある可能性がある。データユニットの長さの指定は、可変長及び／又は未指定の長さを有するデータユニットをサポートする。代替的に、一部の実施形態においては、すべてのデータユニットが同じ指定された固定長を有する場合、長さが直接アドレスに含まれる必要はない。一部の実施形態において、直接アドレスは、補足情報に基づいてデータユニットの相対的なオフセットを暗黙的に指定する可能性がある。例えば、直接アドレスは、データユニットを含むデータブロック、及び（例えば、データブロックに関連して記憶されたマッピングに基づいて）データユニットの始まりのオフセットにマッピングされるレコード識別子を指定する可能性がある。
【００８６】
（「スキャンモード」と呼ばれる）第２の読み取りモードでは、データユニットは、復元された組から連続するストリームとして順次読み取られる。複数の圧縮されたデータブロックを含む圧縮されたレコードファイルに関して、ファイルの終わりに到達するまで、１つの圧縮されたデータブロックの終わりに到達すると、次の圧縮されたデータブロックからのデータユニットが解凍され、読み取られる。スキャンモードでは、読み取られたデータユニットのすべてが、読み取り操作に応じて返される可能性があり、又は読み取られたデータユニットの任意のサブセットが、（例えば、選択されたフィルタに基づいて）返される可能性がある。システム１００の一部の実施形態において、スキャンモードの読み取り操作は、（例えば、実行環境１０２で実行されるサードパーティプログラムによって、又は実行環境１０２の外部からデータ記憶システム１０６にアクセス可能なシステムによって）ストレージインターフェースモジュール１０４とは別のデータ記憶システム１０６へのインターフェースによって実行されるように構成される。
【００８７】
（「キー探索モード」と呼ばれる）第３の読み取りモードでは、（１又は２以上の）特定のキーを有する（１又は２以上の）レコードが、各データブロックに対応するあり得るキーの範囲を特定するインデックスにアクセスすることによって取り出される。読み取り操作で指定されるキーは、主キー、又は取り出されるデータユニットの１若しくは２以上の主キーにマッピングされる副キーである可能性がある。指定された主キーを含む範囲に対応するものとしてインデックスによって列挙されるデータブロックが解凍され、データユニットの復元された組がその主キーに関して検索される。その他の読み取り操作も、サポートされる可能性がある。例えば、読み取り操作が、主又は副キーを指定する可能性があり、そのキーが、主キー−直接アドレスルックアップテーブル（primary key-to-direct address lookup table）を用いて特定のデータユニットに関するアドレス情報にマッピングされる可能性がある。
【００８８】
削除操作は、圧縮されたデータストア１１２の任意のその他の部分が修正されることを必要とせずに、指定されたデータユニットを含む圧縮されたデータストア１１２の圧縮されたデータブロックからそのデータユニットが削除されることを可能にする。例えば、一部の実施形態は、圧縮されたレコードファイルの２つ以上のデータブロックが修正されることを必要とせず、データブロック又はファイルに関するいかなるインデックスが修正されることも必要としない。これは、例えば、特定のデータユニットが、除去される必要がある情報（例えば、プライバシーに関する法律によって、顧客の要求に応じて削除される必要がある顧客情報）を含むが、同じブロック又は同じ圧縮されたレコードファイルのその他のデータユニットは引き続き保有される必要がある場合に有用である。削除操作は、削除されるデータユニットを含む圧縮されたデータブロックを削除されたデータユニットを含まない新しい圧縮されたデータブロックで置き換え、新しい圧縮されたデータブロックに関連する履歴情報に削除されたデータユニットについての情報を記憶する。履歴情報は、圧縮されたデータストア１１２に（例えば、ヘッダ若しくはフッタなどの圧縮されたデータブロックの所定の部分、又は異なる圧縮されたデータブロックの間にインターリーブされたその他のオーバーヘッド情報若しくは利用可能な空間に）圧縮されたデータブロックと一緒に記憶され得る。履歴情報は、例えば、削除されたデータユニットのオフセット及びそれらのデータユニットの長さのリストを含み得る。
【００８９】
この履歴情報を用いて、新しい圧縮されたデータブロックに残るその他のデータユニットは、任意の削除されたデータユニットが原因である任意のシフトを考慮に入れるために履歴情報に従って解釈された既存のアドレス情報を使用して引き続き後でアクセスされ得る。特に、削除されたデータユニットの後のデータブロックから復元された組に配置されたデータユニットに関するすべての既存の直接アドレスのオフセットは、削除操作の時に更新される必要がなく、このことは、効率に寄与し得る。比較的少ない数の記憶されたデータユニットが直接アドレス指定モードで読み取り操作を用いて読み取られると予想される場合に関しては、要求に応じてオフセットを調整するために履歴情報を書き込むことが、読み取られない可能性があるデータユニットに関する（例えば、インデックスに記憶された）潜在的に多数の記憶された直接アドレスのオフセットを更新することよりも効率的である可能性がある。さらに、一部の実施形態においては、ストレージインターフェースモジュール１０４が、直接アドレスのオフセットが記憶され得る位置のすべてにアクセスできるわけではない可能性があり、したがって、オフセットのすべてを更新することは必ずしもできないことになる。
【００９０】
図２を参照すると、圧縮されたデータストア１１２に関するデータ記憶フォーマットの例が、データブロック２０２Ａ〜２０２Ｃを含むいくつかの圧縮されたデータブロックを含む圧縮されたレコードファイル２００を含む。この例において、データブロック２０２Ｂは、ヘッダ２０４及びフッタ２０６を含む。ヘッダ２０４は、データブロック２０２Ｂの圧縮及び解凍についての情報並びにその他の関連する情報を記憶するフィールドを含む。フッタ２０６は、圧縮及び解凍プロセスで誤りを検出及び／又は訂正するための巡回冗長検査（ＣＲＣ，cyclic redundancy check）又はその他のチェックサムなどの誤り検出符号を含む。データブロック２０２Ｂ内の圧縮されたデータ２０８のセクションは、圧縮されたレコードファイル２００に記憶されたレコードの組２１０を復元するために解凍され得る。一部の圧縮フォーマットに関して、ヘッダ２０４は、可変長であり、したがって、ヘッダ２０４がどこで終わるか及び圧縮されたデータ２０８がどこで始まるかを示す情報を含む。
【００９１】
例えば、ｇｚｉｐ圧縮フォーマットでは、ヘッダ２０４は、初めの１０バイトの６つの必須フィールドと、可変長のフィールドを含む最大６つの任意のフィールドとを含む、以下のテーブルに列挙されたフィールドを有する。
【００９２】
【表１】
0006457406.tif 000002
【００９３】
ｇｚｉｐ圧縮フォーマットは、４バイトのＣＲＣコードと、圧縮された元のデータの未圧縮のサイズのモジュロ２３２を与える４バイトの値とを含む８バイトのフッタも有する。それぞれがそれ自体のｇｚｉｐヘッダ及びフッタを有し、互いに隣接して（つまり、次のヘッダが前のフッタの直後に始まるように）記憶された２又は３以上の圧縮されたデータブロックが、単一の有効なｇｚｉｐファイルとして認識され得る。
【００９４】
（例えば、インデックスによって）削除される１又は２以上のレコード（例えば、レコードＣ及びレコードＥ）がデータブロック２０２Ｂに含まれるものとして示される削除操作をストレージインターフェースモジュール１０４が実行するとき、モジュール１０４は、圧縮されたデータ２０８を解凍してレコードの組２１０を復元し、削除されるレコードを除くレコードの新しい組２１２を生じさせ、レコードの新しい組２１２を修正された圧縮されたデータ２０８’へと圧縮する。レコードの新しい組２１２がレコードの元の組２１０よりも少ない情報の内容を含むので、（削除される可能性がある任意の所与のレコードの特定の最小の情報の内容を仮定して）修正された圧縮されたデータ２０８’は元の圧縮されたデータ２０８よりも小さいサイズを有する。それから、圧縮されたデータ２０８を記憶したデータブロック２０２Ｂのセクションが、修正された圧縮されたデータ２０８’によって置き換えられ、元のヘッダ２０４及びフッタ２０６が、修正されたデータブロック２０２Ｂ’に一緒に対応する修正されたヘッダ２０４’及びフッタ２０６’によって置き換えられる。修正されたデータ２０８’が元のデータ２０８よりも少ない記憶空間を占有するので、修正されたヘッダ２０４’が元のヘッダ２０４よりも多くの記憶空間を占有するのに利用可能な記憶空間が存在する。この余分な記憶空間が、利用可能な可変長フィールド（例えば、ｇｚｉｐ圧縮フォーマットの余分なフィールド（Extra Field））に履歴情報２１４を記憶するために使用される。
【００９５】
ほとんどのレコードフォーマットに関して、修正されたヘッダ２０４’に履歴情報２１４を収容するために必要とされる記憶空間は、単一のレコードが削除された後でさえも、修正されたデータ２０８’の予測されるサイズの減少よりも小さい可能性が高い。サイズが履歴情報２１４を完全に収容するのに十分なだけ削減されないという起こりそうにない出来事では、関連する削除操作が取り消される可能性があり、誤りメッセージが返される可能性がある。修正されたデータブロック２０２Ｂ’が元のデータブロック２０２Ｂと同じ合計サイズを有することを保証するために、ヘッダは、同じ又は別の可変長フィールド（例えば、ｇｚｉｐ圧縮フォーマットのコメントフィールド）に反復されるバイトパターン（例えば、０ｘｆｆを含む任意の数のバイト）又はその他のオーバーヘッド情報などのパディング２１８を書き込むことによって、必要に応じて伸ばされる可能性もある。レコードの削除が履歴情報のための十分な空間を提供しない可能性がある実施形態に関しては（例えば、特にぎっしり詰まったレコード構造に関しては）、圧縮されたデータブロックが初めに生じさせられるときに、パディングをヘッダに含めることができていてもよい。そして、この初期パディングが、履歴情報のためのヘッダ内の追加の空間を提供するために必要に応じて削減される可能性がある。
【００９６】
上述のように、履歴情報２１４は、新しいより小さい組２１２の残りのレコードの直接アドレスのオフセットが共通の基準記憶位置（例えば、復元されたレコードの新しい組２１２にレコードを順次記憶するアドレス空間の開始アドレス）に対して必要に応じて補正されるのに十分な情報で、レコードの組２１０から削除されたレコードを要約する。履歴情報２１４を符号化するために使用され得るデータ構造２１５の例は、レコードの元の組の第１のレコードの始まりに対する削除されたレコードのオフセット（その第１のレコードが現在存在しているかどうか）と、そのレコードの対応する長さとをそれぞれが有する要素２１６のリストである。図２に示された例においては、削除されたレコードＣ及びレコードＥのそれぞれに関する２つの要素２１６が存在する。レコードの長さの符号化は、可変長及び／又は未指定の長さを有するレコードをサポートする。代替的に、その他の例においては、すべてのレコードが同じ指定された固定長を有する場合、長さは、要素２１６に記憶される必要がない。要素２１６は、それらの要素のオフセット値の順序でソートされたリストに現れる。さらなるレコードを削除するためにさらなる削除操作が実行されるとき、さらなる要素２１６が、リストの末尾に追加されるか又はリストに挿入される。
【００９７】
さまざまな符号化技術が、効率的にこのデータ構造２１５を記憶するために使用され得る。例えば、２又は３以上の隣接した削除されたレコードの任意のシーケンスが、シーケンスの第１のレコードのオフセットと、シーケンスのレコードの長さの合計に等しい長さとを含む単一の要素２１６へと縮められる可能性がある。したがって、各要素２１６は、既に削除された任意の数のレコードを記憶した既に削除された領域を表す可能性がある。場合によっては、隣接した削除されたレコードは、異なる削除操作で削除された可能性がある。各要素２１６は、オフセットを記憶するための所定の数のビットと長さを記憶するための所定の数のビットとを用いてヘッダ２０４’の可変長フィールドのビットの隣接するスロットに記憶される可能性がある。オフセットの値を記憶するために使用される記憶空間の量は、あり得ると予想される最大のあり得るオフセットを記憶するのに十分な比較的少ない数のビットに制限され得る。長さの値を記憶するために使用される記憶空間の量も、（例えば、縮められた要素を可能にするために、オフセットを記憶するために使用される同じ数のビットに）制限され得る。オフセット及び長さの値は、どの値があり得るのかについての仮定に基づいてやはり圧縮され得る。例えば、レコードが常に偶数個のビットを占有することが知られている場合、オフセット及び長さの値は、特定の数のビットのペアを符号化するものと解釈され得る。したがって、８ビットが、最大で２５５ｘ２＝５１０ビットまでの値を符号化する可能性がある。同様に、レコードが常に、何らかの数にある乗数をかけた数のビットである記憶空間を占有することが知られている場合、オフセット及び長さの値は、実際のビット数とは対照的に、ある数にその乗数をかけた数を符号化するものと解釈され得る。このデータ構造２１５は、（例えば、ランレングス符号化を用いて）さらに圧縮されてもよい可能性がある。
【００９８】
図３Ａは、それぞれが三つ組み（ＢＬＯＣＫ，ＯＦＦＳＥＴ，ＬＥＮＧＴＨ）に対応する直接アドレスを有する１又は２以上のレコードを削除するために実行される削除操作の例に関する流れ図３００を示す。（この例においては、単一のブロックの１又は２以上のレコードが削除されているが、その他の例においては、任意の数のブロックからのレコードが削除操作で削除される可能性がある。）ストレージインターフェースモジュール１０４が、識別子ＢＬＯＣＫを有する圧縮されたデータストア１１２のデータブロックをアドレスＳＴＡＲＴで始まるアドレス空間に解凍する（３０２）。モジュール１０４は、（長さＬＥＮＧＴＨの）アドレスＳＴＡＲＴ＋ＯＦＦＳＥＴのレコードを削除する（３０４）。モジュール１０４は、値ＯＦＦＳＥＴ及びＬＥＮＧＴＨを符号化する履歴情報を計算する（３０６）。モジュール１０４は、このブロックから削除するさらなるレコードが存在するかどうかを判定し（３０８）、存在する場合、削除（３０４）ステップ及び計算（３０６）ステップを繰り返す。レコードが削除された後、モジュール１０４は、（１又は２以上の）省かれたレコードがあった場所のいかなる間隙もないように、残りのレコードが隣接するメモリ空間の部分に（例えば、一時ファイルに）レコードの新しい組を書き込み、レコードの新しい組を圧縮する（３１０）。モジュール１０４は、計算された履歴情報のデータ構造及び任意の必要なパディングをブロックＢＬＯＣＫのヘッダに書き込む（３１２）。モジュール１０４は、結果として得られる圧縮されたデータを、そのデータがブロックＢＬＯＣＫで元の圧縮されたデータと同じ位置で終わるように、圧縮されたデータストア１１２のブロックＢＬＯＣＫに書き込む（３１４）。モジュール１０４は、新しい圧縮されたデータに関する誤り検出符号を有する（前のフッタを置き換える）新しいフッタを書き込む（３１６）。
【００９９】
削除されているレコードの情報を実際に削除するそのような「抹消する」削除操作に加えて、ストレージインターフェースモジュール１０４は、レコードの情報を実際には削除せずに、削除されるべきレコードを単に隠すか又はこれにフラグを立てるその他の削除操作を提供するように構成される可能性もある。これらの削除操作は、履歴情報の書き込み、又はブロックの解凍さえ必要としない可能性があり、このことは、より速いが安全性の劣る削除の形式を提供するのに有用である可能性がある。しかし、例えば、何らかのプライバシーに関する法律によって要求されるように、情報が復元され得ないように情報を除去するためのより厳しい要件を満たすために、完全に抹消する削除操作も利用可能である可能性がある。
【０１００】
図３Ｂは、それぞれが三つ組み（ＢＬＯＣＫ，ＯＦＦＳＥＴ，ＬＥＮＧＴＨ）に対応する直接アドレスを有する１又は２以上のレコードを読み取るために実行される第１の（直接アドレス指定）読み取り操作の例に関する流れ図３２０を示す。（この例においては、単一のブロックの１又は２以上のレコードが読み取られているが、その他の例においては、任意の数のブロックからのレコードが読み取り操作で読み取られる可能性がある。）ストレージインターフェースモジュール１０４が、識別子ＢＬＯＣＫを有する圧縮されたデータストア１１２のデータブロックをアドレスＳＴＡＲＴで始まるアドレス空間に解凍する（３２２）。モジュール１０４は、読み取られるレコードのアドレスをＳＴＡＲＴ＋ＯＦＦＳＥＴ−ＣＯＲＲＥＣＴＩＯＮとして計算し（３２４）、ここで、ＣＯＲＲＥＣＴＩＯＮは、ブロックＢＬＯＣＫに関する任意の既存の履歴情報に基づいて計算される。例えば、モジュール１０４は、ＯＦＦＳＥＴ未満のオフセット値を有し、ＯＦＦＳＥＴの前で終わる既に削除された領域がいくつあるかを判定する。ない場合、補正は不要であり、ＣＯＲＲＥＣＴＩＯＮ＝０である。そうでない場合、ＣＯＲＲＥＣＴＩＯＮは、ＯＦＦＳＥＴ未満のオフセット値を有するそれぞれの既に削除された領域の長さの合計に等しい。したがって、既に削除された領域を補償するための補正は、読み取られる特定のレコードとレコードの組の始まりとの間に既に削除されたレコードが元々いくつ存在したかに依存する。アドレスを計算した後、モジュール１０４は、計算されたアドレスのレコードを読み取る（３２６）。既に削除された領域がＯＦＦＳＥＴ以下のオフセット値を有するが、ＯＦＦＳＥＴの前で終わらない場合、計算されたアドレスは、その既に削除された領域に入り、モジュール１０４は、読み取りステップ３２６を飛ばし、その代わりに、読み取られるレコードが既に削除されたことを報告する。モジュール１０４は、読み取られるさらなるレコードが存在するかどうかを判定し（３２８）、存在する場合、計算ステップ（３２４）及び読み取りステップ（３２６）を繰り返す。ブロックに読み取られるさらなるレコードが存在しないとき、操作が戻る（３３０）。
【０１０１】
第１の（直接アドレス指定）読み取り操作のその他の実施形態も、あり得る。例えば、読み取られるそれぞれのレコードに関する補正されたアドレスを計算する代わりに、圧縮されたデータブロックを解凍した後に復元されたレコードが、削除されたレコードがあった場所の適切な間隙とともにアドレス空間に書き込まれる可能性がある。それらの間隙があるべき場所を判定するために必要な情報が、上述の同じ履歴情報から導出され得る。そして、読み取り操作は、その補正されていないアドレスＳＴＡＲＴ＋ＯＦＦＳＥＴの各レコードの読み取りに進む可能性がある。
【０１０２】
図３Ｃは、レコードが読み取られるべきである圧縮されたレコードファイル内の１又は２以上のブロックをスキャンする第２の（スキャン）読み取り操作の例に関する流れ図３４０を示す。ストレージインターフェースモジュール１０４が、圧縮されたデータストア１１２の第１のデータブロックをアドレス空間に解凍する（３４２）。モジュール１０４は、（例えば、各レコードの始まり及び／又は各レコードの終わりを認識することによって）それぞれの個々のレコードを読み取るためにアドレス空間をスキャンする（３４４）。モジュール１０４は、（例えば、別のｇｚｉｐのマジックヘッダを検出することによって）ファイル内に別のデータブロックが存在するかどうかを判定し（３４６）、存在する場合、さらなるレコードを読み取るために次のデータブロックを解凍する（３４２）。（例えば、ファイルの終わりを検出することによって）ファイルに読み取られるさらなるデータブロックが存在しないとき、操作が戻る（３４８）。
【０１０３】
（例えば、削除されたレコードを、すべて１又は０ビットなどの所定のパターンで間隙が埋められるようにしてインプレースで上書きすることによって）履歴情報を記憶する必要なしにレコードを完全に抹消する方法で抹消削除操作を実装することが可能であるが、そのような削除操作は、これらの削除されたレコードを認識し、無視するためにスキャンモード読み取り操作を必要とする。削除されたレコードがあった場所の間隙を削除し、その情報を代わりに履歴情報に残すことによって、スキャンモード読み取り操作は、（例えば、サードパーティソフトウェアを用いる）ストレージインターフェースモジュール１０４以外のモジュールによることを含め、圧縮されたデータストア１１２の情報を読み取るために使用され得るさまざまな技術のいずれかと親和性がある柔軟な方法で実装され得る。さらに、（例えば、修正されたヘッダ２０４’のフィールドを埋めることによって）より小さな修正された圧縮されたデータ２０８’がより大きな元の圧縮されたデータ２０８を置き換えた後に残る余分な空間を埋めることによって、圧縮されたレコードファイルに予期しない間隙が存在せず、第２の（スキャン）読み取り操作がそれぞれの圧縮されたデータブロックを正常に認識することを可能にする。例えば、ｇｚｉｐフォーマットを用いる実施形態においては、フッタの後に、モジュール１０４は、圧縮されたデータブロックの別の始まり（すなわち、別のｇｚｉｐのマジックヘッダ）か、又は圧縮されたレコードファイルの終わりのインジケータかのどちらかを予想する。このようにして削除操作によって修正されている圧縮されたデータブロックのサイズを大きくすることは、修正されている圧縮されたデータブロックの後に現れる圧縮されたレコードファイルの圧縮されたデータブロックのいずれかの記憶位置をシフトする必要なしに、このスキャンモードの親和性が維持されることを可能にする。
【０１０４】
図３Ｄは、それぞれが特定するキー値を有する１又は２以上のレコードを読み取るために実行される第３の（キー探索）読み取り操作の例に関する流れ図３６０を示す。ストレージインターフェースモジュール１０４が、識別子ＢＬＯＣＫを有する圧縮されたデータストア１１２のデータブロックをアドレス空間に解凍する（３６２）。モジュール１０４は、与えられたキー値を有する任意のレコードの位置を特定するためにアドレス空間内のレコードを検索する（３６４）。
【０１０５】
複数の同時のデータ操作が実行されることを可能にするために、ストレージインターフェースモジュール１０４、又は圧縮されたデータストア１１２にアクセスするその他のモジュール若しくはシステムによって、２つのデータ操作の間の衝突を回避するための技術が使用され得る。削除操作が比較的頻繁でないと予想される場合、圧縮されたデータブロックのフッタの誤り検出符号が、圧縮されたデータを削除操作中に更新させるプロセス中にある、データブロックを検出するために解凍後のデータ操作によって使用され得る。例えば、無効なチェックサムの後、データ操作は、エラーメッセージを出力するか、又は削除操作を完了することができるように遅延の後に再び試みるかのどちらかを行う可能性がある。削除操作が比較的頻繁であると予想される場合、そのような衝突を防止するためにロックメカニズムが使用される可能性がある。
【０１０６】
上述のデータ記憶技術は、好適なソフトウェアを実行するコンピューティングシステムを用いて実装され得る。例えば、ソフトウェアは、それぞれが少なくとも１つのプロセッサ、（揮発性及び／又は不揮発性メモリ及び／又はストレージ要素を含む）少なくとも１つのデータ記憶システム、（少なくとも１つの入力デバイス又はポートを用いて入力を受け取るため、及び少なくとも１つの出力デバイス又はポートを用いて出力を与えるための）少なくとも１つのユーザインターフェースを含む（分散型、クライアント／サーバ、又はグリッドなどのさまざまなアーキテクチャである可能性がある）１又は２以上のプログラミングされた又はプログラミング可能なコンピュータシステムで実行される１又は２以上のコンピュータプログラムの手順を含み得る。ソフトウェアは、例えば、データフローグラフの設計、構成、及び実行に関連するサービスを提供するより大きなプログラムの１又は２以上のモジュールを含む可能性がある。プログラムのモジュール（例えば、データフローグラフの要素）は、データリポジトリに記憶されたデータモデルに準拠するデータ構造又はその他の編成されたデータとして実装され得る。
【０１０７】
ソフトウェアは、ＣＤ−ＲＯＭ又は（例えば、汎用若しくは専用のコンピューティングシステム若しくはデバイスによって読み取り可能な）その他のコンピュータ可読媒体などの有形の非一時的媒体で提供されるか、或いはそのソフトウェアが実行されるコンピューティングシステムの有形の非一時的媒体にネットワークの通信媒体を介して配信される（例えば、伝播信号で符号化される）可能性がある。処理の一部又はすべては、専用のコンピュータで、又はコプロセッサ若しくはフィールドプログラマブルゲートアレイ（ＦＰＧＡ：field-programmable gate array）若しくは専用の特定用途向け集積回路（ＡＳＩＣ：application-specific integrated circuit）などの専用のハードウェアを用いて実行される可能性がある。処理は、ソフトウェアによって指定された計算の異なる部分が異なる計算要素によって実行される分散された方法で実装される可能性がある。それぞれのそのようなコンピュータプログラムは、本明細書において説明された処理を実行するためにストレージデバイスの媒体がコンピュータによって読み取られるときにコンピュータを構成し、動作させるために、汎用又は専用のプログラミング可能なコンピュータによってアクセス可能なストレージデバイスのコンピュータ可読記憶媒体（例えば、ソリッドステートメモリ若しくは媒体、又は磁気式若しくは光学式媒体）に記憶されるか又はダウンロードされることが好ましい。本発明のシステムは、コンピュータプログラムで構成された有形の非一時的媒体として実装されると考えられる可能性もあり、そのように構成された媒体は、本明細書において説明された処理ステップのうちの１又は２以上を実行するために特定の予め定義された方法でコンピュータを動作させる。
【０１０８】
本発明のいくつかの実施形態が、説明された。しかしながら、上述の説明は、以下の請求項の範囲によって画定される本発明の範囲を例示するように意図されており、限定するように意図されていないことを理解されたい。したがって、その他の実施形態も、以下の請求項の範囲内にある。例えば、本発明の範囲を逸脱することなくさまざまな修正がなされ得る。さらに、上述のステップの一部は、順番に依存しない可能性があり、したがって、説明された順番とは異なる順番で実行され得る。
【図１】
0006457406.tif 000003
【図２】
0006457406.tif 000004
【図３Ａ】
0006457406.tif 000005
【図３Ｂ】
0006457406.tif 000006
【図３Ｃ】
0006457406.tif 000007
【図３Ｄ】
0006457406.tif 000008