(58)【調査した分野】(Int.Cl.,DB名)
ファイルシステムにおけるデータを重複削除するための方法であって、前記ファイルシステムが1つまたは複数のファイルを含み、各々の前記ファイルがデータの組を含み、前記データの組が2人以上のユーザによって共有することができる、方法において、
ファイルシステム内に格納されるファイルを受け取ること、
前記ファイル内のデータの組が前に前記ファイルシステムに格納されていたかどうかをチェックすること、
前記データの組が前記ファイルシステムに格納されていた場合、前記格納されたデータの組の状態をチェックすること、
前記格納されたデータの組の状態が前記ファィルのコピーを共有するのに適当である場合、前記データの組を共有するコマンドのあったときに前記ファイルへの参照を提供し、前記格納されたデータの組に関連した参照カウントを増加すること、
前記参照カウントをチェックすること、および、
前記参照カウントがゼロである場合、前記格納されたデータの組の状態を、暫定と、削除中と、孤立と、回復済みからなる群のうちの1つに遷移することを含み、
前記遷移することが、前記参照カウントがゼロである場合、前記格納されたデータの組の状態が全部破損または一部破損であるとき暫定に遷移することを含む、方法。
前記添付ファイルに関連した前記状態が、良好と、一部破損と、全部破損と、暫定と、削除中と、孤立と、回復済みとを含む群のうちの1つを含む、請求項4に記載の方法。
前記格納されたデータの組の状態が前記ファイルのコピーを共有するのに適当である場合、前記データの組を共有するコマンドのあったときに前記ファイルへの参照を提供することが、
前記格納されたデータの組のための参照カウントを増加させること、および、
前記格納されたデータの組へのポインタ参照を目標実体に送ることをさらに含む、請求項1に記載の方法。
前記添付ファイルの共有を管理するための前記モジュールが、添付ファイルが破損しているかどうかを検知するためのモジュールをさらに含む、請求項8に記載のシステム。
ファイルシステムにおけるデータを重複削除することをコンピュータに実行させるためのプログラムであって、前記ファイルシステムが1つまたは複数のファイルを含み、各々の前記ファイルがデータの組を含み、前記データの組が2人以上のユーザによって共有することができ、
ファイルシステム内に格納されるファイルを受け取ること、
前記ファイル内のデータの組が前に前記ファイルシステムに格納されていたかどうかをチェックすること、
前記データの組が前記ファイルシステムに格納されていた場合、前記格納されたデータ
の組の状態をチェックすること、
前記格納されたデータの組の状態が前記ファィルのコピーを共有するのに適当である場合、前記データの組を共有するコマンドのあったときに前記ファイルへの参照を提供し、前記格納されたデータの組に関連した参照カウントを増加すること、
前記参照カウントをチェックすること、および、
前記参照カウントがゼロである場合、前記格納されたデータの組の状態を、暫定と、削除中と、孤立と、回復済みからなる群のうちの1つに遷移すること
を実行させるためのプログラムであって、
前記遷移することが、前記参照カウントがゼロである場合、前記格納されたデータの組の状態が全部破損または一部破損であるとき暫定に遷移することを含む、プログラム。
【発明を実施するための形態】
【0010】
[00012] 本明細書に利用するように、「構成要素」、「システム」、「インターフェース」などの用語は、ハードウェア、ソフトウェア(例えば、実行時)、および/またはファームウェアのいずれかであるコンピュータ関係の実体を表すことを意図している。例えば、構成要素は、プロセッサ上で稼働するプロセス、プロセッサ、オブジェクト、実行ファイル、プログラム、および/またはコンピュータであり得る。例示として、サーバ上で稼働するアプリケーションおよびサーバの両方は、構成要素であり得る。1つまたは複数の構成要素は、プロセス内に常駐することができ、1つの構成要素は、1つのコンピュータ上に局在させ、および/または2つ以上のコンピュータ間に分散させることができる。
【0011】
[00013] 特許請求される主題は、図面を参照して説明し、同じ参照番号を全体にわたって同じ要素を表すために使用する。以下の説明では、説明のために、数多くの具体的な詳細を本発明の完全な理解が得られるようにするために記載する。しかし、特許請求される主題がこれらの具体的な詳細なしで実施できることは明らかであり得る。他の事例では、本発明の説明を容易にするためによく知られている構造およびデバイスをブロック図に示す。
【0012】
序論
[00014] ファイルシステム、データベース、Eメールシステムなどのスペース、処理時間および全費用の節約のために、システム全体にわたってファイル(BLOB)の重複排除を効果的に管理することができるシステムを実施することが望ましいことがある。このようなシステムは、とりわけデータセキュリティ、データ回復、およびデータの完全性などの考えに関係することもある。
【0013】
[00015]
図1は、本出願の実施形態が動作し常駐することができるコンピューティング/ネットワークキング環境(100)の一例である。
図1はEメールシステムの形で示されるが、本出願の原理は、データベース管理またはファイルシステム管理の用途においても同程度の能力があり得る。
【0014】
[00016] 環境100において、複数のEメールクライアント102a、102b、および102cがあり得る。この例では、クライアント102aは、添付ファイルを付けてEメール104を書き、別のクライアント102bに向かうことになっている、ネットワーク化されたシステム106にそれを送る。クライアント102bは、今度は、添付ファイルの付いたEメールを第3のクライアント102cに転送することを決定することができる。
【0015】
[00017] ネットワーク化されたシステム106内では、場合によってはいくつかの他のサーバ、ルータおよび当技術分野で知られている他のネットワーク構成要素と共に、Eメールサーバ108が存在し得る。例えば、Microsoft Outlook(登録商標)Eメールシステムの設計において、システムはデータのコピーが独立したハードドライブ、コントローラ、およびマシン上に常駐することを確実にする。この種のシステムは、「単純ディスク束」を表す「JBOD」というニックネームが付いている。JBODシステムでは、ハードライブコントローラが邪魔にならないようにすることを試みる、すなわち、ソフトウェアはコントローラが以前に処理した障害に関してより関心がある。これらの障害は、ハードドライブ自体のファームウェアのバグから、以前にはコントローラによって自動的に修理された「回復不能読込みエラー」などの問題までの範囲にわたることがある。さらに、ソフトウェアは、次に、「ビット腐敗」(すなわち、何らかの理由で読み込み不能または破損になったデータ)がないかデータをチェックするために定期的にドライブをスクラブすることがある。この場合、分散型「RAID」コントローラを完全にソフトウェアで構築することが可能であり、それは業界標準のファームウェアのものに取って代わるものである。
【0016】
[00018] このようなJBODシステムのソフトウェアは、ハードドライブを監視することができ、修復措置をスケジュールし、障害を検知し、修復を診断する。このソフトウェアは、ある一定の種類の障害がないか絶えず監視する、いくつかの「監視機構」を含むこともできる。監視機構は、探している障害を検知した場合、警報を発し、それにより自動的に修復プロセスを作動することができる。この修復プロセスは、マシンの再起動またはプロセスの再始動から、データ破損の修理または進展がなされ得ない場合の人員の関与にまでの範囲にわたることがある。
【0017】
[00019] 全システムのうちの一部(110)として、メタデータ112および冗長メタデータ114を使用することができ、したがって、ソフトウェアは、システムがアクセスできるEメールメッセージ(例えば、116における)の良好なコピーが正確にいくつあるのか(例えば、118aおよび118b)を知ることもできる。コピーが少なすぎることが分かった場合、ソフトウェアは潜在的に危険な状況を避けるため修復処置を優先順位付けすることができる。修復に時間がかかり過ぎる状況では、データをそっくり別の場所に移動させることが可能である。
【0018】
[00020] システムは、オリジナルのEメールメッセージを配信されたときと正確に同じままで格納することにより、複製されたEメールメッセージを効果的に管理し格納することができる。変化するEメールメッセージに関するデータ(既読/未読、フォルダー内の場所など)は、例えば、メタデータストア112などに、別個に格納される。
【0019】
[00021] システムは、マシンの組を含むことができ、マシンの各々は、到着し到着日付別に整理されたEメールメッセージとジャーナルレコーディングメッセージとを有することができる。マシンは時々互いに対話することができ、それらのジャーナルを比較し、全マシンに対してコピーされていないとマシンが認識する任意のメッセージをコピーすることができる。これは、様々な理由で、ほとんどがマシン、ネットワーク、またはハードドライブの障害により、起きることがある。場合によっては、ジャーナルは極端に同期がずれていることがあり、その場合、システムは完全な比較/コピーを行う。
【0020】
[00022] ハードドライブは、より大型化し、より安価になったが、ハードドライブがデータを読み出すことができる速度はあまり変わっていない。すなわち、ハードドライブは、より大きなハードドライブにより多くのデータを詰め込むことができるが、結局のところ要求率を処理することができない。この領域で有望な1つの技術は、フラッシュストレージ(SSDまたは半導体ドライブとも呼ばれる)である。SSDは、SDカードやUSBスティックで見られる技術と類似の技術を使用するが、より速い内部チップセットとずっと長い寿命を有する。通常のハードドライブが、毎秒100回を少し超える読み取り/書き込み動作を実施することができるのに対して、最速SSDの中には、毎秒10万回を超える動作を行うことができるものもある。しかし、これらのデバイスはストレージの1ギガバイト当たりに支払う金額をみると、ハードドライブより10倍から100倍高価なことがあるので、これは高価なものとなる。
【0021】
[00023] Eメールメッセージを格納する際、システムは、フォルダ内のメッセージのリスト、メッセージの既読/未読状態、会話のスレッド、携帯電話の同期など、これらのメッセージに関する軌跡情報(メタデータ112)の記録も付けることがある。このメタデータは、全記憶スペースの非常に小さな部分を占める傾向があるが、その絶えず変化する性質により、ハードドライブ上の負荷の大半を消費することがある。
【0022】
[00024] この小さなおよび急速に変化するデータの組にSSDを使用することにより、ならびにメッセージの格納に利用可能な最大のハードドライブを使用することにより、システムは、システムの性能に何ら犠牲を払うことなく、より大きなおよびより安価なハードドライブの傾向を利用することができ得る。
【0023】
[00025] 一実施形態において、システムは、ファイルおよび/またはメッセージを配信すると、ファイルおよび/またはメッセージが所与の閾値サイズ(例えば、Y)より大きいかどうか、またはファイルおよび/またはメッセージが、所与の閾値サイズ(例えば、Y)より大きい、添付ファイル(例えば、X)を有するかどうかを検知することができる。そうであるならば、システムは、正確なファイル、メッセージまたは添付ファイルXがすでに配信されたのか、システム上のユーザによって共有されたのか(または格納されたのか)をチェックすることができる。ファイル、メッセージおよび/または添付ファイルが配信され、および/またはシステム上のユーザと共有されたのかどうかを確認するために、システムは、ファイル、メッセージおよび/または添付ファイルに対してハッシュ関数を実施し、前のハッシュ結果と一致するか比較することができる。さらに、システムは、状態メタデータ、すなわち、どのようにおよび/または誰と共有および/または重複が起きたかもしれないことに関するメタデータを含む、ファイル、Eメールメッセージおよび/または添付ファイルに関するメタデータを格納および/または保持することができる。
【0024】
[00026] ファイル、メッセージおよび/または添付ファイルが配信され、共有され、「BLOB」が良好な状態にあり、わずかに別の閾値参照数(例えば、Z)しかなく、および/またはすでにXへのリンクしかない場合、ファイルシステムで再度Xをセーブするのではなく、新たなメッセージ配信のためにそのBLOBへの参照カウントおよびそのBLOBへの「ポイント」を増加させる。このプロセスの間、システムは、ディスク上の「BLOB」が破損しているかどうかも検知し、そうであるならば、修復するかまたは良好なXに置き換えるかのいずれかをすることもできる。例えば、
図1の文脈において、クライアント102bがEメール104を同じ添付ファイルを付けて別の対象クライアントおよび/または実体に転送したとき、システムは別の添付ファイルの重複を作成せずに添付ファイルへのポインタ参照を転送することができる。
【0025】
[00027] データベース、Eメールシステムおよび/または他のファイルシステムなど、他のシステムは、
図1を参照して説明するアーキテクチャとは異なるアーキテクチャを有することができるが、本出願の技法はそのようなほかのアーキテクチャにも利益になることができることを理解されよう。
【0026】
重複排除の実施形態
[00028] Eメールシステムの文脈において(単に例示のため)、システムの一実施形態は、メール配信すると重複する添付ファイルを識別するように設計することができ、ファイル保存するとそれらを重複排除することができ、それによって場合によっては34%以上のディスクの節約およびI/Oおよびネットワークの帯域幅の節約を達成することができる。添付ファイルを一意的に識別することに加えて、システムは、「BLOB」が消失または破損した場合、「BLOB」のライフサイクル、他のソースマシンまたはディスクドライブから「BLOB」の再複製をどのように実施するかを理解することも組み込むことができ、ファイルシステムのストレージおよびI/Oの効率を確実にするためのホットスポット「BLOB」管理を実施することができる。
【0027】
[00029] 多くのEメールシステムでは、コンテンツの大部分が、多くのEメールアカウントにわたって格納される大きな添付ファイルの小さな組を含むことが留意される。この観察から、本出願の他の実施形態は、これらの添付ファイルがいったん(または限定された数の回数)格納され、複数のアカウント内でまたは複数のアカウントにわたって共有されることを可能にすることによって利用することを望む。一実施形態において、システムは、メッセージファイルから添付ファイルを抽出することおよび別個に格納された添付ファイルを抽出することができ、したがって、添付ファイルは、発生したアカウントとは独立して参照し、追跡することができる。
【0028】
[00030] 本出願の他の諸実施形態は、以下に影響するモジュールを含むことができる。
(1)重複を探し出す工程:新たに配信されたコンテンツが重複排除の候補として識別され、既存の重複が位置を突き止められ利用されることを可能にするインデックス機構に影響するモジュール。
(2)重複を維持する工程:ハードドライブ障害およびデータ破損に直面して、および他の諸実施形態において、単一の重複排除されたBLOBの消失は多くのアカウントに影響し得るので特に注意深く、重複排除されたデータを修復し維持するモジュール。
(3)ガーベジコレクション:もはや参照されない添付ファイルを安全に除去するモジュール。
【0029】
[00031] いくつかの実施形態では、単一のSQLデータベースの範囲と一致するように重複排除の範囲を選択することが可能である。このような場合、同じSQLデータベース内に格納される、アカウントによって参照される重複BLOBが発見されることがある。このような実施形態では、このような範囲により、システムがスペースの節約を達成することが可能になり、同時に重複の発見およびガーベジコレクションを単純化することが可能になる。いくつかの実施形態では、単一の添付ファイルの消失によって生じ得る損傷の量を制限するために同じ重複の複数のコピーが異なるディスクグルーピングに格納できることが可能になり得る。
【0030】
Eメール部分/添付ファイルの識別および管理
[00032] いくつかの実施形態では、様々なEメール部分を識別するためのモジュールが、場合によっては重複排除を受けるので、それらの部分(例えば、添付ファイルなど)を検知および/または識別することが望ましいことがある。識別モジュールの別の一態様では、このモジュールは、同じまたは別の個人のためにすでに破棄され得た、およびプライバシーまたはデータ破損の懸念なしで同じ破棄された添付ファイルへの複数のアカウントポイントを有する添付ファイルを判別および/またはうまく識別することもできる。例えば、添付ファイル間に一意性をなすために暗号学的ハッシュを使用することができる。
【0031】
[00033] さらに、重複排除された添付ファイルがディスク上にすでに存在する場合、添付ファイルをディスクに書き込むことはもはや望ましくないことがあるが、システムは、単純に参照カウントを増加させ、それを再書き込みしないことによって、ディスクスペース、IO、およびネットワーク帯域幅を節約することができる。モジュールがBLOBのライフサイクルに注意を払い、追跡することが望ましいことがある。より詳しくは、モジュールは、いつそれを削除するか、それへの参照を減少/増加させるか、またはそれを置換するかなど、破棄された添付ファイルが取り得る様々な状態を通じてBLOBを追跡することができる。BLOBが消失しおよび/または破損した場合、他のソースマシン/ディスクからの自動再複製が望ましいことがある。さらに、自動的に、消失したメタデータを回復しストアに一貫性を取り戻すこと、参照カウントを増加させるために添付ファイルを優先順位付けすること(本明細書に説明するように)、および参照に需要があるときホットスポットを減少させる波及機構を有することなど、もっと多くの技法が望ましいことがある。
【0032】
[00034] BLOBを含むことがある添付ファイルおよび他のオブジェクトの識別に向けて、ある実施形態は、MIME部分の境界でこの識別を行うことができる。この実施形態では、システムによって使用/認識される複数のメッセージの表現があり得る。
(1)「リテラルMIME」:これはSMTPを介して受け取ったときのMIMEメッセージそのものであり得る。添付ファイルは、base64または2進コード化ストリームとして含むことができる。
(2)「圧縮MIME」または「V1」:これはXpressを介して圧縮されたリテラルMIMEフォーマットであり得る。
(3)「AttachStore」メッセージフォーマット:これは添付ファイルを抽出し、それらをファイルの終わりに別個に置いたコンテナであり得る。
【0033】
[00035] 一実施形態において、「AttachStore」フォーマットを強化してディスク上に別々のファイルとして格納されたBLOBへのポインタを支持することが望ましいことがある。このような実施形態では、以下のようにAttachStoreにおける変更をすることが可能であり得る。
(1)blobldおよびハッシュをATTACHMENT_LIST_NODEに格納することができる。
(2)完全なファイルCRCをファイルの終わりに格納してCRC妥当性確認を簡略化することができる。
【0034】
[00036] さらに、BLOBは、メッセージを以下のように格納することができる場所と並行して、ファイルシステム上の別個のディレクトリ構造に格納することができる:msg、index、ptf、blob(ハッシュの最初の2文字;添付ファイルのハッシュ)。
【0035】
[00037] 一実施形態において、BLOBファイルは単一の大きなディレクトリとしてではなく、結果として、大きな数の入力にいったん達すると大幅に断片化されたディレクトリファイルになり得るものとして格納することが望ましいことがある。したがって、一実施形態において、ハッシュの最初の2文字をディレクトリ名として使用し、次いで1ディレクトリ当たりのファイルの数を所望の数に、例えば、数千に制限することが望ましいことがある。
【0036】
[00038] この実施形態は、さらに、マシン/dbレベルで重複排除を実施することができる。この方式は、直接大規模に、例えば、マシンの群またはデータセンタ(DC)全体にさえ適用可能であり得る。破損されたことが見つけられた個々の重複排除されたBLOBは、次いで、ローカル内にまたは遠隔DCにさえ存在する他のコピーから回復することができる。例外的な処理は、破滅的なデータ障害の後に回復に対して行うことができる。
【0037】
状態図の一実施形態
[00039] BLOBは、それらのライフタイムの間、作成され、破損され、修理され、削除されたとき、様々な状態に遷移する傾向がある。この観察により、BLOBのライフサイクルを説明する状態遷移方式を採用する一実施形態をもたらすことができる。状態は、どのAPIをBLOBに適用する(に対して使用する)ことができるかを決定することができ、様々なタスクが確実に互いに侵害しないようにするために使用することができる。あるいは、別の一実施形態は、BLOBを管理するために参照カウントを利用することがある。しかし、状態は、0の参照カウントに異なる解釈があり得るので使用することが望ましいことがあり、異なるように処理され得る。
【0038】
[00040] 別の一実施形態において、システムは、
図2に示すような状態図(200)に影響することがある。システム200は、本明細書に説明するように、複数の状態、例えば、全部破損202、暫定204、削除中206、回復済み208、孤立210、一部破損212、良好214およびTbl_blob行削除済み216を含むことがある。記載したように、システムは、BLOB(場合によってはメタデータストアで)へのポインタの数のカウンタ(すなわち「参照カウント」)を維持することができる。すべてのBLOBが「破損」と指定された場合、状態データは、2つの状態のうちの1つを反映することができる。(1)参照カウント=0の場合、暫定,または(2)参照カウント>0の場合、全部破損。システムは、暫定204への格納および/またはアクセスの要求を送ることができる。
【0039】
[00041] 所望する場合、システムは、暫定状態204においてBlob作成することができ、その場合、BLOBはストアに「コミットされ」(例えば「HBM」)、システムは、良好状態214に移動することができる。一実施形態において、BLOBが写しのすべてに物理的に書き込まれて初めてBLOBをストアにコミットすることが望ましいことがある。以下は、採用された様々な状態の説明である。
【0040】
良好状態
[00042] これはBLOBには通常の状態である。新しいメッセージの配信中にAddRefすることができるが、ガーベジコレクションはしない。一実施形態において、AddRefは、BLOBを再使用できることを指示することができる。BLOBがすでに配信されており、この状態にある場合、BLOBは「すでに存在する」し、BLOBへの追加の参照によりBLOBの参照カウントを増加させることをもたらし(すなわち、BLOBを再度格納することなく)、BLOBの適正な再使用のためにポインタを更新することができる。
【0041】
[00043] 良好なBLOBは、参照の数に対してソフト制限を有することができ、それによって、BLOBの追加のコピーを作成させることができる。
【0042】
孤立状態
[00044] これは、もはやアクティブな参照を有することができない、メッセージリムーバによる除去の候補であり得るBLOBである。実際にBLOBが削除中状態になるまで、BLOBはAddRefされ、良好状態に戻ることができる。
【0043】
[00045] 暫定状態と同様に、所望の時間の後、メッセージリムーバがこれらのBLOBを削除する。
【0044】
回復済み状態
[00046] データベースの破損または最近のトランザクションログの消失の場合、「tbl_blob」をディスクから再構築することが望ましいことがある。一実施形態において、tbl_blobは、各BLOBの場所および状態に関する情報を保持するデータ構造であり得る。この表および/またはデータ構造が消失した場合、データ回復の当技術分野で知られている任意のやり方でデータを回復することが望ましいことがある。これを容易にするために、孤立に類似している「回復済み」と呼ばれる状態がある。回復済みBLOBはまだ妥当性確認されていない可能性があるので、システムは、回復済みBLOBを監視してから配信を介してまたは回復済みメッセージのためのいずれかにより、それらを再使用するはずである。任意のAddRefには、BLOBが回復済み状態で見つかった場合、メール配信はBLOBを再書き込みしてすべてのコピーが確実に破損していないようにすることができる。
【0045】
[00047] データベース回復は、検証せずにBLOBを一部破損状態で再使用するか、または完全性を検証しそれを良好としてコミットするかのいずれかの選択肢を有することができる。場合によって、データベース回復は、共有がダウンしているときなど、BLOBのすべてのコピーの完全性を検証することができない可能性がある。いったん回復が完了すると、BLOBをまず妥当性確認/再書き込みすることなくBLOBを再使用することが望ましくない可能性があるので、任意の残りのBLOBは暫定状態に移動させることができる。ガーベジコレクションは、回復済みBLOBには実施することができない。クリーンアップへのデータベース回復プロセスの責任は、いったん完了したとすることができる。AddRefは妥当性を確認して初めてOKになる。
【0046】
暫定状態
[00048] 「暫定」状態は、新たなBLOBをディスクに書き込むプロセスによって使用することができる。BLOB書き込みはネットワークエラー、一時的エラーなどにより失敗することがあるので、BLOBが後に残された場合および/または決して使用されなかった場合、これらのBLOBが書き込まれた場所を記憶し、したがってそれらをクリーンアップできることが望ましいことがある。安全のために、BLOBは、すべてのコピーがうまく書き込まれた場合、重複排除によって使用されるのに適切であり得る。これらの場合、完全冗長性を有する暫定BLOBが書き込まれることに失敗した場合、完全なフォーマットでメッセージを書き込むことに戻ることが可能であり得る。発信者がまずBLOBを暫定状態で作成し、次いでTorresを呼び出してファイルをすべての共有に書き込みさせ、次いでCommitHeaderBlobMapping(コミット_HBM)を介してまたは状態を孤立に設定することによりBLOBを遷移することが期待される。一実施形態において、コミット_HBMは、メタデータストアのBLOB状態を暫定状態から適当な新たな状態(その場合、BLOBは使用され、再使用される用意ができている)に移動させる内部関数呼び出しであり得る。さらに、コミット_HBMは、BLOBの参照カウントを増加させることができ、例えば、暫定状態のBLOBに対するコミット_HBMの呼び出しは、その状態を変更するだけでなく、参照カウントを1に増加させることもできる。
【0047】
[00049] BLOBがすでに暫定状態で存在する場合、別のBLOBが同時に配信されると、競合状態の可能性がある。この状態はTorresによって扱われ、それによって、BLOBの書き込みが決して既存のデータを破壊しないことを確実にする。(完全な説明についてはTorresに関する項目参照)
【0048】
削除中状態
[00050] メッセージリムーバは、ディスク上のファイルを実際に削除することを決定すると、BLOBに「削除中」とマークを付けてから削除操作を開始する。これにより、確実に誰も半分削除されたBLOBを使用することを試みない。すべてのコピーがディスクから削除されたという確認を受け取ると、tbl_blobから行が除去される。エラーが起きた場合、削除が確認されるまでこの状態のままでいることが望ましいことがある(ファイルがもう存在しないか削除されたかのいずれかのため)。
【0049】
[00051] BLOBが削除中状態にあり、発信者が同じハッシュを用いて新たなBLOBを作成することを試みた場合、異なるデータベース群が新たなBLOBに選ばれる。AddRefはNOT OKである。
【0050】
一部破損状態
[00052] BLOBの任意のコピーが破損しているまたは読めないとして検知された場合、システムはBLOBに「一部破損」として、または他の何らかの名称の「破損」状態としてマークを付けることができる。システムがどの写しが破損しているのかに関する情報を格納しないことが望ましい。これは、破損したBLOBを検知するための、および/または破損したBLOBを修復するためのモジュール(別名「ターボFSS」)への両方の信号である。このモジュールは、破損したBLOBについて定期的に問い合わせを行うことができる。このモジュールは、このBLOBを任意の新たな配信に利用できないようにすることに加えて、修復を試みることもできる。システムがBLOBの正確な状態(何かが悪いということだけしか)を知らない可能性があるので、システムは、BLOBを重複排除に使用しなくてよい。この用途のために、ターボFSSとは、ファイルおよびBLOBがシステム内の複数の冗長コピーの間で同期状態に保持されることを確実にするモジュールを表す。
【0051】
[00053] ターボFSSは、修復を実施するとき、あまりにも多くの回数修復することを試みることを避けるためにBLOBの最後の書き込み時間を考慮することもできる。BLOBは、参照カウント0に達すると、BLOBが再使用される前にBLOBを再書き込みさせることが望ましいことがあるので、暫定状態になることができる。新たなBLOBが一部破損の既存のBLOBとして同じハッシュと共に到着した場合、システムは新たな配信でそれを上書きする。すべての書き込みがうまくいくと、BLOBには修復済みのマークを付けることができる。すべてのBLOBが全冗長性で書き込み得ない場合、システムは重複排除されない可能性があるので、配信の間共有がダウンしていたためまたはユーザ移動が一部破損状態にされていないため、部分的に冗長であるBLOB。AddRefはNOT OKである。
【0052】
全破損状態
[00054] この状態は、所与のBLOBにデータ消失が起きたことおよびすべての修復の試みが失敗したことを指示する。さらなる修復の試みは、試みない可能性がある。BLOBは、手動で修復されるかまたはすべての参照カウントが0に達しBLOBが削除されるまで、この状態にずっととどまることができる。
【0053】
[00055] ユーザ移動は、アカウント全体(欠落BLOBを含む)を移動させることができるので、全部破損BLOBは、BLOBがソースシステム上で完全に欠落していた場合、ユーザ移動によって宛先システム上で作成することができる。BLOBがこの状態にあり、0の参照カウントに達した場合、BLOBを妥当性確認および/または再書き込みさせてから再使用することが望ましいことがあるので、BLOBは暫定となることができる。この用途のために、ユーザ移動は、ファイルシステムまたはEメールシステムなどとの最適なバランスをとるためにEメールアカウントを、イントラおよびインターデータセンタのあちこちに移動させるモジュールである。
【0054】
[00056] 一実施形態において、この状態のBLOBは、データベース内にとどまり、一部のユーザおよび/または実体はそれらを参照する。いくつかの実施形態では、このようなBLOBを修復するために以下を含む複数の技法があり得る。
(1)メール配信またはユーザ移動は、同じハッシュを有する新たなBLOBが配信された場合、既存のBLOBを修復することができる。
(2)添付ファイルがそこに存在するかどうか確認するために他のサーバまたはデータベース群を見る。
(3)ActiveSynを使用するユーザには、システムは添付ファイルをそこから引っ張ることができる。
【0055】
[00057] 新たなBLOBが全部破損の既存のBLOBとして同じハッシュと共に到着した場合、一実施形態は、永続性ストレージが書き込みを有するべき等であることを保証することができるので、新たな配信でそれを上書きすることができる。すべての書き込みがうまくいくと、BLOBは良好というマークが付けられ、AddRefされる。AddrefはNOT OKである。
【0056】
参照カウンティング
[00058] BLOBはユーザ間で共有することができるので、BLOBが有する参照の数を追跡し、したがって参照の数がゼロの参照に達するとシステムが参照の数をクリーンアップできることが望ましいことがある。あるいは、システムは、所望の閾値のアカウントの数に影響することがあるデータ消失を軽減することが望ましい場合、BLOBがあまりに多くの参照を有することを潜在的に妨げることができる。
【0057】
[00059] BLOBの状態は、ある状態が参照カウントを0にし、他の状態が参照カウントを0より大きくすることを望むので、参照カウントへの影響を有することもあり得る。例えば、以下の表は、一実施形態の実施を反映する。
【0059】
[00060] 参照カウントは、行がtbl_HeaderBlobMapping(すなわち、tbl_HBM)に追加されると、増加させることができ、行が除去されると減少させることができる。行は、メッセージがtbl_deletedmessageから除去されると、tbl_HeaderBlobMappingから除去することができる。システムはtbl_headerからの削除により除去しないことが望ましいことがある。これにより、メッセージがメッセージリムーバによって削除される前に、BLOBがガーベジコレクションする。一実施形態において、システムがメッセージリムーバを何らかの理由で元に戻すことを望む場合、添付ファイルを確実にまだ読むことができるようにすることが望ましいことがある。
【0060】
[00061] 参照カウントが0に達すると、トリガが以下のようにtbl_blobの表の状態を変更することができる。
【0062】
[00062] 部分的にまたは完全に破損しているBLOBは、暫定状態に遷移することができ、したがってシステムはそれらを修復することを試みない可能性がある。
【0063】
[00063] 一実施形態において、システムは、ソフト制限を参照カウントに実施して、BLOBのコピーの消失が受けることがある損傷の量を制限することができる。この制限は構成ファイルから読むことができ、BLOB作成が呼び出されたとき実施することができる。BLOBが構成された制限を超えていることにシステムが気付いた場合、システムは、既存のBLOBを返すのではなく、新たな場所の新たな暫定BLOBを返すことができる。この用途のために、BLOB作成は、新たなBLOBの場所を作成するかまたは既存の場所を再使用するかのいずれかができる関数呼び出しである。
【0064】
[00064] いくつかの実施形態では、制限は対数的に実施することができ、したがって、各々の追加のコピーは、BLOBの数に制限を乗じることができる。例えば、制限が1つのBLOB当たり100のコピーである場合、2つのコピーでは100*100=10000のコピーが可能になり、3つのコピーでは100
3のコピーが可能になる。
【0065】
[00065] 以下の表は、いくつかの異なる条件の下での可能なBLOB修復状態の一実施形態である。
【0068】
Eメールシステムの一実施形態
[00066]
図3は、本出願の原理により製作されたときのEメールシステムの一実施形態を示す。具体的には、システム300は、重複排除操作のためのEメール配信の流れ図を示す。Eメールシステム300は、着信Eメールおよび/またはそれらの添付ファイルを受け取り、メッセージ構文解析302において、Eメールの様々な部分を構文解析することができる。メッセージ構文解析302は、様々な部分に対してハッシュを計算することができる。ハッシュの結果は、メッセージおよび/または添付ファイルを重複排除するのかどうかを決定する助けにするためにシステムによって使用することができる。
【0069】
[00067] システムは、図示するように、「良好」状態にある間、各BLOB作成304をすることを決定し継続する。BLOBの状態が「書き込み」することを望む場合、BLOBは306において永続性ストア306に書き込むことができる。システムがBLOBを終えると、システムは308においてコミットHBMを従事させることができ、システムは、その後、310において「コンパクトな」メッセージを書き込むことができる。しかし、システムが「エラー」を検知すると、システムは、312において「完全な」メッセージを書き込むことができる。
【0070】
[00068] 上に説明してきたことは、本発明の例を含む。もちろん、特許請求される主題を説明するために構成要素または方法論の考えられる限りのあらゆる組合せを説明することは可能でないが、本発明の他の多くの組合せおよび順列が可能であることを当業者は認識することができる。したがって、特許請求される主題は、添付の特許請求の範囲の精神および範囲に含まれるそのような改変、修正、および変形をすべて包含することを意図している。
【0071】
[00069] 具体的にはおよび上記の構成要素、デバイス、回路、システムなどによって実施される様々な機能に関して、そのような構成要素を説明するのに使用された用語(「手段」への参照を含む)は、他に指示のない限り、特許請求される主題の本明細書に図示される例示的な態様において機能を実施する、開示された構造に構造的に同等ではなくても、説明された構成要素の指定された機能(例えば、機能的な同等物)を実施する任意の構成要素に対応することを意図している。この点において、本発明が特許請求される主題の様々な方法の動作および/または事象を実施するためのシステムならびにコンピュータ実行可能命令を有するコンピュータ可読媒体を含むことも認識されよう。
【0072】
[00070] さらに、本発明の特定の特徴はいくつかの実施のうちの1つのみに関して開示されたかもしれないが、そのような特徴は、いずれかの所与のまたは特定の用途に所望され有利であり得るとき、他の実施の1つまたは複数の他の特徴に組み合わせることができる。さらに、「含む(includes)」および「含む(including)」という用語およびそれらの変形が、詳細な説明または特許請求の範囲のいずれかに使用される程度まで、これらの用語は「含む(comprising)」という用語と類似の仕方で包含的であることを意図している。